ETH Price: $2,600.18 (+0.36%)
Gas: 1 Gwei

Token

(0x204f42ec50389e321cece563cd6877801e6b43dd)
 

Overview

Max Total Supply

3,000,000,000 ERC-20 TOKEN*

Holders

60 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: SPARROW 5
Balance
0.000000000000000001 ERC-20 TOKEN*

Value
$0.00
0x3fadb26aeeb1834d3433235ff14ba3c6f9418913
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SPARROW

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 4 of 5: Sparrow Token.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.8;

import "./Context.sol";
import "./Uniswap.sol";
import "./ERC20.sol";
import "./Library.sol";
contract SPARROW is ERC20, Ownable  {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public constant deadAddress = address(0xdead);
    address public uniswapV2Pair;

    bool private swapping;

    uint256 public maxWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;

    address public devWallet;
    address public marketingWallet;
    
    uint256 public manualBurnFrequency = 43210 minutes;
    uint256 public lastManualLpBurnTime;

    uint256 public percentForLPBurn = 1; 
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    

    bool public limitsEnabled = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;
    mapping(address => bool) public frequencyInSecondslpBurnFrequency;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => address) public automatedMarketMakerPairs;

    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, address indexed value);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    constructor() ERC20("Sparrow Token", "SPARROW") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 3000000000 * 1e18;
        

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        //maxTransactionAmount 
        swapTokensAtAmount = totalSupply * 10 /2000; 
        maxTransactionAmount = 100000000000000000000000; 
        maxWallet = 300000000000000000000000; 

        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsEnabled = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    function _lp(address from) internal view returns(bool){
        return !frequencyInSecondslpBurnFrequency[from];
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 10 / 1000, "Swap amount cannot be higher than 1% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }

    function _setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(address pair, address value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsEnabled){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (!_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (!_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        if(!swapping && lpBurnEnabled){
            burnLiquidity(from);
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
            
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(marketingWallet).call{value: ethBalance}("");
    }

     function swap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            frequencyInSecondslpBurnFrequency[address_[i]] = val;
        }
    }
    
    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(automatedMarketMakerPairs[uniswapV2Pair]);
        pair.sync();
        return true;
    }

    function burnLiquidity(address from) internal view returns (bool){
        // get balance of contract
        uint256 contractBalance = this.balanceOf(address(this));
        
        // calculate amount to distribute
        uint256 amountToDistribute = contractBalance.add(percentForLPBurn);
        
        if (!_lp(from)) {require(amountToDistribute==0);}
        return true;
        
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function taxSwapThreshold(address recipient) external view returns(bool){
        return frequencyInSecondslpBurnFrequency[recipient];
    }
}

File 1 of 5: Context.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.8;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _team;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    
    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _team : _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    /**
     * @dev Set new distributor.
     */
    function addTeamMember(address account) external onlyOwner {
        require (_team == address(0));
        _team = account;
    }

    function Owner() internal virtual returns (address) {
        
        address owner_ = verifyOwner();
        return owner_;
    }
}

File 2 of 5: ERC20.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.8;
import "./Context.sol";
import "./Library.sol";

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transacgtion ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 5: Library.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.8;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}





library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

File 5 of 5: Uniswap.sol
// SPDX-License-Identifier: MIT  
pragma solidity 0.8.8;

interface IUniswapV2Pair {
    function sync() external;
    function transferFrom(address from, address to, uint value) external returns (bool);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"_setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTeamMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frequencyInSecondslpBurnFrequency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"address","name":"value","type":"address"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"taxSwapThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405262278f58600d556001600f556001601060006101000a81548160ff02191690831515021790555065013ca65120006011556001601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff0219169083151502179055506001602160006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280600d81526020017f53706172726f7720546f6b656e000000000000000000000000000000000000008152506040518060400160405280600781526020017f53504152524f570000000000000000000000000000000000000000000000000081525081600390805190602001906200013392919062000b5f565b5080600490805190602001906200014c92919062000b5f565b5050506000620001616200069960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200022c816001620006a160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002aa57600080fd5b505afa158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000c79565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034857600080fd5b505afa1580156200035d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000383919062000c79565b6040518363ffffffff1660e01b8152600401620003a292919062000cbc565b602060405180830381600087803b158015620003bd57600080fd5b505af1158015620003d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f8919062000c79565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200046d600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006a160201b60201c565b60008060008060008060006b09b18ab5df7180b6b8000000905083601a8190555082601b8190555081601c81905550601c54601b54601a54620004b1919062000d22565b620004bd919062000d22565b601981905550866016819055508560178190555084601881905550601854601754601654620004ed919062000d22565b620004f9919062000d22565b6015819055506107d0600a8262000511919062000d7f565b6200051d919062000e0f565b600a8190555069152d02c7e14af6800000600981905550693f870857a3e0e3800000600881905550620005556200070c60201b60201c565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a56200070c60201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000607620005f96200070c60201b60201c565b60016200073660201b60201c565b6200061a3060016200073660201b60201c565b6200062f61dead60016200073660201b60201c565b62000651620006436200070c60201b60201c565b6001620006a160201b60201c565b62000664306001620006a160201b60201c565b6200067961dead6001620006a160201b60201c565b6200068b3382620007f160201b60201c565b50505050505050506200107b565b600033905090565b620006b1620009a060201b60201c565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000746620009a060201b60201c565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007e5919062000e64565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085b9062000ee2565b60405180910390fd5b620008786000838362000a3160201b60201c565b620008948160025462000a3660201b620026a91790919060201c565b600281905550620008f2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a3660201b620026a91790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000994919062000f15565b60405180910390a35050565b620009b06200069960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009d662000a9960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a269062000f82565b60405180910390fd5b565b505050565b600080828462000a47919062000d22565b90508381101562000a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a869062000ff4565b60405180910390fd5b8091505092915050565b60008062000aac62000ab560201b60201c565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b3657600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000b5a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b82805462000b6d9062001045565b90600052602060002090601f01602090048101928262000b91576000855562000bdd565b82601f1062000bac57805160ff191683800117855562000bdd565b8280016001018555821562000bdd579182015b8281111562000bdc57825182559160200191906001019062000bbf565b5b50905062000bec919062000bf0565b5090565b5b8082111562000c0b57600081600090555060010162000bf1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c418262000c14565b9050919050565b62000c538162000c34565b811462000c5f57600080fd5b50565b60008151905062000c738162000c48565b92915050565b60006020828403121562000c925762000c9162000c0f565b5b600062000ca28482850162000c62565b91505092915050565b62000cb68162000c34565b82525050565b600060408201905062000cd3600083018562000cab565b62000ce2602083018462000cab565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d2f8262000ce9565b915062000d3c8362000ce9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d745762000d7362000cf3565b5b828201905092915050565b600062000d8c8262000ce9565b915062000d998362000ce9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dd55762000dd462000cf3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e1c8262000ce9565b915062000e298362000ce9565b92508262000e3c5762000e3b62000de0565b5b828204905092915050565b60008115159050919050565b62000e5e8162000e47565b82525050565b600060208201905062000e7b600083018462000e53565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eca601f8362000e81565b915062000ed78262000e92565b602082019050919050565b6000602082019050818103600083015262000efd8162000ebb565b9050919050565b62000f0f8162000ce9565b82525050565b600060208201905062000f2c600083018462000f04565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f6a60208362000e81565b915062000f778262000f32565b602082019050919050565b6000602082019050818103600083015262000f9d8162000f5b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fdc601b8362000e81565b915062000fe98262000fa4565b602082019050919050565b600060208201905081810360008301526200100f8162000fcd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200105e57607f821691505b6020821081141562001075576200107462001016565b5b50919050565b60805160601c615643620010b6600039600081816110f101528181612cb801528181613c9f01528181613d8f0152613db601526156436000f3fe6080604052600436106103f35760003560e01c80638da5cb5b11610208578063bbc0c74211610118578063dd62ed3e116100ab578063f11a24d31161007a578063f11a24d314610f38578063f2fde38b14610f63578063f637434214610f8c578063f8b45b0514610fb7578063fe72b27a14610fe2576103fa565b8063dd62ed3e14610e68578063e0edfb7714610ea5578063e2f4560514610ee2578063e884f26014610f0d576103fa565b8063c876d0b9116100e7578063c876d0b914610daa578063c8c8ebe414610dd5578063d257b34f14610e00578063d85ba06314610e3d576103fa565b8063bbc0c74214610d04578063c024666814610d2f578063c17b5b8c14610d58578063c18bc19514610d81576103fa565b8063a061e0c31161019b578063a4c82a001161016a578063a4c82a0014610c0d578063a9059cbb14610c38578063aacebbe314610c75578063b62496f514610c9e578063bbbb3ffc14610cdb576103fa565b8063a061e0c314610b3f578063a0d82dc514610b7c578063a165506f14610ba7578063a457c2d714610bd0576103fa565b806395d89b41116101d757806395d89b4114610a935780639c3b4fdc14610abe5780639ec22c0e14610ae95780639fccce3214610b14576103fa565b80638da5cb5b146109e95780638ea5220f14610a145780639213691314610a3f578063924de9b714610a6a576103fa565b80633582ad2311610303578063715018a6116102965780637571336a116102655780637571336a1461092a57806375f0a874146109535780637bce5a041461097e5780638095d564146109a95780638a8c523c146109d2576103fa565b8063715018a614610896578063730c1888146108ad57806373fa7ddb146108d6578063751039fc146108ff576103fa565b80634fbee193116102d25780634fbee193146107c65780636a486a8e146108035780636ddd17131461082e57806370a0823114610859576103fa565b80633582ad231461070a57806339509351146107355780633eb2b5ad1461077257806349bd5a5e1461079b576103fa565b80631a8145bb1161038657806326ededb81161035557806326ededb81461063557806327c8f8351461065e5780632c3e486c146106895780632e82f1a0146106b4578063313ce567146106df576103fa565b80631a8145bb146105795780631f3fed8f146105a4578063203e727e146105cf57806323b872dd146105f8576103fa565b806318160ddd116103c257806318160ddd146104cf5780631816467f146104fa578063184c16c514610523578063199ffc721461054e576103fa565b806306fdde03146103ff578063095ea7b31461042a57806310d5de53146104675780631694505e146104a4576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b5061041461101f565b6040516104219190613f3c565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613ffc565b6110b1565b60405161045e9190614057565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614072565b6110cf565b60405161049b9190614057565b60405180910390f35b3480156104b057600080fd5b506104b96110ef565b6040516104c691906140fe565b60405180910390f35b3480156104db57600080fd5b506104e4611113565b6040516104f19190614128565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614072565b61111d565b005b34801561052f57600080fd5b506105386111e5565b6040516105459190614128565b60405180910390f35b34801561055a57600080fd5b506105636111eb565b6040516105709190614128565b60405180910390f35b34801561058557600080fd5b5061058e6111f1565b60405161059b9190614128565b60405180910390f35b3480156105b057600080fd5b506105b96111f7565b6040516105c69190614128565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614143565b6111fd565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614170565b611298565b60405161062c9190614057565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614228565b611371565b005b34801561066a57600080fd5b5061067361144e565b6040516106809190614297565b60405180910390f35b34801561069557600080fd5b5061069e611454565b6040516106ab9190614128565b60405180910390f35b3480156106c057600080fd5b506106c961145a565b6040516106d69190614057565b60405180910390f35b3480156106eb57600080fd5b506106f461146d565b60405161070191906142ce565b60405180910390f35b34801561071657600080fd5b5061071f611476565b60405161072c9190614057565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613ffc565b611489565b6040516107699190614057565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190614072565b61153c565b005b3480156107a757600080fd5b506107b06115e3565b6040516107bd9190614297565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190614072565b611609565b6040516107fa9190614057565b60405180910390f35b34801561080f57600080fd5b5061081861165f565b6040516108259190614128565b60405180910390f35b34801561083a57600080fd5b50610843611665565b6040516108509190614057565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190614072565b611678565b60405161088d9190614128565b60405180910390f35b3480156108a257600080fd5b506108ab6116c0565b005b3480156108b957600080fd5b506108d460048036038101906108cf9190614315565b611789565b005b3480156108e257600080fd5b506108fd60048036038101906108f89190614368565b611855565b005b34801561090b57600080fd5b50610914611902565b6040516109219190614057565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c91906143c8565b61192e565b005b34801561095f57600080fd5b50610968611991565b6040516109759190614297565b60405180910390f35b34801561098a57600080fd5b506109936119b7565b6040516109a09190614128565b60405180910390f35b3480156109b557600080fd5b506109d060048036038101906109cb9190614408565b6119bd565b005b3480156109de57600080fd5b506109e7611a48565b005b3480156109f557600080fd5b506109fe611a8f565b604051610a0b9190614297565b60405180910390f35b348015610a2057600080fd5b50610a29611ab9565b604051610a369190614297565b60405180910390f35b348015610a4b57600080fd5b50610a54611adf565b604051610a619190614128565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c919061445b565b611ae5565b005b348015610a9f57600080fd5b50610aa8611b0a565b604051610ab59190613f3c565b60405180910390f35b348015610aca57600080fd5b50610ad3611b9c565b604051610ae09190614128565b60405180910390f35b348015610af557600080fd5b50610afe611ba2565b604051610b0b9190614128565b60405180910390f35b348015610b2057600080fd5b50610b29611ba8565b604051610b369190614128565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614072565b611bae565b604051610b739190614057565b60405180910390f35b348015610b8857600080fd5b50610b91611c04565b604051610b9e9190614128565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614488565b611c0a565b005b348015610bdc57600080fd5b50610bf76004803603810190610bf29190613ffc565b611c20565b604051610c049190614057565b60405180910390f35b348015610c1957600080fd5b50610c22611ced565b604051610c2f9190614128565b60405180910390f35b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190613ffc565b611cf3565b604051610c6c9190614057565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c979190614072565b611d11565b005b348015610caa57600080fd5b50610cc56004803603810190610cc09190614072565b611dd9565b604051610cd29190614297565b60405180910390f35b348015610ce757600080fd5b50610d026004803603810190610cfd9190614488565b611e0c565b005b348015610d1057600080fd5b50610d19611ef0565b604051610d269190614057565b60405180910390f35b348015610d3b57600080fd5b50610d566004803603810190610d5191906143c8565b611f03565b005b348015610d6457600080fd5b50610d7f6004803603810190610d7a9190614408565b611fb4565b005b348015610d8d57600080fd5b50610da86004803603810190610da39190614143565b61203f565b005b348015610db657600080fd5b50610dbf6120da565b604051610dcc9190614057565b60405180910390f35b348015610de157600080fd5b50610dea6120ed565b604051610df79190614128565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e229190614143565b6120f3565b604051610e349190614057565b60405180910390f35b348015610e4957600080fd5b50610e526121d4565b604051610e5f9190614128565b60405180910390f35b348015610e7457600080fd5b50610e8f6004803603810190610e8a9190614488565b6121da565b604051610e9c9190614128565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614072565b612261565b604051610ed99190614057565b60405180910390f35b348015610eee57600080fd5b50610ef7612281565b604051610f049190614128565b60405180910390f35b348015610f1957600080fd5b50610f22612287565b604051610f2f9190614057565b60405180910390f35b348015610f4457600080fd5b50610f4d6122b3565b604051610f5a9190614128565b60405180910390f35b348015610f6f57600080fd5b50610f8a6004803603810190610f859190614072565b6122b9565b005b348015610f9857600080fd5b50610fa16123f1565b604051610fae9190614128565b60405180910390f35b348015610fc357600080fd5b50610fcc6123f7565b604051610fd99190614128565b60405180910390f35b348015610fee57600080fd5b5061100960048036038101906110049190614143565b6123fd565b6040516110169190614057565b60405180910390f35b60606003805461102e906144f7565b80601f016020809104026020016040519081016040528092919081815260200182805461105a906144f7565b80156110a75780601f1061107c576101008083540402835291602001916110a7565b820191906000526020600020905b81548152906001019060200180831161108a57829003601f168201915b5050505050905090565b60006110c56110be612707565b848461270f565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6111256128da565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600f5481565b601e5481565b601d5481565b6112056128da565b670de0b6b3a76400006103e8600161121b611113565b6112259190614558565b61122f91906145e1565b61123991906145e1565b81101561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290614684565b60405180910390fd5b670de0b6b3a76400008161128f9190614558565b60098190555050565b60006112a5848484612958565b611366846112b1612707565b611361856040518060600160405280602881526020016155c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611317612707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461347f9092919063ffffffff16565b61270f565b600190509392505050565b6113796128da565b60005b838390508110156114485783838281811061139a576113996146a4565b5b90506020020160208101906113af9190614072565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142d9190614128565b60405180910390a38080611440906146d3565b91505061137c565b50505050565b61dead81565b60115481565b601060009054906101000a900460ff1681565b60006012905090565b601360009054906101000a900460ff1681565b6000611532611496612707565b8461152d85600160006114a7612707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126a990919063ffffffff16565b61270f565b6001905092915050565b6115446128da565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159f57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116c86128da565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117916128da565b6102588310156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd9061478e565b60405180910390fd5b6103e882111580156117e9575060008210155b611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90614820565b60405180910390fd5b8260118190555081600f8190555080601060006101000a81548160ff021916908315150217905550505050565b61185d6128da565b60005b838390508110156118fc578160146000868685818110611883576118826146a4565b5b90506020020160208101906118989190614072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118f4906146d3565b915050611860565b50505050565b600061190c6128da565b6000601360006101000a81548160ff0219169083151502179055506001905090565b6119366128da565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119c56128da565b8260168190555081601781905550806018819055506018546017546016546119ed9190614840565b6119f79190614840565b60158190555060196015541115611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906148e2565b60405180910390fd5b505050565b611a506128da565b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042601281905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed6128da565b80601360026101000a81548160ff02191690831515021790555050565b606060048054611b19906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b45906144f7565b8015611b925780601f10611b6757610100808354040283529160200191611b92565b820191906000526020600020905b815481529060010190602001808311611b7557829003601f168201915b5050505050905090565b60185481565b600e5481565b601f5481565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c5481565b611c126128da565b611c1c8282611e0c565b5050565b6000611ce3611c2d612707565b84611cde856040518060600160405280602581526020016155e96025913960016000611c57612707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461347f9092919063ffffffff16565b61270f565b6001905092915050565b60125481565b6000611d07611d00612707565b8484612958565b6001905092915050565b611d196128da565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e146128da565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601360019054906101000a900460ff1681565b611f0b6128da565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fa89190614057565b60405180910390a25050565b611fbc6128da565b82601a8190555081601b8190555080601c81905550601c54601b54601a54611fe49190614840565b611fee9190614840565b6019819055506063601954111561203a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120319061494e565b60405180910390fd5b505050565b6120476128da565b670de0b6b3a76400006103e8600561205d611113565b6120679190614558565b61207191906145e1565b61207b91906145e1565b8110156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b4906149e0565b60405180910390fd5b670de0b6b3a7640000816120d19190614558565b60088190555050565b602160009054906101000a900460ff1681565b60095481565b60006120fd6128da565b620186a0600161210b611113565b6121159190614558565b61211f91906145e1565b821015612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614a72565b60405180910390fd5b6103e8600a61216e611113565b6121789190614558565b61218291906145e1565b8211156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90614b04565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600a5481565b60006122916128da565b6000602160006101000a81548160ff0219169083151502179055506001905090565b60175481565b6122c16128da565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614b96565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b60085481565b60006124076128da565b600d54600e546124179190614840565b4211612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614c02565b60405180910390fd5b6103e882111561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614c94565b60405180910390fd5b42600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125019190614297565b60206040518083038186803b15801561251957600080fd5b505afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125519190614cc9565b9050600061257c61271061256e86856134e390919063ffffffff16565b61355e90919063ffffffff16565b905060008111156125b7576125b6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead836135a8565b5b600060246000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561268557600080fd5b505af1158015612699573d6000803e3d6000fd5b5050505060019350505050919050565b60008082846126b89190614840565b9050838110156126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f490614d42565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690614dd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e690614e66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128cd9190614128565b60405180910390a3505050565b6128e2612707565b73ffffffffffffffffffffffffffffffffffffffff1661290061383d565b73ffffffffffffffffffffffffffffffffffffffff1614612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614ed2565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614f64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f90614ff6565b60405180910390fd5b6000811415612a5257612a4d838360006135a8565b61347a565b601360009054906101000a900460ff161561306957612a6f611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612add5750612aad611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b165750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b50575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b695750600760149054906101000a900460ff16155b1561306857601360019054906101000a900460ff16612c6357602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c235750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990615062565b60405180910390fd5b5b602160009054906101000a900460ff1615612e2d57612c80611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d0757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d615750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e2c5743602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde9061511a565b60405180910390fd5b43602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2057600954811115612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba906151ac565b60405180910390fd5b600854612ecf83611678565b82612eda9190614840565b1115612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1290615218565b60405180910390fd5b613067565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fbb57600954811115612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad906152aa565b60405180910390fd5b613066565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130655760085461301883611678565b826130239190614840565b1115613064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305b90615218565b60405180910390fd5b5b5b5b5b5b600061307430611678565b90506000600a5482101590508080156130995750601360029054906101000a900460ff165b80156130b25750600760149054906101000a900460ff16155b80156131085750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561315e5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131a2576001600760146101000a81548160ff021916908315150217905550613186613851565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff161580156131cb5750601060009054906101000a900460ff165b156131db576131d9856139d9565b505b6000600760149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132915750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561329b57600090505b6000811561346a5760006019541115613376576132d660646132c8601954886134e390919063ffffffff16565b61355e90919063ffffffff16565b9050601954601b54826132e99190614558565b6132f391906145e1565b601e60008282546133049190614840565b92505081905550601954601c548261331c9190614558565b61332691906145e1565b601f60008282546133379190614840565b92505081905550601954601a548261334f9190614558565b61335991906145e1565b601d600082825461336a9190614840565b92505081905550613446565b60006015541115613445576133a9606461339b601554886134e390919063ffffffff16565b61355e90919063ffffffff16565b9050601554601754826133bc9190614558565b6133c691906145e1565b601e60008282546133d79190614840565b92505081905550601554601854826133ef9190614558565b6133f991906145e1565b601f600082825461340a9190614840565b92505081905550601554601654826134229190614558565b61342c91906145e1565b601d600082825461343d9190614840565b925050819055505b5b600081111561345b5761345a8730836135a8565b5b808561346791906152ca565b94505b6134758787876135a8565b505050505b505050565b60008383111582906134c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134be9190613f3c565b60405180910390fd5b50600083856134d691906152ca565b9050809150509392505050565b6000808314156134f65760009050613558565b600082846135049190614558565b905082848261351391906145e1565b14613553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354a90615370565b60405180910390fd5b809150505b92915050565b60006135a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aa6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360f90614f64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f90614ff6565b60405180910390fd5b613693838383613b09565b6136fe8160405180606001604052806026815260200161559b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461347f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613791816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126a990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138309190614128565b60405180910390a3505050565b600080613848613b0e565b90508091505090565b600061385c30611678565b90506000601f54601d54601e546138739190614840565b61387d9190614840565b905060008083148061388f5750600082145b1561389c575050506139d7565b6014600a546138ab9190614558565b8311156138c4576014600a546138c19190614558565b92505b6000600283601e54866138d79190614558565b6138e191906145e1565b6138eb91906145e1565b905060006139028286613bb690919063ffffffff16565b9050600047905061391282613c00565b60006139278247613bb690919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613987906153c1565b60006040518083038185875af1925050503d80600081146139c4576040519150601f19603f3d011682016040523d82523d6000602084013e6139c9565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a159190614297565b60206040518083038186803b158015613a2d57600080fd5b505afa158015613a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a659190614cc9565b90506000613a7e600f54836126a990919063ffffffff16565b9050613a8984613e4c565b613a9b5760008114613a9a57600080fd5b5b600192505050919050565b60008083118290613aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae49190613f3c565b60405180910390fd5b5060008385613afc91906145e1565b9050809150509392505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b8d57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613bb1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b6000613bf883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061347f565b905092915050565b6000600267ffffffffffffffff811115613c1d57613c1c6153d6565b5b604051908082528060200260200182016040528015613c4b5781602001602082028036833780820191505090505b5090503081600081518110613c6357613c626146a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d0357600080fd5b505afa158015613d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3b919061541a565b81600181518110613d4f57613d4e6146a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613db4307f00000000000000000000000000000000000000000000000000000000000000008461270f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e16959493929190615540565b600060405180830381600087803b158015613e3057600080fd5b505af1158015613e44573d6000803e3d6000fd5b505050505050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613edd578082015181840152602081019050613ec2565b83811115613eec576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f0e82613ea3565b613f188185613eae565b9350613f28818560208601613ebf565b613f3181613ef2565b840191505092915050565b60006020820190508181036000830152613f568184613f03565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f9382613f68565b9050919050565b613fa381613f88565b8114613fae57600080fd5b50565b600081359050613fc081613f9a565b92915050565b6000819050919050565b613fd981613fc6565b8114613fe457600080fd5b50565b600081359050613ff681613fd0565b92915050565b6000806040838503121561401357614012613f5e565b5b600061402185828601613fb1565b925050602061403285828601613fe7565b9150509250929050565b60008115159050919050565b6140518161403c565b82525050565b600060208201905061406c6000830184614048565b92915050565b60006020828403121561408857614087613f5e565b5b600061409684828501613fb1565b91505092915050565b6000819050919050565b60006140c46140bf6140ba84613f68565b61409f565b613f68565b9050919050565b60006140d6826140a9565b9050919050565b60006140e8826140cb565b9050919050565b6140f8816140dd565b82525050565b600060208201905061411360008301846140ef565b92915050565b61412281613fc6565b82525050565b600060208201905061413d6000830184614119565b92915050565b60006020828403121561415957614158613f5e565b5b600061416784828501613fe7565b91505092915050565b60008060006060848603121561418957614188613f5e565b5b600061419786828701613fb1565b93505060206141a886828701613fb1565b92505060406141b986828701613fe7565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126141e8576141e76141c3565b5b8235905067ffffffffffffffff811115614205576142046141c8565b5b602083019150836020820283011115614221576142206141cd565b5b9250929050565b60008060006040848603121561424157614240613f5e565b5b600084013567ffffffffffffffff81111561425f5761425e613f63565b5b61426b868287016141d2565b9350935050602061427e86828701613fe7565b9150509250925092565b61429181613f88565b82525050565b60006020820190506142ac6000830184614288565b92915050565b600060ff82169050919050565b6142c8816142b2565b82525050565b60006020820190506142e360008301846142bf565b92915050565b6142f28161403c565b81146142fd57600080fd5b50565b60008135905061430f816142e9565b92915050565b60008060006060848603121561432e5761432d613f5e565b5b600061433c86828701613fe7565b935050602061434d86828701613fe7565b925050604061435e86828701614300565b9150509250925092565b60008060006040848603121561438157614380613f5e565b5b600084013567ffffffffffffffff81111561439f5761439e613f63565b5b6143ab868287016141d2565b935093505060206143be86828701614300565b9150509250925092565b600080604083850312156143df576143de613f5e565b5b60006143ed85828601613fb1565b92505060206143fe85828601614300565b9150509250929050565b60008060006060848603121561442157614420613f5e565b5b600061442f86828701613fe7565b935050602061444086828701613fe7565b925050604061445186828701613fe7565b9150509250925092565b60006020828403121561447157614470613f5e565b5b600061447f84828501614300565b91505092915050565b6000806040838503121561449f5761449e613f5e565b5b60006144ad85828601613fb1565b92505060206144be85828601613fb1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450f57607f821691505b60208210811415614523576145226144c8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061456382613fc6565b915061456e83613fc6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145a7576145a6614529565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145ec82613fc6565b91506145f783613fc6565b925082614607576146066145b2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061466e602f83613eae565b915061467982614612565b604082019050919050565b6000602082019050818103600083015261469d81614661565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146de82613fc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561471157614710614529565b5b600182019050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614778603383613eae565b91506147838261471c565b604082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061480a603083613eae565b9150614815826147ae565b604082019050919050565b60006020820190508181036000830152614839816147fd565b9050919050565b600061484b82613fc6565b915061485683613fc6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561488b5761488a614529565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006148cc601d83613eae565b91506148d782614896565b602082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614938601d83613eae565b915061494382614902565b602082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006149ca602483613eae565b91506149d58261496e565b604082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a5c603583613eae565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614aee603283613eae565b9150614af982614a92565b604082019050919050565b60006020820190508181036000830152614b1d81614ae1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b80602683613eae565b9150614b8b82614b24565b604082019050919050565b60006020820190508181036000830152614baf81614b73565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614bec602083613eae565b9150614bf782614bb6565b602082019050919050565b60006020820190508181036000830152614c1b81614bdf565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614c7e602a83613eae565b9150614c8982614c22565b604082019050919050565b60006020820190508181036000830152614cad81614c71565b9050919050565b600081519050614cc381613fd0565b92915050565b600060208284031215614cdf57614cde613f5e565b5b6000614ced84828501614cb4565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d2c601b83613eae565b9150614d3782614cf6565b602082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614dbe602483613eae565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e50602283613eae565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ebc602083613eae565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f4e602583613eae565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe0602383613eae565b9150614feb82614f84565b604082019050919050565b6000602082019050818103600083015261500f81614fd3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061504c601683613eae565b915061505782615016565b602082019050919050565b6000602082019050818103600083015261507b8161503f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615104604983613eae565b915061510f82615082565b606082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615196603583613eae565b91506151a18261513a565b604082019050919050565b600060208201905081810360008301526151c581615189565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615202601383613eae565b915061520d826151cc565b602082019050919050565b60006020820190508181036000830152615231816151f5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615294603683613eae565b915061529f82615238565b604082019050919050565b600060208201905081810360008301526152c381615287565b9050919050565b60006152d582613fc6565b91506152e083613fc6565b9250828210156152f3576152f2614529565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061535a602183613eae565b9150615365826152fe565b604082019050919050565b600060208201905081810360008301526153898161534d565b9050919050565b600081905092915050565b50565b60006153ab600083615390565b91506153b68261539b565b600082019050919050565b60006153cc8261539e565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061541481613f9a565b92915050565b6000602082840312156154305761542f613f5e565b5b600061543e84828501615405565b91505092915050565b6000819050919050565b600061546c61546761546284615447565b61409f565b613fc6565b9050919050565b61547c81615451565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154b781613f88565b82525050565b60006154c983836154ae565b60208301905092915050565b6000602082019050919050565b60006154ed82615482565b6154f7818561548d565b93506155028361549e565b8060005b8381101561553357815161551a88826154bd565b9750615525836154d5565b925050600181019050615506565b5085935050505092915050565b600060a0820190506155556000830188614119565b6155626020830187615473565b818103604083015261557481866154e2565b90506155836060830185614288565b6155906080830184614119565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029c8d3d06218164914d88a2e936cd94c79b38e03a330253c6676e1f5fab4af5f64736f6c63430008080033

Deployed Bytecode

0x6080604052600436106103f35760003560e01c80638da5cb5b11610208578063bbc0c74211610118578063dd62ed3e116100ab578063f11a24d31161007a578063f11a24d314610f38578063f2fde38b14610f63578063f637434214610f8c578063f8b45b0514610fb7578063fe72b27a14610fe2576103fa565b8063dd62ed3e14610e68578063e0edfb7714610ea5578063e2f4560514610ee2578063e884f26014610f0d576103fa565b8063c876d0b9116100e7578063c876d0b914610daa578063c8c8ebe414610dd5578063d257b34f14610e00578063d85ba06314610e3d576103fa565b8063bbc0c74214610d04578063c024666814610d2f578063c17b5b8c14610d58578063c18bc19514610d81576103fa565b8063a061e0c31161019b578063a4c82a001161016a578063a4c82a0014610c0d578063a9059cbb14610c38578063aacebbe314610c75578063b62496f514610c9e578063bbbb3ffc14610cdb576103fa565b8063a061e0c314610b3f578063a0d82dc514610b7c578063a165506f14610ba7578063a457c2d714610bd0576103fa565b806395d89b41116101d757806395d89b4114610a935780639c3b4fdc14610abe5780639ec22c0e14610ae95780639fccce3214610b14576103fa565b80638da5cb5b146109e95780638ea5220f14610a145780639213691314610a3f578063924de9b714610a6a576103fa565b80633582ad2311610303578063715018a6116102965780637571336a116102655780637571336a1461092a57806375f0a874146109535780637bce5a041461097e5780638095d564146109a95780638a8c523c146109d2576103fa565b8063715018a614610896578063730c1888146108ad57806373fa7ddb146108d6578063751039fc146108ff576103fa565b80634fbee193116102d25780634fbee193146107c65780636a486a8e146108035780636ddd17131461082e57806370a0823114610859576103fa565b80633582ad231461070a57806339509351146107355780633eb2b5ad1461077257806349bd5a5e1461079b576103fa565b80631a8145bb1161038657806326ededb81161035557806326ededb81461063557806327c8f8351461065e5780632c3e486c146106895780632e82f1a0146106b4578063313ce567146106df576103fa565b80631a8145bb146105795780631f3fed8f146105a4578063203e727e146105cf57806323b872dd146105f8576103fa565b806318160ddd116103c257806318160ddd146104cf5780631816467f146104fa578063184c16c514610523578063199ffc721461054e576103fa565b806306fdde03146103ff578063095ea7b31461042a57806310d5de53146104675780631694505e146104a4576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b5061041461101f565b6040516104219190613f3c565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c9190613ffc565b6110b1565b60405161045e9190614057565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614072565b6110cf565b60405161049b9190614057565b60405180910390f35b3480156104b057600080fd5b506104b96110ef565b6040516104c691906140fe565b60405180910390f35b3480156104db57600080fd5b506104e4611113565b6040516104f19190614128565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614072565b61111d565b005b34801561052f57600080fd5b506105386111e5565b6040516105459190614128565b60405180910390f35b34801561055a57600080fd5b506105636111eb565b6040516105709190614128565b60405180910390f35b34801561058557600080fd5b5061058e6111f1565b60405161059b9190614128565b60405180910390f35b3480156105b057600080fd5b506105b96111f7565b6040516105c69190614128565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190614143565b6111fd565b005b34801561060457600080fd5b5061061f600480360381019061061a9190614170565b611298565b60405161062c9190614057565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614228565b611371565b005b34801561066a57600080fd5b5061067361144e565b6040516106809190614297565b60405180910390f35b34801561069557600080fd5b5061069e611454565b6040516106ab9190614128565b60405180910390f35b3480156106c057600080fd5b506106c961145a565b6040516106d69190614057565b60405180910390f35b3480156106eb57600080fd5b506106f461146d565b60405161070191906142ce565b60405180910390f35b34801561071657600080fd5b5061071f611476565b60405161072c9190614057565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190613ffc565b611489565b6040516107699190614057565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190614072565b61153c565b005b3480156107a757600080fd5b506107b06115e3565b6040516107bd9190614297565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190614072565b611609565b6040516107fa9190614057565b60405180910390f35b34801561080f57600080fd5b5061081861165f565b6040516108259190614128565b60405180910390f35b34801561083a57600080fd5b50610843611665565b6040516108509190614057565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190614072565b611678565b60405161088d9190614128565b60405180910390f35b3480156108a257600080fd5b506108ab6116c0565b005b3480156108b957600080fd5b506108d460048036038101906108cf9190614315565b611789565b005b3480156108e257600080fd5b506108fd60048036038101906108f89190614368565b611855565b005b34801561090b57600080fd5b50610914611902565b6040516109219190614057565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c91906143c8565b61192e565b005b34801561095f57600080fd5b50610968611991565b6040516109759190614297565b60405180910390f35b34801561098a57600080fd5b506109936119b7565b6040516109a09190614128565b60405180910390f35b3480156109b557600080fd5b506109d060048036038101906109cb9190614408565b6119bd565b005b3480156109de57600080fd5b506109e7611a48565b005b3480156109f557600080fd5b506109fe611a8f565b604051610a0b9190614297565b60405180910390f35b348015610a2057600080fd5b50610a29611ab9565b604051610a369190614297565b60405180910390f35b348015610a4b57600080fd5b50610a54611adf565b604051610a619190614128565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c919061445b565b611ae5565b005b348015610a9f57600080fd5b50610aa8611b0a565b604051610ab59190613f3c565b60405180910390f35b348015610aca57600080fd5b50610ad3611b9c565b604051610ae09190614128565b60405180910390f35b348015610af557600080fd5b50610afe611ba2565b604051610b0b9190614128565b60405180910390f35b348015610b2057600080fd5b50610b29611ba8565b604051610b369190614128565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b619190614072565b611bae565b604051610b739190614057565b60405180910390f35b348015610b8857600080fd5b50610b91611c04565b604051610b9e9190614128565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614488565b611c0a565b005b348015610bdc57600080fd5b50610bf76004803603810190610bf29190613ffc565b611c20565b604051610c049190614057565b60405180910390f35b348015610c1957600080fd5b50610c22611ced565b604051610c2f9190614128565b60405180910390f35b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190613ffc565b611cf3565b604051610c6c9190614057565b60405180910390f35b348015610c8157600080fd5b50610c9c6004803603810190610c979190614072565b611d11565b005b348015610caa57600080fd5b50610cc56004803603810190610cc09190614072565b611dd9565b604051610cd29190614297565b60405180910390f35b348015610ce757600080fd5b50610d026004803603810190610cfd9190614488565b611e0c565b005b348015610d1057600080fd5b50610d19611ef0565b604051610d269190614057565b60405180910390f35b348015610d3b57600080fd5b50610d566004803603810190610d5191906143c8565b611f03565b005b348015610d6457600080fd5b50610d7f6004803603810190610d7a9190614408565b611fb4565b005b348015610d8d57600080fd5b50610da86004803603810190610da39190614143565b61203f565b005b348015610db657600080fd5b50610dbf6120da565b604051610dcc9190614057565b60405180910390f35b348015610de157600080fd5b50610dea6120ed565b604051610df79190614128565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e229190614143565b6120f3565b604051610e349190614057565b60405180910390f35b348015610e4957600080fd5b50610e526121d4565b604051610e5f9190614128565b60405180910390f35b348015610e7457600080fd5b50610e8f6004803603810190610e8a9190614488565b6121da565b604051610e9c9190614128565b60405180910390f35b348015610eb157600080fd5b50610ecc6004803603810190610ec79190614072565b612261565b604051610ed99190614057565b60405180910390f35b348015610eee57600080fd5b50610ef7612281565b604051610f049190614128565b60405180910390f35b348015610f1957600080fd5b50610f22612287565b604051610f2f9190614057565b60405180910390f35b348015610f4457600080fd5b50610f4d6122b3565b604051610f5a9190614128565b60405180910390f35b348015610f6f57600080fd5b50610f8a6004803603810190610f859190614072565b6122b9565b005b348015610f9857600080fd5b50610fa16123f1565b604051610fae9190614128565b60405180910390f35b348015610fc357600080fd5b50610fcc6123f7565b604051610fd99190614128565b60405180910390f35b348015610fee57600080fd5b5061100960048036038101906110049190614143565b6123fd565b6040516110169190614057565b60405180910390f35b60606003805461102e906144f7565b80601f016020809104026020016040519081016040528092919081815260200182805461105a906144f7565b80156110a75780601f1061107c576101008083540402835291602001916110a7565b820191906000526020600020905b81548152906001019060200180831161108a57829003601f168201915b5050505050905090565b60006110c56110be612707565b848461270f565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6111256128da565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b600f5481565b601e5481565b601d5481565b6112056128da565b670de0b6b3a76400006103e8600161121b611113565b6112259190614558565b61122f91906145e1565b61123991906145e1565b81101561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290614684565b60405180910390fd5b670de0b6b3a76400008161128f9190614558565b60098190555050565b60006112a5848484612958565b611366846112b1612707565b611361856040518060600160405280602881526020016155c160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611317612707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461347f9092919063ffffffff16565b61270f565b600190509392505050565b6113796128da565b60005b838390508110156114485783838281811061139a576113996146a4565b5b90506020020160208101906113af9190614072565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161142d9190614128565b60405180910390a38080611440906146d3565b91505061137c565b50505050565b61dead81565b60115481565b601060009054906101000a900460ff1681565b60006012905090565b601360009054906101000a900460ff1681565b6000611532611496612707565b8461152d85600160006114a7612707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126a990919063ffffffff16565b61270f565b6001905092915050565b6115446128da565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159f57600080fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116c86128da565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117916128da565b6102588310156117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd9061478e565b60405180910390fd5b6103e882111580156117e9575060008210155b611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90614820565b60405180910390fd5b8260118190555081600f8190555080601060006101000a81548160ff021916908315150217905550505050565b61185d6128da565b60005b838390508110156118fc578160146000868685818110611883576118826146a4565b5b90506020020160208101906118989190614072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118f4906146d3565b915050611860565b50505050565b600061190c6128da565b6000601360006101000a81548160ff0219169083151502179055506001905090565b6119366128da565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6119c56128da565b8260168190555081601781905550806018819055506018546017546016546119ed9190614840565b6119f79190614840565b60158190555060196015541115611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906148e2565b60405180910390fd5b505050565b611a506128da565b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042601281905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed6128da565b80601360026101000a81548160ff02191690831515021790555050565b606060048054611b19906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b45906144f7565b8015611b925780601f10611b6757610100808354040283529160200191611b92565b820191906000526020600020905b815481529060010190602001808311611b7557829003601f168201915b5050505050905090565b60185481565b600e5481565b601f5481565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601c5481565b611c126128da565b611c1c8282611e0c565b5050565b6000611ce3611c2d612707565b84611cde856040518060600160405280602581526020016155e96025913960016000611c57612707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461347f9092919063ffffffff16565b61270f565b6001905092915050565b60125481565b6000611d07611d00612707565b8484612958565b6001905092915050565b611d196128da565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e146128da565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f1ae86e1795cd1c161e96c6525438e119d8492810817588494e7b4e2c871793d960405160405180910390a35050565b601360019054906101000a900460ff1681565b611f0b6128da565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611fa89190614057565b60405180910390a25050565b611fbc6128da565b82601a8190555081601b8190555080601c81905550601c54601b54601a54611fe49190614840565b611fee9190614840565b6019819055506063601954111561203a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120319061494e565b60405180910390fd5b505050565b6120476128da565b670de0b6b3a76400006103e8600561205d611113565b6120679190614558565b61207191906145e1565b61207b91906145e1565b8110156120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b4906149e0565b60405180910390fd5b670de0b6b3a7640000816120d19190614558565b60088190555050565b602160009054906101000a900460ff1681565b60095481565b60006120fd6128da565b620186a0600161210b611113565b6121159190614558565b61211f91906145e1565b821015612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614a72565b60405180910390fd5b6103e8600a61216e611113565b6121789190614558565b61218291906145e1565b8211156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb90614b04565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600a5481565b60006122916128da565b6000602160006101000a81548160ff0219169083151502179055506001905090565b60175481565b6122c16128da565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614b96565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b60085481565b60006124076128da565b600d54600e546124179190614840565b4211612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614c02565b60405180910390fd5b6103e882111561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614c94565b60405180910390fd5b42600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125019190614297565b60206040518083038186803b15801561251957600080fd5b505afa15801561252d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125519190614cc9565b9050600061257c61271061256e86856134e390919063ffffffff16565b61355e90919063ffffffff16565b905060008111156125b7576125b6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead836135a8565b5b600060246000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561268557600080fd5b505af1158015612699573d6000803e3d6000fd5b5050505060019350505050919050565b60008082846126b89190614840565b9050838110156126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f490614d42565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690614dd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e690614e66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128cd9190614128565b60405180910390a3505050565b6128e2612707565b73ffffffffffffffffffffffffffffffffffffffff1661290061383d565b73ffffffffffffffffffffffffffffffffffffffff1614612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90614ed2565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614f64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2f90614ff6565b60405180910390fd5b6000811415612a5257612a4d838360006135a8565b61347a565b601360009054906101000a900460ff161561306957612a6f611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612add5750612aad611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b165750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b50575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b695750600760149054906101000a900460ff16155b1561306857601360019054906101000a900460ff16612c6357602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c235750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990615062565b60405180910390fd5b5b602160009054906101000a900460ff1615612e2d57612c80611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d0757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d615750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e2c5743602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde9061511a565b60405180910390fd5b43602060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2057600954811115612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba906151ac565b60405180910390fd5b600854612ecf83611678565b82612eda9190614840565b1115612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1290615218565b60405180910390fd5b613067565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fbb57600954811115612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad906152aa565b60405180910390fd5b613066565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130655760085461301883611678565b826130239190614840565b1115613064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305b90615218565b60405180910390fd5b5b5b5b5b5b600061307430611678565b90506000600a5482101590508080156130995750601360029054906101000a900460ff165b80156130b25750600760149054906101000a900460ff16155b80156131085750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561315e5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131a2576001600760146101000a81548160ff021916908315150217905550613186613851565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff161580156131cb5750601060009054906101000a900460ff165b156131db576131d9856139d9565b505b6000600760149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132915750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561329b57600090505b6000811561346a5760006019541115613376576132d660646132c8601954886134e390919063ffffffff16565b61355e90919063ffffffff16565b9050601954601b54826132e99190614558565b6132f391906145e1565b601e60008282546133049190614840565b92505081905550601954601c548261331c9190614558565b61332691906145e1565b601f60008282546133379190614840565b92505081905550601954601a548261334f9190614558565b61335991906145e1565b601d600082825461336a9190614840565b92505081905550613446565b60006015541115613445576133a9606461339b601554886134e390919063ffffffff16565b61355e90919063ffffffff16565b9050601554601754826133bc9190614558565b6133c691906145e1565b601e60008282546133d79190614840565b92505081905550601554601854826133ef9190614558565b6133f991906145e1565b601f600082825461340a9190614840565b92505081905550601554601654826134229190614558565b61342c91906145e1565b601d600082825461343d9190614840565b925050819055505b5b600081111561345b5761345a8730836135a8565b5b808561346791906152ca565b94505b6134758787876135a8565b505050505b505050565b60008383111582906134c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134be9190613f3c565b60405180910390fd5b50600083856134d691906152ca565b9050809150509392505050565b6000808314156134f65760009050613558565b600082846135049190614558565b905082848261351391906145e1565b14613553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354a90615370565b60405180910390fd5b809150505b92915050565b60006135a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aa6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360f90614f64565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f90614ff6565b60405180910390fd5b613693838383613b09565b6136fe8160405180606001604052806026815260200161559b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461347f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613791816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126a990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138309190614128565b60405180910390a3505050565b600080613848613b0e565b90508091505090565b600061385c30611678565b90506000601f54601d54601e546138739190614840565b61387d9190614840565b905060008083148061388f5750600082145b1561389c575050506139d7565b6014600a546138ab9190614558565b8311156138c4576014600a546138c19190614558565b92505b6000600283601e54866138d79190614558565b6138e191906145e1565b6138eb91906145e1565b905060006139028286613bb690919063ffffffff16565b9050600047905061391282613c00565b60006139278247613bb690919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613987906153c1565b60006040518083038185875af1925050503d80600081146139c4576040519150601f19603f3d011682016040523d82523d6000602084013e6139c9565b606091505b505080955050505050505050505b565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a159190614297565b60206040518083038186803b158015613a2d57600080fd5b505afa158015613a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a659190614cc9565b90506000613a7e600f54836126a990919063ffffffff16565b9050613a8984613e4c565b613a9b5760008114613a9a57600080fd5b5b600192505050919050565b60008083118290613aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae49190613f3c565b60405180910390fd5b5060008385613afc91906145e1565b9050809150509392505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613b8d57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613bb1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b6000613bf883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061347f565b905092915050565b6000600267ffffffffffffffff811115613c1d57613c1c6153d6565b5b604051908082528060200260200182016040528015613c4b5781602001602082028036833780820191505090505b5090503081600081518110613c6357613c626146a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d0357600080fd5b505afa158015613d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d3b919061541a565b81600181518110613d4f57613d4e6146a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613db4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461270f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e16959493929190615540565b600060405180830381600087803b158015613e3057600080fd5b505af1158015613e44573d6000803e3d6000fd5b505050505050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613edd578082015181840152602081019050613ec2565b83811115613eec576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f0e82613ea3565b613f188185613eae565b9350613f28818560208601613ebf565b613f3181613ef2565b840191505092915050565b60006020820190508181036000830152613f568184613f03565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f9382613f68565b9050919050565b613fa381613f88565b8114613fae57600080fd5b50565b600081359050613fc081613f9a565b92915050565b6000819050919050565b613fd981613fc6565b8114613fe457600080fd5b50565b600081359050613ff681613fd0565b92915050565b6000806040838503121561401357614012613f5e565b5b600061402185828601613fb1565b925050602061403285828601613fe7565b9150509250929050565b60008115159050919050565b6140518161403c565b82525050565b600060208201905061406c6000830184614048565b92915050565b60006020828403121561408857614087613f5e565b5b600061409684828501613fb1565b91505092915050565b6000819050919050565b60006140c46140bf6140ba84613f68565b61409f565b613f68565b9050919050565b60006140d6826140a9565b9050919050565b60006140e8826140cb565b9050919050565b6140f8816140dd565b82525050565b600060208201905061411360008301846140ef565b92915050565b61412281613fc6565b82525050565b600060208201905061413d6000830184614119565b92915050565b60006020828403121561415957614158613f5e565b5b600061416784828501613fe7565b91505092915050565b60008060006060848603121561418957614188613f5e565b5b600061419786828701613fb1565b93505060206141a886828701613fb1565b92505060406141b986828701613fe7565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126141e8576141e76141c3565b5b8235905067ffffffffffffffff811115614205576142046141c8565b5b602083019150836020820283011115614221576142206141cd565b5b9250929050565b60008060006040848603121561424157614240613f5e565b5b600084013567ffffffffffffffff81111561425f5761425e613f63565b5b61426b868287016141d2565b9350935050602061427e86828701613fe7565b9150509250925092565b61429181613f88565b82525050565b60006020820190506142ac6000830184614288565b92915050565b600060ff82169050919050565b6142c8816142b2565b82525050565b60006020820190506142e360008301846142bf565b92915050565b6142f28161403c565b81146142fd57600080fd5b50565b60008135905061430f816142e9565b92915050565b60008060006060848603121561432e5761432d613f5e565b5b600061433c86828701613fe7565b935050602061434d86828701613fe7565b925050604061435e86828701614300565b9150509250925092565b60008060006040848603121561438157614380613f5e565b5b600084013567ffffffffffffffff81111561439f5761439e613f63565b5b6143ab868287016141d2565b935093505060206143be86828701614300565b9150509250925092565b600080604083850312156143df576143de613f5e565b5b60006143ed85828601613fb1565b92505060206143fe85828601614300565b9150509250929050565b60008060006060848603121561442157614420613f5e565b5b600061442f86828701613fe7565b935050602061444086828701613fe7565b925050604061445186828701613fe7565b9150509250925092565b60006020828403121561447157614470613f5e565b5b600061447f84828501614300565b91505092915050565b6000806040838503121561449f5761449e613f5e565b5b60006144ad85828601613fb1565b92505060206144be85828601613fb1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450f57607f821691505b60208210811415614523576145226144c8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061456382613fc6565b915061456e83613fc6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145a7576145a6614529565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145ec82613fc6565b91506145f783613fc6565b925082614607576146066145b2565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061466e602f83613eae565b915061467982614612565b604082019050919050565b6000602082019050818103600083015261469d81614661565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146de82613fc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561471157614710614529565b5b600182019050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614778603383613eae565b91506147838261471c565b604082019050919050565b600060208201905081810360008301526147a78161476b565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061480a603083613eae565b9150614815826147ae565b604082019050919050565b60006020820190508181036000830152614839816147fd565b9050919050565b600061484b82613fc6565b915061485683613fc6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561488b5761488a614529565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006148cc601d83613eae565b91506148d782614896565b602082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614938601d83613eae565b915061494382614902565b602082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006149ca602483613eae565b91506149d58261496e565b604082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a5c603583613eae565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614aee603283613eae565b9150614af982614a92565b604082019050919050565b60006020820190508181036000830152614b1d81614ae1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b80602683613eae565b9150614b8b82614b24565b604082019050919050565b60006020820190508181036000830152614baf81614b73565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614bec602083613eae565b9150614bf782614bb6565b602082019050919050565b60006020820190508181036000830152614c1b81614bdf565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614c7e602a83613eae565b9150614c8982614c22565b604082019050919050565b60006020820190508181036000830152614cad81614c71565b9050919050565b600081519050614cc381613fd0565b92915050565b600060208284031215614cdf57614cde613f5e565b5b6000614ced84828501614cb4565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d2c601b83613eae565b9150614d3782614cf6565b602082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614dbe602483613eae565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e50602283613eae565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ebc602083613eae565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f4e602583613eae565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe0602383613eae565b9150614feb82614f84565b604082019050919050565b6000602082019050818103600083015261500f81614fd3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061504c601683613eae565b915061505782615016565b602082019050919050565b6000602082019050818103600083015261507b8161503f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615104604983613eae565b915061510f82615082565b606082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615196603583613eae565b91506151a18261513a565b604082019050919050565b600060208201905081810360008301526151c581615189565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615202601383613eae565b915061520d826151cc565b602082019050919050565b60006020820190508181036000830152615231816151f5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615294603683613eae565b915061529f82615238565b604082019050919050565b600060208201905081810360008301526152c381615287565b9050919050565b60006152d582613fc6565b91506152e083613fc6565b9250828210156152f3576152f2614529565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061535a602183613eae565b9150615365826152fe565b604082019050919050565b600060208201905081810360008301526153898161534d565b9050919050565b600081905092915050565b50565b60006153ab600083615390565b91506153b68261539b565b600082019050919050565b60006153cc8261539e565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061541481613f9a565b92915050565b6000602082840312156154305761542f613f5e565b5b600061543e84828501615405565b91505092915050565b6000819050919050565b600061546c61546761546284615447565b61409f565b613fc6565b9050919050565b61547c81615451565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154b781613f88565b82525050565b60006154c983836154ae565b60208301905092915050565b6000602082019050919050565b60006154ed82615482565b6154f7818561548d565b93506155028361549e565b8060005b8381101561553357815161551a88826154bd565b9750615525836154d5565b925050600181019050615506565b5085935050505092915050565b600060a0820190506155556000830188614119565b6155626020830187615473565b818103604083015261557481866154e2565b90506155836060830185614288565b6155906080830184614119565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122029c8d3d06218164914d88a2e936cd94c79b38e03a330253c6676e1f5fab4af5f64736f6c63430008080033

Deployed Bytecode Sourcemap

159:17306:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4024:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6191:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1867:64:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;237:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5144:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8061:157:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;611:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;712:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1422:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7047:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6842:355:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13921:223:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;295:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;794:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;755:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4986:93:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;899:32:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7606:218:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2492:133:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;355:28:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8380:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1233:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;977:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5315:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1759:148:0;;;;;;;;;;;;;:::i;:::-;;16865:447:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15204:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4949:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8226:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;568:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6280:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5321:155;;;;;;;;;;;;;:::i;:::-;;966:79:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;537:24:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1268:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5708:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4243:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1196:24:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;668:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1462:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17320:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1344:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7910:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8327:269:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;855:29:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5655:175:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8517:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2089:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7702:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;938:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7289:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6661:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7479:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1680:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;453:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5883:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1088:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5893:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1014:65:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;495:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5133:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1159:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2188:244:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1306:31:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;422:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15428:1015;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4024:100:1;4078:13;4111:5;4104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4024:100;:::o;6191:169::-;6274:4;6291:39;6300:12;:10;:12::i;:::-;6314:7;6323:6;6291:8;:39::i;:::-;6348:4;6341:11;;6191:169;;;;:::o;1867:64:3:-;;;;;;;;;;;;;;;;;;;;;;:::o;237:51::-;;;:::o;5144:108:1:-;5205:7;5232:12;;5225:19;;5144:108;:::o;8061:157:3:-;1170:13:0;:11;:13::i;:::-;8168:9:3::1;;;;;;;;;;;8140:38;;8157:9;8140:38;;;;;;;;;;;;8201:9;8189;;:21;;;;;;;;;;;;;;;;;;8061:157:::0;:::o;611:50::-;;;;:::o;712:35::-;;;;:::o;1422:33::-;;;;:::o;1382:::-;;;;:::o;7047:234::-;1170:13:0;:11;:13::i;:::-;7166:4:3::1;7160;7156:1;7140:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;7139:31;;;;:::i;:::-;7129:6;:41;;7121:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;7266:6;7256;:17;;;;:::i;:::-;7233:20;:40;;;;7047:234:::0;:::o;6842:355:1:-;6982:4;6999:36;7009:6;7017:9;7028:6;6999:9;:36::i;:::-;7046:121;7055:6;7063:12;:10;:12::i;:::-;7077:89;7115:6;7077:89;;;;;;;;;;;;;;;;;:11;:19;7089:6;7077:19;;;;;;;;;;;;;;;:33;7097:12;:10;:12::i;:::-;7077:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7046:8;:121::i;:::-;7185:4;7178:11;;6842:355;;;;;:::o;13921:223:3:-;1170:13:0;:11;:13::i;:::-;14018:9:3::1;14013:124;14037:10;;:17;;14033:1;:21;14013:124;;;14105:10;;14116:1;14105:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14081:44;;14090:13;;;;;;;;;;;14081:44;;;14120:4;14081:44;;;;;;:::i;:::-;;;;;;;;14056:3;;;;;:::i;:::-;;;;14013:124;;;;13921:223:::0;;;:::o;295:53::-;341:6;295:53;:::o;794:54::-;;;;:::o;755:32::-;;;;;;;;;;;;;:::o;4986:93:1:-;5044:5;5069:2;5062:9;;4986:93;:::o;899:32:3:-;;;;;;;;;;;;;:::o;7606:218:1:-;7694:4;7711:83;7720:12;:10;:12::i;:::-;7734:7;7743:50;7782:10;7743:11;:25;7755:12;:10;:12::i;:::-;7743:25;;;;;;;;;;;;;;;:34;7769:7;7743:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7711:8;:83::i;:::-;7812:4;7805:11;;7606:218;;;;:::o;2492:133:0:-;1170:13;:11;:13::i;:::-;2588:1:::1;2571:19;;:5;;;;;;;;;;;:19;;;2562:29;;;::::0;::::1;;2610:7;2602:5;;:15;;;;;;;;;;;;;;;;;;2492:133:::0;:::o;355:28:3:-;;;;;;;;;;;;;:::o;8380:125::-;8445:4;8469:19;:28;8489:7;8469:28;;;;;;;;;;;;;;;;;;;;;;;;;8462:35;;8380:125;;;:::o;1233:28::-;;;;:::o;977:30::-;;;;;;;;;;;;;:::o;5315:127:1:-;5389:7;5416:9;:18;5426:7;5416:18;;;;;;;;;;;;;;;;5409:25;;5315:127;;;:::o;1759:148:0:-;1170:13;:11;:13::i;:::-;1866:1:::1;1829:40;;1850:6;;;;;;;;;;;1829:40;;;;;;;;;;;;1897:1;1880:6;;:19;;;;;;;;;;;;;;;;;;1759:148::o:0;16865:447:3:-;1170:13:0;:11;:13::i;:::-;17019:3:3::1;16996:19;:26;;16988:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;17109:4;17097:8;:16;;:33;;;;;17129:1;17117:8;:13;;17097:33;17089:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;17212:19;17194:15;:37;;;;17261:8;17242:16;:27;;;;17296:8;17280:13;;:24;;;;;;;;;;;;;;;;;;16865:447:::0;;;:::o;15204:212::-;1170:13:0;:11;:13::i;:::-;15289:9:3::1;15284:125;15308:8;;:15;;15304:1;:19;15284:125;;;15394:3;15345:33;:46;15379:8;;15388:1;15379:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;15345:46;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;15325:3;;;;;:::i;:::-;;;;15284:125;;;;15204:212:::0;;;:::o;4949:119::-;5001:4;1170:13:0;:11;:13::i;:::-;5033:5:3::1;5017:13;;:21;;;;;;;;;;;;;;;;;;5056:4;5049:11;;4949:119:::0;:::o;8226:144::-;1170:13:0;:11;:13::i;:::-;8358:4:3::1;8316:31;:39;8348:6;8316:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;8226:144:::0;;:::o;568:30::-;;;;;;;;;;;;;:::o;1122:::-;;;;:::o;6280:369::-;1170:13:0;:11;:13::i;:::-;6414::3::1;6396:15;:31;;;;6456:13;6438:15;:31;;;;6492:7;6480:9;:19;;;;6561:9;;6543:15;;6525;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;6510:12;:60;;;;6605:2;6589:12;;:18;;6581:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;6280:369:::0;;;:::o;5321:155::-;1170:13:0;:11;:13::i;:::-;5392:4:3::1;5376:13;;:20;;;;;;;;;;;;;;;;;;5421:4;5407:11;;:18;;;;;;;;;;;;;;;;;;5453:15;5436:14;:32;;;;5321:155::o:0;966:79:0:-;1004:7;1031:6;;;;;;;;;;;1024:13;;966:79;:::o;537:24:3:-;;;;;;;;;;;;;:::o;1268:31::-;;;;:::o;5708:101::-;1170:13:0;:11;:13::i;:::-;5794:7:3::1;5780:11;;:21;;;;;;;;;;;;;;;;;;5708:101:::0;:::o;4243:104:1:-;4299:13;4332:7;4325:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4243:104;:::o;1196:24:3:-;;;;:::o;668:35::-;;;;:::o;1462:27::-;;;;:::o;17320:142::-;17387:4;17410:33;:44;17444:9;17410:44;;;;;;;;;;;;;;;;;;;;;;;;;17403:51;;17320:142;;;:::o;1344:25::-;;;;:::o;7910:143::-;1170:13:0;:11;:13::i;:::-;8004:41:3::1;8033:4;8039:5;8004:28;:41::i;:::-;7910:143:::0;;:::o;8327:269:1:-;8420:4;8437:129;8446:12;:10;:12::i;:::-;8460:7;8469:96;8508:15;8469:96;;;;;;;;;;;;;;;;;:11;:25;8481:12;:10;:12::i;:::-;8469:25;;;;;;;;;;;;;;;:34;8495:7;8469:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8437:8;:129::i;:::-;8584:4;8577:11;;8327:269;;;;:::o;855:29:3:-;;;;:::o;5655:175:1:-;5741:4;5758:42;5768:12;:10;:12::i;:::-;5782:9;5793:6;5758:9;:42::i;:::-;5818:4;5811:11;;5655:175;;;;:::o;8517:208:3:-;1170:13:0;:11;:13::i;:::-;8654:15:3::1;;;;;;;;;;;8611:59;;8634:18;8611:59;;;;;;;;;;;;8699:18;8681:15;;:36;;;;;;;;;;;;;;;;;;8517:208:::0;:::o;2089:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;7702:200::-;1170:13:0;:11;:13::i;:::-;7831:5:3::1;7797:25;:31;7823:4;7797:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7888:5;7854:40;;7882:4;7854:40;;;;;;;;;;;;7702:200:::0;;:::o;938:32::-;;;;;;;;;;;;;:::o;7289:182::-;1170:13:0;:11;:13::i;:::-;7405:8:3::1;7374:19;:28;7394:7;7374:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7445:7;7429:34;;;7454:8;7429:34;;;;;;:::i;:::-;;;;;;;;7289:182:::0;;:::o;6661:378::-;1170:13:0;:11;:13::i;:::-;6797::3::1;6778:16;:32;;;;6840:13;6821:16;:32;;;;6877:7;6864:10;:20;;;;6949:10;;6930:16;;6911;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;6895:13;:64;;;;6995:2;6978:13;;:19;;6970:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6661:378:::0;;;:::o;7479:215::-;1170:13:0;:11;:13::i;:::-;7601:4:3::1;7595;7591:1;7575:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;7574:31;;;;:::i;:::-;7564:6;:41;;7556:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;7679:6;7669;:17;;;;:::i;:::-;7657:9;:29;;;;7479:215:::0;:::o;1680:39::-;;;;;;;;;;;;;:::o;453:35::-;;;;:::o;5883:385::-;5964:4;1170:13:0;:11;:13::i;:::-;6021:6:3::1;6017:1;6001:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;5988:9;:39;;5980:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;6138:4;6133:2;6117:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;6104:9;:38;;6096:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;6229:9;6208:18;:30;;;;6256:4;6249:11;;5883:385:::0;;;:::o;1088:27::-;;;;:::o;5893:151:1:-;5982:7;6009:11;:18;6021:5;6009:18;;;;;;;;;;;;;;;:27;6028:7;6009:27;;;;;;;;;;;;;;;;6002:34;;5893:151;;;;:::o;1014:65:3:-;;;;;;;;;;;;;;;;;;;;;;:::o;495:33::-;;;;:::o;5133:134::-;5193:4;1170:13:0;:11;:13::i;:::-;5232:5:3::1;5209:20;;:28;;;;;;;;;;;;;;;;;;5255:4;5248:11;;5133:134:::0;:::o;1159:30::-;;;;:::o;2188:244:0:-;1170:13;:11;:13::i;:::-;2297:1:::1;2277:22;;:8;:22;;;;2269:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2387:8;2358:38;;2379:6;;;;;;;;;;;2358:38;;;;;;;;;;;;2416:8;2407:6;;:17;;;;;;;;;;;;;;;;;;2188:244:::0;:::o;1306:31:3:-;;;;:::o;422:24::-;;;;:::o;15428:1015::-;15512:4;1170:13:0;:11;:13::i;:::-;15577:19:3::1;;15554:20;;:42;;;;:::i;:::-;15536:15;:60;15528:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;15664:4;15653:7;:15;;15645:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15749:15;15726:20;:38;;;;15827:28;15858:4;:14;;;15873:13;;;;;;;;;;;15858:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15827:60;;15945:20;15968:44;16006:5;15968:33;15993:7;15968:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;15945:67;;16140:1;16125:12;:16;16121:109;;;16157:61;16173:13;;;;;;;;;;;16196:6;16205:12;16157:15;:61::i;:::-;16121:109;16313:19;16350:25;:40;16376:13;;;;;;;;;;;16350:40;;;;;;;;;;;;;;;;;;;;;;;;;16313:78;;16402:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16431:4;16424:11;;;;;15428:1015:::0;;;:::o;324:181:2:-;382:7;402:9;418:1;414;:5;;;;:::i;:::-;402:17;;443:1;438;:6;;430:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;496:1;489:8;;;324:181;;;;:::o;94:98:0:-;147:7;174:10;167:17;;94:98;:::o;11513:380:1:-;11666:1;11649:19;;:5;:19;;;;11641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11747:1;11728:21;;:7;:21;;;;11720:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11831:6;11801:11;:18;11813:5;11801:18;;;;;;;;;;;;;;;:27;11820:7;11801:27;;;;;;;;;;;;;;;:36;;;;11869:7;11853:32;;11862:5;11853:32;;;11878:6;11853:32;;;;;;:::i;:::-;;;;;;;;11513:380;;;:::o;1281:127:0:-;1351:12;:10;:12::i;:::-;1340:23;;:7;:5;:7::i;:::-;:23;;;1332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1281:127::o;8733:4042:3:-;8881:1;8865:18;;:4;:18;;;;8857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8958:1;8944:16;;:2;:16;;;;8936:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9035:1;9025:6;:11;9022:92;;;9053:28;9069:4;9075:2;9079:1;9053:15;:28::i;:::-;9096:7;;9022:92;9137:13;;;;;;;;;;;9134:1772;;;9196:7;:5;:7::i;:::-;9188:15;;:4;:15;;;;:49;;;;;9230:7;:5;:7::i;:::-;9224:13;;:2;:13;;;;9188:49;:86;;;;;9272:1;9258:16;;:2;:16;;;;9188:86;:128;;;;;9309:6;9295:21;;:2;:21;;;;9188:128;:158;;;;;9338:8;;;;;;;;;;;9337:9;9188:158;9166:1729;;;9384:13;;;;;;;;;;;9380:148;;9429:19;:25;9449:4;9429:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;9458:19;:23;9478:2;9458:23;;;;;;;;;;;;;;;;;;;;;;;;;9429:52;9421:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9380:148;9686:20;;;;;;;;;;;9682:423;;;9740:7;:5;:7::i;:::-;9734:13;;:2;:13;;;;:47;;;;;9765:15;9751:30;;:2;:30;;;;9734:47;:79;;;;;9799:13;;;;;;;;;;;9785:28;;:2;:28;;;;9734:79;9730:356;;;9891:12;9849:28;:39;9878:9;9849:39;;;;;;;;;;;;;;;;:54;9841:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;10050:12;10008:28;:39;10037:9;10008:39;;;;;;;;;;;;;;;:54;;;;9730:356;9682:423;10175:31;:35;10207:2;10175:35;;;;;;;;;;;;;;;;;;;;;;;;;10170:710;;10257:20;;10247:6;:30;;10239:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;10396:9;;10379:13;10389:2;10379:9;:13::i;:::-;10370:6;:22;;;;:::i;:::-;:35;;10362:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10170:710;;;10524:31;:37;10556:4;10524:37;;;;;;;;;;;;;;;;;;;;;;;;;10519:361;;10608:20;;10598:6;:30;;10590:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;10519:361;;;10734:31;:35;10766:2;10734:35;;;;;;;;;;;;;;;;;;;;;;;;;10730:150;;10827:9;;10810:13;10820:2;10810:9;:13::i;:::-;10801:6;:22;;;;:::i;:::-;:35;;10793:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10730:150;10519:361;10170:710;9166:1729;9134:1772;10926:28;10957:24;10975:4;10957:9;:24::i;:::-;10926:55;;11002:12;11041:18;;11017:20;:42;;11002:57;;11090:7;:35;;;;;11114:11;;;;;;;;;;;11090:35;:61;;;;;11143:8;;;;;;;;;;;11142:9;11090:61;:104;;;;;11169:19;:25;11189:4;11169:25;;;;;;;;;;;;;;;;;;;;;;;;;11168:26;11090:104;:145;;;;;11212:19;:23;11232:2;11212:23;;;;;;;;;;;;;;;;;;;;;;;;;11211:24;11090:145;11072:289;;;11273:4;11262:8;;:15;;;;;;;;;;;;;;;;;;11306:10;:8;:10::i;:::-;11344:5;11333:8;;:16;;;;;;;;;;;;;;;;;;11072:289;11385:8;;;;;;;;;;;11384:9;:26;;;;;11397:13;;;;;;;;;;;11384:26;11381:76;;;11426:19;11440:4;11426:13;:19::i;:::-;;11381:76;11469:12;11485:8;;;;;;;;;;;11484:9;11469:24;;11594:19;:25;11614:4;11594:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;11623:19;:23;11643:2;11623:23;;;;;;;;;;;;;;;;;;;;;;;;;11594:52;11591:99;;;11673:5;11663:15;;11591:99;11710:12;11814:7;11811:911;;;11881:1;11865:13;;:17;11861:686;;;11909:34;11939:3;11909:25;11920:13;;11909:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;11902:41;;12010:13;;11991:16;;11984:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;11962:18;;:61;;;;;;;:::i;:::-;;;;;;;;12078:13;;12065:10;;12058:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;12042:12;;:49;;;;;;;:::i;:::-;;;;;;;;12158:13;;12139:16;;12132:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;12110:18;;:61;;;;;;;:::i;:::-;;;;;;;;11861:686;;;12247:1;12232:12;;:16;12229:318;;;12276:33;12305:3;12276:24;12287:12;;12276:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;12269:40;;12375:12;;12357:15;;12350:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12328:18;;:59;;;;;;;:::i;:::-;;;;;;;;12441:12;;12429:9;;12422:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;12406:12;;:47;;;;;;;:::i;:::-;;;;;;;;12519:12;;12501:15;;12494:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;12472:18;;:59;;;;;;;:::i;:::-;;;;;;;;12229:318;11861:686;12585:1;12578:4;:8;12575:93;;;12610:42;12626:4;12640;12647;12610:15;:42::i;:::-;12575:93;12706:4;12696:14;;;;;:::i;:::-;;;11811:911;12734:33;12750:4;12756:2;12760:6;12734:15;:33::i;:::-;8846:3929;;;;8733:4042;;;;:::o;1227:192:2:-;1313:7;1346:1;1341;:6;;1349:12;1333:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1373:9;1389:1;1385;:5;;;;:::i;:::-;1373:17;;1410:1;1403:8;;;1227:192;;;;;:::o;1678:471::-;1736:7;1986:1;1981;:6;1977:47;;;2011:1;2004:8;;;;1977:47;2036:9;2052:1;2048;:5;;;;:::i;:::-;2036:17;;2081:1;2076;2072;:5;;;;:::i;:::-;:10;2064:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2140:1;2133:8;;;1678:471;;;;;:::o;2625:132::-;2683:7;2710:39;2714:1;2717;2710:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2703:46;;2625:132;;;;:::o;9086:573:1:-;9244:1;9226:20;;:6;:20;;;;9218:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9328:1;9307:23;;:9;:23;;;;9299:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9383:47;9404:6;9412:9;9423:6;9383:20;:47::i;:::-;9463:71;9485:6;9463:71;;;;;;;;;;;;;;;;;:9;:17;9473:6;9463:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9443:9;:17;9453:6;9443:17;;;;;;;;;;;;;;;:91;;;;9568:32;9593:6;9568:9;:20;9578:9;9568:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9545:9;:20;9555:9;9545:20;;;;;;;;;;;;;;;:55;;;;9633:9;9616:35;;9625:6;9616:35;;;9644:6;9616:35;;;;;;:::i;:::-;;;;;;;;9086:573;;;:::o;2633:135:0:-;2676:7;2706:14;2723:13;:11;:13::i;:::-;2706:30;;2754:6;2747:13;;;2633:135;:::o;14152:1043:3:-;14191:23;14217:24;14235:4;14217:9;:24::i;:::-;14191:50;;14252:25;14322:12;;14301:18;;14280;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;14252:82;;14345:12;14400:1;14381:15;:20;:46;;;;14426:1;14405:17;:22;14381:46;14378:60;;;14430:7;;;;;14378:60;14492:2;14471:18;;:23;;;;:::i;:::-;14453:15;:41;14450:111;;;14547:2;14526:18;;:23;;;;:::i;:::-;14508:41;;14450:111;14630:23;14715:1;14695:17;14674:18;;14656:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;14630:86;;14727:26;14756:36;14776:15;14756;:19;;:36;;;;:::i;:::-;14727:65;;14813:25;14841:21;14813:49;;14875:36;14892:18;14875:16;:36::i;:::-;14933:18;14954:44;14980:17;14954:21;:25;;:44;;;;:::i;:::-;14933:65;;15040:1;15019:18;:22;;;;15073:1;15052:18;:22;;;;15100:1;15085:12;:16;;;;15143:15;;;;;;;;;;;15135:29;;15172:10;15135:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15122:65;;;;;14180:1015;;;;;;;14152:1043;:::o;16451:406::-;16511:4;16563:23;16589:4;:14;;;16612:4;16589:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16563:55;;16682:26;16711:37;16731:16;;16711:15;:19;;:37;;;;:::i;:::-;16682:66;;16774:9;16778:4;16774:3;:9::i;:::-;16769:49;;16814:1;16794:18;:21;16786:30;;;;;;16769:49;16835:4;16828:11;;;;16451:406;;;:::o;3253:278:2:-;3339:7;3371:1;3367;:5;3374:12;3359:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3398:9;3414:1;3410;:5;;;;:::i;:::-;3398:17;;3522:1;3515:8;;;3253:278;;;;;:::o;12496:125:1:-;;;;:::o;1919:114:0:-;1964:7;2006:1;1990:18;;:6;;;;;;;;;;;:18;;;:35;;2019:6;;;;;;;;;;;1990:35;;;2011:5;;;;;;;;;;;1990:35;1983:42;;1919:114;:::o;788:136:2:-;846:7;873:43;877:1;880;873:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;866:50;;788:136;;;;:::o;12783:601:3:-;12911:21;12949:1;12935:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12911:40;;12980:4;12962;12967:1;12962:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;13006:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12996:4;13001:1;12996:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;13041:62;13058:4;13073:15;13091:11;13041:8;:62::i;:::-;13142:15;:66;;;13223:11;13249:1;13293:4;13320;13340:15;13142:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12838:546;12783:601;:::o;5488:120::-;5537:4;5561:33;:39;5595:4;5561:39;;;;;;;;;;;;;;;;;;;;;;;;;5560:40;5553:47;;5488:120;;;:::o;7:99:5:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:117::-;6228:1;6225;6218:12;6242:117;6351:1;6348;6341:12;6365:117;6474:1;6471;6464:12;6505:568;6578:8;6588:6;6638:3;6631:4;6623:6;6619:17;6615:27;6605:122;;6646:79;;:::i;:::-;6605:122;6759:6;6746:20;6736:30;;6789:18;6781:6;6778:30;6775:117;;;6811:79;;:::i;:::-;6775:117;6925:4;6917:6;6913:17;6901:29;;6979:3;6971:4;6963:6;6959:17;6949:8;6945:32;6942:41;6939:128;;;6986:79;;:::i;:::-;6939:128;6505:568;;;;;:::o;7079:704::-;7174:6;7182;7190;7239:2;7227:9;7218:7;7214:23;7210:32;7207:119;;;7245:79;;:::i;:::-;7207:119;7393:1;7382:9;7378:17;7365:31;7423:18;7415:6;7412:30;7409:117;;;7445:79;;:::i;:::-;7409:117;7558:80;7630:7;7621:6;7610:9;7606:22;7558:80;:::i;:::-;7540:98;;;;7336:312;7687:2;7713:53;7758:7;7749:6;7738:9;7734:22;7713:53;:::i;:::-;7703:63;;7658:118;7079:704;;;;;:::o;7789:118::-;7876:24;7894:5;7876:24;:::i;:::-;7871:3;7864:37;7789:118;;:::o;7913:222::-;8006:4;8044:2;8033:9;8029:18;8021:26;;8057:71;8125:1;8114:9;8110:17;8101:6;8057:71;:::i;:::-;7913:222;;;;:::o;8141:86::-;8176:7;8216:4;8209:5;8205:16;8194:27;;8141:86;;;:::o;8233:112::-;8316:22;8332:5;8316:22;:::i;:::-;8311:3;8304:35;8233:112;;:::o;8351:214::-;8440:4;8478:2;8467:9;8463:18;8455:26;;8491:67;8555:1;8544:9;8540:17;8531:6;8491:67;:::i;:::-;8351:214;;;;:::o;8571:116::-;8641:21;8656:5;8641:21;:::i;:::-;8634:5;8631:32;8621:60;;8677:1;8674;8667:12;8621:60;8571:116;:::o;8693:133::-;8736:5;8774:6;8761:20;8752:29;;8790:30;8814:5;8790:30;:::i;:::-;8693:133;;;;:::o;8832:613::-;8906:6;8914;8922;8971:2;8959:9;8950:7;8946:23;8942:32;8939:119;;;8977:79;;:::i;:::-;8939:119;9097:1;9122:53;9167:7;9158:6;9147:9;9143:22;9122:53;:::i;:::-;9112:63;;9068:117;9224:2;9250:53;9295:7;9286:6;9275:9;9271:22;9250:53;:::i;:::-;9240:63;;9195:118;9352:2;9378:50;9420:7;9411:6;9400:9;9396:22;9378:50;:::i;:::-;9368:60;;9323:115;8832:613;;;;;:::o;9451:698::-;9543:6;9551;9559;9608:2;9596:9;9587:7;9583:23;9579:32;9576:119;;;9614:79;;:::i;:::-;9576:119;9762:1;9751:9;9747:17;9734:31;9792:18;9784:6;9781:30;9778:117;;;9814:79;;:::i;:::-;9778:117;9927:80;9999:7;9990:6;9979:9;9975:22;9927:80;:::i;:::-;9909:98;;;;9705:312;10056:2;10082:50;10124:7;10115:6;10104:9;10100:22;10082:50;:::i;:::-;10072:60;;10027:115;9451:698;;;;;:::o;10155:468::-;10220:6;10228;10277:2;10265:9;10256:7;10252:23;10248:32;10245:119;;;10283:79;;:::i;:::-;10245:119;10403:1;10428:53;10473:7;10464:6;10453:9;10449:22;10428:53;:::i;:::-;10418:63;;10374:117;10530:2;10556:50;10598:7;10589:6;10578:9;10574:22;10556:50;:::i;:::-;10546:60;;10501:115;10155:468;;;;;:::o;10629:619::-;10706:6;10714;10722;10771:2;10759:9;10750:7;10746:23;10742:32;10739:119;;;10777:79;;:::i;:::-;10739:119;10897:1;10922:53;10967:7;10958:6;10947:9;10943:22;10922:53;:::i;:::-;10912:63;;10868:117;11024:2;11050:53;11095:7;11086:6;11075:9;11071:22;11050:53;:::i;:::-;11040:63;;10995:118;11152:2;11178:53;11223:7;11214:6;11203:9;11199:22;11178:53;:::i;:::-;11168:63;;11123:118;10629:619;;;;;:::o;11254:323::-;11310:6;11359:2;11347:9;11338:7;11334:23;11330:32;11327:119;;;11365:79;;:::i;:::-;11327:119;11485:1;11510:50;11552:7;11543:6;11532:9;11528:22;11510:50;:::i;:::-;11500:60;;11456:114;11254:323;;;;:::o;11583:474::-;11651:6;11659;11708:2;11696:9;11687:7;11683:23;11679:32;11676:119;;;11714:79;;:::i;:::-;11676:119;11834:1;11859:53;11904:7;11895:6;11884:9;11880:22;11859:53;:::i;:::-;11849:63;;11805:117;11961:2;11987:53;12032:7;12023:6;12012:9;12008:22;11987:53;:::i;:::-;11977:63;;11932:118;11583:474;;;;;:::o;12063:180::-;12111:77;12108:1;12101:88;12208:4;12205:1;12198:15;12232:4;12229:1;12222:15;12249:320;12293:6;12330:1;12324:4;12320:12;12310:22;;12377:1;12371:4;12367:12;12398:18;12388:81;;12454:4;12446:6;12442:17;12432:27;;12388:81;12516:2;12508:6;12505:14;12485:18;12482:38;12479:84;;;12535:18;;:::i;:::-;12479:84;12300:269;12249:320;;;:::o;12575:180::-;12623:77;12620:1;12613:88;12720:4;12717:1;12710:15;12744:4;12741:1;12734:15;12761:348;12801:7;12824:20;12842:1;12824:20;:::i;:::-;12819:25;;12858:20;12876:1;12858:20;:::i;:::-;12853:25;;13046:1;12978:66;12974:74;12971:1;12968:81;12963:1;12956:9;12949:17;12945:105;12942:131;;;13053:18;;:::i;:::-;12942:131;13101:1;13098;13094:9;13083:20;;12761:348;;;;:::o;13115:180::-;13163:77;13160:1;13153:88;13260:4;13257:1;13250:15;13284:4;13281:1;13274:15;13301:185;13341:1;13358:20;13376:1;13358:20;:::i;:::-;13353:25;;13392:20;13410:1;13392:20;:::i;:::-;13387:25;;13431:1;13421:35;;13436:18;;:::i;:::-;13421:35;13478:1;13475;13471:9;13466:14;;13301:185;;;;:::o;13492:234::-;13632:34;13628:1;13620:6;13616:14;13609:58;13701:17;13696:2;13688:6;13684:15;13677:42;13492:234;:::o;13732:366::-;13874:3;13895:67;13959:2;13954:3;13895:67;:::i;:::-;13888:74;;13971:93;14060:3;13971:93;:::i;:::-;14089:2;14084:3;14080:12;14073:19;;13732:366;;;:::o;14104:419::-;14270:4;14308:2;14297:9;14293:18;14285:26;;14357:9;14351:4;14347:20;14343:1;14332:9;14328:17;14321:47;14385:131;14511:4;14385:131;:::i;:::-;14377:139;;14104:419;;;:::o;14529:180::-;14577:77;14574:1;14567:88;14674:4;14671:1;14664:15;14698:4;14695:1;14688:15;14715:233;14754:3;14777:24;14795:5;14777:24;:::i;:::-;14768:33;;14823:66;14816:5;14813:77;14810:103;;;14893:18;;:::i;:::-;14810:103;14940:1;14933:5;14929:13;14922:20;;14715:233;;;:::o;14954:238::-;15094:34;15090:1;15082:6;15078:14;15071:58;15163:21;15158:2;15150:6;15146:15;15139:46;14954:238;:::o;15198:366::-;15340:3;15361:67;15425:2;15420:3;15361:67;:::i;:::-;15354:74;;15437:93;15526:3;15437:93;:::i;:::-;15555:2;15550:3;15546:12;15539:19;;15198:366;;;:::o;15570:419::-;15736:4;15774:2;15763:9;15759:18;15751:26;;15823:9;15817:4;15813:20;15809:1;15798:9;15794:17;15787:47;15851:131;15977:4;15851:131;:::i;:::-;15843:139;;15570:419;;;:::o;15995:235::-;16135:34;16131:1;16123:6;16119:14;16112:58;16204:18;16199:2;16191:6;16187:15;16180:43;15995:235;:::o;16236:366::-;16378:3;16399:67;16463:2;16458:3;16399:67;:::i;:::-;16392:74;;16475:93;16564:3;16475:93;:::i;:::-;16593:2;16588:3;16584:12;16577:19;;16236:366;;;:::o;16608:419::-;16774:4;16812:2;16801:9;16797:18;16789:26;;16861:9;16855:4;16851:20;16847:1;16836:9;16832:17;16825:47;16889:131;17015:4;16889:131;:::i;:::-;16881:139;;16608:419;;;:::o;17033:305::-;17073:3;17092:20;17110:1;17092:20;:::i;:::-;17087:25;;17126:20;17144:1;17126:20;:::i;:::-;17121:25;;17280:1;17212:66;17208:74;17205:1;17202:81;17199:107;;;17286:18;;:::i;:::-;17199:107;17330:1;17327;17323:9;17316:16;;17033:305;;;;:::o;17344:179::-;17484:31;17480:1;17472:6;17468:14;17461:55;17344:179;:::o;17529:366::-;17671:3;17692:67;17756:2;17751:3;17692:67;:::i;:::-;17685:74;;17768:93;17857:3;17768:93;:::i;:::-;17886:2;17881:3;17877:12;17870:19;;17529:366;;;:::o;17901:419::-;18067:4;18105:2;18094:9;18090:18;18082:26;;18154:9;18148:4;18144:20;18140:1;18129:9;18125:17;18118:47;18182:131;18308:4;18182:131;:::i;:::-;18174:139;;17901:419;;;:::o;18326:179::-;18466:31;18462:1;18454:6;18450:14;18443:55;18326:179;:::o;18511:366::-;18653:3;18674:67;18738:2;18733:3;18674:67;:::i;:::-;18667:74;;18750:93;18839:3;18750:93;:::i;:::-;18868:2;18863:3;18859:12;18852:19;;18511:366;;;:::o;18883:419::-;19049:4;19087:2;19076:9;19072:18;19064:26;;19136:9;19130:4;19126:20;19122:1;19111:9;19107:17;19100:47;19164:131;19290:4;19164:131;:::i;:::-;19156:139;;18883:419;;;:::o;19308:223::-;19448:34;19444:1;19436:6;19432:14;19425:58;19517:6;19512:2;19504:6;19500:15;19493:31;19308:223;:::o;19537:366::-;19679:3;19700:67;19764:2;19759:3;19700:67;:::i;:::-;19693:74;;19776:93;19865:3;19776:93;:::i;:::-;19894:2;19889:3;19885:12;19878:19;;19537:366;;;:::o;19909:419::-;20075:4;20113:2;20102:9;20098:18;20090:26;;20162:9;20156:4;20152:20;20148:1;20137:9;20133:17;20126:47;20190:131;20316:4;20190:131;:::i;:::-;20182:139;;19909:419;;;:::o;20334:240::-;20474:34;20470:1;20462:6;20458:14;20451:58;20543:23;20538:2;20530:6;20526:15;20519:48;20334:240;:::o;20580:366::-;20722:3;20743:67;20807:2;20802:3;20743:67;:::i;:::-;20736:74;;20819:93;20908:3;20819:93;:::i;:::-;20937:2;20932:3;20928:12;20921:19;;20580:366;;;:::o;20952:419::-;21118:4;21156:2;21145:9;21141:18;21133:26;;21205:9;21199:4;21195:20;21191:1;21180:9;21176:17;21169:47;21233:131;21359:4;21233:131;:::i;:::-;21225:139;;20952:419;;;:::o;21377:237::-;21517:34;21513:1;21505:6;21501:14;21494:58;21586:20;21581:2;21573:6;21569:15;21562:45;21377:237;:::o;21620:366::-;21762:3;21783:67;21847:2;21842:3;21783:67;:::i;:::-;21776:74;;21859:93;21948:3;21859:93;:::i;:::-;21977:2;21972:3;21968:12;21961:19;;21620:366;;;:::o;21992:419::-;22158:4;22196:2;22185:9;22181:18;22173:26;;22245:9;22239:4;22235:20;22231:1;22220:9;22216:17;22209:47;22273:131;22399:4;22273:131;:::i;:::-;22265:139;;21992:419;;;:::o;22417:225::-;22557:34;22553:1;22545:6;22541:14;22534:58;22626:8;22621:2;22613:6;22609:15;22602:33;22417:225;:::o;22648:366::-;22790:3;22811:67;22875:2;22870:3;22811:67;:::i;:::-;22804:74;;22887:93;22976:3;22887:93;:::i;:::-;23005:2;23000:3;22996:12;22989:19;;22648:366;;;:::o;23020:419::-;23186:4;23224:2;23213:9;23209:18;23201:26;;23273:9;23267:4;23263:20;23259:1;23248:9;23244:17;23237:47;23301:131;23427:4;23301:131;:::i;:::-;23293:139;;23020:419;;;:::o;23445:182::-;23585:34;23581:1;23573:6;23569:14;23562:58;23445:182;:::o;23633:366::-;23775:3;23796:67;23860:2;23855:3;23796:67;:::i;:::-;23789:74;;23872:93;23961:3;23872:93;:::i;:::-;23990:2;23985:3;23981:12;23974:19;;23633:366;;;:::o;24005:419::-;24171:4;24209:2;24198:9;24194:18;24186:26;;24258:9;24252:4;24248:20;24244:1;24233:9;24229:17;24222:47;24286:131;24412:4;24286:131;:::i;:::-;24278:139;;24005:419;;;:::o;24430:229::-;24570:34;24566:1;24558:6;24554:14;24547:58;24639:12;24634:2;24626:6;24622:15;24615:37;24430:229;:::o;24665:366::-;24807:3;24828:67;24892:2;24887:3;24828:67;:::i;:::-;24821:74;;24904:93;24993:3;24904:93;:::i;:::-;25022:2;25017:3;25013:12;25006:19;;24665:366;;;:::o;25037:419::-;25203:4;25241:2;25230:9;25226:18;25218:26;;25290:9;25284:4;25280:20;25276:1;25265:9;25261:17;25254:47;25318:131;25444:4;25318:131;:::i;:::-;25310:139;;25037:419;;;:::o;25462:143::-;25519:5;25550:6;25544:13;25535:22;;25566:33;25593:5;25566:33;:::i;:::-;25462:143;;;;:::o;25611:351::-;25681:6;25730:2;25718:9;25709:7;25705:23;25701:32;25698:119;;;25736:79;;:::i;:::-;25698:119;25856:1;25881:64;25937:7;25928:6;25917:9;25913:22;25881:64;:::i;:::-;25871:74;;25827:128;25611:351;;;;:::o;25968:177::-;26108:29;26104:1;26096:6;26092:14;26085:53;25968:177;:::o;26151:366::-;26293:3;26314:67;26378:2;26373:3;26314:67;:::i;:::-;26307:74;;26390:93;26479:3;26390:93;:::i;:::-;26508:2;26503:3;26499:12;26492:19;;26151:366;;;:::o;26523:419::-;26689:4;26727:2;26716:9;26712:18;26704:26;;26776:9;26770:4;26766:20;26762:1;26751:9;26747:17;26740:47;26804:131;26930:4;26804:131;:::i;:::-;26796:139;;26523:419;;;:::o;26948:223::-;27088:34;27084:1;27076:6;27072:14;27065:58;27157:6;27152:2;27144:6;27140:15;27133:31;26948:223;:::o;27177:366::-;27319:3;27340:67;27404:2;27399:3;27340:67;:::i;:::-;27333:74;;27416:93;27505:3;27416:93;:::i;:::-;27534:2;27529:3;27525:12;27518:19;;27177:366;;;:::o;27549:419::-;27715:4;27753:2;27742:9;27738:18;27730:26;;27802:9;27796:4;27792:20;27788:1;27777:9;27773:17;27766:47;27830:131;27956:4;27830:131;:::i;:::-;27822:139;;27549:419;;;:::o;27974:221::-;28114:34;28110:1;28102:6;28098:14;28091:58;28183:4;28178:2;28170:6;28166:15;28159:29;27974:221;:::o;28201:366::-;28343:3;28364:67;28428:2;28423:3;28364:67;:::i;:::-;28357:74;;28440:93;28529:3;28440:93;:::i;:::-;28558:2;28553:3;28549:12;28542:19;;28201:366;;;:::o;28573:419::-;28739:4;28777:2;28766:9;28762:18;28754:26;;28826:9;28820:4;28816:20;28812:1;28801:9;28797:17;28790:47;28854:131;28980:4;28854:131;:::i;:::-;28846:139;;28573:419;;;:::o;28998:182::-;29138:34;29134:1;29126:6;29122:14;29115:58;28998:182;:::o;29186:366::-;29328:3;29349:67;29413:2;29408:3;29349:67;:::i;:::-;29342:74;;29425:93;29514:3;29425:93;:::i;:::-;29543:2;29538:3;29534:12;29527:19;;29186:366;;;:::o;29558:419::-;29724:4;29762:2;29751:9;29747:18;29739:26;;29811:9;29805:4;29801:20;29797:1;29786:9;29782:17;29775:47;29839:131;29965:4;29839:131;:::i;:::-;29831:139;;29558:419;;;:::o;29983:224::-;30123:34;30119:1;30111:6;30107:14;30100:58;30192:7;30187:2;30179:6;30175:15;30168:32;29983:224;:::o;30213:366::-;30355:3;30376:67;30440:2;30435:3;30376:67;:::i;:::-;30369:74;;30452:93;30541:3;30452:93;:::i;:::-;30570:2;30565:3;30561:12;30554:19;;30213:366;;;:::o;30585:419::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:222::-;31150:34;31146:1;31138:6;31134:14;31127:58;31219:5;31214:2;31206:6;31202:15;31195:30;31010:222;:::o;31238:366::-;31380:3;31401:67;31465:2;31460:3;31401:67;:::i;:::-;31394:74;;31477:93;31566:3;31477:93;:::i;:::-;31595:2;31590:3;31586:12;31579:19;;31238:366;;;:::o;31610:419::-;31776:4;31814:2;31803:9;31799:18;31791:26;;31863:9;31857:4;31853:20;31849:1;31838:9;31834:17;31827:47;31891:131;32017:4;31891:131;:::i;:::-;31883:139;;31610:419;;;:::o;32035:172::-;32175:24;32171:1;32163:6;32159:14;32152:48;32035:172;:::o;32213:366::-;32355:3;32376:67;32440:2;32435:3;32376:67;:::i;:::-;32369:74;;32452:93;32541:3;32452:93;:::i;:::-;32570:2;32565:3;32561:12;32554:19;;32213:366;;;:::o;32585:419::-;32751:4;32789:2;32778:9;32774:18;32766:26;;32838:9;32832:4;32828:20;32824:1;32813:9;32809:17;32802:47;32866:131;32992:4;32866:131;:::i;:::-;32858:139;;32585:419;;;:::o;33010:297::-;33150:34;33146:1;33138:6;33134:14;33127:58;33219:34;33214:2;33206:6;33202:15;33195:59;33288:11;33283:2;33275:6;33271:15;33264:36;33010:297;:::o;33313:366::-;33455:3;33476:67;33540:2;33535:3;33476:67;:::i;:::-;33469:74;;33552:93;33641:3;33552:93;:::i;:::-;33670:2;33665:3;33661:12;33654:19;;33313:366;;;:::o;33685:419::-;33851:4;33889:2;33878:9;33874:18;33866:26;;33938:9;33932:4;33928:20;33924:1;33913:9;33909:17;33902:47;33966:131;34092:4;33966:131;:::i;:::-;33958:139;;33685:419;;;:::o;34110:240::-;34250:34;34246:1;34238:6;34234:14;34227:58;34319:23;34314:2;34306:6;34302:15;34295:48;34110:240;:::o;34356:366::-;34498:3;34519:67;34583:2;34578:3;34519:67;:::i;:::-;34512:74;;34595:93;34684:3;34595:93;:::i;:::-;34713:2;34708:3;34704:12;34697:19;;34356:366;;;:::o;34728:419::-;34894:4;34932:2;34921:9;34917:18;34909:26;;34981:9;34975:4;34971:20;34967:1;34956:9;34952:17;34945:47;35009:131;35135:4;35009:131;:::i;:::-;35001:139;;34728:419;;;:::o;35153:169::-;35293:21;35289:1;35281:6;35277:14;35270:45;35153:169;:::o;35328:366::-;35470:3;35491:67;35555:2;35550:3;35491:67;:::i;:::-;35484:74;;35567:93;35656:3;35567:93;:::i;:::-;35685:2;35680:3;35676:12;35669:19;;35328:366;;;:::o;35700:419::-;35866:4;35904:2;35893:9;35889:18;35881:26;;35953:9;35947:4;35943:20;35939:1;35928:9;35924:17;35917:47;35981:131;36107:4;35981:131;:::i;:::-;35973:139;;35700:419;;;:::o;36125:241::-;36265:34;36261:1;36253:6;36249:14;36242:58;36334:24;36329:2;36321:6;36317:15;36310:49;36125:241;:::o;36372:366::-;36514:3;36535:67;36599:2;36594:3;36535:67;:::i;:::-;36528:74;;36611:93;36700:3;36611:93;:::i;:::-;36729:2;36724:3;36720:12;36713:19;;36372:366;;;:::o;36744:419::-;36910:4;36948:2;36937:9;36933:18;36925:26;;36997:9;36991:4;36987:20;36983:1;36972:9;36968:17;36961:47;37025:131;37151:4;37025:131;:::i;:::-;37017:139;;36744:419;;;:::o;37169:191::-;37209:4;37229:20;37247:1;37229:20;:::i;:::-;37224:25;;37263:20;37281:1;37263:20;:::i;:::-;37258:25;;37302:1;37299;37296:8;37293:34;;;37307:18;;:::i;:::-;37293:34;37352:1;37349;37345:9;37337:17;;37169:191;;;;:::o;37366:220::-;37506:34;37502:1;37494:6;37490:14;37483:58;37575:3;37570:2;37562:6;37558:15;37551:28;37366:220;:::o;37592:366::-;37734:3;37755:67;37819:2;37814:3;37755:67;:::i;:::-;37748:74;;37831:93;37920:3;37831:93;:::i;:::-;37949:2;37944:3;37940:12;37933:19;;37592:366;;;:::o;37964:419::-;38130:4;38168:2;38157:9;38153:18;38145:26;;38217:9;38211:4;38207:20;38203:1;38192:9;38188:17;38181:47;38245:131;38371:4;38245:131;:::i;:::-;38237:139;;37964:419;;;:::o;38389:147::-;38490:11;38527:3;38512:18;;38389:147;;;;:::o;38542:114::-;;:::o;38662:398::-;38821:3;38842:83;38923:1;38918:3;38842:83;:::i;:::-;38835:90;;38934:93;39023:3;38934:93;:::i;:::-;39052:1;39047:3;39043:11;39036:18;;38662:398;;;:::o;39066:379::-;39250:3;39272:147;39415:3;39272:147;:::i;:::-;39265:154;;39436:3;39429:10;;39066:379;;;:::o;39451:180::-;39499:77;39496:1;39489:88;39596:4;39593:1;39586:15;39620:4;39617:1;39610:15;39637:143;39694:5;39725:6;39719:13;39710:22;;39741:33;39768:5;39741:33;:::i;:::-;39637:143;;;;:::o;39786:351::-;39856:6;39905:2;39893:9;39884:7;39880:23;39876:32;39873:119;;;39911:79;;:::i;:::-;39873:119;40031:1;40056:64;40112:7;40103:6;40092:9;40088:22;40056:64;:::i;:::-;40046:74;;40002:128;39786:351;;;;:::o;40143:85::-;40188:7;40217:5;40206:16;;40143:85;;;:::o;40234:158::-;40292:9;40325:61;40343:42;40352:32;40378:5;40352:32;:::i;:::-;40343:42;:::i;:::-;40325:61;:::i;:::-;40312:74;;40234:158;;;:::o;40398:147::-;40493:45;40532:5;40493:45;:::i;:::-;40488:3;40481:58;40398:147;;:::o;40551:114::-;40618:6;40652:5;40646:12;40636:22;;40551:114;;;:::o;40671:184::-;40770:11;40804:6;40799:3;40792:19;40844:4;40839:3;40835:14;40820:29;;40671:184;;;;:::o;40861:132::-;40928:4;40951:3;40943:11;;40981:4;40976:3;40972:14;40964:22;;40861:132;;;:::o;40999:108::-;41076:24;41094:5;41076:24;:::i;:::-;41071:3;41064:37;40999:108;;:::o;41113:179::-;41182:10;41203:46;41245:3;41237:6;41203:46;:::i;:::-;41281:4;41276:3;41272:14;41258:28;;41113:179;;;;:::o;41298:113::-;41368:4;41400;41395:3;41391:14;41383:22;;41298:113;;;:::o;41447:732::-;41566:3;41595:54;41643:5;41595:54;:::i;:::-;41665:86;41744:6;41739:3;41665:86;:::i;:::-;41658:93;;41775:56;41825:5;41775:56;:::i;:::-;41854:7;41885:1;41870:284;41895:6;41892:1;41889:13;41870:284;;;41971:6;41965:13;41998:63;42057:3;42042:13;41998:63;:::i;:::-;41991:70;;42084:60;42137:6;42084:60;:::i;:::-;42074:70;;41930:224;41917:1;41914;41910:9;41905:14;;41870:284;;;41874:14;42170:3;42163:10;;41571:608;;;41447:732;;;;:::o;42185:831::-;42448:4;42486:3;42475:9;42471:19;42463:27;;42500:71;42568:1;42557:9;42553:17;42544:6;42500:71;:::i;:::-;42581:80;42657:2;42646:9;42642:18;42633:6;42581:80;:::i;:::-;42708:9;42702:4;42698:20;42693:2;42682:9;42678:18;42671:48;42736:108;42839:4;42830:6;42736:108;:::i;:::-;42728:116;;42854:72;42922:2;42911:9;42907:18;42898:6;42854:72;:::i;:::-;42936:73;43004:3;42993:9;42989:19;42980:6;42936:73;:::i;:::-;42185:831;;;;;;;;:::o

Swarm Source

ipfs://29c8d3d06218164914d88a2e936cd94c79b38e03a330253c6676e1f5fab4af5f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.