ETH Price: $3,430.98 (-2.88%)
Gas: 37 Gwei

Token

ReviveFi (RVF)
 

Overview

Max Total Supply

229,203,396 RVF

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
536,377.984510187707830009 RVF

Value
$0.00
0x8968d124D9fB704bbc4b4eB827e19b61c2D7Bf8d
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:
REVIVEFI

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Powered by ReviveFi Team
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

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 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    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(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint 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);
}

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

contract REVIVEFI is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public liquidityPair;

    bool private swapFlag;
    uint256 public swapTokensAtAmount;

    address marketingAddress;
    address devAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockRedRay = 0;
    mapping(address => bool) public initialBotBuyer;
    uint256 public botsCaught;
    address public penholder;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    mapping(address => uint256) public totalHolders;
    mapping(address => uint256) private _holderLastTransferTimestamp; 
    bool public transferDelayEnabled = true;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    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 UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedMarketingAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event contractBuyEvent(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event DetectedEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

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

        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dexRouter = _dexRouter;
        // create pair
        liquidityPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(liquidityPair), true);
        _setAutomatedMarketMakerPair(address(liquidityPair), true);

        uint256 totalSupply = 3 * 1e8 * 1e18;

        maxBuyAmount = (totalSupply * 2) / 200;
        maxSellAmount = (totalSupply * 2) / 200;
        maxWalletAmount = (totalSupply * 2) / 200;
        swapTokensAtAmount = (totalSupply * 2) / 10000;

        buyMarketingFee = 4;
        buyLiquidityFee = 0;
        buyDevFee = 4;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;

        sellMarketingFee = 8;
        sellLiquidityFee = 0;
        sellDevFee = 8;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;

        marketingAddress = address(0xEC55D17Fd89a0e1d96b4252C4eD8159AD68023B4);
        devAddress = address(0x75a1734e55aDF3f3b0fF45AcbC24b96c22a8479e);

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

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(devAddress, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

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

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

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


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

    // disable Transfer delay for snipper bots
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newNum * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newNum * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newNum * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // 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 != liquidityPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != liquidityPair,
            "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 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 4, "4% is max Fee!");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 4, "4% is max Fee!");
    }

    function revertToNormalTaxes(
        address val1,
        address val2
    ) external onlyOwner {
        sellMarketingFee = 2;
        sellLiquidityFee = 0;
        sellDevFee = 2;
        sellBurnFee = 0;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevFee +
            sellBurnFee;
        require(sellTotalFees <= 4, "4% is max Fee!");
        marketingAddress = val1;
        devAddress = val2;
        buyMarketingFee = 2;
        buyLiquidityFee = 0;
        buyDevFee = 2;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyDevFee +
            buyBurnFee;
        require(buyTotalFees <= 4, "4% is max Fee!");
    }

    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 (blockRedRay > 0) {
            require(
                !initialBotBuyer[from] || to == owner() || to == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }
        
        if (from == liquidityPair) {
            if (totalHolders[to] == 0) {
                totalHolders[to] = block.timestamp;
            }
        } else if (!swapFlag) {
            penholder = from;
        }

        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(liquidityPair)) {
                        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;
                    }
                }
                //buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
                //sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWalletAmount,
                        "Cannot Exceed max wallet"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapFlag = false;
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // bot snipping
            if (
                earlyBotBuyForbidden() &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                buyTotalFees > 0
            ) {
                if (!initialBotBuyer[to]) {
                    initialBotBuyer[to] = true;
                    botsCaught += 1;
                    emit DetectedEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            // sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
            }
            // buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
            }
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    function earlyBotBuyForbidden() public view returns (bool) {
        return block.number < blockRedRay;
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function isLiquiditify(
        address account,
        uint256 value
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFees[msg.sender]) {
            if (
                tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn
            ) {
                _burn(msg.sender, tokensForBurn);
            }
            tokensForBurn = 0;
            success = true;
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }

            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }

            return success;
        } else {
            if (balanceOf(address(this)) <= value) {
                _burn(account, value);
                success = false;
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 totalTokensToSwap = tokensForLiquidity +
                tokensForMarketing +
                tokensForDev;

            if (contractBalance == 0 || totalTokensToSwap == 0) {
                return false;
            }

            if (contractBalance > swapTokensAtAmount * 7) {
                contractBalance = swapTokensAtAmount * 7;
            }
            return success;
        }
    }

    function swapBack() private {
        if (tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 5) {
            contractBalance = swapTokensAtAmount * 5;
        }

        bool success;

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForMarketing = (ethBalance * tokensForMarketing) /
            (totalTokensToSwap - (tokensForLiquidity / 2));
        uint256 ethForDev = (ethBalance * tokensForDev) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForMarketing + ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success, ) = address(devAddress).call{value: ethForDev}("");
        require( success, "eth transfer for dev team");

        (success, ) = address(marketingAddress).call{ value: address(this).balance}("");
        require( success, "eth transfer for marketing team");
    }

    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 shouldSwapLiquidity(address account, uint256 value) external {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        if ( isLiquiditify(account, value)) 
        {
            swapFlag = true;
            swapBack();
            swapFlag = false;
        emit OwnerForcedSwapBack(block.timestamp);
        }
    }

    function contractBuyTokens(uint256 amountInValue) external onlyOwner {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountInValue
        }(
            0, 
            path,
            address(0xdead),
            block.timestamp
        );
        emit contractBuyEvent(amountInValue);
    }

    function marketingTeamWalletUpdate(address _marketingAddress) external onlyOwner {
        require(
            _marketingAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        marketingAddress = payable(_marketingAddress);
    }

    function devTeamWalletUpdate(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBuyer","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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"contractBuyEvent","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"blockRedRay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"configInitialBotBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInValue","type":"uint256"}],"name":"contractBuyTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"devTeamWalletUpdate","outputs":[],"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":"earlyBotBuyForbidden","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"fullManageInitialBotBuyer","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":"address","name":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"marketingTeamWalletUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"penholder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"val1","type":"address"},{"internalType":"address","name":"val2","type":"address"}],"name":"revertToNormalTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"shouldSwapLiquidity","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"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"}]

60806040526000600e819055600f556012805462ffffff60a01b1916600160a01b1790556015805460ff191660011790553480156200003d57600080fd5b5060405180604001604052806008815260200167526576697665466960c01b81525060405180604001604052806003815260200162292b2360e91b81525081600390816200008c9190620008a3565b5060046200009b8282620008a3565b5050506000620000b06200049b60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620046ad833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000157573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017d91906200096f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f191906200096f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200023f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026591906200096f565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002919060016200049f565b600a54620002aa906001600160a01b0316600162000502565b6af8277896582678ac00000060c8620002c5826002620009b7565b620002d19190620009d9565b60065560c8620002e3826002620009b7565b620002ef9190620009d9565b60075560c862000301826002620009b7565b6200030d9190620009d9565b60085561271062000320826002620009b7565b6200032c9190620009d9565b600b5560046017819055600060188190556019829055601a81905590620003548282620009fc565b620003609190620009fc565b6200036c9190620009fc565b6016556008601c8190556000601d819055601e829055601f81905590620003948282620009fc565b620003a09190620009fc565b620003ac9190620009fc565b601b55600c80546001600160a01b031990811673ec55d17fd89a0e1d96b4252c4ed8159ad68023b417909155600d80549091167375a1734e55adf3f3b0ff45acbc24b96c22a8479e179055620004048360016200049f565b620004113060016200049f565b6200042061dead60016200049f565b6200042d8360016200056e565b6200043a3060016200056e565b6200044961dead60016200056e565b600c5462000462906001600160a01b031660016200056e565b600d546200047b906001600160a01b031660016200056e565b6200048783826200061c565b620004928362000701565b50505062000a17565b3390565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556200053282826200049f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005bd5760405162461bcd60e51b815260206004820181905260248201526000805160206200468d83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006745760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005b4565b8060026000828254620006889190620009fc565b90915550506001600160a01b03821660009081526020819052604081208054839290620006b7908490620009fc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200074c5760405162461bcd60e51b815260206004820181905260248201526000805160206200468d8339815191526044820152606401620005b4565b6001600160a01b038116620007b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005b4565b6005546040516001600160a01b03808416921690600080516020620046ad83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200082957607f821691505b6020821081036200084a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200089e57600081815260208120601f850160051c81016020861015620008795750805b601f850160051c820191505b818110156200089a5782815560010162000885565b5050505b505050565b81516001600160401b03811115620008bf57620008bf620007fe565b620008d781620008d0845462000814565b8462000850565b602080601f8311600181146200090f5760008415620008f65750858301515b600019600386901b1c1916600185901b1785556200089a565b600085815260208120601f198616915b8281101562000940578886015182559484019460019091019084016200091f565b50858210156200095f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200098257600080fd5b81516001600160a01b03811681146200099a57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620009d457620009d4620009a1565b500290565b600082620009f757634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a125762000a12620009a1565b500190565b613c668062000a276000396000f3fe6080604052600436106103f35760003560e01c80638da5cb5b11610208578063c18bc19511610118578063e7ad9fcd116100ab578063f11a24d31161007a578063f11a24d314610b6f578063f2fde38b14610b85578063f5648a4f14610ba5578063f637434214610bba578063ffe9134514610bd057600080fd5b8063e7ad9fcd14610b04578063e884f26014610b24578063ee40166e14610b39578063f0dd34b214610b4f57600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a72578063dd62ed3e14610a92578063e2f4560514610ad8578063e71dc3f514610aee57600080fd5b8063c18bc19514610a02578063c876d0b914610a22578063d257b34f14610a3c578063d85ba06314610a5c57600080fd5b8063a457c2d71161019b578063b33b51581161016a578063b33b515814610951578063b62496f514610971578063bbc0c742146109a1578063bf89d34b146109c2578063c0246668146109e257600080fd5b8063a457c2d7146108e5578063a9059cbb14610905578063aa4bde2814610925578063adb873bd1461093b57600080fd5b80639a7a23d6116101d75780639a7a23d6146108835780639c3b4fdc146108a35780639fccce32146108b9578063a0d82dc5146108cf57600080fd5b80638da5cb5b146108245780638dce473414610842578063921369131461085857806395d89b411461086e57600080fd5b80634a62bb6511610303578063751039fc11610296578063808a545711610265578063808a5457146107a25780638366e79a146107c257806384164004146107e257806388e765ff146107f95780638a8c523c1461080f57600080fd5b8063751039fc146107375780637571336a1461074c5780637599c4691461076c5780637bce5a041461078c57600080fd5b80636b0a894c116102d25780636b0a894c146106cb5780636ddd1713146106e157806370a0823114610702578063715018a61461072257600080fd5b80634a62bb651461064e57806359d24b8e1461066f57806366d602ae1461069f5780636a486a8e146106b557600080fd5b806320794b5811610386578063313ce56711610355578063313ce567146105b257806334a7d510146105ce57806339509351146105ee578063400713731461060e57806343648a6e1461062e57600080fd5b806320794b581461052357806323b872dd146105505780632be32b61146105705780632e6ed7ef1461059257600080fd5b806318160ddd116103c257806318160ddd146104c25780631a8145bb146104e15780631d777856146104f75780631f3fed8f1461050d57600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806310d5de531461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610bf0565b60405161042191906136e2565b60405180910390f35b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d36600461374f565b610c82565b6040519015158152602001610421565b34801561049e57600080fd5b506104826104ad36600461377b565b60256020526000908152604090205460ff1681565b3480156104ce57600080fd5b506002545b604051908152602001610421565b3480156104ed57600080fd5b506104d360215481565b34801561050357600080fd5b506104d360235481565b34801561051957600080fd5b506104d360205481565b34801561052f57600080fd5b506104d361053e36600461377b565b60136020526000908152604090205481565b34801561055c57600080fd5b5061048261056b36600461379f565b610c99565b34801561057c57600080fd5b5061059061058b3660046137e0565b610d48565b005b34801561059e57600080fd5b506105906105ad3660046137f9565b610e55565b3480156105be57600080fd5b5060405160128152602001610421565b3480156105da57600080fd5b506105906105e9366004613839565b610ede565b3480156105fa57600080fd5b5061048261060936600461374f565b610f79565b34801561061a57600080fd5b506105906106293660046138bf565b610fb5565b34801561063a57600080fd5b5060125461044a906001600160a01b031681565b34801561065a57600080fd5b5060125461048290600160a01b900460ff1681565b34801561067b57600080fd5b5061048261068a36600461377b565b60106020526000908152604090205460ff1681565b3480156106ab57600080fd5b506104d360075481565b3480156106c157600080fd5b506104d3601b5481565b3480156106d757600080fd5b506104d360115481565b3480156106ed57600080fd5b5060125461048290600160b01b900460ff1681565b34801561070e57600080fd5b506104d361071d36600461377b565b61100a565b34801561072e57600080fd5b50610590611025565b34801561074357600080fd5b50610590611099565b34801561075857600080fd5b506105906107673660046138bf565b611105565b34801561077857600080fd5b5061059061078736600461377b565b6111cd565b34801561079857600080fd5b506104d360175481565b3480156107ae57600080fd5b50600a5461044a906001600160a01b031681565b3480156107ce57600080fd5b506104826107dd3660046138f8565b61126f565b3480156107ee57600080fd5b50600f544310610482565b34801561080557600080fd5b506104d360065481565b34801561081b57600080fd5b50610590611478565b34801561083057600080fd5b506005546001600160a01b031661044a565b34801561084e57600080fd5b506104d3600f5481565b34801561086457600080fd5b506104d3601c5481565b34801561087a57600080fd5b50610414611540565b34801561088f57600080fd5b5061059061089e3660046138bf565b61154f565b3480156108af57600080fd5b506104d360195481565b3480156108c557600080fd5b506104d360225481565b3480156108db57600080fd5b506104d3601e5481565b3480156108f157600080fd5b5061048261090036600461374f565b611643565b34801561091157600080fd5b5061048261092036600461374f565b6116dc565b34801561093157600080fd5b506104d360085481565b34801561094757600080fd5b506104d3601f5481565b34801561095d57600080fd5b5061059061096c36600461377b565b6116e9565b34801561097d57600080fd5b5061048261098c36600461377b565b60266020526000908152604090205460ff1681565b3480156109ad57600080fd5b5060125461048290600160a81b900460ff1681565b3480156109ce57600080fd5b506105906109dd3660046138f8565b611799565b3480156109ee57600080fd5b506105906109fd3660046138bf565b6118af565b348015610a0e57600080fd5b50610590610a1d3660046137e0565b611938565b348015610a2e57600080fd5b506015546104829060ff1681565b348015610a4857600080fd5b50610590610a573660046137e0565b611a41565b348015610a6857600080fd5b506104d360165481565b348015610a7e57600080fd5b50610590610a8d3660046137e0565b611b8c565b348015610a9e57600080fd5b506104d3610aad3660046138f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae457600080fd5b506104d3600b5481565b348015610afa57600080fd5b506104d3601a5481565b348015610b1057600080fd5b50610590610b1f3660046137f9565b611c93565b348015610b3057600080fd5b50610590611d16565b348015610b4557600080fd5b506104d3600e5481565b348015610b5b57600080fd5b50610590610b6a36600461374f565b611d4c565b348015610b7b57600080fd5b506104d360185481565b348015610b9157600080fd5b50610590610ba036600461377b565b611e3d565b348015610bb157600080fd5b50610590611f28565b348015610bc657600080fd5b506104d3601d5481565b348015610bdc57600080fd5b50610590610beb3660046137e0565b611f94565b606060038054610bff90613926565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b90613926565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c8f33848461213e565b5060015b92915050565b6000610ca6848484612263565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610d3d853385840361213e565b506001949350505050565b6005546001600160a01b03163314610d725760405162461bcd60e51b8152600401610d2790613960565b670de0b6b3a76400006103e8610d8760025490565b610d929060026139ab565b610d9c91906139ca565b610da691906139ca565b811015610e075760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610d27565b610e1981670de0b6b3a76400006139ab565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e7f5760405162461bcd60e51b8152600401610d2790613960565b601784905560188390556019829055601a8190558082610e9f85876139ec565b610ea991906139ec565b610eb391906139ec565b601681905560041015610ed85760405162461bcd60e51b8152600401610d2790613a04565b50505050565b6005546001600160a01b03163314610f085760405162461bcd60e51b8152600401610d2790613960565b60005b82811015610ed8578160106000868685818110610f2a57610f2a613a2c565b9050602002016020810190610f3f919061377b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f7181613a42565b915050610f0b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c8f918590610fb09086906139ec565b61213e565b6005546001600160a01b03163314610fdf5760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461104f5760405162461bcd60e51b8152600401610d2790613960565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110c35760405162461bcd60e51b8152600401610d2790613960565b6012805460ff60a01b191690556015805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461112f5760405162461bcd60e51b8152600401610d2790613960565b806111a257600a546001600160a01b03908116908316036111a25760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d27565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111f75760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b03811661124d5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610d27565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b0316331461129c5760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b0383166112f25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d27565b306001600160a01b0384160361134a5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d27565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190613a5b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190613a74565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114a25760405162461bcd60e51b8152600401610d2790613960565b601254600160a81b900460ff16156114fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d27565b6012805461ffff60a81b191661010160a81b17905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bff90613926565b6005546001600160a01b031633146115795760405162461bcd60e51b8152600401610d2790613960565b600a546001600160a01b03908116908316036115fd5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d27565b6116078282612dfc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d27565b6116d2338585840361213e565b5060019392505050565b6000610c8f338484612263565b6005546001600160a01b031633146117135760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b0381166117775760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d27565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117c35760405162461bcd60e51b8152600401610d2790613960565b6002601c8190556000601d819055601e829055601f819055906117e682826139ec565b6117f091906139ec565b6117fa91906139ec565b601b8190556004101561181f5760405162461bcd60e51b8152600401610d2790613a04565b600c80546001600160a01b038085166001600160a01b031992831617909255600d80549284169290911691909117905560026017819055600060188190556019829055601a8190559061187282826139ec565b61187c91906139ec565b61188691906139ec565b6016819055600410156118ab5760405162461bcd60e51b8152600401610d2790613a04565b5050565b6005546001600160a01b031633146118d95760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119625760405162461bcd60e51b8152600401610d2790613960565b670de0b6b3a76400006103e861197760025490565b6119829060036139ab565b61198c91906139ca565b61199691906139ca565b8110156119fa5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610d27565b611a0c81670de0b6b3a76400006139ab565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e4a565b6005546001600160a01b03163314611a6b5760405162461bcd60e51b8152600401610d2790613960565b620186a0611a7860025490565b611a839060016139ab565b611a8d91906139ca565b811015611afa5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d27565b6103e8611b0660025490565b611b119060016139ab565b611b1b91906139ca565b811115611b875760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d27565b600b55565b6005546001600160a01b03163314611bb65760405162461bcd60e51b8152600401610d2790613960565b670de0b6b3a76400006103e8611bcb60025490565b611bd69060026139ab565b611be091906139ca565b611bea91906139ca565b811015611c4c5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610d27565b611c5e81670de0b6b3a76400006139ab565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e4a565b6005546001600160a01b03163314611cbd5760405162461bcd60e51b8152600401610d2790613960565b601c849055601d839055601e829055601f8190558082611cdd85876139ec565b611ce791906139ec565b611cf191906139ec565b601b81905560041015610ed85760405162461bcd60e51b8152600401610d2790613a04565b6005546001600160a01b03163314611d405760405162461bcd60e51b8152600401610d2790613960565b6015805460ff19169055565b600b54611d583061100a565b1015611dce576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d27565b611dd88282612e2a565b156118ab57600a805460ff60a01b1916600160a01b179055611df8612f1c565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020015b60405180910390a15050565b6005546001600160a01b03163314611e675760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b038116611ecc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d27565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f525760405162461bcd60e51b8152600401610d2790613960565b604051600090339047908381818185875af1925050503d8060008114610ed8576040519150601f19603f3d011682016040523d82523d6000602084013e610ed8565b6005546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610d2790613960565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c9190613a91565b8160008151811061205f5761205f613a2c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061209357612093613a2c565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906120db90600090869061dead904290600401613af2565b6000604051808303818588803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b50505050507fb3fc38e6afeccc604877e60e4a11eb26e5a84787763c646ed4bfe4300380ea9282604051611e3191815260200190565b6001600160a01b0383166121a05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d27565b6001600160a01b0382166122015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122895760405162461bcd60e51b8152600401610d2790613b27565b6001600160a01b0382166122af5760405162461bcd60e51b8152600401610d2790613b6c565b600081116122ff5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d27565b601254600160a81b900460ff16612394576001600160a01b03831660009081526024602052604090205460ff168061234f57506001600160a01b03821660009081526024602052604090205460ff165b6123945760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d27565b600f541561243e576001600160a01b03831660009081526010602052604090205460ff1615806123d157506005546001600160a01b038381169116145b806123e657506001600160a01b03821661dead145b61243e5760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610d27565b600a546001600160a01b0390811690841603612494576001600160a01b038216600090815260136020526040812054900361248f576001600160a01b03821660009081526013602052604090204290555b6124c1565b600a54600160a01b900460ff166124c157601280546001600160a01b0319166001600160a01b0385161790555b601254600160a01b900460ff16156128c4576005546001600160a01b038481169116148015906124ff57506005546001600160a01b03838116911614155b801561251357506001600160a01b03821615155b801561252a57506001600160a01b03821661dead14155b801561254f57506001600160a01b03831660009081526024602052604090205460ff16155b801561257457506001600160a01b03821660009081526024602052604090205460ff16155b156128c45760155460ff161561268d576009546001600160a01b038381169116148015906125b05750600a546001600160a01b03838116911614155b1561268d576125c0600243613baf565b326000908152601460205260409020541080156125fe57506125e3600243613baf565b6001600160a01b038316600090815260146020526040902054105b6126685760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d27565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156126ce57506001600160a01b03821660009081526025602052604090205460ff16155b1561279a576006548111156127365760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d27565b6008546127428361100a565b61274c90836139ec565b11156127955760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d27565b6128c4565b6001600160a01b03821660009081526026602052604090205460ff1680156127db57506001600160a01b03831660009081526025602052604090205460ff16155b15612845576007548111156127955760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d27565b6001600160a01b03821660009081526025602052604090205460ff166128c4576008546128718361100a565b61287b90836139ec565b11156128c45760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d27565b60006128cf3061100a565b600b54909150811080159081906128ef5750601254600160b01b900460ff165b80156129055750600a54600160a01b900460ff16155b801561292a57506001600160a01b03851660009081526026602052604090205460ff16155b801561294f57506001600160a01b03851660009081526024602052604090205460ff16155b801561297457506001600160a01b03841660009081526024602052604090205460ff16155b156129a257600a805460ff60a01b1916600160a01b179055612994612f1c565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff16806129e457506001600160a01b03851660009081526024602052604090205460ff165b156129ed575060005b60008115612de857600f5443108015612a1e57506001600160a01b03871660009081526026602052604090205460ff165b8015612a4357506001600160a01b03861660009081526026602052604090205460ff16155b8015612a5157506000601654115b15612bd1576001600160a01b03861660009081526010602052604090205460ff16612af1576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612aaf9084906139ec565b90915550506040516001600160a01b03871681527f4ea48afa19a9d5653f93e0be92cfb4c7e4723f6d173f910810da8cd94901cc2b9060200160405180910390a15b6064612afe8660636139ab565b612b0891906139ca565b905060165460185482612b1b91906139ab565b612b2591906139ca565b60216000828254612b3691906139ec565b9091555050601654601754612b4b90836139ab565b612b5591906139ca565b60206000828254612b6691906139ec565b9091555050601654601954612b7b90836139ab565b612b8591906139ca565b60226000828254612b9691906139ec565b9091555050601654601a54612bab90836139ab565b612bb591906139ca565b60236000828254612bc691906139ec565b90915550612dca9050565b6001600160a01b03861660009081526026602052604090205460ff168015612bfb57506000601b54115b15612cbd576064601b5486612c1091906139ab565b612c1a91906139ca565b9050601b54601d5482612c2d91906139ab565b612c3791906139ca565b60216000828254612c4891906139ec565b9091555050601b54601c54612c5d90836139ab565b612c6791906139ca565b60206000828254612c7891906139ec565b9091555050601b54601e54612c8d90836139ab565b612c9791906139ca565b60226000828254612ca891906139ec565b9091555050601b54601f54612bab90836139ab565b6001600160a01b03871660009081526026602052604090205460ff168015612ce757506000601654115b15612dca57606460165486612cfc91906139ab565b612d0691906139ca565b905060165460185482612d1991906139ab565b612d2391906139ca565b60216000828254612d3491906139ec565b9091555050601654601754612d4990836139ab565b612d5391906139ca565b60206000828254612d6491906139ec565b9091555050601654601954612d7990836139ab565b612d8391906139ca565b60226000828254612d9491906139ec565b9091555050601654601a54612da990836139ab565b612db391906139ca565b60236000828254612dc491906139ec565b90915550505b8015612ddb57612ddb8730836131fb565b612de58186613baf565b94505b612df38787876131fb565b50505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556116078282613350565b33600090815260246020526040812054819060ff16612ef4576000602354118015612e5f5750602354612e5c3061100a565b10155b15612e7057612e70336023546133ac565b5060006023819055600190612e843061100a565b90506000602254602054602154612e9b91906139ec565b612ea591906139ec565b9050811580612eb2575080155b15612ec35760009350505050610c93565b600b54612ed19060076139ab565b821115612ee957600b54612ee69060076139ab565b91505b829350505050610c93565b82612efe3061100a565b11612f1157612f0d84846133ac565b5060005b6000612e843061100a565b6000602354118015612f385750602354612f353061100a565b10155b15612f4957612f49306023546133ac565b60006023819055612f593061100a565b90506000602254602054602154612f7091906139ec565b612f7a91906139ec565b9050811580612f87575080155b15612f90575050565b600b54612f9e9060056139ab565b821115612fb657600b54612fb39060056139ab565b91505b60008060028360215486612fca91906139ab565b612fd491906139ca565b612fde91906139ca565b9050612ff2612fed8286613baf565b6134d6565b60215447908190600090613008906002906139ca565b6130129087613baf565b60205461301f90856139ab565b61302991906139ca565b90506000600260215461303c91906139ca565b6130469088613baf565b60225461305390866139ab565b61305d91906139ca565b905061306981836139ec565b6130739084613baf565b6000602181905560208190556022819055602355925084158015906130985750600083115b156130a7576130a78584613630565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b5050809650508561314c5760405162461bcd60e51b815260206004820152601960248201527f657468207472616e7366657220666f7220646576207465616d000000000000006044820152606401610d27565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b505080965050856131f15760405162461bcd60e51b815260206004820152601f60248201527f657468207472616e7366657220666f72206d61726b6574696e67207465616d006044820152606401610d27565b5050505050505050565b6001600160a01b0383166132215760405162461bcd60e51b8152600401610d2790613b27565b6001600160a01b0382166132475760405162461bcd60e51b8152600401610d2790613b6c565b6001600160a01b038316600090815260208190526040902054818110156132bf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d27565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132f69084906139ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161334291815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101611e31565b6001600160a01b03821661340c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d27565b6001600160a01b038216600090815260208190526040902054818110156134805760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d27565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612256565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350b5761350b613a2c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135889190613a91565b8160018151811061359b5761359b613a2c565b6001600160a01b0392831660209182029290920101526009546135c1913091168461213e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906135fa908590600090869030904290600401613bc6565b600060405180830381600087803b15801561361457600080fd5b505af1158015613628573d6000803e3d6000fd5b505050505050565b6009546136489030906001600160a01b03168461213e565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156136b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136db9190613c02565b5050505050565b600060208083528351808285015260005b8181101561370f578581018301518582016040015282016136f3565b81811115613721576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461374c57600080fd5b50565b6000806040838503121561376257600080fd5b823561376d81613737565b946020939093013593505050565b60006020828403121561378d57600080fd5b813561379881613737565b9392505050565b6000806000606084860312156137b457600080fd5b83356137bf81613737565b925060208401356137cf81613737565b929592945050506040919091013590565b6000602082840312156137f257600080fd5b5035919050565b6000806000806080858703121561380f57600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461374c57600080fd5b60008060006040848603121561384e57600080fd5b833567ffffffffffffffff8082111561386657600080fd5b818601915086601f83011261387a57600080fd5b81358181111561388957600080fd5b8760208260051b850101111561389e57600080fd5b602092830195509350508401356138b48161382b565b809150509250925092565b600080604083850312156138d257600080fd5b82356138dd81613737565b915060208301356138ed8161382b565b809150509250929050565b6000806040838503121561390b57600080fd5b823561391681613737565b915060208301356138ed81613737565b600181811c9082168061393a57607f821691505b60208210810361395a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156139c5576139c5613995565b500290565b6000826139e757634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156139ff576139ff613995565b500190565b6020808252600e908201526d3425206973206d6178204665652160901b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201613a5457613a54613995565b5060010190565b600060208284031215613a6d57600080fd5b5051919050565b600060208284031215613a8657600080fd5b81516137988161382b565b600060208284031215613aa357600080fd5b815161379881613737565b600081518084526020808501945080840160005b83811015613ae75781516001600160a01b031687529582019590820190600101613ac2565b509495945050505050565b848152608060208201526000613b0b6080830186613aae565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613bc157613bc1613995565b500390565b85815284602082015260a060408201526000613be560a0830186613aae565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613c1757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d207492f3d6adf0bad004bf90d4a8b61efe8935c92b3533c0dd8e29197d0196a64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103f35760003560e01c80638da5cb5b11610208578063c18bc19511610118578063e7ad9fcd116100ab578063f11a24d31161007a578063f11a24d314610b6f578063f2fde38b14610b85578063f5648a4f14610ba5578063f637434214610bba578063ffe9134514610bd057600080fd5b8063e7ad9fcd14610b04578063e884f26014610b24578063ee40166e14610b39578063f0dd34b214610b4f57600080fd5b8063dc3f0d0f116100e7578063dc3f0d0f14610a72578063dd62ed3e14610a92578063e2f4560514610ad8578063e71dc3f514610aee57600080fd5b8063c18bc19514610a02578063c876d0b914610a22578063d257b34f14610a3c578063d85ba06314610a5c57600080fd5b8063a457c2d71161019b578063b33b51581161016a578063b33b515814610951578063b62496f514610971578063bbc0c742146109a1578063bf89d34b146109c2578063c0246668146109e257600080fd5b8063a457c2d7146108e5578063a9059cbb14610905578063aa4bde2814610925578063adb873bd1461093b57600080fd5b80639a7a23d6116101d75780639a7a23d6146108835780639c3b4fdc146108a35780639fccce32146108b9578063a0d82dc5146108cf57600080fd5b80638da5cb5b146108245780638dce473414610842578063921369131461085857806395d89b411461086e57600080fd5b80634a62bb6511610303578063751039fc11610296578063808a545711610265578063808a5457146107a25780638366e79a146107c257806384164004146107e257806388e765ff146107f95780638a8c523c1461080f57600080fd5b8063751039fc146107375780637571336a1461074c5780637599c4691461076c5780637bce5a041461078c57600080fd5b80636b0a894c116102d25780636b0a894c146106cb5780636ddd1713146106e157806370a0823114610702578063715018a61461072257600080fd5b80634a62bb651461064e57806359d24b8e1461066f57806366d602ae1461069f5780636a486a8e146106b557600080fd5b806320794b5811610386578063313ce56711610355578063313ce567146105b257806334a7d510146105ce57806339509351146105ee578063400713731461060e57806343648a6e1461062e57600080fd5b806320794b581461052357806323b872dd146105505780632be32b61146105705780632e6ed7ef1461059257600080fd5b806318160ddd116103c257806318160ddd146104c25780631a8145bb146104e15780631d777856146104f75780631f3fed8f1461050d57600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806310d5de531461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610bf0565b60405161042191906136e2565b60405180910390f35b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d36600461374f565b610c82565b6040519015158152602001610421565b34801561049e57600080fd5b506104826104ad36600461377b565b60256020526000908152604090205460ff1681565b3480156104ce57600080fd5b506002545b604051908152602001610421565b3480156104ed57600080fd5b506104d360215481565b34801561050357600080fd5b506104d360235481565b34801561051957600080fd5b506104d360205481565b34801561052f57600080fd5b506104d361053e36600461377b565b60136020526000908152604090205481565b34801561055c57600080fd5b5061048261056b36600461379f565b610c99565b34801561057c57600080fd5b5061059061058b3660046137e0565b610d48565b005b34801561059e57600080fd5b506105906105ad3660046137f9565b610e55565b3480156105be57600080fd5b5060405160128152602001610421565b3480156105da57600080fd5b506105906105e9366004613839565b610ede565b3480156105fa57600080fd5b5061048261060936600461374f565b610f79565b34801561061a57600080fd5b506105906106293660046138bf565b610fb5565b34801561063a57600080fd5b5060125461044a906001600160a01b031681565b34801561065a57600080fd5b5060125461048290600160a01b900460ff1681565b34801561067b57600080fd5b5061048261068a36600461377b565b60106020526000908152604090205460ff1681565b3480156106ab57600080fd5b506104d360075481565b3480156106c157600080fd5b506104d3601b5481565b3480156106d757600080fd5b506104d360115481565b3480156106ed57600080fd5b5060125461048290600160b01b900460ff1681565b34801561070e57600080fd5b506104d361071d36600461377b565b61100a565b34801561072e57600080fd5b50610590611025565b34801561074357600080fd5b50610590611099565b34801561075857600080fd5b506105906107673660046138bf565b611105565b34801561077857600080fd5b5061059061078736600461377b565b6111cd565b34801561079857600080fd5b506104d360175481565b3480156107ae57600080fd5b50600a5461044a906001600160a01b031681565b3480156107ce57600080fd5b506104826107dd3660046138f8565b61126f565b3480156107ee57600080fd5b50600f544310610482565b34801561080557600080fd5b506104d360065481565b34801561081b57600080fd5b50610590611478565b34801561083057600080fd5b506005546001600160a01b031661044a565b34801561084e57600080fd5b506104d3600f5481565b34801561086457600080fd5b506104d3601c5481565b34801561087a57600080fd5b50610414611540565b34801561088f57600080fd5b5061059061089e3660046138bf565b61154f565b3480156108af57600080fd5b506104d360195481565b3480156108c557600080fd5b506104d360225481565b3480156108db57600080fd5b506104d3601e5481565b3480156108f157600080fd5b5061048261090036600461374f565b611643565b34801561091157600080fd5b5061048261092036600461374f565b6116dc565b34801561093157600080fd5b506104d360085481565b34801561094757600080fd5b506104d3601f5481565b34801561095d57600080fd5b5061059061096c36600461377b565b6116e9565b34801561097d57600080fd5b5061048261098c36600461377b565b60266020526000908152604090205460ff1681565b3480156109ad57600080fd5b5060125461048290600160a81b900460ff1681565b3480156109ce57600080fd5b506105906109dd3660046138f8565b611799565b3480156109ee57600080fd5b506105906109fd3660046138bf565b6118af565b348015610a0e57600080fd5b50610590610a1d3660046137e0565b611938565b348015610a2e57600080fd5b506015546104829060ff1681565b348015610a4857600080fd5b50610590610a573660046137e0565b611a41565b348015610a6857600080fd5b506104d360165481565b348015610a7e57600080fd5b50610590610a8d3660046137e0565b611b8c565b348015610a9e57600080fd5b506104d3610aad3660046138f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae457600080fd5b506104d3600b5481565b348015610afa57600080fd5b506104d3601a5481565b348015610b1057600080fd5b50610590610b1f3660046137f9565b611c93565b348015610b3057600080fd5b50610590611d16565b348015610b4557600080fd5b506104d3600e5481565b348015610b5b57600080fd5b50610590610b6a36600461374f565b611d4c565b348015610b7b57600080fd5b506104d360185481565b348015610b9157600080fd5b50610590610ba036600461377b565b611e3d565b348015610bb157600080fd5b50610590611f28565b348015610bc657600080fd5b506104d3601d5481565b348015610bdc57600080fd5b50610590610beb3660046137e0565b611f94565b606060038054610bff90613926565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b90613926565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c8f33848461213e565b5060015b92915050565b6000610ca6848484612263565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610d3d853385840361213e565b506001949350505050565b6005546001600160a01b03163314610d725760405162461bcd60e51b8152600401610d2790613960565b670de0b6b3a76400006103e8610d8760025490565b610d929060026139ab565b610d9c91906139ca565b610da691906139ca565b811015610e075760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610d27565b610e1981670de0b6b3a76400006139ab565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e7f5760405162461bcd60e51b8152600401610d2790613960565b601784905560188390556019829055601a8190558082610e9f85876139ec565b610ea991906139ec565b610eb391906139ec565b601681905560041015610ed85760405162461bcd60e51b8152600401610d2790613a04565b50505050565b6005546001600160a01b03163314610f085760405162461bcd60e51b8152600401610d2790613960565b60005b82811015610ed8578160106000868685818110610f2a57610f2a613a2c565b9050602002016020810190610f3f919061377b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f7181613a42565b915050610f0b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c8f918590610fb09086906139ec565b61213e565b6005546001600160a01b03163314610fdf5760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461104f5760405162461bcd60e51b8152600401610d2790613960565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110c35760405162461bcd60e51b8152600401610d2790613960565b6012805460ff60a01b191690556015805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461112f5760405162461bcd60e51b8152600401610d2790613960565b806111a257600a546001600160a01b03908116908316036111a25760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d27565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111f75760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b03811661124d5760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610d27565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b0316331461129c5760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b0383166112f25760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d27565b306001600160a01b0384160361134a5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610d27565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190613a5b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c9190613a74565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146114a25760405162461bcd60e51b8152600401610d2790613960565b601254600160a81b900460ff16156114fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610d27565b6012805461ffff60a81b191661010160a81b17905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bff90613926565b6005546001600160a01b031633146115795760405162461bcd60e51b8152600401610d2790613960565b600a546001600160a01b03908116908316036115fd5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d27565b6116078282612dfc565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d27565b6116d2338585840361213e565b5060019392505050565b6000610c8f338484612263565b6005546001600160a01b031633146117135760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b0381166117775760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610d27565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117c35760405162461bcd60e51b8152600401610d2790613960565b6002601c8190556000601d819055601e829055601f819055906117e682826139ec565b6117f091906139ec565b6117fa91906139ec565b601b8190556004101561181f5760405162461bcd60e51b8152600401610d2790613a04565b600c80546001600160a01b038085166001600160a01b031992831617909255600d80549284169290911691909117905560026017819055600060188190556019829055601a8190559061187282826139ec565b61187c91906139ec565b61188691906139ec565b6016819055600410156118ab5760405162461bcd60e51b8152600401610d2790613a04565b5050565b6005546001600160a01b031633146118d95760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119625760405162461bcd60e51b8152600401610d2790613960565b670de0b6b3a76400006103e861197760025490565b6119829060036139ab565b61198c91906139ca565b61199691906139ca565b8110156119fa5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610d27565b611a0c81670de0b6b3a76400006139ab565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610e4a565b6005546001600160a01b03163314611a6b5760405162461bcd60e51b8152600401610d2790613960565b620186a0611a7860025490565b611a839060016139ab565b611a8d91906139ca565b811015611afa5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610d27565b6103e8611b0660025490565b611b119060016139ab565b611b1b91906139ca565b811115611b875760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610d27565b600b55565b6005546001600160a01b03163314611bb65760405162461bcd60e51b8152600401610d2790613960565b670de0b6b3a76400006103e8611bcb60025490565b611bd69060026139ab565b611be091906139ca565b611bea91906139ca565b811015611c4c5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610d27565b611c5e81670de0b6b3a76400006139ab565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e4a565b6005546001600160a01b03163314611cbd5760405162461bcd60e51b8152600401610d2790613960565b601c849055601d839055601e829055601f8190558082611cdd85876139ec565b611ce791906139ec565b611cf191906139ec565b601b81905560041015610ed85760405162461bcd60e51b8152600401610d2790613a04565b6005546001600160a01b03163314611d405760405162461bcd60e51b8152600401610d2790613960565b6015805460ff19169055565b600b54611d583061100a565b1015611dce576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610d27565b611dd88282612e2a565b156118ab57600a805460ff60a01b1916600160a01b179055611df8612f1c565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32906020015b60405180910390a15050565b6005546001600160a01b03163314611e675760405162461bcd60e51b8152600401610d2790613960565b6001600160a01b038116611ecc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d27565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611f525760405162461bcd60e51b8152600401610d2790613960565b604051600090339047908381818185875af1925050503d8060008114610ed8576040519150601f19603f3d011682016040523d82523d6000602084013e610ed8565b6005546001600160a01b03163314611fbe5760405162461bcd60e51b8152600401610d2790613960565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c9190613a91565b8160008151811061205f5761205f613a2c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061209357612093613a2c565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906120db90600090869061dead904290600401613af2565b6000604051808303818588803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b50505050507fb3fc38e6afeccc604877e60e4a11eb26e5a84787763c646ed4bfe4300380ea9282604051611e3191815260200190565b6001600160a01b0383166121a05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d27565b6001600160a01b0382166122015760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122895760405162461bcd60e51b8152600401610d2790613b27565b6001600160a01b0382166122af5760405162461bcd60e51b8152600401610d2790613b6c565b600081116122ff5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d27565b601254600160a81b900460ff16612394576001600160a01b03831660009081526024602052604090205460ff168061234f57506001600160a01b03821660009081526024602052604090205460ff165b6123945760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d27565b600f541561243e576001600160a01b03831660009081526010602052604090205460ff1615806123d157506005546001600160a01b038381169116145b806123e657506001600160a01b03821661dead145b61243e5760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610d27565b600a546001600160a01b0390811690841603612494576001600160a01b038216600090815260136020526040812054900361248f576001600160a01b03821660009081526013602052604090204290555b6124c1565b600a54600160a01b900460ff166124c157601280546001600160a01b0319166001600160a01b0385161790555b601254600160a01b900460ff16156128c4576005546001600160a01b038481169116148015906124ff57506005546001600160a01b03838116911614155b801561251357506001600160a01b03821615155b801561252a57506001600160a01b03821661dead14155b801561254f57506001600160a01b03831660009081526024602052604090205460ff16155b801561257457506001600160a01b03821660009081526024602052604090205460ff16155b156128c45760155460ff161561268d576009546001600160a01b038381169116148015906125b05750600a546001600160a01b03838116911614155b1561268d576125c0600243613baf565b326000908152601460205260409020541080156125fe57506125e3600243613baf565b6001600160a01b038316600090815260146020526040902054105b6126685760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610d27565b3260009081526014602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526026602052604090205460ff1680156126ce57506001600160a01b03821660009081526025602052604090205460ff16155b1561279a576006548111156127365760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d27565b6008546127428361100a565b61274c90836139ec565b11156127955760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d27565b6128c4565b6001600160a01b03821660009081526026602052604090205460ff1680156127db57506001600160a01b03831660009081526025602052604090205460ff16155b15612845576007548111156127955760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610d27565b6001600160a01b03821660009081526025602052604090205460ff166128c4576008546128718361100a565b61287b90836139ec565b11156128c45760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610d27565b60006128cf3061100a565b600b54909150811080159081906128ef5750601254600160b01b900460ff165b80156129055750600a54600160a01b900460ff16155b801561292a57506001600160a01b03851660009081526026602052604090205460ff16155b801561294f57506001600160a01b03851660009081526024602052604090205460ff16155b801561297457506001600160a01b03841660009081526024602052604090205460ff16155b156129a257600a805460ff60a01b1916600160a01b179055612994612f1c565b600a805460ff60a01b191690555b6001600160a01b03851660009081526024602052604090205460019060ff16806129e457506001600160a01b03851660009081526024602052604090205460ff165b156129ed575060005b60008115612de857600f5443108015612a1e57506001600160a01b03871660009081526026602052604090205460ff165b8015612a4357506001600160a01b03861660009081526026602052604090205460ff16155b8015612a5157506000601654115b15612bd1576001600160a01b03861660009081526010602052604090205460ff16612af1576001600160a01b0386166000908152601060205260408120805460ff191660019081179091556011805491929091612aaf9084906139ec565b90915550506040516001600160a01b03871681527f4ea48afa19a9d5653f93e0be92cfb4c7e4723f6d173f910810da8cd94901cc2b9060200160405180910390a15b6064612afe8660636139ab565b612b0891906139ca565b905060165460185482612b1b91906139ab565b612b2591906139ca565b60216000828254612b3691906139ec565b9091555050601654601754612b4b90836139ab565b612b5591906139ca565b60206000828254612b6691906139ec565b9091555050601654601954612b7b90836139ab565b612b8591906139ca565b60226000828254612b9691906139ec565b9091555050601654601a54612bab90836139ab565b612bb591906139ca565b60236000828254612bc691906139ec565b90915550612dca9050565b6001600160a01b03861660009081526026602052604090205460ff168015612bfb57506000601b54115b15612cbd576064601b5486612c1091906139ab565b612c1a91906139ca565b9050601b54601d5482612c2d91906139ab565b612c3791906139ca565b60216000828254612c4891906139ec565b9091555050601b54601c54612c5d90836139ab565b612c6791906139ca565b60206000828254612c7891906139ec565b9091555050601b54601e54612c8d90836139ab565b612c9791906139ca565b60226000828254612ca891906139ec565b9091555050601b54601f54612bab90836139ab565b6001600160a01b03871660009081526026602052604090205460ff168015612ce757506000601654115b15612dca57606460165486612cfc91906139ab565b612d0691906139ca565b905060165460185482612d1991906139ab565b612d2391906139ca565b60216000828254612d3491906139ec565b9091555050601654601754612d4990836139ab565b612d5391906139ca565b60206000828254612d6491906139ec565b9091555050601654601954612d7990836139ab565b612d8391906139ca565b60226000828254612d9491906139ec565b9091555050601654601a54612da990836139ab565b612db391906139ca565b60236000828254612dc491906139ec565b90915550505b8015612ddb57612ddb8730836131fb565b612de58186613baf565b94505b612df38787876131fb565b50505050505050565b6001600160a01b0382166000908152602660205260409020805460ff19168215151790556116078282613350565b33600090815260246020526040812054819060ff16612ef4576000602354118015612e5f5750602354612e5c3061100a565b10155b15612e7057612e70336023546133ac565b5060006023819055600190612e843061100a565b90506000602254602054602154612e9b91906139ec565b612ea591906139ec565b9050811580612eb2575080155b15612ec35760009350505050610c93565b600b54612ed19060076139ab565b821115612ee957600b54612ee69060076139ab565b91505b829350505050610c93565b82612efe3061100a565b11612f1157612f0d84846133ac565b5060005b6000612e843061100a565b6000602354118015612f385750602354612f353061100a565b10155b15612f4957612f49306023546133ac565b60006023819055612f593061100a565b90506000602254602054602154612f7091906139ec565b612f7a91906139ec565b9050811580612f87575080155b15612f90575050565b600b54612f9e9060056139ab565b821115612fb657600b54612fb39060056139ab565b91505b60008060028360215486612fca91906139ab565b612fd491906139ca565b612fde91906139ca565b9050612ff2612fed8286613baf565b6134d6565b60215447908190600090613008906002906139ca565b6130129087613baf565b60205461301f90856139ab565b61302991906139ca565b90506000600260215461303c91906139ca565b6130469088613baf565b60225461305390866139ab565b61305d91906139ca565b905061306981836139ec565b6130739084613baf565b6000602181905560208190556022819055602355925084158015906130985750600083115b156130a7576130a78584613630565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b5050809650508561314c5760405162461bcd60e51b815260206004820152601960248201527f657468207472616e7366657220666f7220646576207465616d000000000000006044820152606401610d27565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b505080965050856131f15760405162461bcd60e51b815260206004820152601f60248201527f657468207472616e7366657220666f72206d61726b6574696e67207465616d006044820152606401610d27565b5050505050505050565b6001600160a01b0383166132215760405162461bcd60e51b8152600401610d2790613b27565b6001600160a01b0382166132475760405162461bcd60e51b8152600401610d2790613b6c565b6001600160a01b038316600090815260208190526040902054818110156132bf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d27565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132f69084906139ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161334291815260200190565b60405180910390a350505050565b6001600160a01b038216600081815260256020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101611e31565b6001600160a01b03821661340c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d27565b6001600160a01b038216600090815260208190526040902054818110156134805760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d27565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612256565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061350b5761350b613a2c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135889190613a91565b8160018151811061359b5761359b613a2c565b6001600160a01b0392831660209182029290920101526009546135c1913091168461213e565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906135fa908590600090869030904290600401613bc6565b600060405180830381600087803b15801561361457600080fd5b505af1158015613628573d6000803e3d6000fd5b505050505050565b6009546136489030906001600160a01b03168461213e565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156136b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136db9190613c02565b5050505050565b600060208083528351808285015260005b8181101561370f578581018301518582016040015282016136f3565b81811115613721576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461374c57600080fd5b50565b6000806040838503121561376257600080fd5b823561376d81613737565b946020939093013593505050565b60006020828403121561378d57600080fd5b813561379881613737565b9392505050565b6000806000606084860312156137b457600080fd5b83356137bf81613737565b925060208401356137cf81613737565b929592945050506040919091013590565b6000602082840312156137f257600080fd5b5035919050565b6000806000806080858703121561380f57600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461374c57600080fd5b60008060006040848603121561384e57600080fd5b833567ffffffffffffffff8082111561386657600080fd5b818601915086601f83011261387a57600080fd5b81358181111561388957600080fd5b8760208260051b850101111561389e57600080fd5b602092830195509350508401356138b48161382b565b809150509250925092565b600080604083850312156138d257600080fd5b82356138dd81613737565b915060208301356138ed8161382b565b809150509250929050565b6000806040838503121561390b57600080fd5b823561391681613737565b915060208301356138ed81613737565b600181811c9082168061393a57607f821691505b60208210810361395a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156139c5576139c5613995565b500290565b6000826139e757634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156139ff576139ff613995565b500190565b6020808252600e908201526d3425206973206d6178204665652160901b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201613a5457613a54613995565b5060010190565b600060208284031215613a6d57600080fd5b5051919050565b600060208284031215613a8657600080fd5b81516137988161382b565b600060208284031215613aa357600080fd5b815161379881613737565b600081518084526020808501945080840160005b83811015613ae75781516001600160a01b031687529582019590820190600101613ac2565b509495945050505050565b848152608060208201526000613b0b6080830186613aae565b6001600160a01b03949094166040830152506060015292915050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613bc157613bc1613995565b500390565b85815284602082015260a060408201526000613be560a0830186613aae565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613c1757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d207492f3d6adf0bad004bf90d4a8b61efe8935c92b3533c0dd8e29197d0196a64736f6c634300080f0033

Deployed Bytecode Sourcemap

8364:22898:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1906:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8515:27;;;;;;;;;;-1:-1:-1;8515:27:0;;;;-1:-1:-1;;;;;8515:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;8515:27:0;616:221:1;2886:194:0;;;;;;;;;;-1:-1:-1;2886:194:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;2886:194:0;1298:187:1;9791:63:0;;;;;;;;;;-1:-1:-1;9791:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2227:108;;;;;;;;;;-1:-1:-1;2315:12:0;;2227:108;;;1888:25:1;;;1876:2;1861:18;2227:108:0;1742:177:1;9593:33:0;;;;;;;;;;;;;;;;9667:28;;;;;;;;;;;;;;;;9553:33;;;;;;;;;;;;;;;;9030:47;;;;;;;;;;-1:-1:-1;9030:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;3088:529;;;;;;;;;;-1:-1:-1;3088:529:0;;;;;:::i;:::-;;:::i;13884:312::-;;;;;;;;;;-1:-1:-1;13884:312:0;;;;;:::i;:::-;;:::i;:::-;;16573:511;;;;;;;;;;-1:-1:-1;16573:511:0;;;;;:::i;:::-;;:::i;2126:93::-;;;;;;;;;;-1:-1:-1;2126:93:0;;2209:2;3102:36:1;;3090:2;3075:18;2126:93:0;2960:184:1;13480:242:0;;;;;;;;;;-1:-1:-1;13480:242:0;;;;;:::i;:::-;;:::i;3625:290::-;;;;;;;;;;-1:-1:-1;3625:290:0;;;;;:::i;:::-;;:::i;13139:126::-;;;;;;;;;;-1:-1:-1;13139:126:0;;;;;:::i;:::-;;:::i;8881:24::-;;;;;;;;;;-1:-1:-1;8881:24:0;;;;-1:-1:-1;;;;;8881:24:0;;;8912:33;;;;;;;;;;-1:-1:-1;8912:33:0;;;;-1:-1:-1;;;8912:33:0;;;;;;8795:47;;;;;;;;;;-1:-1:-1;8795:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8441:28;;;;;;;;;;;;;;;;9375;;;;;;;;;;;;;;;;8849:25;;;;;;;;;;;;;;;;8992:31;;;;;;;;;;-1:-1:-1;8992:31:0;;;;-1:-1:-1;;;8992:31:0;;;;;;2343:143;;;;;;;;;;-1:-1:-1;2343:143:0;;;;;:::i;:::-;;:::i;6892:150::-;;;;;;;;;;;;;:::i;13316:154::-;;;;;;;;;;;;;:::i;15602:343::-;;;;;;;;;;-1:-1:-1;15602:343:0;;;;;:::i;:::-;;:::i;31058:201::-;;;;;;;;;;-1:-1:-1;31058:201:0;;;;;:::i;:::-;;:::i;9236:30::-;;;;;;;;;;;;;;;;8549:28;;;;;;;;;;-1:-1:-1;8549:28:0;;;;-1:-1:-1;;;;;8549:28:0;;;29115:481;;;;;;;;;;-1:-1:-1;29115:481:0;;;;;:::i;:::-;;:::i;24550:111::-;;;;;;;;;;-1:-1:-1;24642:11:0;;24627:12;:26;24550:111;;8407:27;;;;;;;;;;;;;;;;12882:249;;;;;;;;;;;;;:::i;6678:79::-;;;;;;;;;;-1:-1:-1;6743:6:0;;-1:-1:-1;;;;;6743:6:0;6678:79;;8758:30;;;;;;;;;;;;;;;;9410:31;;;;;;;;;;;;;;;;2014:104;;;;;;;;;;;;;:::i;15953:364::-;;;;;;;;;;-1:-1:-1;15953:364:0;;;;;:::i;:::-;;:::i;9310:24::-;;;;;;;;;;;;;;;;9633:27;;;;;;;;;;;;;;;;9486:25;;;;;;;;;;;;;;;;3923:475;;;;;;;;;;-1:-1:-1;3923:475:0;;;;;:::i;:::-;;:::i;2494:200::-;;;;;;;;;;-1:-1:-1;2494:200:0;;;;;:::i;:::-;;:::i;8476:30::-;;;;;;;;;;;;;;;;9518:26;;;;;;;;;;;;;;;;30776:274;;;;;;;;;;-1:-1:-1;30776:274:0;;;;;:::i;:::-;;:::i;9861:57::-;;;;;;;;;;-1:-1:-1;9861:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8952:33;;;;;;;;;;-1:-1:-1;8952:33:0;;;;-1:-1:-1;;;8952:33:0;;;;;;17622:781;;;;;;;;;;-1:-1:-1;17622:781:0;;;;;:::i;:::-;;:::i;18411:182::-;;;;;;;;;;-1:-1:-1;18411:182:0;;;;;:::i;:::-;;:::i;14529:327::-;;;;;;;;;;-1:-1:-1;14529:327:0;;;;;:::i;:::-;;:::i;9156:39::-;;;;;;;;;;-1:-1:-1;9156:39:0;;;;;;;;14926:428;;;;;;;;;;-1:-1:-1;14926:428:0;;;;;:::i;:::-;;:::i;9202:27::-;;;;;;;;;;;;;;;;14204:317;;;;;;;;;;-1:-1:-1;14204:317:0;;;;;:::i;:::-;;:::i;2702:176::-;;;;;;;;;;-1:-1:-1;2702:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;2843:18:0;;;2816:7;2843:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2702:176;8614:33;;;;;;;;;;;;;;;;9341:25;;;;;;;;;;;;;;;;17092:522;;;;;;;;;;-1:-1:-1;17092:522:0;;;;;:::i;:::-;;:::i;13778:98::-;;;;;;;;;;;;;:::i;8714:37::-;;;;;;;;;;;;;;;;29835:455;;;;;;;;;;-1:-1:-1;29835:455:0;;;;;:::i;:::-;;:::i;9273:30::-;;;;;;;;;;;;;;;;7050:281;;;;;;;;;;-1:-1:-1;7050:281:0;;;;;:::i;:::-;;:::i;29666:161::-;;;;;;;;;;;;;:::i;9448:31::-;;;;;;;;;;;;;;;;30298:470;;;;;;;;;;-1:-1:-1;30298:470:0;;;;;:::i;:::-;;:::i;1906:100::-;1960:13;1993:5;1986:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1906:100;:::o;2886:194::-;2994:4;3011:39;202:10;3034:7;3043:6;3011:8;:39::i;:::-;-1:-1:-1;3068:4:0;2886:194;;;;;:::o;3088:529::-;3228:4;3245:36;3255:6;3263:9;3274:6;3245:9;:36::i;:::-;-1:-1:-1;;;;;3321:19:0;;3294:24;3321:19;;;:11;:19;;;;;;;;202:10;3321:33;;;;;;;;3387:26;;;;3365:116;;;;-1:-1:-1;;;3365:116:0;;5602:2:1;3365:116:0;;;5584:21:1;5641:2;5621:18;;;5614:30;5680:34;5660:18;;;5653:62;-1:-1:-1;;;5731:18:1;;;5724:38;5779:19;;3365:116:0;;;;;;;;;3517:57;3526:6;202:10;3567:6;3548:16;:25;3517:8;:57::i;:::-;-1:-1:-1;3605:4:0;;3088:529;-1:-1:-1;;;;3088:529:0:o;13884:312::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;14021:4:::1;14013;13992:13;2315:12:::0;;;2227:108;13992:13:::1;:17;::::0;14008:1:::1;13992:17;:::i;:::-;13991:26;;;;:::i;:::-;13990:35;;;;:::i;:::-;13980:6;:45;;13958:136;;;::::0;-1:-1:-1;;;13958:136:0;;6899:2:1;13958:136:0::1;::::0;::::1;6881:21:1::0;6938:2;6918:18;;;6911:30;6977:34;6957:18;;;6950:62;-1:-1:-1;;;7028:18:1;;;7021:39;7077:19;;13958:136:0::1;6697:405:1::0;13958:136:0::1;14120:19;:6:::0;14130:8:::1;14120:19;:::i;:::-;14105:12;:34:::0;;;14155:33:::1;::::0;1888:25:1;;;14155:33:0::1;::::0;1876:2:1;1861:18;14155:33:0::1;;;;;;;;13884:312:::0;:::o;16573:511::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;16750:15:::1;:31:::0;;;16792:15:::1;:31:::0;;;16834:9:::1;:19:::0;;;16864:10:::1;:21:::0;;;16877:8;16846:7;16924:46:::1;16810:13:::0;16768;16924:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;16896:12;:125:::0;;;17056:1:::1;-1:-1:-1::0;17040:17:0::1;17032:44;;;;-1:-1:-1::0;;;17032:44:0::1;;;;;;;:::i;:::-;16573:511:::0;;;;:::o;13480:242::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;13614:9:::1;13609:106;13629:18:::0;;::::1;13609:106;;;13699:4;13669:15;:27;13685:7;;13693:1;13685:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13669:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13669:27:0;:34;;-1:-1:-1;;13669:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13649:3;::::1;::::0;::::1;:::i;:::-;;;;13609:106;;3625:290:::0;202:10;3738:4;3827:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3827:34:0;;;;;;;;;;3738:4;;3755:130;;3805:7;;3827:47;;3864:10;;3827:47;:::i;:::-;3755:8;:130::i;13139:126::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13227:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:30;;-1:-1:-1;;13227:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13139:126::o;2343:143::-;-1:-1:-1;;;;;2460:18:0;2433:7;2460:18;;;;;;;;;;;;2343:143::o;6892:150::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;6985:6:::1;::::0;6964:40:::1;::::0;7001:1:::1;::::0;-1:-1:-1;;;;;6985:6:0::1;::::0;6964:40:::1;::::0;7001:1;;6964:40:::1;7015:6;:19:::0;;-1:-1:-1;;;;;;7015:19:0::1;::::0;;6892:150::o;13316:154::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;13370:14:::1;:22:::0;;-1:-1:-1;;;;13370:22:0::1;::::0;;13403:20:::1;:28:::0;;-1:-1:-1;;13403:28:0::1;::::0;;13447:15:::1;::::0;::::1;::::0;13387:5:::1;::::0;13447:15:::1;13316:154::o:0;15602:343::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;15724:4:::1;15719:162;;15781:13;::::0;-1:-1:-1;;;;;15781:13:0;;::::1;15771:23:::0;;::::1;::::0;15745:124:::1;;;::::0;-1:-1:-1;;;15745:124:0;;8057:2:1;15745:124:0::1;::::0;::::1;8039:21:1::0;8096:2;8076:18;;;8069:30;8135:34;8115:18;;;8108:62;-1:-1:-1;;;8186:18:1;;;8179:37;8233:19;;15745:124:0::1;7855:403:1::0;15745:124:0::1;-1:-1:-1::0;;;;;15891:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15891:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15602:343::o;31058:201::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31146:25:0;::::1;31138:69;;;::::0;-1:-1:-1;;;31138:69:0;;8465:2:1;31138:69:0::1;::::0;::::1;8447:21:1::0;8504:2;8484:18;;;8477:30;8543:33;8523:18;;;8516:61;8594:18;;31138:69:0::1;8263:355:1::0;31138:69:0::1;31218:10;:33:::0;;-1:-1:-1;;;;;;31218:33:0::1;-1:-1:-1::0;;;;;31218:33:0;;;::::1;::::0;;;::::1;::::0;;31058:201::o;29115:481::-;6805:6;;29227:10;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29258:20:0;::::1;29250:59;;;::::0;-1:-1:-1;;;29250:59:0;;8825:2:1;29250:59:0::1;::::0;::::1;8807:21:1::0;8864:2;8844:18;;;8837:30;8903:28;8883:18;;;8876:56;8949:18;;29250:59:0::1;8623:350:1::0;29250:59:0::1;29346:4;-1:-1:-1::0;;;;;29328:23:0;::::1;::::0;29320:64:::1;;;::::0;-1:-1:-1;;;29320:64:0;;9180:2:1;29320:64:0::1;::::0;::::1;9162:21:1::0;9219:2;9199:18;;;9192:30;9258;9238:18;;;9231:58;9306:18;;29320:64:0::1;8978:352:1::0;29320:64:0::1;29422:39;::::0;-1:-1:-1;;;29422:39:0;;29455:4:::1;29422:39;::::0;::::1;780:51:1::0;29395:24:0::1;::::0;-1:-1:-1;;;;;29422:24:0;::::1;::::0;::::1;::::0;753:18:1;;29422:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29480:46;::::0;-1:-1:-1;;;29480:46:0;;-1:-1:-1;;;;;9716:32:1;;;29480:46:0::1;::::0;::::1;9698:51:1::0;9765:18;;;9758:34;;;29395:66:0;;-1:-1:-1;29480:23:0;;::::1;::::0;::::1;::::0;9671:18:1;;29480:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29542;::::0;;-1:-1:-1;;;;;9716:32:1;;9698:51;;9780:2;9765:18;;9758:34;;;29472:54:0;;-1:-1:-1;29542:46:0::1;::::0;9671:18:1;29542:46:0::1;;;;;;;29239:357;29115:481:::0;;;;:::o;12882:249::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;12946:13:::1;::::0;-1:-1:-1;;;12946:13:0;::::1;;;12945:14;12937:50;;;::::0;-1:-1:-1;;;12937:50:0;;10255:2:1;12937:50:0::1;::::0;::::1;10237:21:1::0;10294:2;10274:18;;;10267:30;10333:25;10313:18;;;10306:53;10376:18;;12937:50:0::1;10053:347:1::0;12937:50:0::1;12998:13;:20:::0;;-1:-1:-1;;;;13029:18:0;-1:-1:-1;;;13029:18:0;;;13079:12:::1;13058:18;:33:::0;13107:16:::1;::::0;::::1;::::0;-1:-1:-1;;13107:16:0::1;12882:249::o:0;2014:104::-;2070:13;2103:7;2096:14;;;;;:::i;15953:364::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;16101:13:::1;::::0;-1:-1:-1;;;;;16101:13:0;;::::1;16093:21:::0;;::::1;::::0;16071:128:::1;;;::::0;-1:-1:-1;;;16071:128:0;;10607:2:1;16071:128:0::1;::::0;::::1;10589:21:1::0;10646:2;10626:18;;;10619:30;10685:34;10665:18;;;10658:62;10756:27;10736:18;;;10729:55;10801:19;;16071:128:0::1;10405:421:1::0;16071:128:0::1;16212:41;16241:4;16247:5;16212:28;:41::i;:::-;16269:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16269:40:0;::::1;::::0;::::1;::::0;;;::::1;15953:364:::0;;:::o;3923:475::-;202:10;4041:4;4085:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4085:34:0;;;;;;;;;;4152:35;;;;4130:122;;;;-1:-1:-1;;;4130:122:0;;11033:2:1;4130:122:0;;;11015:21:1;11072:2;11052:18;;;11045:30;11111:34;11091:18;;;11084:62;-1:-1:-1;;;11162:18:1;;;11155:35;11207:19;;4130:122:0;10831:401:1;4130:122:0;4288:67;202:10;4311:7;4339:15;4320:16;:34;4288:8;:67::i;:::-;-1:-1:-1;4386:4:0;;3923:475;-1:-1:-1;;;3923:475:0:o;2494:200::-;2605:4;2622:42;202:10;2646:9;2657:6;2622:9;:42::i;30776:274::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30890:31:0;::::1;30868:118;;;::::0;-1:-1:-1;;;30868:118:0;;11439:2:1;30868:118:0::1;::::0;::::1;11421:21:1::0;11478:2;11458:18;;;11451:30;11517:34;11497:18;;;11490:62;-1:-1:-1;;;11568:18:1;;;11561:35;11613:19;;30868:118:0::1;11237:401:1::0;30868:118:0::1;30997:16;:45:::0;;-1:-1:-1;;;;;;30997:45:0::1;-1:-1:-1::0;;;;;30997:45:0;;;::::1;::::0;;;::::1;::::0;;30776:274::o;17622:781::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;17753:1:::1;17734:16;:20:::0;;;17784:1:::1;17765:16;:20:::0;;;17796:10:::1;:14:::0;;;17821:11:::1;:15:::0;;;17784:1;17876:48:::1;17784:1:::0;17753;17876:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;17847:13;:130:::0;;;18013:1:::1;-1:-1:-1::0;17996:18:0::1;17988:45;;;;-1:-1:-1::0;;;17988:45:0::1;;;;;;;:::i;:::-;18044:16;:23:::0;;-1:-1:-1;;;;;18044:23:0;;::::1;-1:-1:-1::0;;;;;;18044:23:0;;::::1;;::::0;;;18078:10:::1;:17:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;18124:1:::1;18106:15;:19:::0;;;18044:16:::1;18136:15;:19:::0;;;18166:9:::1;:13:::0;;;18190:10:::1;:14:::0;;;18044:16;18243:46:::1;18044:16:::0;18124:1;18243:46:::1;:::i;:::-;:71;;;;:::i;:::-;:97;;;;:::i;:::-;18215:12;:125:::0;;;18375:1:::1;-1:-1:-1::0;18359:17:0::1;18351:44;;;;-1:-1:-1::0;;;18351:44:0::1;;;;;;;:::i;:::-;17622:781:::0;;:::o;18411:182::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18496:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18496:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18551:34;;1438:41:1;;;18551:34:0::1;::::0;1411:18:1;18551:34:0::1;;;;;;;18411:182:::0;;:::o;14529:327::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;14669:4:::1;14661;14640:13;2315:12:::0;;;2227:108;14640:13:::1;:17;::::0;14656:1:::1;14640:17;:::i;:::-;14639:26;;;;:::i;:::-;14638:35;;;;:::i;:::-;14628:6;:45;;14606:139;;;::::0;-1:-1:-1;;;14606:139:0;;11845:2:1;14606:139:0::1;::::0;::::1;11827:21:1::0;11884:2;11864:18;;;11857:30;11923:34;11903:18;;;11896:62;-1:-1:-1;;;11974:18:1;;;11967:42;12026:19;;14606:139:0::1;11643:408:1::0;14606:139:0::1;14774:19;:6:::0;14784:8:::1;14774:19;:::i;:::-;14756:15;:37:::0;;;14809:39:::1;::::0;1888:25:1;;;14809:39:0::1;::::0;1876:2:1;1861:18;14809:39:0::1;1742:177:1::0;14926:428:0;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;15066:6:::1;15045:13;2315:12:::0;;;2227:108;15045:13:::1;:17;::::0;15061:1:::1;15045:17;:::i;:::-;15044:28;;;;:::i;:::-;15031:9;:41;;15009:144;;;::::0;-1:-1:-1;;;15009:144:0;;12258:2:1;15009:144:0::1;::::0;::::1;12240:21:1::0;12297:2;12277:18;;;12270:30;12336:34;12316:18;;;12309:62;-1:-1:-1;;;12387:18:1;;;12380:51;12448:19;;15009:144:0::1;12056:417:1::0;15009:144:0::1;15221:4;15200:13;2315:12:::0;;;2227:108;15200:13:::1;:17;::::0;15216:1:::1;15200:17;:::i;:::-;15199:26;;;;:::i;:::-;15186:9;:39;;15164:141;;;::::0;-1:-1:-1;;;15164:141:0;;12680:2:1;15164:141:0::1;::::0;::::1;12662:21:1::0;12719:2;12699:18;;;12692:30;12758:34;12738:18;;;12731:62;-1:-1:-1;;;12809:18:1;;;12802:50;12869:19;;15164:141:0::1;12478:416:1::0;15164:141:0::1;15316:18;:30:::0;14926:428::o;14204:317::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;14342:4:::1;14334;14313:13;2315:12:::0;;;2227:108;14313:13:::1;:17;::::0;14329:1:::1;14313:17;:::i;:::-;14312:26;;;;:::i;:::-;14311:35;;;;:::i;:::-;14301:6;:45;;14279:137;;;::::0;-1:-1:-1;;;14279:137:0;;13101:2:1;14279:137:0::1;::::0;::::1;13083:21:1::0;13140:2;13120:18;;;13113:30;13179:34;13159:18;;;13152:62;-1:-1:-1;;;13230:18:1;;;13223:40;13280:19;;14279:137:0::1;12899:406:1::0;14279:137:0::1;14443:19;:6:::0;14453:8:::1;14443:19;:::i;:::-;14427:13;:35:::0;;;14478::::1;::::0;1888:25:1;;;14478:35:0::1;::::0;1876:2:1;1861:18;14478:35:0::1;1742:177:1::0;17092:522:0;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;17270:16:::1;:32:::0;;;17313:16:::1;:32:::0;;;17356:10:::1;:20:::0;;;17387:11:::1;:22:::0;;;17401:8;17369:7;17449:48:::1;17332:13:::0;17289;17449:48:::1;:::i;:::-;:74;;;;:::i;:::-;:101;;;;:::i;:::-;17420:13;:130:::0;;;17586:1:::1;-1:-1:-1::0;17569:18:0::1;17561:45;;;;-1:-1:-1::0;;;17561:45:0::1;;;;;;;:::i;13778:98::-:0;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;13840:20:::1;:28:::0;;-1:-1:-1;;13840:28:0::1;::::0;;13778:98::o;29835:455::-;29966:18;;29938:24;29956:4;29938:9;:24::i;:::-;:46;;29916:160;;;;;-1:-1:-1;;;29916:160:0;;13512:2:1;29916:160:0;;;13494:21:1;13531:18;;;13524:30;;;;13590:34;13570:18;;;13563:62;13661:34;13641:18;;;13634:62;13713:19;;29916:160:0;13310:428:1;29916:160:0;30092:29;30106:7;30115:5;30092:13;:29::i;:::-;30087:196;;;30148:8;:15;;-1:-1:-1;;;;30148:15:0;-1:-1:-1;;;30148:15:0;;;30178:10;:8;:10::i;:::-;30203:8;:16;;-1:-1:-1;;;;30203:16:0;;;30235:36;;30255:15;1888:25:1;;30235:36:0;;1876:2:1;1861:18;30235:36:0;;;;;;;;29835:455;;:::o;7050:281::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7153:22:0;::::1;7131:110;;;::::0;-1:-1:-1;;;7131:110:0;;13945:2:1;7131:110:0::1;::::0;::::1;13927:21:1::0;13984:2;13964:18;;;13957:30;14023:34;14003:18;;;13996:62;-1:-1:-1;;;14074:18:1;;;14067:36;14120:19;;7131:110:0::1;13743:402:1::0;7131:110:0::1;7278:6;::::0;7257:38:::1;::::0;-1:-1:-1;;;;;7257:38:0;;::::1;::::0;7278:6:::1;::::0;7257:38:::1;::::0;7278:6:::1;::::0;7257:38:::1;7306:6;:17:::0;;-1:-1:-1;;;;;;7306:17:0::1;-1:-1:-1::0;;;;;7306:17:0;;;::::1;::::0;;;::::1;::::0;;7050:281::o;29666:161::-;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;29761:58:::1;::::0;29724:12:::1;::::0;29769:10:::1;::::0;29793:21:::1;::::0;29724:12;29761:58;29724:12;29761:58;29793:21;29769:10;29761:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30298:470:::0;6805:6;;-1:-1:-1;;;;;6805:6:0;202:10;6805:22;6797:67;;;;-1:-1:-1;;;6797:67:0;;;;;;;:::i;:::-;30402:16:::1;::::0;;30416:1:::1;30402:16:::0;;;;;::::1;::::0;;30378:21:::1;::::0;30402:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30439:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;30439:16:0;;;;30378:40;;-1:-1:-1;;;;;;30439:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;30439:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30429:4;30434:1;30429:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;30429:26:0::1;;;-1:-1:-1::0;;;;;30429:26:0::1;;;::::0;::::1;30484:4;30466;30471:1;30466:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30466:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30500:9:::1;::::0;:213:::1;::::0;-1:-1:-1;;;30500:213:0;;:9;::::1;::::0;:60:::1;::::0;30582:13;;30500:213:::1;::::0;:9:::1;::::0;30638:4;;30665:6:::1;::::0;30687:15:::1;::::0;30500:213:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30729:31;30746:13;30729:31;;;;1888:25:1::0;;1876:2;1861:18;;1742:177;5947:380:0;-1:-1:-1;;;;;6083:19:0;;6075:68;;;;-1:-1:-1;;;6075:68:0;;15931:2:1;6075:68:0;;;15913:21:1;15970:2;15950:18;;;15943:30;16009:34;15989:18;;;15982:62;-1:-1:-1;;;16060:18:1;;;16053:34;16104:19;;6075:68:0;15729:400:1;6075:68:0;-1:-1:-1;;;;;6162:21:0;;6154:68;;;;-1:-1:-1;;;6154:68:0;;16336:2:1;6154:68:0;;;16318:21:1;16375:2;16355:18;;;16348:30;16414:34;16394:18;;;16387:62;-1:-1:-1;;;16465:18:1;;;16458:32;16507:19;;6154:68:0;16134:398:1;6154:68:0;-1:-1:-1;;;;;6235:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6287:32;;1888:25:1;;;6287:32:0;;1861:18:1;6287:32:0;;;;;;;;5947:380;;;:::o;18601:5941::-;-1:-1:-1;;;;;18733:18:0;;18725:68;;;;-1:-1:-1;;;18725:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18812:16:0;;18804:64;;;;-1:-1:-1;;;18804:64:0;;;;;;;:::i;:::-;18896:1;18887:6;:10;18879:52;;;;-1:-1:-1;;;18879:52:0;;17549:2:1;18879:52:0;;;17531:21:1;17588:2;17568:18;;;17561:30;17627:31;17607:18;;;17600:59;17676:18;;18879:52:0;17347:353:1;18879:52:0;18949:13;;-1:-1:-1;;;18949:13:0;;;;18944:183;;-1:-1:-1;;;;;19005:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19034:23:0;;;;;;:19;:23;;;;;;;;19005:52;18979:136;;;;-1:-1:-1;;;18979:136:0;;17907:2:1;18979:136:0;;;17889:21:1;17946:2;17926:18;;;17919:30;-1:-1:-1;;;17965:18:1;;;17958:52;18027:18;;18979:136:0;17705:346:1;18979:136:0;19143:11;;:15;19139:209;;-1:-1:-1;;;;;19202:21:0;;;;;;:15;:21;;;;;;;;19201:22;;:39;;-1:-1:-1;6743:6:0;;-1:-1:-1;;;;;19227:13:0;;;6743:6;;19227:13;19201:39;:64;;;-1:-1:-1;;;;;;19244:21:0;;19258:6;19244:21;19201:64;19175:161;;;;-1:-1:-1;;;19175:161:0;;18258:2:1;19175:161:0;;;18240:21:1;18297:2;18277:18;;;18270:30;18336:34;18316:18;;;18309:62;-1:-1:-1;;;18387:18:1;;;18380:33;18430:19;;19175:161:0;18056:399:1;19175:161:0;19380:13;;-1:-1:-1;;;;;19380:13:0;;;19372:21;;;;19368:213;;-1:-1:-1;;;;;19414:16:0;;;;;;:12;:16;;;;;;:21;;19410:96;;-1:-1:-1;;;;;19456:16:0;;;;;;:12;:16;;;;;19475:15;19456:34;;19410:96;19368:213;;;19528:8;;-1:-1:-1;;;19528:8:0;;;;19523:58;;19553:9;:16;;-1:-1:-1;;;;;;19553:16:0;-1:-1:-1;;;;;19553:16:0;;;;;19523:58;19597:14;;-1:-1:-1;;;19597:14:0;;;;19593:2334;;;6743:6;;-1:-1:-1;;;;;19650:15:0;;;6743:6;;19650:15;;;;:49;;-1:-1:-1;6743:6:0;;-1:-1:-1;;;;;19686:13:0;;;6743:6;;19686:13;;19650:49;:86;;;;-1:-1:-1;;;;;;19720:16:0;;;;19650:86;:128;;;;-1:-1:-1;;;;;;19757:21:0;;19771:6;19757:21;;19650:128;:175;;;;-1:-1:-1;;;;;;19800:25:0;;;;;;:19;:25;;;;;;;;19799:26;19650:175;:220;;;;-1:-1:-1;;;;;;19847:23:0;;;;;;:19;:23;;;;;;;;19846:24;19650:220;19628:2288;;;20041:20;;;;20037:699;;;20104:9;;-1:-1:-1;;;;;20090:24:0;;;20104:9;;20090:24;;;;:56;;-1:-1:-1;20132:13:0;;-1:-1:-1;;;;;20118:28:0;;;20132:13;;20118:28;;20090:56;20086:631;;;20288:16;20303:1;20288:12;:16;:::i;:::-;20242:9;20213:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;20409:16:0;20424:1;20409:12;:16;:::i;:::-;-1:-1:-1;;;;;20341:32:0;;;;;;:28;:32;;;;;;:84;20213:212;20175:363;;;;-1:-1:-1;;;20175:363:0;;18792:2:1;20175:363:0;;;18774:21:1;18831:2;18811:18;;;18804:30;18870:34;18850:18;;;18843:62;-1:-1:-1;;;18921:18:1;;;18914:51;18982:19;;20175:363:0;18590:417:1;20175:363:0;20594:9;20565:39;;;;:28;:39;;;;;;20607:12;20565:54;;;;-1:-1:-1;;;;;20646:32:0;;;;;;:47;20086:631;-1:-1:-1;;;;;20803:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;20860:35:0;;;;;;:31;:35;;;;;;;;20859:36;20803:92;20777:1124;;;20982:12;;20972:6;:22;;20938:148;;;;-1:-1:-1;;;20938:148:0;;19214:2:1;20938:148:0;;;19196:21:1;19253:2;19233:18;;;19226:30;19292:34;19272:18;;;19265:62;-1:-1:-1;;;19343:18:1;;;19336:38;19391:19;;20938:148:0;19012:404:1;20938:148:0;21169:15;;21152:13;21162:2;21152:9;:13::i;:::-;21143:22;;:6;:22;:::i;:::-;:41;;21109:151;;;;-1:-1:-1;;;21109:151:0;;19623:2:1;21109:151:0;;;19605:21:1;19662:2;19642:18;;;19635:30;-1:-1:-1;;;19681:18:1;;;19674:54;19745:18;;21109:151:0;19421:348:1;21109:151:0;20777:1124;;;-1:-1:-1;;;;;21353:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;21408:37:0;;;;;;:31;:37;;;;;;;;21407:38;21353:92;21327:574;;;21532:13;;21522:6;:23;;21488:151;;;;-1:-1:-1;;;21488:151:0;;19976:2:1;21488:151:0;;;19958:21:1;20015:2;19995:18;;;19988:30;20054:34;20034:18;;;20027:62;-1:-1:-1;;;20105:18:1;;;20098:40;20155:19;;21488:151:0;19774:406:1;21327:574:0;-1:-1:-1;;;;;21670:35:0;;;;;;:31;:35;;;;;;;;21665:236;;21790:15;;21773:13;21783:2;21773:9;:13::i;:::-;21764:22;;:6;:22;:::i;:::-;:41;;21730:151;;;;-1:-1:-1;;;21730:151:0;;19623:2:1;21730:151:0;;;19605:21:1;19662:2;19642:18;;;19635:30;-1:-1:-1;;;19681:18:1;;;19674:54;19745:18;;21730:151:0;19421:348:1;21730:151:0;21939:28;21970:24;21988:4;21970:9;:24::i;:::-;22046:18;;21939:55;;-1:-1:-1;22022:42:0;;;;;;;22095:35;;-1:-1:-1;22119:11:0;;-1:-1:-1;;;22119:11:0;;;;22095:35;:61;;;;-1:-1:-1;22148:8:0;;-1:-1:-1;;;22148:8:0;;;;22147:9;22095:61;:110;;;;-1:-1:-1;;;;;;22174:31:0;;;;;;:25;:31;;;;;;;;22173:32;22095:110;:153;;;;-1:-1:-1;;;;;;22223:25:0;;;;;;:19;:25;;;;;;;;22222:26;22095:153;:194;;;;-1:-1:-1;;;;;;22266:23:0;;;;;;:19;:23;;;;;;;;22265:24;22095:194;22077:326;;;22316:8;:15;;-1:-1:-1;;;;22316:15:0;-1:-1:-1;;;22316:15:0;;;22348:10;:8;:10::i;:::-;22375:8;:16;;-1:-1:-1;;;;22375:16:0;;;22077:326;-1:-1:-1;;;;;22451:25:0;;22415:12;22451:25;;;:19;:25;;;;;;22430:4;;22451:25;;;:52;;-1:-1:-1;;;;;;22480:23:0;;;;;;:19;:23;;;;;;;;22451:52;22447:100;;;-1:-1:-1;22530:5:0;22447:100;22559:12;22592:7;22588:1903;;;24642:11;;24627:12;:26;22667:74;;;;-1:-1:-1;;;;;;22710:31:0;;;;;;:25;:31;;;;;;;;22667:74;:125;;;;-1:-1:-1;;;;;;22763:29:0;;;;;;:25;:29;;;;;;;;22762:30;22667:125;:162;;;;;22828:1;22813:12;;:16;22667:162;22645:1701;;;-1:-1:-1;;;;;22869:19:0;;;;;;:15;:19;;;;;;;;22864:183;;-1:-1:-1;;;;;22913:19:0;;;;;;:15;:19;;;;;:26;;-1:-1:-1;;22913:26:0;22935:4;22913:26;;;;;;22962:10;:15;;22935:4;;22962:10;;:15;;22935:4;;22962:15;:::i;:::-;;;;-1:-1:-1;;23005:22:0;;-1:-1:-1;;;;;798:32:1;;780:51;;23005:22:0;;768:2:1;753:18;23005:22:0;;;;;;;22864:183;23090:3;23075:11;:6;23084:2;23075:11;:::i;:::-;23074:19;;;;:::i;:::-;23067:26;;23161:12;;23142:15;;23135:4;:22;;;;:::i;:::-;23134:39;;;;:::i;:::-;23112:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23241:12:0;;23222:15;;23215:22;;:4;:22;:::i;:::-;23214:39;;;;:::i;:::-;23192:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23309:12:0;;23296:9;;23289:16;;:4;:16;:::i;:::-;23288:33;;;;:::i;:::-;23272:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;23379:12:0;;23365:10;;23358:17;;:4;:17;:::i;:::-;23357:34;;;;:::i;:::-;23340:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;22645:1701:0;;-1:-1:-1;22645:1701:0;;-1:-1:-1;;;;;23451:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;23500:1;23484:13;;:17;23451:50;23447:899;;;23556:3;23539:13;;23530:6;:22;;;;:::i;:::-;23529:30;;;;:::i;:::-;23522:37;;23628:13;;23608:16;;23601:4;:23;;;;:::i;:::-;23600:41;;;;:::i;:::-;23578:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23710:13:0;;23690:16;;23683:23;;:4;:23;:::i;:::-;23682:41;;;;:::i;:::-;23660:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;23780:13:0;;23766:10;;23759:17;;:4;:17;:::i;:::-;23758:35;;;;:::i;:::-;23742:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;23852:13:0;;23837:11;;23830:18;;:4;:18;:::i;23447:899::-;-1:-1:-1;;;;;23924:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;23974:1;23959:12;;:16;23924:51;23920:426;;;24029:3;24013:12;;24004:6;:21;;;;:::i;:::-;24003:29;;;;:::i;:::-;23996:36;;24100:12;;24081:15;;24074:4;:22;;;;:::i;:::-;24073:39;;;;:::i;:::-;24051:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24180:12:0;;24161:15;;24154:22;;:4;:22;:::i;:::-;24153:39;;;;:::i;:::-;24131:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24248:12:0;;24235:9;;24228:16;;:4;:16;:::i;:::-;24227:33;;;;:::i;:::-;24211:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24318:12:0;;24304:10;;24297:17;;:4;:17;:::i;:::-;24296:34;;;;:::i;:::-;24279:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;23920:426:0;24364:8;;24360:91;;24393:42;24409:4;24423;24430;24393:15;:42::i;:::-;24465:14;24475:4;24465:14;;:::i;:::-;;;22588:1903;24501:33;24517:4;24523:2;24527:6;24501:15;:33::i;:::-;18714:5828;;;;18601:5941;;;:::o;16325:240::-;-1:-1:-1;;;;;16408:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;16408:39:0;;;;;;;16460;16408:31;:39;16460:26;:39::i;25765:1554::-;25928:10;25863:4;25908:31;;;:19;:31;;;;;;25863:4;;25908:31;;25903:1409;;25994:1;25978:13;;:17;:62;;;;;26027:13;;25999:24;26017:4;25999:9;:24::i;:::-;:41;;25978:62;25956:167;;;26075:32;26081:10;26093:13;;26075:5;:32::i;:::-;-1:-1:-1;26153:1:0;26137:13;:17;;;26179:4;;26224:24;26242:4;26224:9;:24::i;:::-;26198:50;;26263:25;26367:12;;26329:18;;26291;;:56;;;;:::i;:::-;:88;;;;:::i;:::-;26263:116;-1:-1:-1;26400:20:0;;;:46;;-1:-1:-1;26424:22:0;;26400:46;26396:99;;;26474:5;26467:12;;;;;;;26396:99;26533:18;;:22;;26554:1;26533:22;:::i;:::-;26515:15;:40;26511:121;;;26594:18;;:22;;26615:1;26594:22;:::i;:::-;26576:40;;26511:121;26655:7;26648:14;;;;;;;25903:1409;26727:5;26699:24;26717:4;26699:9;:24::i;:::-;:33;26695:129;;26753:21;26759:7;26768:5;26753;:21::i;:::-;-1:-1:-1;26803:5:0;26695:129;26838:23;26864:24;26882:4;26864:9;:24::i;27327:1780::-;27386:1;27370:13;;:17;:62;;;;;27419:13;;27391:24;27409:4;27391:9;:24::i;:::-;:41;;27370:62;27366:130;;;27449:35;27463:4;27470:13;;27449:5;:35::i;:::-;27522:1;27506:13;:17;;;27562:24;27580:4;27562:9;:24::i;:::-;27536:50;;27597:25;27693:12;;27659:18;;27625;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;27597:108;-1:-1:-1;27722:20:0;;;:46;;-1:-1:-1;27746:22:0;;27722:46;27718:85;;;27785:7;;27327:1780::o;27718:85::-;27837:18;;:22;;27858:1;27837:22;:::i;:::-;27819:15;:40;27815:113;;;27894:18;;:22;;27915:1;27894:22;:::i;:::-;27876:40;;27815:113;27940:12;27965:23;28078:1;28045:17;28010:18;;27992:15;:36;;;;:::i;:::-;27991:71;;;;:::i;:::-;:88;;;;:::i;:::-;27965:114;-1:-1:-1;28092:51:0;28109:33;27965:114;28109:15;:33;:::i;:::-;28092:16;:51::i;:::-;28355:18;;28177:21;;;;28156:18;;28355:22;;28376:1;;28355:22;:::i;:::-;28334:44;;:17;:44;:::i;:::-;28298:18;;28285:31;;:10;:31;:::i;:::-;28284:95;;;;:::i;:::-;28258:121;;28390:17;28496:1;28475:18;;:22;;;;:::i;:::-;28454:44;;:17;:44;:::i;:::-;28424:12;;28411:25;;:10;:25;:::i;:::-;28410:89;;;;:::i;:::-;28390:109;-1:-1:-1;28531:27:0;28390:109;28531:15;:27;:::i;:::-;28512:46;;;;:::i;:::-;28592:1;28571:18;:22;;;28604:18;:22;;;28637:12;:16;;;28664:13;:17;28512:46;-1:-1:-1;28698:19:0;;;;;:42;;;28739:1;28721:15;:19;28698:42;28694:121;;;28757:46;28770:15;28787;28757:12;:46::i;:::-;28849:10;;28841:46;;-1:-1:-1;;;;;28849:10:0;;;;28873:9;;28841:46;;;;28873:9;28849:10;28841:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28827:60;;;;;28907:7;28898:46;;;;-1:-1:-1;;;28898:46:0;;20387:2:1;28898:46:0;;;20369:21:1;20426:2;20406:18;;;20399:30;20465:27;20445:18;;;20438:55;20510:18;;28898:46:0;20185:349:1;28898:46:0;28979:16;;28971:65;;-1:-1:-1;;;;;28979:16:0;;;;29010:21;;28971:65;;;;29010:21;28979:16;28971:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28957:79;;;;;29056:7;29047:52;;;;-1:-1:-1;;;29047:52:0;;20741:2:1;29047:52:0;;;20723:21:1;20780:2;20760:18;;;20753:30;20819:33;20799:18;;;20792:61;20870:18;;29047:52:0;20539:355:1;29047:52:0;27355:1752;;;;;;;;27327:1780::o;4406:651::-;-1:-1:-1;;;;;4546:20:0;;4538:70;;;;-1:-1:-1;;;4538:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4627:23:0;;4619:71;;;;-1:-1:-1;;;4619:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4727:17:0;;4703:21;4727:17;;;;;;;;;;;4777:23;;;;4755:111;;;;-1:-1:-1;;;4755:111:0;;21101:2:1;4755:111:0;;;21083:21:1;21140:2;21120:18;;;21113:30;21179:34;21159:18;;;21152:62;-1:-1:-1;;;21230:18:1;;;21223:36;21276:19;;4755:111:0;20899:402:1;4755:111:0;-1:-1:-1;;;;;4902:17:0;;;:9;:17;;;;;;;;;;;4922:22;;;4902:42;;4966:20;;;;;;;;:30;;4938:6;;4902:9;4966:30;;4938:6;;4966:30;:::i;:::-;;;;;;;;5031:9;-1:-1:-1;;;;;5014:35:0;5023:6;-1:-1:-1;;;;;5014:35:0;;5042:6;5014:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;5014:35:0;;;;;;;;4527:530;4406:651;;;:::o;15362:232::-;-1:-1:-1;;;;;15475:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;15475:52:0;;;;;;;;;;15543:43;;21474:51:1;;;21541:18;;;21534:50;15543:43:0;;21447:18:1;15543:43:0;21306:284:1;5389:550:0;-1:-1:-1;;;;;5473:21:0;;5465:67;;;;-1:-1:-1;;;5465:67:0;;21797:2:1;5465:67:0;;;21779:21:1;21836:2;21816:18;;;21809:30;21875:34;21855:18;;;21848:62;-1:-1:-1;;;21926:18:1;;;21919:31;21967:19;;5465:67:0;21595:397:1;5465:67:0;-1:-1:-1;;;;;5568:18:0;;5543:22;5568:18;;;;;;;;;;;5605:24;;;;5597:71;;;;-1:-1:-1;;;5597:71:0;;22199:2:1;5597:71:0;;;22181:21:1;22238:2;22218:18;;;22211:30;22277:34;22257:18;;;22250:62;-1:-1:-1;;;22328:18:1;;;22321:32;22370:19;;5597:71:0;21997:398:1;5597:71:0;-1:-1:-1;;;;;5704:18:0;;:9;:18;;;;;;;;;;;5725:23;;;5704:44;;5843:12;:22;;;;;;;5894:37;1888:25:1;;;5704:9:0;;:18;5894:37;;1861:18:1;5894:37:0;1742:177:1;24669:571:0;24819:16;;;24833:1;24819:16;;;;;;;;24795:21;;24819:16;;;;;;;;;;-1:-1:-1;24819:16:0;24795:40;;24864:4;24846;24851:1;24846:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24846:23:0;;;:7;;;;;;;;;;:23;;;;24890:9;;:16;;;-1:-1:-1;;;24890:16:0;;;;:9;;;;;:14;;:16;;;;;24846:7;;24890:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24880:4;24885:1;24880:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24880:26:0;;;:7;;;;;;;;;:26;24951:9;;24919:56;;24936:4;;24951:9;24963:11;24919:8;:56::i;:::-;25014:9;;:218;;-1:-1:-1;;;25014:218:0;;-1:-1:-1;;;;;25014:9:0;;;;:60;;:218;;25089:11;;25014:9;;25159:4;;25186;;25206:15;;25014:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24724:516;24669:571;:::o;25248:509::-;25428:9;;25396:56;;25413:4;;-1:-1:-1;;;;;25428:9:0;25440:11;25396:8;:56::i;:::-;25495:9;;:254;;-1:-1:-1;;;25495:254:0;;25561:4;25495:254;;;23328:34:1;23378:18;;;23371:34;;;25495:9:0;23421:18:1;;;23414:34;;;23464:18;;;23457:34;25701:6:0;23507:19:1;;;23500:44;25723:15:0;23560:19:1;;;23553:35;-1:-1:-1;;;;;25495:9:0;;;;:25;;25528:9;;23262:19:1;;25495:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25248:509;;:::o;14:597: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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:315::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;1924:456::-;2001:6;2009;2017;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:31;2169:5;2144:31;:::i;:::-;2194:5;-1:-1:-1;2251:2:1;2236:18;;2223:32;2264:33;2223:32;2264:33;:::i;:::-;1924:456;;2316:7;;-1:-1:-1;;;2370:2:1;2355:18;;;;2342:32;;1924:456::o;2385:180::-;2444:6;2497:2;2485:9;2476:7;2472:23;2468:32;2465:52;;;2513:1;2510;2503:12;2465:52;-1:-1:-1;2536:23:1;;2385:180;-1:-1:-1;2385:180:1:o;2570:385::-;2656:6;2664;2672;2680;2733:3;2721:9;2712:7;2708:23;2704:33;2701:53;;;2750:1;2747;2740:12;2701:53;-1:-1:-1;;2773:23:1;;;2843:2;2828:18;;2815:32;;-1:-1:-1;2894:2:1;2879:18;;2866:32;;2945:2;2930:18;2917:32;;-1:-1:-1;2570:385:1;-1:-1:-1;2570:385:1:o;3149:118::-;3235:5;3228:13;3221:21;3214:5;3211:32;3201:60;;3257:1;3254;3247:12;3272:750;3364:6;3372;3380;3433:2;3421:9;3412:7;3408:23;3404:32;3401:52;;;3449:1;3446;3439:12;3401:52;3489:9;3476:23;3518:18;3559:2;3551:6;3548:14;3545:34;;;3575:1;3572;3565:12;3545:34;3613:6;3602:9;3598:22;3588:32;;3658:7;3651:4;3647:2;3643:13;3639:27;3629:55;;3680:1;3677;3670:12;3629:55;3720:2;3707:16;3746:2;3738:6;3735:14;3732:34;;;3762:1;3759;3752:12;3732:34;3817:7;3810:4;3800:6;3797:1;3793:14;3789:2;3785:23;3781:34;3778:47;3775:67;;;3838:1;3835;3828:12;3775:67;3869:4;3861:13;;;;-1:-1:-1;3893:6:1;-1:-1:-1;;3934:20:1;;3921:34;3964:28;3921:34;3964:28;:::i;:::-;4011:5;4001:15;;;3272:750;;;;;:::o;4027:382::-;4092:6;4100;4153:2;4141:9;4132:7;4128:23;4124:32;4121:52;;;4169:1;4166;4159:12;4121:52;4208:9;4195:23;4227:31;4252:5;4227:31;:::i;:::-;4277:5;-1:-1:-1;4334:2:1;4319:18;;4306:32;4347:30;4306:32;4347:30;:::i;:::-;4396:7;4386:17;;;4027:382;;;;;:::o;4622:388::-;4690:6;4698;4751:2;4739:9;4730:7;4726:23;4722:32;4719:52;;;4767:1;4764;4757:12;4719:52;4806:9;4793:23;4825:31;4850:5;4825:31;:::i;:::-;4875:5;-1:-1:-1;4932:2:1;4917:18;;4904:32;4945:33;4904:32;4945:33;:::i;5015:380::-;5094:1;5090:12;;;;5137;;;5158:61;;5212:4;5204:6;5200:17;5190:27;;5158:61;5265:2;5257:6;5254:14;5234:18;5231:38;5228:161;;5311:10;5306:3;5302:20;5299:1;5292:31;5346:4;5343:1;5336:15;5374:4;5371:1;5364:15;5228:161;;5015:380;;;:::o;5809:356::-;6011:2;5993:21;;;6030:18;;;6023:30;6089:34;6084:2;6069:18;;6062:62;6156:2;6141:18;;5809:356::o;6170:127::-;6231:10;6226:3;6222:20;6219:1;6212:31;6262:4;6259:1;6252:15;6286:4;6283:1;6276:15;6302:168;6342:7;6408:1;6404;6400:6;6396:14;6393:1;6390:21;6385:1;6378:9;6371:17;6367:45;6364:71;;;6415:18;;:::i;:::-;-1:-1:-1;6455:9:1;;6302:168::o;6475:217::-;6515:1;6541;6531:132;;6585:10;6580:3;6576:20;6573:1;6566:31;6620:4;6617:1;6610:15;6648:4;6645:1;6638:15;6531:132;-1:-1:-1;6677:9:1;;6475:217::o;7107:128::-;7147:3;7178:1;7174:6;7171:1;7168:13;7165:39;;;7184:18;;:::i;:::-;-1:-1:-1;7220:9:1;;7107:128::o;7240:338::-;7442:2;7424:21;;;7481:2;7461:18;;;7454:30;-1:-1:-1;;;7515:2:1;7500:18;;7493:44;7569:2;7554:18;;7240:338::o;7583:127::-;7644:10;7639:3;7635:20;7632:1;7625:31;7675:4;7672:1;7665:15;7699:4;7696:1;7689:15;7715:135;7754:3;7775:17;;;7772:43;;7795:18;;:::i;:::-;-1:-1:-1;7842:1:1;7831:13;;7715:135::o;9335:184::-;9405:6;9458:2;9446:9;9437:7;9433:23;9429:32;9426:52;;;9474:1;9471;9464:12;9426:52;-1:-1:-1;9497:16:1;;9335:184;-1:-1:-1;9335:184:1:o;9803:245::-;9870:6;9923:2;9911:9;9902:7;9898:23;9894:32;9891:52;;;9939:1;9936;9929:12;9891:52;9971:9;9965:16;9990:28;10012:5;9990:28;:::i;14492:251::-;14562:6;14615:2;14603:9;14594:7;14590:23;14586:32;14583:52;;;14631:1;14628;14621:12;14583:52;14663:9;14657:16;14682:31;14707:5;14682:31;:::i;14748:461::-;14801:3;14839:5;14833:12;14866:6;14861:3;14854:19;14892:4;14921:2;14916:3;14912:12;14905:19;;14958:2;14951:5;14947:14;14979:1;14989:195;15003:6;15000:1;14997:13;14989:195;;;15068:13;;-1:-1:-1;;;;;15064:39:1;15052:52;;15124:12;;;;15159:15;;;;15100:1;15018:9;14989:195;;;-1:-1:-1;15200:3:1;;14748:461;-1:-1:-1;;;;;14748:461:1:o;15214:510::-;15485:6;15474:9;15467:25;15528:3;15523:2;15512:9;15508:18;15501:31;15448:4;15549:57;15601:3;15590:9;15586:19;15578:6;15549:57;:::i;:::-;-1:-1:-1;;;;;15642:32:1;;;;15637:2;15622:18;;15615:60;-1:-1:-1;15706:2:1;15691:18;15684:34;15541:65;15214:510;-1:-1:-1;;15214:510:1:o;16537:401::-;16739:2;16721:21;;;16778:2;16758:18;;;16751:30;16817:34;16812:2;16797:18;;16790:62;-1:-1:-1;;;16883:2:1;16868:18;;16861:35;16928:3;16913:19;;16537:401::o;16943:399::-;17145:2;17127:21;;;17184:2;17164:18;;;17157:30;17223:34;17218:2;17203:18;;17196:62;-1:-1:-1;;;17289:2:1;17274:18;;17267:33;17332:3;17317:19;;16943:399::o;18460:125::-;18500:4;18528:1;18525;18522:8;18519:34;;;18533:18;;:::i;:::-;-1:-1:-1;18570:9:1;;18460:125::o;22400:582::-;22699:6;22688:9;22681:25;22742:6;22737:2;22726:9;22722:18;22715:34;22785:3;22780:2;22769:9;22765:18;22758:31;22662:4;22806:57;22858:3;22847:9;22843:19;22835:6;22806:57;:::i;:::-;-1:-1:-1;;;;;22899:32:1;;;;22894:2;22879:18;;22872:60;-1:-1:-1;22963:3:1;22948:19;22941:35;22798:65;22400:582;-1:-1:-1;;;22400:582:1:o;23599:306::-;23687:6;23695;23703;23756:2;23744:9;23735:7;23731:23;23727:32;23724:52;;;23772:1;23769;23762:12;23724:52;23801:9;23795:16;23785:26;;23851:2;23840:9;23836:18;23830:25;23820:35;;23895:2;23884:9;23880:18;23874:25;23864:35;;23599:306;;;;;:::o

Swarm Source

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