ETH Price: $3,482.83 (-1.00%)
Gas: 3 Gwei

Token

Popcorn (POP)
 

Overview

Max Total Supply

150,000 POP

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,195.0206756591796875 POP

Value
$0.00
0x66AC79734663bBEd2D2A5AE88b76B1E8d3Af578f
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:
POPCORN

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-13
*/

// SPDX-License-Identifier: MIT

/**
 *  TG: https://t.me/popcorn_erc
 *  Twitter: https://twitter.com/popcorn0x0
 *  Medium: https://medium.com/@thepopcorntoken
 *  Website: http://popcornerc.com
 **/

pragma solidity 0.8.16;

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;
    }
}

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
     * transaction 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 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    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");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount)
        internal
        virtual
    {
        require(account != address(0), "ERC20: mint to the zero address");

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);
    }

    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);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

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

contract POPCORN is ERC20, Ownable {
    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    /******************/

    // 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 => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxTxnAmount(uint256 newAmount);
    event UpdatedMaxWallet(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("Popcorn", "POP") {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 5) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Goerli
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 150000 * 1e18;

        maxTxnAmount = (totalSupply * 1) / 100; // 1%
        maxWallet = (totalSupply * 2) / 100; // 2%
        swapTokensAtAmount = (totalSupply * 1) / 10000; // 0.01%

        buyOperationsFee = 1500;
        buyLiquidityFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee;

        sellOperationsFee = 3500;
        sellLiquidityFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee;

        operationsAddress = address(0xF177CE823744E07f899566b7cd188E40BbE83317);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(operationsAddress), true);

        _createInitialSupply(address(this), (totalSupply * 65) / 100); // Tokens for Liquidity
        _createInitialSupply(address(0xdead), (totalSupply * 23) / 100); // Burn at Launch
        _createInitialSupply(newOwner, (totalSupply * 12) / 100); // Influencing Kernels
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function restoreLimits() external onlyOwner {
        limitsInEffect = true;
    }

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            boughtEarly[wallets[i]] = flag;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / (10**decimals()),
            "Cannot set max buy amount lower than 0.2%"
        );
        maxTxnAmount = newNum * (10**decimals());
        emit UpdatedMaxTxnAmount(maxTxnAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 100) / (10**decimals()),
            "Cannot set max buy amount lower than 0.2%"
        );
        maxWallet = newNum * (10**decimals());
        emit UpdatedMaxWallet(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded)
        private
    {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        external
        onlyOwner
    {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _operationsFee,
        uint256 _liquidityFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
    }

    function updateSellFees(
        uint256 _operationsFee,
        uint256 _liquidityFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 2000, "Must keep fees at 20% or less");
    }

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

    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");
        require(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (blockForPenaltyEnd > 0) {
            require(
                !boughtEarly[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTxnAmount,
                        "Buy transfer amount exceeds the max txn."
                    );
                    require(
                        balanceOf(to) + amount <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTxnAmount,
                        "Sell transfer amount exceeds the max txn."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        balanceOf(to) + amount <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            if (contractTokenBalance > swapTokensAtAmount * 20) {
                contractTokenBalance = swapTokensAtAmount * 20;
            }

            swapTokensForEthAndSend(contractTokenBalance);

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        uint256 burnTokens = 0;
        uint256 liquidityTokens = 0;
        address currentLiquidityAddress;
        // only take fees on buys/sells, do not take on wallet transfers

        if (takeFee) {
            // bot/sniper penalty.
            if (
                earlyBuyPenaltyInEffect() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!boughtEarly[to]) {
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }
                currentLiquidityAddress = from;
                fees = (amount * 99) / 100;
                liquidityTokens = (fees * buyLiquidityFee) / buyTotalFees;
                burnTokens = (fees * buyBurnFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                currentLiquidityAddress = to;
                fees = (amount * sellTotalFees) / FEE_DIVISOR;
                liquidityTokens = (fees * sellLiquidityFee) / sellTotalFees;
                burnTokens = (fees * sellBurnFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                currentLiquidityAddress = from;
                fees = (amount * buyTotalFees) / FEE_DIVISOR;
                liquidityTokens = (fees * buyLiquidityFee) / buyTotalFees;
                burnTokens = (fees * buyBurnFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
                if (burnTokens > 0) {
                    _burn(address(this), burnTokens);
                }
                if (liquidityTokens > 0) {
                    super._transfer(
                        address(this),
                        currentLiquidityAddress,
                        liquidityTokens
                    );
                }
            }
            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEthAndSend(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(operationsAddress),
            block.timestamp
        );
    }

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function setOperationsAddress(address _operationsAddress)
        external
        onlyOwner
    {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
    }

    function resetTaxes() external onlyOwner {
        buyOperationsFee = 400;
        buyLiquidityFee = 100;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 400;
        sellLiquidityFee = 100;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
    }

    function addLP(bool confirmAddLp) external onlyOwner {
        require(confirmAddLp, "Please confirm adding of the LP");
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // add the liquidity
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function removeLP(uint256 percent) external onlyOwner {
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));

        require(lpBalance > 0, "No LP tokens in contract");

        uint256 lpAmount = (lpBalance * percent) / 10000;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function airdropToWallets(
        address[] memory wallets,
        uint256[] memory amountsInTokens
    ) external onlyOwner {
        require(
            wallets.length == amountsInTokens.length,
            "arrays must be the same length"
        );
        require(
            wallets.length < 200,
            "Can only airdrop 200 wallets per txn due to gas limits"
        ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(
            blocksForPenalty < 10,
            "Cannot make penalty blocks more than 10"
        );

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // add the liquidity

        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );

        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxTxnAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","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":"bool","name":"","type":"bool"}],"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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"buyOperationsFee","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":"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxnAmount","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":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellOperationsFee","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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":[],"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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600c556010805462ffffff191660019081179091556012805460ff1916909117905560076080908152662837b831b7b93760c91b60a052610100604052600360c0818152620504f560ec1b60e052906200005c838262000925565b5060046200006b828262000925565b5050506000620000806200052160201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620044c2833981519152908290a35033600046600103620000e55750737a250d5630b4cf539739df2c5dacb4c659f2488d62000157565b466005036200010a5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000157565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d79190620009f1565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002609190620009f1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d49190620009f1565b600980546001600160a01b0319166001600160a01b039290921691821790556200030090600162000525565b60095462000319906001600160a01b0316600162000588565b691fc3842bd1f071c0000060646200033382600162000a39565b6200033f919062000a5b565b60065560646200035182600262000a39565b6200035d919062000a5b565b6007556127106200037082600162000a39565b6200037c919062000a5b565b600a556105dc601481905560006015819055601681905590620003a190829062000a7e565b620003ad919062000a7e565b601355610dac601881905560006019819055601a81905590620003d290829062000a7e565b620003de919062000a7e565b601755600b80546001600160a01b03191673f177ce823744e07f899566b7cd188e40bbe833171790556200041483600162000525565b6200042130600162000525565b6200043061dead600162000525565b60085462000449906001600160a01b0316600162000525565b600b5462000462906001600160a01b0316600162000525565b6200046f836001620005f4565b6200047c306001620005f4565b6200048b61dead6001620005f4565b600854620004a4906001600160a01b03166001620005f4565b600b54620004bd906001600160a01b03166001620005f4565b620004e3306064620004d184604162000a39565b620004dd919062000a5b565b6200069e565b620004f961dead6064620004d184601762000a39565b6200050d836064620004d184600c62000a39565b620005188362000783565b50505062000a9a565b3390565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601d60205260409020805460ff1916821515179055620005b8828262000525565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200063f5760405162461bcd60e51b81526020600482018190526024820152600080516020620044a283398151915260448201526064016200014e565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006f65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200014e565b80600260008282546200070a919062000a7e565b90915550506001600160a01b038216600090815260208190526040812080548392906200073990849062000a7e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007ce5760405162461bcd60e51b81526020600482018190526024820152600080516020620044a283398151915260448201526064016200014e565b6001600160a01b038116620008355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200014e565b6005546040516001600160a01b03808416921690600080516020620044c283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008ab57607f821691505b602082108103620008cc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092057600081815260208120601f850160051c81016020861015620008fb5750805b601f850160051c820191505b818110156200091c5782815560010162000907565b5050505b505050565b81516001600160401b0381111562000941576200094162000880565b620009598162000952845462000896565b84620008d2565b602080601f831160018114620009915760008415620009785750858301515b600019600386901b1c1916600185901b1785556200091c565b600085815260208120601f198616915b82811015620009c257888601518255948401946001909101908401620009a1565b5085821015620009e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a0457600080fd5b81516001600160a01b038116811462000a1c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a565762000a5662000a23565b500290565b60008262000a7957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a945762000a9462000a23565b92915050565b6139f88062000aaa6000396000f3fe6080604052600436106103a65760003560e01c806395d89b41116101e7578063cf46f24c1161010d578063e884f260116100a0578063f2fde38b1161006f578063f2fde38b14610a7c578063f5648a4f14610a9c578063f637434214610ab1578063f8b45b0514610ac757600080fd5b8063e884f26014610a1b578063ee40166e14610a30578063efda116514610a46578063f11a24d314610a6657600080fd5b8063e2f45605116100dc578063e2f45605146109ba578063e71dc3f5146109d0578063e7b71ce2146109e6578063e800dff7146109fb57600080fd5b8063cf46f24c14610928578063d257b34f1461093e578063d85ba0631461095e578063dd62ed3e1461097457600080fd5b8063adb873bd11610185578063c024666811610154578063c0246668146108ae578063c17b5b8c146108ce578063c18bc195146108ee578063c876d0b91461090e57600080fd5b8063adb873bd14610829578063b62496f51461083f578063b98755391461086f578063bbc0c7421461088f57600080fd5b8063a28e86d3116101c1578063a28e86d3146107be578063a457c2d7146107d3578063a62068ce146107f3578063a9059cbb1461080957600080fd5b806395d89b41146107735780639a7a23d6146107885780639e93ad8e146107a857600080fd5b806358a6d531116102cc578063751039fc1161026a5780638366e79a116102395780638366e79a146106e557806385b12c7c1461070557806385ecfd28146107255780638da5cb5b1461075557600080fd5b8063751039fc146106705780637571336a146106855780638095d564146106a557806382aa7c68146106c557600080fd5b80636b0a894c116102a65780636b0a894c146106055780636ddd17131461061b57806370a082311461063b578063715018a61461065b57600080fd5b806358a6d531146105c25780635a139dd4146105d95780636a486a8e146105ef57600080fd5b80632307b44111610344578063452ed4f111610313578063452ed4f114610552578063499b8394146105725780634a62bb65146105925780634f77f6c0146105ac57600080fd5b80632307b441146104d657806323b872dd146104f6578063313ce56714610516578063395093511461053257600080fd5b806310d5de531161038057806310d5de5314610445578063130a2c3c1461047557806318160ddd14610497578063203e727e146104b657600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461041557600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610add565b6040516103d49190613118565b60405180910390f35b3480156103e957600080fd5b506008546103fd906001600160a01b031681565b6040516001600160a01b0390911681526020016103d4565b34801561042157600080fd5b5061043561043036600461317e565b610b6f565b60405190151581526020016103d4565b34801561045157600080fd5b506104356104603660046131aa565b601c6020526000908152604090205460ff1681565b34801561048157600080fd5b506104956104903660046131dc565b610b86565b005b3480156104a357600080fd5b506002545b6040519081526020016103d4565b3480156104c257600080fd5b506104956104d1366004613262565b610c30565b3480156104e257600080fd5b506104956104f1366004613351565b610d02565b34801561050257600080fd5b50610435610511366004613413565b610e5a565b34801561052257600080fd5b50604051601281526020016103d4565b34801561053e57600080fd5b5061043561054d36600461317e565b610f04565b34801561055e57600080fd5b506009546103fd906001600160a01b031681565b34801561057e57600080fd5b5061049561058d3660046131aa565b610f40565b34801561059e57600080fd5b506010546104359060ff1681565b3480156105b857600080fd5b506104a860185481565b3480156105ce57600080fd5b50600d544310610435565b3480156105e557600080fd5b506104a860145481565b3480156105fb57600080fd5b506104a860175481565b34801561061157600080fd5b506104a8600f5481565b34801561062757600080fd5b506010546104359062010000900460ff1681565b34801561064757600080fd5b506104a86106563660046131aa565b610ff1565b34801561066757600080fd5b5061049561100c565b34801561067c57600080fd5b50610495611080565b34801561069157600080fd5b506104956106a0366004613454565b6110eb565b3480156106b157600080fd5b506104956106c036600461348d565b6111b3565b3480156106d157600080fd5b506104956106e0366004613262565b611257565b3480156106f157600080fd5b506104356107003660046134b9565b61132a565b34801561071157600080fd5b50610495610720366004613262565b611533565b34801561073157600080fd5b506104356107403660046131aa565b600e6020526000908152604090205460ff1681565b34801561076157600080fd5b506005546001600160a01b03166103fd565b34801561077f57600080fd5b506103c761175a565b34801561079457600080fd5b506104956107a3366004613454565b611769565b3480156107b457600080fd5b506104a861271081565b3480156107ca57600080fd5b5061049561185d565b3480156107df57600080fd5b506104356107ee36600461317e565b611896565b3480156107ff57600080fd5b506104a8600d5481565b34801561081557600080fd5b5061043561082436600461317e565b61192f565b34801561083557600080fd5b506104a8601a5481565b34801561084b57600080fd5b5061043561085a3660046131aa565b601d6020526000908152604090205460ff1681565b34801561087b57600080fd5b5061049561088a3660046134e7565b61193c565b34801561089b57600080fd5b5060105461043590610100900460ff1681565b3480156108ba57600080fd5b506104956108c9366004613454565b6119fb565b3480156108da57600080fd5b506104956108e936600461348d565b611a84565b3480156108fa57600080fd5b50610495610909366004613262565b611b28565b34801561091a57600080fd5b506012546104359060ff1681565b34801561093457600080fd5b506104a860065481565b34801561094a57600080fd5b50610495610959366004613262565b611bf2565b34801561096a57600080fd5b506104a860135481565b34801561098057600080fd5b506104a861098f3660046134b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c657600080fd5b506104a8600a5481565b3480156109dc57600080fd5b506104a860165481565b3480156109f257600080fd5b50610495611d3d565b348015610a0757600080fd5b50610495610a16366004613454565b611d9f565b348015610a2757600080fd5b50610495611df4565b348015610a3c57600080fd5b506104a8600c5481565b348015610a5257600080fd5b50610495610a61366004613262565b611e2a565b348015610a7257600080fd5b506104a860155481565b348015610a8857600080fd5b50610495610a973660046131aa565b61202b565b348015610aa857600080fd5b50610495612116565b348015610abd57600080fd5b506104a860195481565b348015610ad357600080fd5b506104a860075481565b606060038054610aec90613504565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1890613504565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b5050505050905090565b6000610b7c338484612182565b5060015b92915050565b6005546001600160a01b03163314610bb95760405162461bcd60e51b8152600401610bb09061353e565b60405180910390fd5b60005b82811015610c2a5781600e6000868685818110610bdb57610bdb613573565b9050602002016020810190610bf091906131aa565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c228161359f565b915050610bbc565b50505050565b6005546001600160a01b03163314610c5a5760405162461bcd60e51b8152600401610bb09061353e565b610c666012600a61369c565b6103e8610c7260025490565b610c7d9060026136ab565b610c8791906136ca565b610c9191906136ca565b811015610cb05760405162461bcd60e51b8152600401610bb0906136ec565b610cbc6012600a61369c565b610cc690826136ab565b60068190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d78906020015b60405180910390a150565b6005546001600160a01b03163314610d2c5760405162461bcd60e51b8152600401610bb09061353e565b8051825114610d7d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bb0565b60c8825110610ded5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bb0565b60005b8251811015610e55576000838281518110610e0d57610e0d613573565b602002602001015190506000838381518110610e2b57610e2b613573565b60200260200101519050610e403383836122a7565b50508080610e4d9061359f565b915050610df0565b505050565b6000610e678484846123fc565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610eec5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb0565b610ef98533858403612182565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b7c918590610f3b908690613735565b612182565b6005546001600160a01b03163314610f6a5760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b038116610fcf5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bb0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110365760405162461bcd60e51b8152600401610bb09061353e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110aa5760405162461bcd60e51b8152600401610bb09061353e565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111155760405162461bcd60e51b8152600401610bb09061353e565b80611188576009546001600160a01b03908116908316036111885760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bb0565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610bb09061353e565b601483905560158290556016819055806111f78385613735565b6112019190613735565b60138190556105dc1015610e555760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b031633146112815760405162461bcd60e51b8152600401610bb09061353e565b601054610100900460ff16156112d95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bb0565b6010805462ffff0019166201010017905543600c8190556112fb908290613735565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146113575760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b0383166113ad5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bb0565b306001600160a01b038416036114055760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bb0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190613748565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190613761565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461155d5760405162461bcd60e51b8152600401610bb09061353e565b601054610100900460ff16156115855760405162461bcd60e51b8152600401610bb09061377e565b600a81106115e55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610bb0565b6010805462ffff0019166201010017905543600c819055611607908290613735565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116116535760405162461bcd60e51b8152600401610bb0906137c9565b600061165e30610ff1565b116116ba5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bb0565b6008546116d59030906001600160a01b0316610f3b82610ff1565b6008546001600160a01b031663f305d71947306116f181610ff1565b60008033426040518863ffffffff1660e01b81526004016117179695949392919061380c565b60606040518083038185885af1158015611735573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c2a9190613847565b606060048054610aec90613504565b6005546001600160a01b031633146117935760405162461bcd60e51b8152600401610bb09061353e565b6009546001600160a01b03908116908316036118175760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb0565b6118218282612dff565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118875760405162461bcd60e51b8152600401610bb09061353e565b6010805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb0565b6119253385858403612182565b5060019392505050565b6000610b7c3384846123fc565b6005546001600160a01b031633146119665760405162461bcd60e51b8152600401610bb09061353e565b806119b35760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610bb0565b601054610100900460ff16156119db5760405162461bcd60e51b8152600401610bb09061377e565b600047116116535760405162461bcd60e51b8152600401610bb0906137c9565b6005546001600160a01b03163314611a255760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611aae5760405162461bcd60e51b8152600401610bb09061353e565b60188390556019829055601a81905580611ac88385613735565b611ad29190613735565b60178190556107d01015610e555760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b03163314611b525760405162461bcd60e51b8152600401610bb09061353e565b611b5e6012600a61369c565b6064611b6960025490565b611b749060016136ab565b611b7e91906136ca565b611b8891906136ca565b811015611ba75760405162461bcd60e51b8152600401610bb0906136ec565b611bb36012600a61369c565b611bbd90826136ab565b60078190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610cf7565b6005546001600160a01b03163314611c1c5760405162461bcd60e51b8152600401610bb09061353e565b620186a0611c2960025490565b611c349060016136ab565b611c3e91906136ca565b811015611cab5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb0565b6103e8611cb760025490565b611cc29060016136ab565b611ccc91906136ca565b811115611d385760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bb0565b600a55565b6005546001600160a01b03163314611d675760405162461bcd60e51b8152600401610bb09061353e565b610190601481905560646015819055611d7f91613735565b601355610190601881905560646019819055611d9a91613735565b601755565b6005546001600160a01b03163314611dc95760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e1e5760405162461bcd60e51b8152600401610bb09061353e565b6012805460ff19169055565b6005546001600160a01b03163314611e545760405162461bcd60e51b8152600401610bb09061353e565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec19190613748565b905060008111611f135760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610bb0565b6000612710611f2284846136ab565b611f2c91906136ca565b60095460085460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa79190613761565b50600854604051629d473b60e21b81526001600160a01b03909116906302751cec90611fe2903090859060019081903390429060040161380c565b60408051808303816000875af1158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190613875565b5050505050565b6005546001600160a01b031633146120555760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b0381166120ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121405760405162461bcd60e51b8152600401610bb09061353e565b604051600090339047908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b6001600160a01b0383166121e45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb0565b6001600160a01b0382166122455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122cd5760405162461bcd60e51b8152600401610bb090613899565b6001600160a01b0382166122f35760405162461bcd60e51b8152600401610bb0906138de565b6001600160a01b0383166000908152602081905260409020548181101561236b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123a2908490613735565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123ee91815260200190565b60405180910390a350505050565b6001600160a01b0383166124225760405162461bcd60e51b8152600401610bb090613899565b6001600160a01b0382166124485760405162461bcd60e51b8152600401610bb0906138de565b600081116124985760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb0565b601054610100900460ff1661252b576001600160a01b0383166000908152601b602052604090205460ff16806124e657506001600160a01b0382166000908152601b602052604090205460ff165b61252b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb0565b600d54156125fe576001600160a01b0383166000908152600e602052604090205460ff16158061256857506005546001600160a01b038381169116145b8061257d57506001600160a01b03821661dead145b6125fe5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bb0565b60105460ff16156129f1576005546001600160a01b0384811691161480159061263557506005546001600160a01b03838116911614155b801561264957506001600160a01b03821615155b801561266057506001600160a01b03821661dead14155b801561268557506001600160a01b0383166000908152601b602052604090205460ff16155b80156126aa57506001600160a01b0382166000908152601b602052604090205460ff16155b156129f15760125460ff16156127c3576008546001600160a01b038381169116148015906126e657506009546001600160a01b03838116911614155b156127c3576126f6600243613921565b326000908152601160205260409020541080156127345750612719600243613921565b6001600160a01b038316600090815260116020526040902054105b61279e5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bb0565b3260009081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601d602052604090205460ff16801561280457506001600160a01b0382166000908152601c602052604090205460ff16155b156128cc5760065481111561286c5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc103a3c371760c11b6064820152608401610bb0565b6007548161287984610ff1565b6128839190613735565b11156128c75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b6129f1565b6001600160a01b0382166000908152601d602052604090205460ff16801561290d57506001600160a01b0383166000908152601c602052604090205460ff16155b15612976576006548111156128c75760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152681036b0bc103a3c371760b91b6064820152608401610bb0565b6001600160a01b0382166000908152601c602052604090205460ff166129f157600754816129a384610ff1565b6129ad9190613735565b11156129f15760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b60006129fc30610ff1565b600a5490915081108015908190612a1b575060105462010000900460ff165b8015612a315750600954600160a01b900460ff16155b8015612a5657506001600160a01b0385166000908152601d602052604090205460ff16155b8015612a7b57506001600160a01b0385166000908152601b602052604090205460ff16155b8015612aa057506001600160a01b0384166000908152601b602052604090205460ff16155b15612af5576009805460ff60a01b1916600160a01b179055600a54612ac69060146136ab565b821115612ade57600a54612adb9060146136ab565b91505b612ae782612e2d565b6009805460ff60a01b191690555b6001600160a01b0385166000908152601b602052604090205460019060ff1680612b3757506001600160a01b0385166000908152601b602052604090205460ff165b15612b40575060005b6000806000808415612de857600d5443108015612b7557506001600160a01b038a166000908152601d602052604090205460ff165b8015612b9a57506001600160a01b0389166000908152601d602052604090205460ff16155b8015612ba857506000601354115b15612ca2576001600160a01b0389166000908152600e602052604090205460ff16612c48576001600160a01b0389166000908152600e60205260408120805460ff19166001908117909155600f805491929091612c06908490613735565b90915550506040516001600160a01b038a1681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b50886064612c578960636136ab565b612c6191906136ca565b935060135460155485612c7491906136ab565b612c7e91906136ca565b915060135460165485612c9191906136ab565b612c9b91906136ca565b9250612da9565b6001600160a01b0389166000908152601d602052604090205460ff168015612ccc57506000601754115b15612d1f5788905061271060175489612ce591906136ab565b612cef91906136ca565b935060175460195485612d0291906136ab565b612d0c91906136ca565b9150601754601a5485612c9191906136ab565b6001600160a01b038a166000908152601d602052604090205460ff168015612d4957506000601354115b15612da95789905061271060135489612d6291906136ab565b612d6c91906136ca565b935060135460155485612d7f91906136ab565b612d8991906136ca565b915060135460165485612d9c91906136ab565b612da691906136ca565b92505b8315612ddb57612dba8a30866122a7565b8215612dca57612dca3084612f8b565b8115612ddb57612ddb3082846122a7565b612de58489613921565b97505b612df38a8a8a6122a7565b50505050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff191682151517905561182182826130b5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e6257612e62613573565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edf9190613934565b81600181518110612ef257612ef2613573565b6001600160a01b039283166020918202929092010152600854612f189130911684612182565b600854600b5460405163791ac94760e01b81526001600160a01b039283169263791ac94792612f5592879260009288929116904290600401613951565b600060405180830381600087803b158015612f6f57600080fd5b505af1158015612f83573d6000803e3d6000fd5b505050505050565b6001600160a01b038216612feb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bb0565b6001600160a01b0382166000908152602081905260409020548181101561305f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bb0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161229a565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561314557858101830151858201604001528201613129565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461317b57600080fd5b50565b6000806040838503121561319157600080fd5b823561319c81613166565b946020939093013593505050565b6000602082840312156131bc57600080fd5b81356131c781613166565b9392505050565b801515811461317b57600080fd5b6000806000604084860312156131f157600080fd5b833567ffffffffffffffff8082111561320957600080fd5b818601915086601f83011261321d57600080fd5b81358181111561322c57600080fd5b8760208260051b850101111561324157600080fd5b60209283019550935050840135613257816131ce565b809150509250925092565b60006020828403121561327457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132ba576132ba61327b565b604052919050565b600067ffffffffffffffff8211156132dc576132dc61327b565b5060051b60200190565b600082601f8301126132f757600080fd5b8135602061330c613307836132c2565b613291565b82815260059290921b8401810191818101908684111561332b57600080fd5b8286015b84811015613346578035835291830191830161332f565b509695505050505050565b6000806040838503121561336457600080fd5b823567ffffffffffffffff8082111561337c57600080fd5b818501915085601f83011261339057600080fd5b813560206133a0613307836132c2565b82815260059290921b840181019181810190898411156133bf57600080fd5b948201945b838610156133e65785356133d781613166565b825294820194908201906133c4565b965050860135925050808211156133fc57600080fd5b50613409858286016132e6565b9150509250929050565b60008060006060848603121561342857600080fd5b833561343381613166565b9250602084013561344381613166565b929592945050506040919091013590565b6000806040838503121561346757600080fd5b823561347281613166565b91506020830135613482816131ce565b809150509250929050565b6000806000606084860312156134a257600080fd5b505081359360208301359350604090920135919050565b600080604083850312156134cc57600080fd5b82356134d781613166565b9150602083013561348281613166565b6000602082840312156134f957600080fd5b81356131c7816131ce565b600181811c9082168061351857607f821691505b60208210810361353857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016135b1576135b1613589565b5060010190565b600181815b808511156135f35781600019048211156135d9576135d9613589565b808516156135e657918102915b93841c93908002906135bd565b509250929050565b60008261360a57506001610b80565b8161361757506000610b80565b816001811461362d576002811461363757613653565b6001915050610b80565b60ff84111561364857613648613589565b50506001821b610b80565b5060208310610133831016604e8410600b8410161715613676575081810a610b80565b61368083836135b8565b806000190482111561369457613694613589565b029392505050565b60006131c760ff8416836135fb565b60008160001904831182151516156136c5576136c5613589565b500290565b6000826136e757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e322560b81b606082015260800190565b80820180821115610b8057610b80613589565b60006020828403121561375a57600080fd5b5051919050565b60006020828403121561377357600080fd5b81516131c7816131ce565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561385c57600080fd5b8351925060208401519150604084015190509250925092565b6000806040838503121561388857600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8057610b80613589565b60006020828403121561394657600080fd5b81516131c781613166565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139a15784516001600160a01b03168352938301939183019160010161397c565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122000325d9b91ee1fb8a0bff40730ad303132021fa43977dc071de844761aa31fb964736f6c634300081000334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806395d89b41116101e7578063cf46f24c1161010d578063e884f260116100a0578063f2fde38b1161006f578063f2fde38b14610a7c578063f5648a4f14610a9c578063f637434214610ab1578063f8b45b0514610ac757600080fd5b8063e884f26014610a1b578063ee40166e14610a30578063efda116514610a46578063f11a24d314610a6657600080fd5b8063e2f45605116100dc578063e2f45605146109ba578063e71dc3f5146109d0578063e7b71ce2146109e6578063e800dff7146109fb57600080fd5b8063cf46f24c14610928578063d257b34f1461093e578063d85ba0631461095e578063dd62ed3e1461097457600080fd5b8063adb873bd11610185578063c024666811610154578063c0246668146108ae578063c17b5b8c146108ce578063c18bc195146108ee578063c876d0b91461090e57600080fd5b8063adb873bd14610829578063b62496f51461083f578063b98755391461086f578063bbc0c7421461088f57600080fd5b8063a28e86d3116101c1578063a28e86d3146107be578063a457c2d7146107d3578063a62068ce146107f3578063a9059cbb1461080957600080fd5b806395d89b41146107735780639a7a23d6146107885780639e93ad8e146107a857600080fd5b806358a6d531116102cc578063751039fc1161026a5780638366e79a116102395780638366e79a146106e557806385b12c7c1461070557806385ecfd28146107255780638da5cb5b1461075557600080fd5b8063751039fc146106705780637571336a146106855780638095d564146106a557806382aa7c68146106c557600080fd5b80636b0a894c116102a65780636b0a894c146106055780636ddd17131461061b57806370a082311461063b578063715018a61461065b57600080fd5b806358a6d531146105c25780635a139dd4146105d95780636a486a8e146105ef57600080fd5b80632307b44111610344578063452ed4f111610313578063452ed4f114610552578063499b8394146105725780634a62bb65146105925780634f77f6c0146105ac57600080fd5b80632307b441146104d657806323b872dd146104f6578063313ce56714610516578063395093511461053257600080fd5b806310d5de531161038057806310d5de5314610445578063130a2c3c1461047557806318160ddd14610497578063203e727e146104b657600080fd5b806306fdde03146103b25780630758d924146103dd578063095ea7b31461041557600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610add565b6040516103d49190613118565b60405180910390f35b3480156103e957600080fd5b506008546103fd906001600160a01b031681565b6040516001600160a01b0390911681526020016103d4565b34801561042157600080fd5b5061043561043036600461317e565b610b6f565b60405190151581526020016103d4565b34801561045157600080fd5b506104356104603660046131aa565b601c6020526000908152604090205460ff1681565b34801561048157600080fd5b506104956104903660046131dc565b610b86565b005b3480156104a357600080fd5b506002545b6040519081526020016103d4565b3480156104c257600080fd5b506104956104d1366004613262565b610c30565b3480156104e257600080fd5b506104956104f1366004613351565b610d02565b34801561050257600080fd5b50610435610511366004613413565b610e5a565b34801561052257600080fd5b50604051601281526020016103d4565b34801561053e57600080fd5b5061043561054d36600461317e565b610f04565b34801561055e57600080fd5b506009546103fd906001600160a01b031681565b34801561057e57600080fd5b5061049561058d3660046131aa565b610f40565b34801561059e57600080fd5b506010546104359060ff1681565b3480156105b857600080fd5b506104a860185481565b3480156105ce57600080fd5b50600d544310610435565b3480156105e557600080fd5b506104a860145481565b3480156105fb57600080fd5b506104a860175481565b34801561061157600080fd5b506104a8600f5481565b34801561062757600080fd5b506010546104359062010000900460ff1681565b34801561064757600080fd5b506104a86106563660046131aa565b610ff1565b34801561066757600080fd5b5061049561100c565b34801561067c57600080fd5b50610495611080565b34801561069157600080fd5b506104956106a0366004613454565b6110eb565b3480156106b157600080fd5b506104956106c036600461348d565b6111b3565b3480156106d157600080fd5b506104956106e0366004613262565b611257565b3480156106f157600080fd5b506104356107003660046134b9565b61132a565b34801561071157600080fd5b50610495610720366004613262565b611533565b34801561073157600080fd5b506104356107403660046131aa565b600e6020526000908152604090205460ff1681565b34801561076157600080fd5b506005546001600160a01b03166103fd565b34801561077f57600080fd5b506103c761175a565b34801561079457600080fd5b506104956107a3366004613454565b611769565b3480156107b457600080fd5b506104a861271081565b3480156107ca57600080fd5b5061049561185d565b3480156107df57600080fd5b506104356107ee36600461317e565b611896565b3480156107ff57600080fd5b506104a8600d5481565b34801561081557600080fd5b5061043561082436600461317e565b61192f565b34801561083557600080fd5b506104a8601a5481565b34801561084b57600080fd5b5061043561085a3660046131aa565b601d6020526000908152604090205460ff1681565b34801561087b57600080fd5b5061049561088a3660046134e7565b61193c565b34801561089b57600080fd5b5060105461043590610100900460ff1681565b3480156108ba57600080fd5b506104956108c9366004613454565b6119fb565b3480156108da57600080fd5b506104956108e936600461348d565b611a84565b3480156108fa57600080fd5b50610495610909366004613262565b611b28565b34801561091a57600080fd5b506012546104359060ff1681565b34801561093457600080fd5b506104a860065481565b34801561094a57600080fd5b50610495610959366004613262565b611bf2565b34801561096a57600080fd5b506104a860135481565b34801561098057600080fd5b506104a861098f3660046134b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c657600080fd5b506104a8600a5481565b3480156109dc57600080fd5b506104a860165481565b3480156109f257600080fd5b50610495611d3d565b348015610a0757600080fd5b50610495610a16366004613454565b611d9f565b348015610a2757600080fd5b50610495611df4565b348015610a3c57600080fd5b506104a8600c5481565b348015610a5257600080fd5b50610495610a61366004613262565b611e2a565b348015610a7257600080fd5b506104a860155481565b348015610a8857600080fd5b50610495610a973660046131aa565b61202b565b348015610aa857600080fd5b50610495612116565b348015610abd57600080fd5b506104a860195481565b348015610ad357600080fd5b506104a860075481565b606060038054610aec90613504565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1890613504565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b5050505050905090565b6000610b7c338484612182565b5060015b92915050565b6005546001600160a01b03163314610bb95760405162461bcd60e51b8152600401610bb09061353e565b60405180910390fd5b60005b82811015610c2a5781600e6000868685818110610bdb57610bdb613573565b9050602002016020810190610bf091906131aa565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c228161359f565b915050610bbc565b50505050565b6005546001600160a01b03163314610c5a5760405162461bcd60e51b8152600401610bb09061353e565b610c666012600a61369c565b6103e8610c7260025490565b610c7d9060026136ab565b610c8791906136ca565b610c9191906136ca565b811015610cb05760405162461bcd60e51b8152600401610bb0906136ec565b610cbc6012600a61369c565b610cc690826136ab565b60068190556040519081527f89c099a4e6d77f9ed9839689924c080dcc270b4bc837e2d8979544f19df27d78906020015b60405180910390a150565b6005546001600160a01b03163314610d2c5760405162461bcd60e51b8152600401610bb09061353e565b8051825114610d7d5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610bb0565b60c8825110610ded5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610bb0565b60005b8251811015610e55576000838281518110610e0d57610e0d613573565b602002602001015190506000838381518110610e2b57610e2b613573565b60200260200101519050610e403383836122a7565b50508080610e4d9061359f565b915050610df0565b505050565b6000610e678484846123fc565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610eec5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bb0565b610ef98533858403612182565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b7c918590610f3b908690613735565b612182565b6005546001600160a01b03163314610f6a5760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b038116610fcf5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bb0565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110365760405162461bcd60e51b8152600401610bb09061353e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110aa5760405162461bcd60e51b8152600401610bb09061353e565b6010805460ff199081169091556012805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146111155760405162461bcd60e51b8152600401610bb09061353e565b80611188576009546001600160a01b03908116908316036111885760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bb0565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610bb09061353e565b601483905560158290556016819055806111f78385613735565b6112019190613735565b60138190556105dc1015610e555760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b031633146112815760405162461bcd60e51b8152600401610bb09061353e565b601054610100900460ff16156112d95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bb0565b6010805462ffff0019166201010017905543600c8190556112fb908290613735565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146113575760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b0383166113ad5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bb0565b306001600160a01b038416036114055760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610bb0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561144c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114709190613748565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190613761565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461155d5760405162461bcd60e51b8152600401610bb09061353e565b601054610100900460ff16156115855760405162461bcd60e51b8152600401610bb09061377e565b600a81106115e55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610bb0565b6010805462ffff0019166201010017905543600c819055611607908290613735565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116116535760405162461bcd60e51b8152600401610bb0906137c9565b600061165e30610ff1565b116116ba5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bb0565b6008546116d59030906001600160a01b0316610f3b82610ff1565b6008546001600160a01b031663f305d71947306116f181610ff1565b60008033426040518863ffffffff1660e01b81526004016117179695949392919061380c565b60606040518083038185885af1158015611735573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c2a9190613847565b606060048054610aec90613504565b6005546001600160a01b031633146117935760405162461bcd60e51b8152600401610bb09061353e565b6009546001600160a01b03908116908316036118175760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bb0565b6118218282612dff565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146118875760405162461bcd60e51b8152600401610bb09061353e565b6010805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bb0565b6119253385858403612182565b5060019392505050565b6000610b7c3384846123fc565b6005546001600160a01b031633146119665760405162461bcd60e51b8152600401610bb09061353e565b806119b35760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610bb0565b601054610100900460ff16156119db5760405162461bcd60e51b8152600401610bb09061377e565b600047116116535760405162461bcd60e51b8152600401610bb0906137c9565b6005546001600160a01b03163314611a255760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611aae5760405162461bcd60e51b8152600401610bb09061353e565b60188390556019829055601a81905580611ac88385613735565b611ad29190613735565b60178190556107d01015610e555760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610bb0565b6005546001600160a01b03163314611b525760405162461bcd60e51b8152600401610bb09061353e565b611b5e6012600a61369c565b6064611b6960025490565b611b749060016136ab565b611b7e91906136ca565b611b8891906136ca565b811015611ba75760405162461bcd60e51b8152600401610bb0906136ec565b611bb36012600a61369c565b611bbd90826136ab565b60078190556040519081527f3046ad62de8b70d396246aaed19ff2559ff20df8706520cbde58320766c4276290602001610cf7565b6005546001600160a01b03163314611c1c5760405162461bcd60e51b8152600401610bb09061353e565b620186a0611c2960025490565b611c349060016136ab565b611c3e91906136ca565b811015611cab5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bb0565b6103e8611cb760025490565b611cc29060016136ab565b611ccc91906136ca565b811115611d385760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bb0565b600a55565b6005546001600160a01b03163314611d675760405162461bcd60e51b8152600401610bb09061353e565b610190601481905560646015819055611d7f91613735565b601355610190601881905560646019819055611d9a91613735565b601755565b6005546001600160a01b03163314611dc95760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e1e5760405162461bcd60e51b8152600401610bb09061353e565b6012805460ff19169055565b6005546001600160a01b03163314611e545760405162461bcd60e51b8152600401610bb09061353e565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec19190613748565b905060008111611f135760405162461bcd60e51b815260206004820152601860248201527f4e6f204c5020746f6b656e7320696e20636f6e747261637400000000000000006044820152606401610bb0565b6000612710611f2284846136ab565b611f2c91906136ca565b60095460085460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015611f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa79190613761565b50600854604051629d473b60e21b81526001600160a01b03909116906302751cec90611fe2903090859060019081903390429060040161380c565b60408051808303816000875af1158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190613875565b5050505050565b6005546001600160a01b031633146120555760405162461bcd60e51b8152600401610bb09061353e565b6001600160a01b0381166120ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121405760405162461bcd60e51b8152600401610bb09061353e565b604051600090339047908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b6001600160a01b0383166121e45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb0565b6001600160a01b0382166122455760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bb0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122cd5760405162461bcd60e51b8152600401610bb090613899565b6001600160a01b0382166122f35760405162461bcd60e51b8152600401610bb0906138de565b6001600160a01b0383166000908152602081905260409020548181101561236b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bb0565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906123a2908490613735565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123ee91815260200190565b60405180910390a350505050565b6001600160a01b0383166124225760405162461bcd60e51b8152600401610bb090613899565b6001600160a01b0382166124485760405162461bcd60e51b8152600401610bb0906138de565b600081116124985760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb0565b601054610100900460ff1661252b576001600160a01b0383166000908152601b602052604090205460ff16806124e657506001600160a01b0382166000908152601b602052604090205460ff165b61252b5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bb0565b600d54156125fe576001600160a01b0383166000908152600e602052604090205460ff16158061256857506005546001600160a01b038381169116145b8061257d57506001600160a01b03821661dead145b6125fe5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610bb0565b60105460ff16156129f1576005546001600160a01b0384811691161480159061263557506005546001600160a01b03838116911614155b801561264957506001600160a01b03821615155b801561266057506001600160a01b03821661dead14155b801561268557506001600160a01b0383166000908152601b602052604090205460ff16155b80156126aa57506001600160a01b0382166000908152601b602052604090205460ff16155b156129f15760125460ff16156127c3576008546001600160a01b038381169116148015906126e657506009546001600160a01b03838116911614155b156127c3576126f6600243613921565b326000908152601160205260409020541080156127345750612719600243613921565b6001600160a01b038316600090815260116020526040902054105b61279e5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610bb0565b3260009081526011602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601d602052604090205460ff16801561280457506001600160a01b0382166000908152601c602052604090205460ff16155b156128cc5760065481111561286c5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc103a3c371760c11b6064820152608401610bb0565b6007548161287984610ff1565b6128839190613735565b11156128c75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b6129f1565b6001600160a01b0382166000908152601d602052604090205460ff16801561290d57506001600160a01b0383166000908152601c602052604090205460ff16155b15612976576006548111156128c75760405162461bcd60e51b815260206004820152602960248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152681036b0bc103a3c371760b91b6064820152608401610bb0565b6001600160a01b0382166000908152601c602052604090205460ff166129f157600754816129a384610ff1565b6129ad9190613735565b11156129f15760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bb0565b60006129fc30610ff1565b600a5490915081108015908190612a1b575060105462010000900460ff165b8015612a315750600954600160a01b900460ff16155b8015612a5657506001600160a01b0385166000908152601d602052604090205460ff16155b8015612a7b57506001600160a01b0385166000908152601b602052604090205460ff16155b8015612aa057506001600160a01b0384166000908152601b602052604090205460ff16155b15612af5576009805460ff60a01b1916600160a01b179055600a54612ac69060146136ab565b821115612ade57600a54612adb9060146136ab565b91505b612ae782612e2d565b6009805460ff60a01b191690555b6001600160a01b0385166000908152601b602052604090205460019060ff1680612b3757506001600160a01b0385166000908152601b602052604090205460ff165b15612b40575060005b6000806000808415612de857600d5443108015612b7557506001600160a01b038a166000908152601d602052604090205460ff165b8015612b9a57506001600160a01b0389166000908152601d602052604090205460ff16155b8015612ba857506000601354115b15612ca2576001600160a01b0389166000908152600e602052604090205460ff16612c48576001600160a01b0389166000908152600e60205260408120805460ff19166001908117909155600f805491929091612c06908490613735565b90915550506040516001600160a01b038a1681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b50886064612c578960636136ab565b612c6191906136ca565b935060135460155485612c7491906136ab565b612c7e91906136ca565b915060135460165485612c9191906136ab565b612c9b91906136ca565b9250612da9565b6001600160a01b0389166000908152601d602052604090205460ff168015612ccc57506000601754115b15612d1f5788905061271060175489612ce591906136ab565b612cef91906136ca565b935060175460195485612d0291906136ab565b612d0c91906136ca565b9150601754601a5485612c9191906136ab565b6001600160a01b038a166000908152601d602052604090205460ff168015612d4957506000601354115b15612da95789905061271060135489612d6291906136ab565b612d6c91906136ca565b935060135460155485612d7f91906136ab565b612d8991906136ca565b915060135460165485612d9c91906136ab565b612da691906136ca565b92505b8315612ddb57612dba8a30866122a7565b8215612dca57612dca3084612f8b565b8115612ddb57612ddb3082846122a7565b612de58489613921565b97505b612df38a8a8a6122a7565b50505050505050505050565b6001600160a01b0382166000908152601d60205260409020805460ff191682151517905561182182826130b5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e6257612e62613573565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edf9190613934565b81600181518110612ef257612ef2613573565b6001600160a01b039283166020918202929092010152600854612f189130911684612182565b600854600b5460405163791ac94760e01b81526001600160a01b039283169263791ac94792612f5592879260009288929116904290600401613951565b600060405180830381600087803b158015612f6f57600080fd5b505af1158015612f83573d6000803e3d6000fd5b505050505050565b6001600160a01b038216612feb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bb0565b6001600160a01b0382166000908152602081905260409020548181101561305f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bb0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161229a565b6001600160a01b0382166000818152601c6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b8181101561314557858101830151858201604001528201613129565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461317b57600080fd5b50565b6000806040838503121561319157600080fd5b823561319c81613166565b946020939093013593505050565b6000602082840312156131bc57600080fd5b81356131c781613166565b9392505050565b801515811461317b57600080fd5b6000806000604084860312156131f157600080fd5b833567ffffffffffffffff8082111561320957600080fd5b818601915086601f83011261321d57600080fd5b81358181111561322c57600080fd5b8760208260051b850101111561324157600080fd5b60209283019550935050840135613257816131ce565b809150509250925092565b60006020828403121561327457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132ba576132ba61327b565b604052919050565b600067ffffffffffffffff8211156132dc576132dc61327b565b5060051b60200190565b600082601f8301126132f757600080fd5b8135602061330c613307836132c2565b613291565b82815260059290921b8401810191818101908684111561332b57600080fd5b8286015b84811015613346578035835291830191830161332f565b509695505050505050565b6000806040838503121561336457600080fd5b823567ffffffffffffffff8082111561337c57600080fd5b818501915085601f83011261339057600080fd5b813560206133a0613307836132c2565b82815260059290921b840181019181810190898411156133bf57600080fd5b948201945b838610156133e65785356133d781613166565b825294820194908201906133c4565b965050860135925050808211156133fc57600080fd5b50613409858286016132e6565b9150509250929050565b60008060006060848603121561342857600080fd5b833561343381613166565b9250602084013561344381613166565b929592945050506040919091013590565b6000806040838503121561346757600080fd5b823561347281613166565b91506020830135613482816131ce565b809150509250929050565b6000806000606084860312156134a257600080fd5b505081359360208301359350604090920135919050565b600080604083850312156134cc57600080fd5b82356134d781613166565b9150602083013561348281613166565b6000602082840312156134f957600080fd5b81356131c7816131ce565b600181811c9082168061351857607f821691505b60208210810361353857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016135b1576135b1613589565b5060010190565b600181815b808511156135f35781600019048211156135d9576135d9613589565b808516156135e657918102915b93841c93908002906135bd565b509250929050565b60008261360a57506001610b80565b8161361757506000610b80565b816001811461362d576002811461363757613653565b6001915050610b80565b60ff84111561364857613648613589565b50506001821b610b80565b5060208310610133831016604e8410600b8410161715613676575081810a610b80565b61368083836135b8565b806000190482111561369457613694613589565b029392505050565b60006131c760ff8416836135fb565b60008160001904831182151516156136c5576136c5613589565b500290565b6000826136e757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e322560b81b606082015260800190565b80820180821115610b8057610b80613589565b60006020828403121561375a57600080fd5b5051919050565b60006020828403121561377357600080fd5b81516131c7816131ce565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561385c57600080fd5b8351925060208401519150604084015190509250925092565b6000806040838503121561388857600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b8057610b80613589565b60006020828403121561394657600080fd5b81516131c781613166565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139a15784516001600160a01b03168352938301939183019160010161397c565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122000325d9b91ee1fb8a0bff40730ad303132021fa43977dc071de844761aa31fb964736f6c63430008100033

Deployed Bytecode Sourcemap

11086:21148:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4202:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11195:27;;;;;;;;;;-1:-1:-1;11195:27:0;;;;-1:-1:-1;;;;;11195:27:0;;;;;;-1:-1:-1;;;;;749:32:1;;;731:51;;719:2;704:18;11195:27:0;567:221:1;5257:210:0;;;;;;;;;;-1:-1:-1;5257:210:0;;;;;:::i;:::-;;:::i;:::-;;;1414:14:1;;1407:22;1389:41;;1377:2;1362:18;5257:210:0;1249:187:1;12392:63:0;;;;;;;;;;-1:-1:-1;12392:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16657:232;;;;;;;;;;-1:-1:-1;16657:232:0;;;;;:::i;:::-;;:::i;:::-;;4523:108;;;;;;;;;;-1:-1:-1;4611:12:0;;4523:108;;;2717:25:1;;;2705:2;2690:18;4523:108:0;2571:177:1;17056:330:0;;;;;;;;;;-1:-1:-1;17056:330:0;;;;;:::i;:::-;;:::i;30338:719::-;;;;;;;;;;-1:-1:-1;30338:719:0;;;;;:::i;:::-;;:::i;5475:529::-;;;;;;;;;;-1:-1:-1;5475:529:0;;;;;:::i;:::-;;:::i;4422:93::-;;;;;;;;;;-1:-1:-1;4422:93:0;;4505:2;6028:36:1;;6016:2;6001:18;4422:93:0;5886:184:1;6012:297:0;;;;;;;;;;-1:-1:-1;6012:297:0;;;;;:::i;:::-;;:::i;11229:21::-;;;;;;;;;;-1:-1:-1;11229:21:0;;;;-1:-1:-1;;;;;11229:21:0;;;28180:297;;;;;;;;;;-1:-1:-1;28180:297:0;;;;;:::i;:::-;;:::i;11564:33::-;;;;;;;;;;-1:-1:-1;11564:33:0;;;;;;;;12088:32;;;;;;;;;;;;;;;;26701:121;;;;;;;;;;-1:-1:-1;26796:18:0;;26781:12;:33;26701:121;;11944:31;;;;;;;;;;;;;;;;12053:28;;;;;;;;;;;;;;;;11530:25;;;;;;;;;;;;;;;;11644:31;;;;;;;;;;-1:-1:-1;11644:31:0;;;;;;;;;;;4639:177;;;;;;;;;;-1:-1:-1;4639:177:0;;;;;:::i;:::-;;:::i;9291:150::-;;;;;;;;;;;;;:::i;16277:154::-;;;;;;;;;;;;;:::i;18452:334::-;;;;;;;;;;-1:-1:-1;18452:334:0;;;;;:::i;:::-;;:::i;19405:413::-;;;;;;;;;;-1:-1:-1;19405:413:0;;;;;:::i;:::-;;:::i;15895:330::-;;;;;;;;;;-1:-1:-1;15895:330:0;;;;;:::i;:::-;;:::i;27429:488::-;;;;;;;;;;-1:-1:-1;27429:488:0;;;;;:::i;:::-;;:::i;31065:1166::-;;;;;;;;;;-1:-1:-1;31065:1166:0;;;;;:::i;:::-;;:::i;11480:43::-;;;;;;;;;;-1:-1:-1;11480:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9077:79;;;;;;;;;;-1:-1:-1;9142:6:0;;-1:-1:-1;;;;;9142:6:0;9077:79;;4310:104;;;;;;;;;;;;;:::i;18794:355::-;;;;;;;;;;-1:-1:-1;18794:355:0;;;;;:::i;:::-;;:::i;12200:43::-;;;;;;;;;;;;12238:5;12200:43;;16439:84;;;;;;;;;;;;;:::i;6317:482::-;;;;;;;;;;-1:-1:-1;6317:482:0;;;;;:::i;:::-;;:::i;11440:33::-;;;;;;;;;;;;;;;;4824:216;;;;;;;;;;-1:-1:-1;4824:216:0;;;;;:::i;:::-;;:::i;12165:26::-;;;;;;;;;;;;;;;;12613:57;;;;;;;;;;-1:-1:-1;12613:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28799:858;;;;;;;;;;-1:-1:-1;28799:858:0;;;;;:::i;:::-;;:::i;11604:33::-;;;;;;;;;;-1:-1:-1;11604:33:0;;;;;;;;;;;20256:182;;;;;;;;;;-1:-1:-1;20256:182:0;;;;;:::i;:::-;;:::i;19826:422::-;;;;;;;;;;-1:-1:-1;19826:422:0;;;;;:::i;:::-;;:::i;17394:323::-;;;;;;;;;;-1:-1:-1;17394:323:0;;;;;:::i;:::-;;:::i;11862:39::-;;;;;;;;;;-1:-1:-1;11862:39:0;;;;;;;;11128:27;;;;;;;;;;;;;;;;17787:428;;;;;;;;;;-1:-1:-1;17787:428:0;;;;;:::i;:::-;;:::i;11910:27::-;;;;;;;;;;;;;;;;5048:201;;;;;;;;;;-1:-1:-1;5048:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5214:18:0;;;5182:7;5214:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5048:201;11287:33;;;;;;;;;;;;;;;;12019:25;;;;;;;;;;;;;;;;28485:306;;;;;;;;;;;;;:::i;16531:118::-;;;;;;;;;;-1:-1:-1;16531:118:0;;;;;:::i;:::-;;:::i;16950:98::-;;;;;;;;;;;;;:::i;11363:37::-;;;;;;;;;;;;;;;;29665:665;;;;;;;;;;-1:-1:-1;29665:665:0;;;;;:::i;:::-;;:::i;11982:30::-;;;;;;;;;;;;;;;;9449:281;;;;;;;;;;-1:-1:-1;9449:281:0;;;;;:::i;:::-;;:::i;27987:185::-;;;;;;;;;;;;;:::i;12127:31::-;;;;;;;;;;;;;;;;11162:24;;;;;;;;;;;;;;;;4202:100;4256:13;4289:5;4282:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4202:100;:::o;5257:210::-;5376:4;5398:39;352:10;5421:7;5430:6;5398:8;:39::i;:::-;-1:-1:-1;5455:4:0;5257:210;;;;;:::o;16657:232::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;;;;;;;;;16785:9:::1;16780:102;16800:18:::0;;::::1;16780:102;;;16866:4;16840:11;:23;16852:7;;16860:1;16852:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16840:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16840:23:0;:30;;-1:-1:-1;;16840:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16820:3;::::1;::::0;::::1;:::i;:::-;;;;16780:102;;;;16657:232:::0;;;:::o;17056:330::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;17194:14:::1;4505:2:::0;17194::::1;:14;:::i;:::-;17185:4;17164:13;4611:12:::0;;;4523:108;17164:13:::1;:17;::::0;17180:1:::1;17164:17;:::i;:::-;17163:26;;;;:::i;:::-;17162:47;;;;:::i;:::-;17152:6;:57;;17130:148;;;;-1:-1:-1::0;;;17130:148:0::1;;;;;;;:::i;:::-;17314:14;4505:2:::0;17314::::1;:14;:::i;:::-;17304:25;::::0;:6;:25:::1;:::i;:::-;17289:12;:40:::0;;;17345:33:::1;::::0;2717:25:1;;;17345:33:0::1;::::0;2705:2:1;2690:18;17345:33:0::1;;;;;;;;17056:330:::0;:::o;30338:719::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;30519:15:::1;:22;30501:7;:14;:40;30479:120;;;::::0;-1:-1:-1;;;30479:120:0;;11170:2:1;30479:120:0::1;::::0;::::1;11152:21:1::0;11209:2;11189:18;;;11182:30;11248:32;11228:18;;;11221:60;11298:18;;30479:120:0::1;10968:354:1::0;30479:120:0::1;30649:3;30632:7;:14;:20;30610:124;;;::::0;-1:-1:-1;;;30610:124:0;;11529:2:1;30610:124:0::1;::::0;::::1;11511:21:1::0;11568:2;11548:18;;;11541:30;11607:34;11587:18;;;11580:62;-1:-1:-1;;;11658:18:1;;;11651:52;11720:19;;30610:124:0::1;11327:418:1::0;30610:124:0::1;30848:9;30843:207;30867:7;:14;30863:1;:18;30843:207;;;30903:14;30920:7;30928:1;30920:10;;;;;;;;:::i;:::-;;;;;;;30903:27;;30945:14;30962:15;30978:1;30962:18;;;;;;;;:::i;:::-;;;;;;;30945:35;;30995:43;31011:10;31023:6;31031;30995:15;:43::i;:::-;30888:162;;30883:3;;;;;:::i;:::-;;;;30843:207;;;;30338:719:::0;;:::o;5475:529::-;5615:4;5632:36;5642:6;5650:9;5661:6;5632:9;:36::i;:::-;-1:-1:-1;;;;;5708:19:0;;5681:24;5708:19;;;:11;:19;;;;;;;;352:10;5708:33;;;;;;;;5774:26;;;;5752:116;;;;-1:-1:-1;;;5752:116:0;;11952:2:1;5752:116:0;;;11934:21:1;11991:2;11971:18;;;11964:30;12030:34;12010:18;;;12003:62;-1:-1:-1;;;12081:18:1;;;12074:38;12129:19;;5752:116:0;11750:404:1;5752:116:0;5904:57;5913:6;352:10;5954:6;5935:16;:25;5904:8;:57::i;:::-;-1:-1:-1;5992:4:0;;5475:529;-1:-1:-1;;;;5475:529:0:o;6012:297::-;352:10;6127:4;6221:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6221:34:0;;;;;;;;;;6127:4;;6149:130;;6199:7;;6221:47;;6258:10;;6221:47;:::i;:::-;6149:8;:130::i;28180:297::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28313:32:0;::::1;28291:120;;;::::0;-1:-1:-1;;;28291:120:0;;12491:2:1;28291:120:0::1;::::0;::::1;12473:21:1::0;12530:2;12510:18;;;12503:30;12569:34;12549:18;;;12542:62;-1:-1:-1;;;12620:18:1;;;12613:36;12666:19;;28291:120:0::1;12289:402:1::0;28291:120:0::1;28422:17;:47:::0;;-1:-1:-1;;;;;;28422:47:0::1;-1:-1:-1::0;;;;;28422:47:0;;;::::1;::::0;;;::::1;::::0;;28180:297::o;4639:177::-;-1:-1:-1;;;;;4790:18:0;4758:7;4790:18;;;;;;;;;;;;4639:177::o;9291:150::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;9384:6:::1;::::0;9363:40:::1;::::0;9400:1:::1;::::0;-1:-1:-1;;;;;9384:6:0::1;::::0;9363:40:::1;::::0;9400:1;;9363:40:::1;9414:6;:19:::0;;-1:-1:-1;;;;;;9414:19:0::1;::::0;;9291:150::o;16277:154::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;16331:14:::1;:22:::0;;-1:-1:-1;;16331:22:0;;::::1;::::0;;;16364:20:::1;:28:::0;;;;::::1;::::0;;16408:15:::1;::::0;::::1;::::0;16348:5:::1;::::0;16408:15:::1;16277:154::o:0;18452:334::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;18572:4:::1;18567:155;;18629:6;::::0;-1:-1:-1;;;;;18629:6:0;;::::1;18619:16:::0;;::::1;::::0;18593:117:::1;;;::::0;-1:-1:-1;;;18593:117:0;;12898:2:1;18593:117:0::1;::::0;::::1;12880:21:1::0;12937:2;12917:18;;;12910:30;12976:34;12956:18;;;12949:62;-1:-1:-1;;;13027:18:1;;;13020:37;13074:19;;18593:117:0::1;12696:403:1::0;18593:117:0::1;-1:-1:-1::0;;;;;18732:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18732:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18452:334::o;19405:413::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;19557:16:::1;:33:::0;;;19601:15:::1;:31:::0;;;19643:10:::1;:21:::0;;;19656:8;19690:34:::1;19619:13:::0;19576:14;19690:34:::1;:::i;:::-;:47;;;;:::i;:::-;19675:12;:62:::0;;;19772:4:::1;-1:-1:-1::0;19756:20:0::1;19748:62;;;::::0;-1:-1:-1;;;19748:62:0;;13306:2:1;19748:62:0::1;::::0;::::1;13288:21:1::0;13345:2;13325:18;;;13318:30;13384:31;13364:18;;;13357:59;13433:18;;19748:62:0::1;13104:353:1::0;15895:330:0;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;15977:13:::1;::::0;::::1;::::0;::::1;;;15976:14;15968:50;;;::::0;-1:-1:-1;;;15968:50:0;;13664:2:1;15968:50:0::1;::::0;::::1;13646:21:1::0;13703:2;13683:18;;;13676:30;13742:25;13722:18;;;13715:53;13785:18;;15968:50:0::1;13462:347:1::0;15968:50:0::1;16029:13;:20:::0;;-1:-1:-1;;16060:18:0;;;;;16110:12:::1;16089:18;:33:::0;;;16154:31:::1;::::0;16175:10;;16154:31:::1;:::i;:::-;16133:18;:52:::0;16201:16:::1;::::0;::::1;::::0;;;::::1;15895:330:::0;:::o;27429:488::-;9204:6;;27543:10;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27579:20:0;::::1;27571:59;;;::::0;-1:-1:-1;;;27571:59:0;;14016:2:1;27571:59:0::1;::::0;::::1;13998:21:1::0;14055:2;14035:18;;;14028:30;14094:28;14074:18;;;14067:56;14140:18;;27571:59:0::1;13814:350:1::0;27571:59:0::1;27667:4;-1:-1:-1::0;;;;;27649:23:0;::::1;::::0;27641:64:::1;;;::::0;-1:-1:-1;;;27641:64:0;;14371:2:1;27641:64:0::1;::::0;::::1;14353:21:1::0;14410:2;14390:18;;;14383:30;14449;14429:18;;;14422:58;14497:18;;27641:64:0::1;14169:352:1::0;27641:64:0::1;27743:39;::::0;-1:-1:-1;;;27743:39:0;;27776:4:::1;27743:39;::::0;::::1;731:51:1::0;27716:24:0::1;::::0;-1:-1:-1;;;;;27743:24:0;::::1;::::0;::::1;::::0;704:18:1;;27743:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27801:46;::::0;-1:-1:-1;;;27801:46:0;;-1:-1:-1;;;;;14907:32:1;;;27801:46:0::1;::::0;::::1;14889:51:1::0;14956:18;;;14949:34;;;27716:66:0;;-1:-1:-1;27801:23:0;;::::1;::::0;::::1;::::0;14862:18:1;;27801:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27863;::::0;;-1:-1:-1;;;;;14907:32:1;;14889:51;;14971:2;14956:18;;14949:34;;;27793:54:0;;-1:-1:-1;27863:46:0::1;::::0;14862:18:1;27863:46:0::1;;;;;;;27560:357;27429:488:::0;;;;:::o;31065:1166::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;31146:13:::1;::::0;::::1;::::0;::::1;;;31145:14;31137:70;;;;-1:-1:-1::0;;;31137:70:0::1;;;;;;;:::i;:::-;31259:2;31240:16;:21;31218:110;;;::::0;-1:-1:-1;;;31218:110:0;;15858:2:1;31218:110:0::1;::::0;::::1;15840:21:1::0;15897:2;15877:18;;;15870:30;15936:34;15916:18;;;15909:62;-1:-1:-1;;;15987:18:1;;;15980:37;16034:19;;31218:110:0::1;15656:403:1::0;31218:110:0::1;31376:13;:20:::0;;-1:-1:-1;;31407:18:0;;;;;31457:12:::1;31436:18;:33:::0;;;31501:37:::1;::::0;31522:16;;31501:37:::1;:::i;:::-;31480:18;:58:::0;31554:16:::1;::::0;::::1;::::0;;;::::1;31661:1;31637:21;:25;31615:110;;;;-1:-1:-1::0;;;31615:110:0::1;;;;;;;:::i;:::-;31787:1;31760:24;31778:4;31760:9;:24::i;:::-;:28;31738:116;;;::::0;-1:-1:-1;;;31738:116:0;;16670:2:1;31738:116:0::1;::::0;::::1;16652:21:1::0;16709:2;16689:18;;;16682:30;16748:34;16728:18;;;16721:62;-1:-1:-1;;;16799:18:1;;;16792:36;16845:19;;31738:116:0::1;16468:402:1::0;31738:116:0::1;31899:9;::::0;31867:69:::1;::::0;31884:4:::1;::::0;-1:-1:-1;;;;;31899:9:0::1;31911:24;31884:4:::0;31911:9:::1;:24::i;31867:69::-;31949:9;::::0;-1:-1:-1;;;;;31949:9:0::1;:25;31982:21;32027:4;32047:24;32027:4:::0;32047:9:::1;:24::i;:::-;32086:1;32129::::0;32172:10:::1;32197:15;31949:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4310:104::-:0;4366:13;4399:7;4392:14;;;;;:::i;18794:355::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;18940:6:::1;::::0;-1:-1:-1;;;;;18940:6:0;;::::1;18932:14:::0;;::::1;::::0;18910:121:::1;;;::::0;-1:-1:-1;;;18910:121:0;;18000:2:1;18910:121:0::1;::::0;::::1;17982:21:1::0;18039:2;18019:18;;;18012:30;18078:34;18058:18;;;18051:62;18149:27;18129:18;;;18122:55;18194:19;;18910:121:0::1;17798:421:1::0;18910:121:0::1;19044:41;19073:4;19079:5;19044:28;:41::i;:::-;19101:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19101:40:0;::::1;::::0;::::1;::::0;;;::::1;18794:355:::0;;:::o;16439:84::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;16494:14:::1;:21:::0;;-1:-1:-1;;16494:21:0::1;16511:4;16494:21;::::0;;16439:84::o;6317:482::-;352:10;6437:4;6486:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6486:34:0;;;;;;;;;;6553:35;;;;6531:122;;;;-1:-1:-1;;;6531:122:0;;18426:2:1;6531:122:0;;;18408:21:1;18465:2;18445:18;;;18438:30;18504:34;18484:18;;;18477:62;-1:-1:-1;;;18555:18:1;;;18548:35;18600:19;;6531:122:0;18224:401:1;6531:122:0;6689:67;352:10;6712:7;6740:15;6721:16;:34;6689:8;:67::i;:::-;-1:-1:-1;6787:4:0;;6317:482;-1:-1:-1;;;6317:482:0:o;4824:216::-;4946:4;4968:42;352:10;4992:9;5003:6;4968:9;:42::i;28799:858::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;28871:12:::1;28863:56;;;::::0;-1:-1:-1;;;28863:56:0;;18832:2:1;28863:56:0::1;::::0;::::1;18814:21:1::0;18871:2;18851:18;;;18844:30;18910:33;18890:18;;;18883:61;18961:18;;28863:56:0::1;18630:355:1::0;28863:56:0::1;28939:13;::::0;::::1;::::0;::::1;;;28938:14;28930:70;;;;-1:-1:-1::0;;;28930:70:0::1;;;;;;;:::i;:::-;29089:1;29065:21;:25;29043:110;;;;-1:-1:-1::0;;;29043:110:0::1;;;;;;;:::i;20256:182::-:0;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20341:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20341:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20396:34;;1389:41:1;;;20396:34:0::1;::::0;1362:18:1;20396:34:0::1;;;;;;;20256:182:::0;;:::o;19826:422::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;19979:17:::1;:34:::0;;;20024:16:::1;:32:::0;;;20067:11:::1;:22:::0;;;20081:8;20116:36:::1;20043:13:::0;19999:14;20116:36:::1;:::i;:::-;:50;;;;:::i;:::-;20100:13;:66:::0;;;20202:4:::1;-1:-1:-1::0;20185:21:0::1;20177:63;;;::::0;-1:-1:-1;;;20177:63:0;;19192:2:1;20177:63:0::1;::::0;::::1;19174:21:1::0;19231:2;19211:18;;;19204:30;19270:31;19250:18;;;19243:59;19319:18;;20177:63:0::1;18990:353:1::0;17394:323:0;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;17534:14:::1;4505:2:::0;17534::::1;:14;:::i;:::-;17526:3;17505:13;4611:12:::0;;;4523:108;17505:13:::1;:17;::::0;17521:1:::1;17505:17;:::i;:::-;17504:25;;;;:::i;:::-;17503:46;;;;:::i;:::-;17493:6;:56;;17471:147;;;;-1:-1:-1::0;;;17471:147:0::1;;;;;;;:::i;:::-;17651:14;4505:2:::0;17651::::1;:14;:::i;:::-;17641:25;::::0;:6;:25:::1;:::i;:::-;17629:9;:37:::0;;;17682:27:::1;::::0;2717:25:1;;;17682:27:0::1;::::0;2705:2:1;2690:18;17682:27:0::1;2571:177:1::0;17787:428:0;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;17927:6:::1;17906:13;4611:12:::0;;;4523:108;17906:13:::1;:17;::::0;17922:1:::1;17906:17;:::i;:::-;17905:28;;;;:::i;:::-;17892:9;:41;;17870:144;;;::::0;-1:-1:-1;;;17870:144:0;;19550:2:1;17870:144:0::1;::::0;::::1;19532:21:1::0;19589:2;19569:18;;;19562:30;19628:34;19608:18;;;19601:62;-1:-1:-1;;;19679:18:1;;;19672:51;19740:19;;17870:144:0::1;19348:417:1::0;17870:144:0::1;18082:4;18061:13;4611:12:::0;;;4523:108;18061:13:::1;:17;::::0;18077:1:::1;18061:17;:::i;:::-;18060:26;;;;:::i;:::-;18047:9;:39;;18025:141;;;::::0;-1:-1:-1;;;18025:141:0;;19972:2:1;18025:141:0::1;::::0;::::1;19954:21:1::0;20011:2;19991:18;;;19984:30;20050:34;20030:18;;;20023:62;-1:-1:-1;;;20101:18:1;;;20094:50;20161:19;;18025:141:0::1;19770:416:1::0;18025:141:0::1;18177:18;:30:::0;17787:428::o;28485:306::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;28556:3:::1;28537:16;:22:::0;;;28588:3:::1;28570:15;:21:::0;;;28617:34:::1;::::0;::::1;:::i;:::-;28602:12;:49:::0;28684:3:::1;28664:17;:23:::0;;;28717:3:::1;28698:16;:22:::0;;;28747:36:::1;::::0;::::1;:::i;:::-;28731:13;:52:::0;28485:306::o;16531:118::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16615:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;16615:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16531:118::o;16950:98::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;17012:20:::1;:28:::0;;-1:-1:-1;;17012:28:0::1;::::0;;16950:98::o;29665:665::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;29757:6:::1;::::0;29750:39:::1;::::0;-1:-1:-1;;;29750:39:0;;29783:4:::1;29750:39;::::0;::::1;731:51:1::0;29730:17:0::1;::::0;-1:-1:-1;;;;;29757:6:0::1;::::0;29750:24:::1;::::0;704:18:1;;29750:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29730:59;;29822:1;29810:9;:13;29802:50;;;::::0;-1:-1:-1;;;29802:50:0;;20393:2:1;29802:50:0::1;::::0;::::1;20375:21:1::0;20432:2;20412:18;;;20405:30;20471:26;20451:18;;;20444:54;20515:18;;29802:50:0::1;20191:348:1::0;29802:50:0::1;29865:16;29908:5;29885:19;29897:7:::0;29885:9;:19:::1;:::i;:::-;29884:29;;;;:::i;:::-;30000:6;::::0;30024:9:::1;::::0;29993:52:::1;::::0;-1:-1:-1;;;29993:52:0;;-1:-1:-1;;;;;30024:9:0;;::::1;29993:52;::::0;::::1;14889:51:1::0;14956:18;;;14949:34;;;29865:48:0;;-1:-1:-1;30000:6:0::1;::::0;29993:22:::1;::::0;14862:18:1;;29993:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30091:9:0::1;::::0;:231:::1;::::0;-1:-1:-1;;;30091:231:0;;-1:-1:-1;;;;;30091:9:0;;::::1;::::0;:28:::1;::::0;:231:::1;::::0;30142:4:::1;::::0;30162:8;;30091:9;;;;30271:10:::1;::::0;30296:15:::1;::::0;30091:231:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29719:611;;29665:665:::0;:::o;9449:281::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9552:22:0;::::1;9530:110;;;::::0;-1:-1:-1;;;9530:110:0;;21608:2:1;9530:110:0::1;::::0;::::1;21590:21:1::0;21647:2;21627:18;;;21620:30;21686:34;21666:18;;;21659:62;-1:-1:-1;;;21737:18:1;;;21730:36;21783:19;;9530:110:0::1;21406:402:1::0;9530:110:0::1;9677:6;::::0;9656:38:::1;::::0;-1:-1:-1;;;;;9656:38:0;;::::1;::::0;9677:6:::1;::::0;9656:38:::1;::::0;9677:6:::1;::::0;9656:38:::1;9705:6;:17:::0;;-1:-1:-1;;;;;;9705:17:0::1;-1:-1:-1::0;;;;;9705:17:0;;;::::1;::::0;;;::::1;::::0;;9449:281::o;27987:185::-;9204:6;;-1:-1:-1;;;;;9204:6:0;352:10;9204:22;9196:67;;;;-1:-1:-1;;;9196:67:0;;;;;;;:::i;:::-;28082:82:::1;::::0;28045:12:::1;::::0;28090:10:::1;::::0;28114:21:::1;::::0;28045:12;28082:82;28045:12;28082:82;28114:21;28090:10;28082:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8346:380:::0;-1:-1:-1;;;;;8482:19:0;;8474:68;;;;-1:-1:-1;;;8474:68:0;;22225:2:1;8474:68:0;;;22207:21:1;22264:2;22244:18;;;22237:30;22303:34;22283:18;;;22276:62;-1:-1:-1;;;22354:18:1;;;22347:34;22398:19;;8474:68:0;22023:400:1;8474:68:0;-1:-1:-1;;;;;8561:21:0;;8553:68;;;;-1:-1:-1;;;8553:68:0;;22630:2:1;8553:68:0;;;22612:21:1;22669:2;22649:18;;;22642:30;22708:34;22688:18;;;22681:62;-1:-1:-1;;;22759:18:1;;;22752:32;22801:19;;8553:68:0;22428:398:1;8553:68:0;-1:-1:-1;;;;;8634:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8686:32;;2717:25:1;;;8686:32:0;;2690:18:1;8686:32:0;;;;;;;;8346:380;;;:::o;6807:651::-;-1:-1:-1;;;;;6947:20:0;;6939:70;;;;-1:-1:-1;;;6939:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7028:23:0;;7020:71;;;;-1:-1:-1;;;7020:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7128:17:0;;7104:21;7128:17;;;;;;;;;;;7178:23;;;;7156:111;;;;-1:-1:-1;;;7156:111:0;;23843:2:1;7156:111:0;;;23825:21:1;23882:2;23862:18;;;23855:30;23921:34;23901:18;;;23894:62;-1:-1:-1;;;23972:18:1;;;23965:36;24018:19;;7156:111:0;23641:402:1;7156:111:0;-1:-1:-1;;;;;7303:17:0;;;:9;:17;;;;;;;;;;;7323:22;;;7303:42;;7367:20;;;;;;;;:30;;7339:6;;7303:9;7367:30;;7339:6;;7367:30;:::i;:::-;;;;;;;;7432:9;-1:-1:-1;;;;;7415:35:0;7424:6;-1:-1:-1;;;;;7415:35:0;;7443:6;7415:35;;;;2717:25:1;;2705:2;2690:18;;2571:177;7415:35:0;;;;;;;;6928:530;6807:651;;;:::o;20446:6247::-;-1:-1:-1;;;;;20578:18:0;;20570:68;;;;-1:-1:-1;;;20570:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20657:16:0;;20649:64;;;;-1:-1:-1;;;20649:64:0;;;;;;;:::i;:::-;20741:1;20732:6;:10;20724:52;;;;-1:-1:-1;;;20724:52:0;;24250:2:1;20724:52:0;;;24232:21:1;24289:2;24269:18;;;24262:30;24328:31;24308:18;;;24301:59;24377:18;;20724:52:0;24048:353:1;20724:52:0;20794:13;;;;;;;20789:183;;-1:-1:-1;;;;;20850:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20879:23:0;;;;;;:19;:23;;;;;;;;20850:52;20824:136;;;;-1:-1:-1;;;20824:136:0;;24608:2:1;20824:136:0;;;24590:21:1;24647:2;24627:18;;;24620:30;-1:-1:-1;;;24666:18:1;;;24659:52;24728:18;;20824:136:0;24406:346:1;20824:136:0;20988:18;;:22;20984:247;;-1:-1:-1;;;;;21054:17:0;;;;;;:11;:17;;;;;;;;21053:18;;:35;;-1:-1:-1;9142:6:0;;-1:-1:-1;;;;;21075:13:0;;;9142:6;;21075:13;21053:35;:60;;;-1:-1:-1;;;;;;21092:21:0;;21106:6;21092:21;21053:60;21027:192;;;;-1:-1:-1;;;21027:192:0;;24959:2:1;21027:192:0;;;24941:21:1;24998:2;24978:18;;;24971:30;25037:34;25017:18;;;25010:62;25108:34;25088:18;;;25081:62;-1:-1:-1;;;25159:19:1;;;25152:37;25206:19;;21027:192:0;24757:474:1;21027:192:0;21247:14;;;;21243:2315;;;9142:6;;-1:-1:-1;;;;;21300:15:0;;;9142:6;;21300:15;;;;:49;;-1:-1:-1;9142:6:0;;-1:-1:-1;;;;;21336:13:0;;;9142:6;;21336:13;;21300:49;:86;;;;-1:-1:-1;;;;;;21370:16:0;;;;21300:86;:128;;;;-1:-1:-1;;;;;;21407:21:0;;21421:6;21407:21;;21300:128;:175;;;;-1:-1:-1;;;;;;21450:25:0;;;;;;:19;:25;;;;;;;;21449:26;21300:175;:220;;;;-1:-1:-1;;;;;;21497:23:0;;;;;;:19;:23;;;;;;;;21496:24;21300:220;21278:2269;;;21691:20;;;;21687:692;;;21754:9;;-1:-1:-1;;;;;21740:24:0;;;21754:9;;21740:24;;;;:49;;-1:-1:-1;21782:6:0;;-1:-1:-1;;;;;21768:21:0;;;21782:6;;21768:21;;21740:49;21736:624;;;21931:16;21946:1;21931:12;:16;:::i;:::-;21885:9;21856:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;22052:16:0;22067:1;22052:12;:16;:::i;:::-;-1:-1:-1;;;;;21984:32:0;;;;;;:28;:32;;;;;;:84;21856:212;21818:363;;;;-1:-1:-1;;;21818:363:0;;25571:2:1;21818:363:0;;;25553:21:1;25610:2;25590:18;;;25583:30;25649:34;25629:18;;;25622:62;-1:-1:-1;;;25700:18:1;;;25693:51;25761:19;;21818:363:0;25369:417:1;21818:363:0;22237:9;22208:39;;;;:28;:39;;;;;;22250:12;22208:54;;;;-1:-1:-1;;;;;22289:32:0;;;;;;:47;21736:624;-1:-1:-1;;;;;22453:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22510:35:0;;;;;;:31;:35;;;;;;;;22509:36;22453:92;22427:1105;;;22632:12;;22622:6;:22;;22588:148;;;;-1:-1:-1;;;22588:148:0;;25993:2:1;22588:148:0;;;25975:21:1;26032:2;26012:18;;;26005:30;26071:34;26051:18;;;26044:62;-1:-1:-1;;;26122:18:1;;;26115:38;26170:19;;22588:148:0;25791:404:1;22588:148:0;22819:9;;22809:6;22793:13;22803:2;22793:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;22759:140;;;;-1:-1:-1;;;22759:140:0;;26402:2:1;22759:140:0;;;26384:21:1;26441:2;26421:18;;;26414:30;-1:-1:-1;;;26460:18:1;;;26453:49;26519:18;;22759:140:0;26200:343:1;22759:140:0;22427:1105;;;-1:-1:-1;;;;;22997:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23052:37:0;;;;;;:31;:37;;;;;;;;23051:38;22997:92;22971:561;;;23176:12;;23166:6;:22;;23132:149;;;;-1:-1:-1;;;23132:149:0;;26750:2:1;23132:149:0;;;26732:21:1;26789:2;26769:18;;;26762:30;26828:34;26808:18;;;26801:62;-1:-1:-1;;;26879:18:1;;;26872:39;26928:19;;23132:149:0;26548:405:1;22971:561:0;-1:-1:-1;;;;;23312:35:0;;;;;;:31;:35;;;;;;;;23307:225;;23432:9;;23422:6;23406:13;23416:2;23406:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;23372:140;;;;-1:-1:-1;;;23372:140:0;;26402:2:1;23372:140:0;;;26384:21:1;26441:2;26421:18;;;26414:30;-1:-1:-1;;;26460:18:1;;;26453:49;26519:18;;23372:140:0;26200:343:1;23372:140:0;23570:28;23601:24;23619:4;23601:9;:24::i;:::-;23677:18;;23570:55;;-1:-1:-1;23653:42:0;;;;;;;23726:35;;-1:-1:-1;23750:11:0;;;;;;;23726:35;:61;;;;-1:-1:-1;23779:8:0;;-1:-1:-1;;;23779:8:0;;;;23778:9;23726:61;:110;;;;-1:-1:-1;;;;;;23805:31:0;;;;;;:25;:31;;;;;;;;23804:32;23726:110;:153;;;;-1:-1:-1;;;;;;23854:25:0;;;;;;:19;:25;;;;;;;;23853:26;23726:153;:194;;;;-1:-1:-1;;;;;;23897:23:0;;;;;;:19;:23;;;;;;;;23896:24;23726:194;23708:510;;;23947:8;:15;;-1:-1:-1;;;;23947:15:0;-1:-1:-1;;;23947:15:0;;;24006:18;;:23;;23947:8;24006:23;:::i;:::-;23983:20;:46;23979:133;;;24073:18;;:23;;24094:2;24073:23;:::i;:::-;24050:46;;23979:133;24128:45;24152:20;24128:23;:45::i;:::-;24190:8;:16;;-1:-1:-1;;;;24190:16:0;;;23708:510;-1:-1:-1;;;;;24349:25:0;;24230:12;24349:25;;;:19;:25;;;;;;24245:4;;24349:25;;;:52;;-1:-1:-1;;;;;;24378:23:0;;;;;;:19;:23;;;;;;;;24349:52;24345:100;;;-1:-1:-1;24428:5:0;24345:100;24457:12;24484:18;24517:23;24555:31;24677:7;24673:1967;;;26796:18;;26781:12;:33;24759:77;;;;-1:-1:-1;;;;;;24805:31:0;;;;;;:25;:31;;;;;;;;24759:77;:128;;;;-1:-1:-1;;;;;;24858:29:0;;;;;;:25;:29;;;;;;;;24857:30;24759:128;:165;;;;;24923:1;24908:12;;:16;24759:165;24737:1387;;;-1:-1:-1;;;;;24964:15:0;;;;;;:11;:15;;;;;;;;24959:173;;-1:-1:-1;;;;;25004:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25004:22:0;25022:4;25004:22;;;;;;25049:10;:15;;25022:4;;25049:10;;:15;;25022:4;;25049:15;:::i;:::-;;;;-1:-1:-1;;25092:20:0;;-1:-1:-1;;;;;749:32:1;;731:51;;25092:20:0;;719:2:1;704:18;25092:20:0;;;;;;;24959:173;-1:-1:-1;25176:4:0;25222:3;25207:11;:6;25216:2;25207:11;:::i;:::-;25206:19;;;;:::i;:::-;25199:26;;25289:12;;25270:15;;25263:4;:22;;;;:::i;:::-;25262:39;;;;:::i;:::-;25244:57;;25355:12;;25341:10;;25334:4;:17;;;;:::i;:::-;25333:34;;;;:::i;:::-;25320:47;;24737:1387;;;-1:-1:-1;;;;;25430:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25479:1;25463:13;;:17;25430:50;25426:698;;;25527:2;25501:28;;12238:5;25565:13;;25556:6;:22;;;;:::i;:::-;25555:38;;;;:::i;:::-;25548:45;;25658:13;;25638:16;;25631:4;:23;;;;:::i;:::-;25630:41;;;;:::i;:::-;25612:59;;25726:13;;25711:11;;25704:4;:18;;;;:::i;25426:698::-;-1:-1:-1;;;;;25801:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25851:1;25836:12;;:16;25801:51;25797:327;;;25899:4;25873:30;;12238:5;25939:12;;25930:6;:21;;;;:::i;:::-;25929:37;;;;:::i;:::-;25922:44;;26030:12;;26011:15;;26004:4;:22;;;;:::i;:::-;26003:39;;;;:::i;:::-;25985:57;;26096:12;;26082:10;;26075:4;:17;;;;:::i;:::-;26074:34;;;;:::i;:::-;26061:47;;25797:327;26144:8;;26140:460;;26173:42;26189:4;26203;26210;26173:15;:42::i;:::-;26238:14;;26234:95;;26277:32;26291:4;26298:10;26277:5;:32::i;:::-;26351:19;;26347:238;;26395:170;26445:4;26477:23;26527:15;26395;:170::i;:::-;26614:14;26624:4;26614:14;;:::i;:::-;;;24673:1967;26652:33;26668:4;26674:2;26678:6;26652:15;:33::i;:::-;20559:6134;;;;;;;20446:6247;;;:::o;19157:240::-;-1:-1:-1;;;;;19240:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19240:39:0;;;;;;;19292;19240:31;:39;19292:26;:39::i;26830:591::-;26987:16;;;27001:1;26987:16;;;;;;;;26963:21;;26987:16;;;;;;;;;;-1:-1:-1;26987:16:0;26963:40;;27032:4;27014;27019:1;27014:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27014:23:0;;;:7;;;;;;;;;;:23;;;;27058:9;;:16;;;-1:-1:-1;;;27058:16:0;;;;:9;;;;;:14;;:16;;;;;27014:7;;27058:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27048:4;27053:1;27048:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27048:26:0;;;:7;;;;;;;;;:26;27119:9;;27087:56;;27104:4;;27119:9;27131:11;27087:8;:56::i;:::-;27182:9;;27354:17;;27182:231;;-1:-1:-1;;;27182:231:0;;-1:-1:-1;;;;;27182:9:0;;;;:60;;:231;;27257:11;;27182:9;;27327:4;;27354:17;;;27387:15;;27182:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26892:529;26830:591;:::o;7788:550::-;-1:-1:-1;;;;;7872:21:0;;7864:67;;;;-1:-1:-1;;;7864:67:0;;28401:2:1;7864:67:0;;;28383:21:1;28440:2;28420:18;;;28413:30;28479:34;28459:18;;;28452:62;-1:-1:-1;;;28530:18:1;;;28523:31;28571:19;;7864:67:0;28199:397:1;7864:67:0;-1:-1:-1;;;;;7967:18:0;;7942:22;7967:18;;;;;;;;;;;8004:24;;;;7996:71;;;;-1:-1:-1;;;7996:71:0;;28803:2:1;7996:71:0;;;28785:21:1;28842:2;28822:18;;;28815:30;28881:34;28861:18;;;28854:62;-1:-1:-1;;;28932:18:1;;;28925:32;28974:19;;7996:71:0;28601:398:1;7996:71:0;-1:-1:-1;;;;;8103:18:0;;:9;:18;;;;;;;;;;;8124:23;;;8103:44;;8242:12;:22;;;;;;;8293:37;2717:25:1;;;8103:9:0;;:18;8293:37;;2690:18:1;8293:37:0;2571:177:1;18223:221:0;-1:-1:-1;;;;;18325:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18325:52:0;;;;;;;;;;18393:43;;29172:51:1;;;29239:18;;;29232:50;18393:43:0;;29145:18:1;18393:43:0;;;;;;;18223:221;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;793:131::-;-1:-1:-1;;;;;868:31:1;;858:42;;848:70;;914:1;911;904:12;848:70;793:131;:::o;929:315::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;1113:9;1100:23;1132:31;1157:5;1132:31;:::i;:::-;1182:5;1234:2;1219:18;;;;1206:32;;-1:-1:-1;;;929:315:1:o;1441:247::-;1500:6;1553:2;1541:9;1532:7;1528:23;1524:32;1521:52;;;1569:1;1566;1559:12;1521:52;1608:9;1595:23;1627:31;1652:5;1627:31;:::i;:::-;1677:5;1441:247;-1:-1:-1;;;1441:247:1:o;1693:118::-;1779:5;1772:13;1765:21;1758:5;1755:32;1745:60;;1801:1;1798;1791:12;1816:750;1908:6;1916;1924;1977:2;1965:9;1956:7;1952:23;1948:32;1945:52;;;1993:1;1990;1983:12;1945:52;2033:9;2020:23;2062:18;2103:2;2095:6;2092:14;2089:34;;;2119:1;2116;2109:12;2089:34;2157:6;2146:9;2142:22;2132:32;;2202:7;2195:4;2191:2;2187:13;2183:27;2173:55;;2224:1;2221;2214:12;2173:55;2264:2;2251:16;2290:2;2282:6;2279:14;2276:34;;;2306:1;2303;2296:12;2276:34;2361:7;2354:4;2344:6;2341:1;2337:14;2333:2;2329:23;2325:34;2322:47;2319:67;;;2382:1;2379;2372:12;2319:67;2413:4;2405:13;;;;-1:-1:-1;2437:6:1;-1:-1:-1;;2478:20:1;;2465:34;2508:28;2465:34;2508:28;:::i;:::-;2555:5;2545:15;;;1816:750;;;;;:::o;2753:180::-;2812:6;2865:2;2853:9;2844:7;2840:23;2836:32;2833:52;;;2881:1;2878;2871:12;2833:52;-1:-1:-1;2904:23:1;;2753:180;-1:-1:-1;2753:180:1:o;2938:127::-;2999:10;2994:3;2990:20;2987:1;2980:31;3030:4;3027:1;3020:15;3054:4;3051:1;3044:15;3070:275;3141:2;3135:9;3206:2;3187:13;;-1:-1:-1;;3183:27:1;3171:40;;3241:18;3226:34;;3262:22;;;3223:62;3220:88;;;3288:18;;:::i;:::-;3324:2;3317:22;3070:275;;-1:-1:-1;3070:275:1:o;3350:183::-;3410:4;3443:18;3435:6;3432:30;3429:56;;;3465:18;;:::i;:::-;-1:-1:-1;3510:1:1;3506:14;3522:4;3502:25;;3350:183::o;3538:662::-;3592:5;3645:3;3638:4;3630:6;3626:17;3622:27;3612:55;;3663:1;3660;3653:12;3612:55;3699:6;3686:20;3725:4;3749:60;3765:43;3805:2;3765:43;:::i;:::-;3749:60;:::i;:::-;3843:15;;;3929:1;3925:10;;;;3913:23;;3909:32;;;3874:12;;;;3953:15;;;3950:35;;;3981:1;3978;3971:12;3950:35;4017:2;4009:6;4005:15;4029:142;4045:6;4040:3;4037:15;4029:142;;;4111:17;;4099:30;;4149:12;;;;4062;;4029:142;;;-1:-1:-1;4189:5:1;3538:662;-1:-1:-1;;;;;;3538:662:1:o;4205:1215::-;4323:6;4331;4384:2;4372:9;4363:7;4359:23;4355:32;4352:52;;;4400:1;4397;4390:12;4352:52;4440:9;4427:23;4469:18;4510:2;4502:6;4499:14;4496:34;;;4526:1;4523;4516:12;4496:34;4564:6;4553:9;4549:22;4539:32;;4609:7;4602:4;4598:2;4594:13;4590:27;4580:55;;4631:1;4628;4621:12;4580:55;4667:2;4654:16;4689:4;4713:60;4729:43;4769:2;4729:43;:::i;4713:60::-;4807:15;;;4889:1;4885:10;;;;4877:19;;4873:28;;;4838:12;;;;4913:19;;;4910:39;;;4945:1;4942;4935:12;4910:39;4969:11;;;;4989:217;5005:6;5000:3;4997:15;4989:217;;;5085:3;5072:17;5102:31;5127:5;5102:31;:::i;:::-;5146:18;;5022:12;;;;5184;;;;4989:217;;;5225:5;-1:-1:-1;;5268:18:1;;5255:32;;-1:-1:-1;;5299:16:1;;;5296:36;;;5328:1;5325;5318:12;5296:36;;5351:63;5406:7;5395:8;5384:9;5380:24;5351:63;:::i;:::-;5341:73;;;4205:1215;;;;;:::o;5425:456::-;5502:6;5510;5518;5571:2;5559:9;5550:7;5546:23;5542:32;5539:52;;;5587:1;5584;5577:12;5539:52;5626:9;5613:23;5645:31;5670:5;5645:31;:::i;:::-;5695:5;-1:-1:-1;5752:2:1;5737:18;;5724:32;5765:33;5724:32;5765:33;:::i;:::-;5425:456;;5817:7;;-1:-1:-1;;;5871:2:1;5856:18;;;;5843:32;;5425:456::o;6283:382::-;6348:6;6356;6409:2;6397:9;6388:7;6384:23;6380:32;6377:52;;;6425:1;6422;6415:12;6377:52;6464:9;6451:23;6483:31;6508:5;6483:31;:::i;:::-;6533:5;-1:-1:-1;6590:2:1;6575:18;;6562:32;6603:30;6562:32;6603:30;:::i;:::-;6652:7;6642:17;;;6283:382;;;;;:::o;6670:316::-;6747:6;6755;6763;6816:2;6804:9;6795:7;6791:23;6787:32;6784:52;;;6832:1;6829;6822:12;6784:52;-1:-1:-1;;6855:23:1;;;6925:2;6910:18;;6897:32;;-1:-1:-1;6976:2:1;6961:18;;;6948:32;;6670:316;-1:-1:-1;6670:316:1:o;6991:388::-;7059:6;7067;7120:2;7108:9;7099:7;7095:23;7091:32;7088:52;;;7136:1;7133;7126:12;7088:52;7175:9;7162:23;7194:31;7219:5;7194:31;:::i;:::-;7244:5;-1:-1:-1;7301:2:1;7286:18;;7273:32;7314:33;7273:32;7314:33;:::i;7384:241::-;7440:6;7493:2;7481:9;7472:7;7468:23;7464:32;7461:52;;;7509:1;7506;7499:12;7461:52;7548:9;7535:23;7567:28;7589:5;7567:28;:::i;7630:380::-;7709:1;7705:12;;;;7752;;;7773:61;;7827:4;7819:6;7815:17;7805:27;;7773:61;7880:2;7872:6;7869:14;7849:18;7846:38;7843:161;;7926:10;7921:3;7917:20;7914:1;7907:31;7961:4;7958:1;7951:15;7989:4;7986:1;7979:15;7843:161;;7630:380;;;:::o;8015:356::-;8217:2;8199:21;;;8236:18;;;8229:30;8295:34;8290:2;8275:18;;8268:62;8362:2;8347:18;;8015:356::o;8376:127::-;8437:10;8432:3;8428:20;8425:1;8418:31;8468:4;8465:1;8458:15;8492:4;8489:1;8482:15;8508:127;8569:10;8564:3;8560:20;8557:1;8550:31;8600:4;8597:1;8590:15;8624:4;8621:1;8614:15;8640:135;8679:3;8700:17;;;8697:43;;8720:18;;:::i;:::-;-1:-1:-1;8767:1:1;8756:13;;8640:135::o;8780:422::-;8869:1;8912:5;8869:1;8926:270;8947:7;8937:8;8934:21;8926:270;;;9006:4;9002:1;8998:6;8994:17;8988:4;8985:27;8982:53;;;9015:18;;:::i;:::-;9065:7;9055:8;9051:22;9048:55;;;9085:16;;;;9048:55;9164:22;;;;9124:15;;;;8926:270;;;8930:3;8780:422;;;;;:::o;9207:806::-;9256:5;9286:8;9276:80;;-1:-1:-1;9327:1:1;9341:5;;9276:80;9375:4;9365:76;;-1:-1:-1;9412:1:1;9426:5;;9365:76;9457:4;9475:1;9470:59;;;;9543:1;9538:130;;;;9450:218;;9470:59;9500:1;9491:10;;9514:5;;;9538:130;9575:3;9565:8;9562:17;9559:43;;;9582:18;;:::i;:::-;-1:-1:-1;;9638:1:1;9624:16;;9653:5;;9450:218;;9752:2;9742:8;9739:16;9733:3;9727:4;9724:13;9720:36;9714:2;9704:8;9701:16;9696:2;9690:4;9687:12;9683:35;9680:77;9677:159;;;-1:-1:-1;9789:19:1;;;9821:5;;9677:159;9868:34;9893:8;9887:4;9868:34;:::i;:::-;9938:6;9934:1;9930:6;9926:19;9917:7;9914:32;9911:58;;;9949:18;;:::i;:::-;9987:20;;9207:806;-1:-1:-1;;;9207:806:1:o;10018:140::-;10076:5;10105:47;10146:4;10136:8;10132:19;10126:4;10105:47;:::i;10163:168::-;10203:7;10269:1;10265;10261:6;10257:14;10254:1;10251:21;10246:1;10239:9;10232:17;10228:45;10225:71;;;10276:18;;:::i;:::-;-1:-1:-1;10316:9:1;;10163:168::o;10336:217::-;10376:1;10402;10392:132;;10446:10;10441:3;10437:20;10434:1;10427:31;10481:4;10478:1;10471:15;10509:4;10506:1;10499:15;10392:132;-1:-1:-1;10538:9:1;;10336:217::o;10558:405::-;10760:2;10742:21;;;10799:2;10779:18;;;10772:30;10838:34;10833:2;10818:18;;10811:62;-1:-1:-1;;;10904:2:1;10889:18;;10882:39;10953:3;10938:19;;10558:405::o;12159:125::-;12224:9;;;12245:10;;;12242:36;;;12258:18;;:::i;14526:184::-;14596:6;14649:2;14637:9;14628:7;14624:23;14620:32;14617:52;;;14665:1;14662;14655:12;14617:52;-1:-1:-1;14688:16:1;;14526:184;-1:-1:-1;14526:184:1:o;14994:245::-;15061:6;15114:2;15102:9;15093:7;15089:23;15085:32;15082:52;;;15130:1;15127;15120:12;15082:52;15162:9;15156:16;15181:28;15203:5;15181:28;:::i;15244:407::-;15446:2;15428:21;;;15485:2;15465:18;;;15458:30;15524:34;15519:2;15504:18;;15497:62;-1:-1:-1;;;15590:2:1;15575:18;;15568:41;15641:3;15626:19;;15244:407::o;16064:399::-;16266:2;16248:21;;;16305:2;16285:18;;;16278:30;16344:34;16339:2;16324:18;;16317:62;-1:-1:-1;;;16410:2:1;16395:18;;16388:33;16453:3;16438:19;;16064:399::o;16875:607::-;-1:-1:-1;;;;;17234:15:1;;;17216:34;;17281:2;17266:18;;17259:34;;;;17324:2;17309:18;;17302:34;;;;17367:2;17352:18;;17345:34;;;;17416:15;;;17410:3;17395:19;;17388:44;17196:3;17448:19;;17441:35;;;;17165:3;17150:19;;16875:607::o;17487:306::-;17575:6;17583;17591;17644:2;17632:9;17623:7;17619:23;17615:32;17612:52;;;17660:1;17657;17650:12;17612:52;17689:9;17683:16;17673:26;;17739:2;17728:9;17724:18;17718:25;17708:35;;17783:2;17772:9;17768:18;17762:25;17752:35;;17487:306;;;;;:::o;21156:245::-;21235:6;21243;21296:2;21284:9;21275:7;21271:23;21267:32;21264:52;;;21312:1;21309;21302:12;21264:52;-1:-1:-1;;21335:16:1;;21391:2;21376:18;;;21370:25;21335:16;;21370:25;;-1:-1:-1;21156:245:1:o;22831:401::-;23033:2;23015:21;;;23072:2;23052:18;;;23045:30;23111:34;23106:2;23091:18;;23084:62;-1:-1:-1;;;23177:2:1;23162:18;;23155:35;23222:3;23207:19;;22831:401::o;23237:399::-;23439:2;23421:21;;;23478:2;23458:18;;;23451:30;23517:34;23512:2;23497:18;;23490:62;-1:-1:-1;;;23583:2:1;23568:18;;23561:33;23626:3;23611:19;;23237:399::o;25236:128::-;25303:9;;;25324:11;;;25321:37;;;25338:18;;:::i;26958:251::-;27028:6;27081:2;27069:9;27060:7;27056:23;27052:32;27049:52;;;27097:1;27094;27087:12;27049:52;27129:9;27123:16;27148:31;27173:5;27148:31;:::i;27214:980::-;27476:4;27524:3;27513:9;27509:19;27555:6;27544:9;27537:25;27581:2;27619:6;27614:2;27603:9;27599:18;27592:34;27662:3;27657:2;27646:9;27642:18;27635:31;27686:6;27721;27715:13;27752:6;27744;27737:22;27790:3;27779:9;27775:19;27768:26;;27829:2;27821:6;27817:15;27803:29;;27850:1;27860:195;27874:6;27871:1;27868:13;27860:195;;;27939:13;;-1:-1:-1;;;;;27935:39:1;27923:52;;28030:15;;;;27995:12;;;;27971:1;27889:9;27860:195;;;-1:-1:-1;;;;;;;28111:32:1;;;;28106:2;28091:18;;28084:60;-1:-1:-1;;;28175:3:1;28160:19;28153:35;28072:3;27214:980;-1:-1:-1;;;27214:980:1:o

Swarm Source

ipfs://00325d9b91ee1fb8a0bff40730ad303132021fa43977dc071de844761aa31fb9
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.