ETH Price: $1,963.53 (+2.21%)
 

Overview

ETH Balance

0.00033593363235699 ETH

Eth Value

$0.66 (@ $1,963.53/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve232625022025-08-31 17:04:11181 days ago1756659851IN
0x8E149BCb...7bE2cAeCB
0 ETH0.000232835
Approve145995612022-04-17 0:19:011413 days ago1650154741IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0010762223.0820222
Approve145768732022-04-13 11:31:401417 days ago1649849500IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0014920332
Approve145383572022-04-07 11:02:501423 days ago1649329370IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0021155445.37254718
Approve145033762022-04-01 23:38:231428 days ago1648856303IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0027762559.5430978
Approve144828552022-03-29 18:59:391432 days ago1648580379IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0033724472.32979304
Approve144825262022-03-29 17:44:321432 days ago1648575872IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0022146747.49867598
Approve144824682022-03-29 17:31:411432 days ago1648575101IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0021915747.00327324
Approve144793702022-03-29 6:04:551432 days ago1648533895IN
0x8E149BCb...7bE2cAeCB
0 ETH0.001654135.47593317
Approve144618542022-03-26 12:33:411435 days ago1648298021IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0012602827.02975111
Approve144594622022-03-26 3:33:541435 days ago1648265634IN
0x8E149BCb...7bE2cAeCB
0 ETH0.001408930.21710358
Approve144592782022-03-26 2:54:361435 days ago1648263276IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0013805629.60928086
Approve144581052022-03-25 22:31:041435 days ago1648247464IN
0x8E149BCb...7bE2cAeCB
0 ETH0.002331350
Approve144579242022-03-25 21:50:141436 days ago1648245014IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0020095943.10038947
Approve144563432022-03-25 15:48:021436 days ago1648223282IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0033053870.89140032
Approve144536262022-03-25 5:42:511436 days ago1648186971IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0014360230.79877722
Approve144533332022-03-25 4:39:331436 days ago1648183173IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0015557433.36653838
Approve144529622022-03-25 3:18:061436 days ago1648178286IN
0x8E149BCb...7bE2cAeCB
0 ETH0.001922141.22382112
Approve144528172022-03-25 2:47:421436 days ago1648176462IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0021965747.11054205
Approve144528092022-03-25 2:45:401436 days ago1648176340IN
0x8E149BCb...7bE2cAeCB
0 ETH0.002579555.32337641
Approve144527912022-03-25 2:40:271436 days ago1648176027IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0020615744.21522111
Approve144527902022-03-25 2:39:571436 days ago1648175997IN
0x8E149BCb...7bE2cAeCB
0 ETH0.001859739.88562988
Approve144527782022-03-25 2:37:201436 days ago1648175840IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0020393343.73816684
Approve144527612022-03-25 2:33:201436 days ago1648175600IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0028068260.19868524
Approve144526192022-03-25 1:56:501436 days ago1648173410IN
0x8E149BCb...7bE2cAeCB
0 ETH0.0027403558.77310006
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer232625032025-08-31 17:04:23181 days ago1756659863
0x8E149BCb...7bE2cAeCB
0.01446859 ETH
Transfer232625032025-08-31 17:04:23181 days ago1756659863
0x8E149BCb...7bE2cAeCB
0.00033593 ETH
Add Liquidity ET...232625032025-08-31 17:04:23181 days ago1756659863
0x8E149BCb...7bE2cAeCB
0.00206694 ETH
Transfer232625032025-08-31 17:04:23181 days ago1756659863
0x8E149BCb...7bE2cAeCB
0.01653553 ETH
-147335552022-05-08 2:45:061392 days ago1651977906
0x8E149BCb...7bE2cAeCB
0.01043838 ETH
-147335552022-05-08 2:45:061392 days ago1651977906
0x8E149BCb...7bE2cAeCB
0.00149119 ETH
-147335552022-05-08 2:45:061392 days ago1651977906
0x8E149BCb...7bE2cAeCB
0.01192958 ETH
-145995662022-04-17 0:20:101413 days ago1650154810
0x8E149BCb...7bE2cAeCB
0.0076712 ETH
-145995662022-04-17 0:20:101413 days ago1650154810
0x8E149BCb...7bE2cAeCB
0.00109588 ETH
-145995662022-04-17 0:20:101413 days ago1650154810
0x8E149BCb...7bE2cAeCB
0.00876708 ETH
-145770152022-04-13 12:09:321417 days ago1649851772
0x8E149BCb...7bE2cAeCB
0.01865962 ETH
-145770152022-04-13 12:09:321417 days ago1649851772
0x8E149BCb...7bE2cAeCB
0.00266566 ETH
-145770152022-04-13 12:09:321417 days ago1649851772
0x8E149BCb...7bE2cAeCB
0.02132528 ETH
-145445742022-04-08 10:28:401422 days ago1649413720
0x8E149BCb...7bE2cAeCB
0.01906716 ETH
-145445742022-04-08 10:28:401422 days ago1649413720
0x8E149BCb...7bE2cAeCB
0.00272388 ETH
-145445742022-04-08 10:28:401422 days ago1649413720
0x8E149BCb...7bE2cAeCB
0.02179104 ETH
-144829162022-03-29 19:12:081432 days ago1648581128
0x8E149BCb...7bE2cAeCB
0.01959302 ETH
-144829162022-03-29 19:12:081432 days ago1648581128
0x8E149BCb...7bE2cAeCB
0.002799 ETH
-144829162022-03-29 19:12:081432 days ago1648581128
0x8E149BCb...7bE2cAeCB
0.02239203 ETH
-144825562022-03-29 17:51:031432 days ago1648576263
0x8E149BCb...7bE2cAeCB
0.02016025 ETH
-144825562022-03-29 17:51:031432 days ago1648576263
0x8E149BCb...7bE2cAeCB
0.00288003 ETH
-144825562022-03-29 17:51:031432 days ago1648576263
0x8E149BCb...7bE2cAeCB
0.02304028 ETH
-144824732022-03-29 17:33:011432 days ago1648575181
0x8E149BCb...7bE2cAeCB
0.02075268 ETH
-144824732022-03-29 17:33:011432 days ago1648575181
0x8E149BCb...7bE2cAeCB
0.00296466 ETH
-144824732022-03-29 17:33:011432 days ago1648575181
0x8E149BCb...7bE2cAeCB
0.02371735 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vegetape

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-03-24
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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 IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
}

contract Vegetape is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "Vegetape";
    string constant private _symbol = "VAPE";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 900,
        sellFee: 900,
        transferFee: 900
        });

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 7,
        total: 9
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xA091cfe799B4a37d4d71270b570b144Bd6365C0c)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount = (_tTotal * 100) / 100;
    uint256 private _maxWalletSize = (_tTotal * 100) / 100;

/*
    uint256 private _maxTxAmount = (_tTotal * 1) / 100;
    uint256 private _maxWalletSize = (_tTotal * 1) / 100;
*/

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[msg.sender] = _tTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, false, true);
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "3 Day cooldown.!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }
    
    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function isExcludedFromLimits(address account) public view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor, uint256 time) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        contractSwapTimer = time;
    }

    function setWallets(address payable marketing) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
    }

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }


    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

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

        if (sell) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.total) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 marketingBalance = amtBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 25) / 10000;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, false, true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003819055610384608081905260a081905260c0526008805465ffffffffffff199081166503840384038417909155600260e0526007610100526009610120819052805490911664090007000217905561016060405273a091cfe799b4a37d4d71270b570b144bd6365c0c610140819052600c80546001600160a01b0319169091179055600d805461ff0019169055600e556064620000a36012600a6200074c565b620000b390633b9aca0062000764565b620000c090606462000764565b620000cc919062000786565b60125560646012600a620000e191906200074c565b620000f190633b9aca0062000764565b620000fe90606462000764565b6200010a919062000786565b6013556014805461ffff19169055620001266012600a6200074c565b6200013690633b9aca0062000764565b33600081815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001796012600a6200074c565b6200018990633b9aca0062000764565b60405190815260200160405180910390a3600080546001600160a01b0319163317905546603803620001e157600a80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620002d4565b466061036200021657600a80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620002d4565b4660011480620002265750466004145b80620002325750466003145b156200026457600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620002d4565b4661a86a036200029a57600a80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d4179055620002d4565b4660fa03620002cf57600a80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c29179055620002d4565b600080fd5b600a60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e9190620007a9565b6001600160a01b031663c9c65396600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d69190620007a9565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000423573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004499190620007a9565b600b80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600a546200049892918216911660001962000536565b600a54620004b49030906001600160a01b031660001962000536565b600080546001600160a01b0390811682526005602090815260408084208054600160ff19918216811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805482168317905585549094168552600790925290922080549091169091179055620007d4565b6001600160a01b038316620005885760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620005d65760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200057f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200068e57816000190482111562000672576200067262000637565b808516156200068057918102915b93841c939080029062000652565b509250929050565b600082620006a75750600162000746565b81620006b65750600062000746565b8160018114620006cf5760028114620006da57620006fa565b600191505062000746565b60ff841115620006ee57620006ee62000637565b50506001821b62000746565b5060208310610133831016604e8410600b84101617156200071f575081810a62000746565b6200072b83836200064d565b806000190482111562000742576200074262000637565b0290505b92915050565b60006200075d60ff84168362000696565b9392505050565b600081600019048311821515161562000781576200078162000637565b500290565b600082620007a457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007bc57600080fd5b81516001600160a01b03811681146200075d57600080fd5b613bf880620007e46000396000f3fe6080604052600436106103435760003560e01c8063590ffdce116101b0578063b3d514fb116100ec578063e4fcfd1811610095578063ee5d9c2d1161006f578063ee5d9c2d146109d5578063f94aa1b4146109ea578063fdb78c0e14610a0a578063fe575a8714610a2957600080fd5b8063e4fcfd181461097f578063eafb5a3c14610995578063eb50e70e146109b557600080fd5b8063cab5ebea116100c6578063cab5ebea146108e8578063cf84770614610908578063dd62ed3e1461093957600080fd5b8063b3d514fb14610567578063bcd96a25146108a8578063c6a276c2146108c857600080fd5b806380c581d1116101595780638a8c523c116101335780638a8c523c1461082d57806395d89b4114610842578063a9059cbb14610888578063b1b08f711461056757600080fd5b806380c581d1146107da578063893d20e8146107fa5780638a63bd9b1461081857600080fd5b80636ebd00781161018a5780636ebd00781461077a57806370a082311461078f578063715018a6146107c557600080fd5b8063590ffdce146107015780635c24b074146107215780635cce86cd1461074157600080fd5b80632b28fc7a1161027f57806336fddb04116102285780634ada218b116102025780634ada218b1461066f5780634fb2e45d146106895780634fbee193146106a957806350a8e016146106e257600080fd5b806336fddb041461060f5780633f3cf56c1461062f578063452ed4f11461064f57600080fd5b806332cde6641161025957806332cde664146105af57806333251a0b146105cf57806334cd8260146105ef57600080fd5b80632b28fc7a146105675780632e8fa8211461057d578063313ce5671461059357600080fd5b806309231602116102ec57806318160ddd116102c657806318160ddd146104f257806323b872dd1461050757806326003957146105275780632610eaca1461054757600080fd5b8063092316021461048d578063095ea7b3146104ad5780630fa604e4146104dd57600080fd5b8063069d955f1161031d578063069d955f146103c857806306fdde031461041e5780630758d9241461046d57600080fd5b806303fd2a451461034f5780630445b66714610382578063044df726146103a657600080fd5b3661034a57005b600080fd5b34801561035b57600080fd5b5061036561dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038e57600080fd5b5061039860105481565b604051908152602001610379565b3480156103b257600080fd5b506103c66103c136600461345d565b610a49565b005b3480156103d457600080fd5b506008546103f99061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610379565b34801561042a57600080fd5b5060408051808201909152600881527f566567657461706500000000000000000000000000000000000000000000000060208201525b6040516103799190613496565b34801561047957600080fd5b50600a54610365906001600160a01b031681565b34801561049957600080fd5b506103c66104a83660046134eb565b610b26565b3480156104b957600080fd5b506104cd6104c8366004613519565b610c45565b6040519015158152602001610379565b3480156104e957600080fd5b50610398610c5c565b3480156104fe57600080fd5b50610398610c7c565b34801561051357600080fd5b506104cd610522366004613545565b610cbe565b34801561053357600080fd5b506103c6610542366004613586565b610d36565b34801561055357600080fd5b506103c6610562366004613697565b610e86565b34801561057357600080fd5b506103986107d081565b34801561058957600080fd5b5061039860115481565b34801561059f57600080fd5b5060405160128152602001610379565b3480156105bb57600080fd5b506103c66105ca366004613770565b610ff5565b3480156105db57600080fd5b506103c66105ea3660046137b3565b611130565b3480156105fb57600080fd5b506103c661060a3660046137d0565b6111d0565b34801561061b57600080fd5b506103c661062a36600461380b565b61128d565b34801561063b57600080fd5b506103c661064a366004613586565b611306565b34801561065b57600080fd5b50600b54610365906001600160a01b031681565b34801561067b57600080fd5b506014546104cd9060ff1681565b34801561069557600080fd5b506103c66106a43660046137b3565b611456565b3480156106b557600080fd5b506104cd6106c43660046137b3565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106ee57600080fd5b506014546104cd90610100900460ff1681565b34801561070d57600080fd5b506103c661071c36600461380b565b61168c565b34801561072d57600080fd5b506103c661073c3660046137b3565b611705565b34801561074d57600080fd5b506104cd61075c3660046137b3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561078657600080fd5b50610398611800565b34801561079b57600080fd5b506103986107aa3660046137b3565b6001600160a01b031660009081526001602052604090205490565b3480156107d157600080fd5b506103c661181b565b3480156107e657600080fd5b506103c66107f536600461380b565b6118d6565b34801561080657600080fd5b506000546001600160a01b0316610365565b34801561082457600080fd5b506104cd611a85565b34801561083957600080fd5b506103c6611af4565b34801561084e57600080fd5b5060408051808201909152600481527f56415045000000000000000000000000000000000000000000000000000000006020820152610460565b34801561089457600080fd5b506104cd6108a3366004613519565b611d5c565b3480156108b457600080fd5b506103c66108c3366004613829565b611d73565b3480156108d457600080fd5b506103c66108e33660046137b3565b611e45565b3480156108f457600080fd5b506103c661090336600461385c565b611ee5565b34801561091457600080fd5b506009546103f99061ffff808216916201000081048216916401000000009091041683565b34801561094557600080fd5b50610398610954366004613879565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561098b57600080fd5b50610398600e5481565b3480156109a157600080fd5b506103c66109b03660046137b3565b611f87565b3480156109c157600080fd5b506103c66109d03660046137b3565b612357565b3480156109e157600080fd5b506103c66123df565b3480156109f657600080fd5b50600c54610365906001600160a01b031681565b348015610a1657600080fd5b50600d546104cd90610100900460ff1681565b348015610a3557600080fd5b506104cd610a443660046137b3565b6124c2565b6000546001600160a01b03163314610a9c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6014546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610b745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b604b811015610bc55760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610a93565b6014546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050505050565b6000610c52338484612550565b5060015b92915050565b6000610c6a6012600a6139ba565b601354610c7791906139c9565b905090565b6000610c8a6012600a6139ba565b610c9890633b9aca00613a04565b600003610ca457600080fd5b610cb06012600a6139ba565b610c7790633b9aca00613a04565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610d23576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610d1d908490613a23565b90915550505b610d2e84848461265d565b949350505050565b6000546001600160a01b03163314610d845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6103e8610d936012600a6139ba565b610da190633b9aca00613a04565b610dab91906139c9565b8183610db96012600a6139ba565b610dc790633b9aca00613a04565b610dd19190613a04565b610ddb91906139c9565b1015610e4f5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a93565b8082610e5d6012600a6139ba565b610e6b90633b9aca00613a04565b610e759190613a04565b610e7f91906139c9565b6013555050565b6000546001600160a01b03163314610ed45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b8051825114610f255760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610a93565b60005b82518160ff161015610ff057818160ff1681518110610f4957610f49613a3a565b6020026020010151610f70336001600160a01b031660009081526001602052604090205490565b1015610f7b57600080fd5b610fdd33848360ff1681518110610f9457610f94613a3a565b60200260200101516012600a610faa91906139ba565b858560ff1681518110610fbf57610fbf613a3a565b6020026020010151610fd19190613a04565b60008060006001612b12565b5080610fe881613a69565b915050610f28565b505050565b6000546001600160a01b031633146110435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6107d08361ffff161115801561105f57506107d08261ffff1611155b801561107157506107d08161ffff1611155b6110bd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a93565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b0316331461117e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6014546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c10565b6000546001600160a01b0316331461121e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b838561122c6012600a6139ba565b61123a90633b9aca00613a04565b6112449190613a04565b61124e91906139c9565b601055818361125f6012600a6139ba565b61126d90633b9aca00613a04565b6112779190613a04565b61128191906139c9565b601155600e5550505050565b6000546001600160a01b031633146112db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6103e86113636012600a6139ba565b61137190633b9aca00613a04565b61137b91906139c9565b81836113896012600a6139ba565b61139790633b9aca00613a04565b6113a19190613a04565b6113ab91906139c9565b101561141f5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a93565b808261142d6012600a6139ba565b61143b90633b9aca00613a04565b6114459190613a04565b61144f91906139c9565b6012555050565b6000546001600160a01b031633146114a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6001600160a01b0381166115205760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a93565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016115be5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a93565b600080546115d7916001600160a01b039091169061168c565b6115e281600161168c565b600080546001600160a01b03168152600160205260409020541561162957600080546001600160a01b0316808252600160205260409091205461162791908390610fd1565b505b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146116da5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117535760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b601454610100900460ff161561176857600080fd5b306001600160a01b038216036117c05760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610a93565b601480546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600061180e6012600a6139ba565b601254610c7791906139c9565b6000546001600160a01b031633146118695760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b60008054611882916001600160a01b039091169061168c565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146119245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b8015156000036119a0576001600160a01b03828116600081815260026020526040808220805460ff1916905560145490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610af0565b60035415611a07576203f480600354426119ba9190613a23565b11611a075760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610a93565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560145491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610af0565b5050565b600080546001600160a01b03163314611ad45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b600a54611aee9030906001600160a01b0316600019612550565b50600190565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b60145460ff1615611b955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a93565b601454610100900460ff16611bec5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610a93565b6014546201000090046001600160a01b0316611c3257601480547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601454600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611cbd57600080fd5b505af1925050508015611cce575060015b506014805460ff19166001179055600b5461271090611d0b906001600160a01b03166001600160a01b031660009081526001602052604090205490565b611d1690600a613a04565b611d2091906139c9565b601055600b546001600160a01b031660009081526001602052604090205461271090611d4d906019613a04565b611d5791906139c9565b601155565b6000611d6933848461265d565b5060019392505050565b6000546001600160a01b03163314611dc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6009805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090921690851617179055611e058183613a88565b6009805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b03163314611e935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6014546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610c10565b6000546001600160a01b03163314611f335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b600d80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611f7c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611fd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e9190613aae565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190613aae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190613aae565b90506001600160a01b0381166122df57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a89190613aae565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190613aae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561227e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a29190613aae565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612313565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155610ff0903090600019612550565b6000546001600160a01b031633146123a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461242d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b601454610100900460ff16156124855760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610a93565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156124bf573d6000803e3d6000fd5b50565b6014546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561252c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c569190613acb565b6001600160a01b0383166125a65760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a93565b6001600160a01b0382166125fc5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a93565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166126db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a93565b6001600160a01b0383166127575760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a93565b600082116127cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a93565b6001600160a01b0384166000908152600260205260408120548190819060ff16156127fb5760019250612829565b6001600160a01b03861660009081526002602052604090205460ff16156128255760019150612829565b5060015b6128338787612d52565b15612a395760145460ff1661288a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a93565b82806128935750815b15612957576001600160a01b03871660009081526006602052604090205460ff161580156128da57506001600160a01b03861660009081526006602052604090205460ff16155b15612957576012548511156129575760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a93565b600a546001600160a01b03878116911614801590612973575081155b15612a39576001600160a01b03861660009081526006602052604090205460ff16612a3957601354856129bb886001600160a01b031660009081526001602052604090205490565b6129c59190613ae8565b1115612a395760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a93565b6001600160a01b03871660009081526005602052604090205460019060ff1680612a7b57506001600160a01b03871660009081526005602052604090205460ff165b15612a84575060005b8215612af757600d5460ff16158015612aa45750600d54610100900460ff165b15612af75742600e54600f54612aba9190613ae8565b1015612af757306000908152600160205260409020546010548110612af5576011548110612ae757506011545b612af081612e27565b42600f555b505b612b0688888884888888612b12565b98975050505050505050565b601454600090610100900460ff16612bbe57612b2e888861321a565b601454610100900460ff16158015612b4b5750612b4b8888612d52565b15612bbe5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a93565b612bc88888612d52565b15612c7b576014546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015612c64575060408051601f3d908101601f19168201909252612c6191810190613acb565b60015b612c6d57600080fd5b905080612c7957600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290612ca3908490613a23565b909155506000905085612cb65786612cc2565b612cc28986868a613378565b6001600160a01b038916600090815260016020526040812080549293508392909190612cef908490613ae8565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d3b91815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590612d7f57506000546001600160a01b03838116911614155b8015612d9657506000546001600160a01b03163214155b8015612dbb57506001600160a01b03821660009081526007602052604090205460ff16155b8015612de057506001600160a01b03831660009081526007602052604090205460ff16155b8015612df757506001600160a01b03821661dead14155b8015612e0b57506001600160a01b03821615155b8015612e2057506001600160a01b0383163014155b9392505050565b600d805460ff191660011790556040805160608101825260095461ffff8082168352620100008204811660208401526401000000009091041691810182905290600003612e74575061320d565b306000908152600460209081526040808320600a546001600160a01b0316845290915290205460001914612ecd57306000908152600460209081526040808320600a546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685612eee9190613a04565b612ef891906139c9565b612f0291906139c9565b90506000612f108285613a23565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612f4a57612f4a613a3a565b6001600160a01b03928316602091820292909201810191909152600a54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe09190613aae565b81600181518110612ff357612ff3613a3a565b6001600160a01b039283166020918202929092010152600a546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613052908590600090869030904290600401613b00565b600060405180830381600087803b15801561306c57600080fd5b505af1158015613080573d6000803e3d6000fd5b50479250600091508490506130958684613a04565b61309f91906139c9565b9050841561319057600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561312e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131539190613b71565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61319a8183613a23565b91508560000151866040018181516131b29190613b9f565b61ffff9081169091526020880151849250161561320557600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613203573d6000803e3d6000fd5b505b505050505050505b50600d805460ff19169055565b601454610100900460ff16156132985760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a93565b6132a28282612d52565b1580156132bc5750600b546001600160a01b038281169116145b15611a81576001600160a01b038083166000908152600760205260409020805460ff191660011790556014805461ff00191661010017908190556201000090041661333157601480547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600d805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600080841561338e575060085461ffff166133b8565b83156133a7575060085462010000900461ffff166133b8565b50600854640100000000900461ffff165b60006127106133c78386613a04565b6133d191906139c9565b306000908152600160205260408120805492935083929091906133f5908490613ae8565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36134448185613a23565b979650505050505050565b80151581146124bf57600080fd5b6000806040838503121561347057600080fd5b823561347b8161344f565b9150602083013561348b8161344f565b809150509250929050565b600060208083528351808285015260005b818110156134c3578581018301518582016040015282016134a7565b818111156134d5576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156134fd57600080fd5b5035919050565b6001600160a01b03811681146124bf57600080fd5b6000806040838503121561352c57600080fd5b823561353781613504565b946020939093013593505050565b60008060006060848603121561355a57600080fd5b833561356581613504565b9250602084013561357581613504565b929592945050506040919091013590565b6000806040838503121561359957600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613600576136006135a8565b604052919050565b600067ffffffffffffffff821115613622576136226135a8565b5060051b60200190565b600082601f83011261363d57600080fd5b8135602061365261364d83613608565b6135d7565b82815260059290921b8401810191818101908684111561367157600080fd5b8286015b8481101561368c5780358352918301918301613675565b509695505050505050565b600080604083850312156136aa57600080fd5b823567ffffffffffffffff808211156136c257600080fd5b818501915085601f8301126136d657600080fd5b813560206136e661364d83613608565b82815260059290921b8401810191818101908984111561370557600080fd5b948201945b8386101561372c57853561371d81613504565b8252948201949082019061370a565b9650508601359250508082111561374257600080fd5b5061374f8582860161362c565b9150509250929050565b803561ffff8116811461376b57600080fd5b919050565b60008060006060848603121561378557600080fd5b61378e84613759565b925061379c60208501613759565b91506137aa60408501613759565b90509250925092565b6000602082840312156137c557600080fd5b8135612e2081613504565b600080600080600060a086880312156137e857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561381e57600080fd5b823561347b81613504565b6000806040838503121561383c57600080fd5b61384583613759565b915061385360208401613759565b90509250929050565b60006020828403121561386e57600080fd5b8135612e208161344f565b6000806040838503121561388c57600080fd5b823561389781613504565b9150602083013561348b81613504565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156139115781600019048211156138f7576138f76138a7565b8085161561390457918102915b93841c93908002906138db565b509250929050565b60008261392857506001610c56565b8161393557506000610c56565b816001811461394b576002811461395557613971565b6001915050610c56565b60ff841115613966576139666138a7565b50506001821b610c56565b5060208310610133831016604e8410600b8410161715613994575081810a610c56565b61399e83836138d6565b80600019048211156139b2576139b26138a7565b029392505050565b6000612e2060ff841683613919565b6000826139ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615613a1e57613a1e6138a7565b500290565b600082821015613a3557613a356138a7565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103613a7f57613a7f6138a7565b60010192915050565b600061ffff808316818516808303821115613aa557613aa56138a7565b01949350505050565b600060208284031215613ac057600080fd5b8151612e2081613504565b600060208284031215613add57600080fd5b8151612e208161344f565b60008219821115613afb57613afb6138a7565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b505784516001600160a01b031683529383019391830191600101613b2b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b8657600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015613bba57613bba6138a7565b03939250505056fea264697066735822122065515827f9171a257d9d5321d9ff85d9e97c7bab59631b4aaf7faacf3fa293f964736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103435760003560e01c8063590ffdce116101b0578063b3d514fb116100ec578063e4fcfd1811610095578063ee5d9c2d1161006f578063ee5d9c2d146109d5578063f94aa1b4146109ea578063fdb78c0e14610a0a578063fe575a8714610a2957600080fd5b8063e4fcfd181461097f578063eafb5a3c14610995578063eb50e70e146109b557600080fd5b8063cab5ebea116100c6578063cab5ebea146108e8578063cf84770614610908578063dd62ed3e1461093957600080fd5b8063b3d514fb14610567578063bcd96a25146108a8578063c6a276c2146108c857600080fd5b806380c581d1116101595780638a8c523c116101335780638a8c523c1461082d57806395d89b4114610842578063a9059cbb14610888578063b1b08f711461056757600080fd5b806380c581d1146107da578063893d20e8146107fa5780638a63bd9b1461081857600080fd5b80636ebd00781161018a5780636ebd00781461077a57806370a082311461078f578063715018a6146107c557600080fd5b8063590ffdce146107015780635c24b074146107215780635cce86cd1461074157600080fd5b80632b28fc7a1161027f57806336fddb04116102285780634ada218b116102025780634ada218b1461066f5780634fb2e45d146106895780634fbee193146106a957806350a8e016146106e257600080fd5b806336fddb041461060f5780633f3cf56c1461062f578063452ed4f11461064f57600080fd5b806332cde6641161025957806332cde664146105af57806333251a0b146105cf57806334cd8260146105ef57600080fd5b80632b28fc7a146105675780632e8fa8211461057d578063313ce5671461059357600080fd5b806309231602116102ec57806318160ddd116102c657806318160ddd146104f257806323b872dd1461050757806326003957146105275780632610eaca1461054757600080fd5b8063092316021461048d578063095ea7b3146104ad5780630fa604e4146104dd57600080fd5b8063069d955f1161031d578063069d955f146103c857806306fdde031461041e5780630758d9241461046d57600080fd5b806303fd2a451461034f5780630445b66714610382578063044df726146103a657600080fd5b3661034a57005b600080fd5b34801561035b57600080fd5b5061036561dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038e57600080fd5b5061039860105481565b604051908152602001610379565b3480156103b257600080fd5b506103c66103c136600461345d565b610a49565b005b3480156103d457600080fd5b506008546103f99061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610379565b34801561042a57600080fd5b5060408051808201909152600881527f566567657461706500000000000000000000000000000000000000000000000060208201525b6040516103799190613496565b34801561047957600080fd5b50600a54610365906001600160a01b031681565b34801561049957600080fd5b506103c66104a83660046134eb565b610b26565b3480156104b957600080fd5b506104cd6104c8366004613519565b610c45565b6040519015158152602001610379565b3480156104e957600080fd5b50610398610c5c565b3480156104fe57600080fd5b50610398610c7c565b34801561051357600080fd5b506104cd610522366004613545565b610cbe565b34801561053357600080fd5b506103c6610542366004613586565b610d36565b34801561055357600080fd5b506103c6610562366004613697565b610e86565b34801561057357600080fd5b506103986107d081565b34801561058957600080fd5b5061039860115481565b34801561059f57600080fd5b5060405160128152602001610379565b3480156105bb57600080fd5b506103c66105ca366004613770565b610ff5565b3480156105db57600080fd5b506103c66105ea3660046137b3565b611130565b3480156105fb57600080fd5b506103c661060a3660046137d0565b6111d0565b34801561061b57600080fd5b506103c661062a36600461380b565b61128d565b34801561063b57600080fd5b506103c661064a366004613586565b611306565b34801561065b57600080fd5b50600b54610365906001600160a01b031681565b34801561067b57600080fd5b506014546104cd9060ff1681565b34801561069557600080fd5b506103c66106a43660046137b3565b611456565b3480156106b557600080fd5b506104cd6106c43660046137b3565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106ee57600080fd5b506014546104cd90610100900460ff1681565b34801561070d57600080fd5b506103c661071c36600461380b565b61168c565b34801561072d57600080fd5b506103c661073c3660046137b3565b611705565b34801561074d57600080fd5b506104cd61075c3660046137b3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561078657600080fd5b50610398611800565b34801561079b57600080fd5b506103986107aa3660046137b3565b6001600160a01b031660009081526001602052604090205490565b3480156107d157600080fd5b506103c661181b565b3480156107e657600080fd5b506103c66107f536600461380b565b6118d6565b34801561080657600080fd5b506000546001600160a01b0316610365565b34801561082457600080fd5b506104cd611a85565b34801561083957600080fd5b506103c6611af4565b34801561084e57600080fd5b5060408051808201909152600481527f56415045000000000000000000000000000000000000000000000000000000006020820152610460565b34801561089457600080fd5b506104cd6108a3366004613519565b611d5c565b3480156108b457600080fd5b506103c66108c3366004613829565b611d73565b3480156108d457600080fd5b506103c66108e33660046137b3565b611e45565b3480156108f457600080fd5b506103c661090336600461385c565b611ee5565b34801561091457600080fd5b506009546103f99061ffff808216916201000081048216916401000000009091041683565b34801561094557600080fd5b50610398610954366004613879565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561098b57600080fd5b50610398600e5481565b3480156109a157600080fd5b506103c66109b03660046137b3565b611f87565b3480156109c157600080fd5b506103c66109d03660046137b3565b612357565b3480156109e157600080fd5b506103c66123df565b3480156109f657600080fd5b50600c54610365906001600160a01b031681565b348015610a1657600080fd5b50600d546104cd90610100900460ff1681565b348015610a3557600080fd5b506104cd610a443660046137b3565b6124c2565b6000546001600160a01b03163314610a9c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6014546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610b0a57600080fd5b505af1158015610b1e573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610b745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b604b811015610bc55760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610a93565b6014546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c2a57600080fd5b505af1158015610c3e573d6000803e3d6000fd5b5050505050565b6000610c52338484612550565b5060015b92915050565b6000610c6a6012600a6139ba565b601354610c7791906139c9565b905090565b6000610c8a6012600a6139ba565b610c9890633b9aca00613a04565b600003610ca457600080fd5b610cb06012600a6139ba565b610c7790633b9aca00613a04565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610d23576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610d1d908490613a23565b90915550505b610d2e84848461265d565b949350505050565b6000546001600160a01b03163314610d845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6103e8610d936012600a6139ba565b610da190633b9aca00613a04565b610dab91906139c9565b8183610db96012600a6139ba565b610dc790633b9aca00613a04565b610dd19190613a04565b610ddb91906139c9565b1015610e4f5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610a93565b8082610e5d6012600a6139ba565b610e6b90633b9aca00613a04565b610e759190613a04565b610e7f91906139c9565b6013555050565b6000546001600160a01b03163314610ed45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b8051825114610f255760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610a93565b60005b82518160ff161015610ff057818160ff1681518110610f4957610f49613a3a565b6020026020010151610f70336001600160a01b031660009081526001602052604090205490565b1015610f7b57600080fd5b610fdd33848360ff1681518110610f9457610f94613a3a565b60200260200101516012600a610faa91906139ba565b858560ff1681518110610fbf57610fbf613a3a565b6020026020010151610fd19190613a04565b60008060006001612b12565b5080610fe881613a69565b915050610f28565b505050565b6000546001600160a01b031633146110435760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6107d08361ffff161115801561105f57506107d08261ffff1611155b801561107157506107d08161ffff1611155b6110bd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610a93565b6008805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b0316331461117e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6014546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c10565b6000546001600160a01b0316331461121e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b838561122c6012600a6139ba565b61123a90633b9aca00613a04565b6112449190613a04565b61124e91906139c9565b601055818361125f6012600a6139ba565b61126d90633b9aca00613a04565b6112779190613a04565b61128191906139c9565b601155600e5550505050565b6000546001600160a01b031633146112db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113545760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6103e86113636012600a6139ba565b61137190633b9aca00613a04565b61137b91906139c9565b81836113896012600a6139ba565b61139790633b9aca00613a04565b6113a19190613a04565b6113ab91906139c9565b101561141f5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610a93565b808261142d6012600a6139ba565b61143b90633b9aca00613a04565b6114459190613a04565b61144f91906139c9565b6012555050565b6000546001600160a01b031633146114a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6001600160a01b0381166115205760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a93565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b038216016115be5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610a93565b600080546115d7916001600160a01b039091169061168c565b6115e281600161168c565b600080546001600160a01b03168152600160205260409020541561162957600080546001600160a01b0316808252600160205260409091205461162791908390610fd1565b505b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146116da5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117535760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b601454610100900460ff161561176857600080fd5b306001600160a01b038216036117c05760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610a93565b601480546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600061180e6012600a6139ba565b601254610c7791906139c9565b6000546001600160a01b031633146118695760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b60008054611882916001600160a01b039091169061168c565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146119245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b8015156000036119a0576001600160a01b03828116600081815260026020526040808220805460ff1916905560145490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610af0565b60035415611a07576203f480600354426119ba9190613a23565b11611a075760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610a93565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560145491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610af0565b5050565b600080546001600160a01b03163314611ad45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b600a54611aee9030906001600160a01b0316600019612550565b50600190565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b60145460ff1615611b955760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610a93565b601454610100900460ff16611bec5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610a93565b6014546201000090046001600160a01b0316611c3257601480547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601454600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611cbd57600080fd5b505af1925050508015611cce575060015b506014805460ff19166001179055600b5461271090611d0b906001600160a01b03166001600160a01b031660009081526001602052604090205490565b611d1690600a613a04565b611d2091906139c9565b601055600b546001600160a01b031660009081526001602052604090205461271090611d4d906019613a04565b611d5791906139c9565b601155565b6000611d6933848461265d565b5060019392505050565b6000546001600160a01b03163314611dc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6009805461ffff83811662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090921690851617179055611e058183613a88565b6009805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b03163314611e935760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b6014546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610c10565b6000546001600160a01b03163314611f335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b600d80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611f7c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611fd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e9190613aae565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190613aae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190613aae565b90506001600160a01b0381166122df57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a89190613aae565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190613aae565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561227e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a29190613aae565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055612313565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155610ff0903090600019612550565b6000546001600160a01b031633146123a55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461242d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610a93565b601454610100900460ff16156124855760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610a93565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156124bf573d6000803e3d6000fd5b50565b6014546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561252c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c569190613acb565b6001600160a01b0383166125a65760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a93565b6001600160a01b0382166125fc5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610a93565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166126db5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a93565b6001600160a01b0383166127575760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a93565b600082116127cd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610a93565b6001600160a01b0384166000908152600260205260408120548190819060ff16156127fb5760019250612829565b6001600160a01b03861660009081526002602052604090205460ff16156128255760019150612829565b5060015b6128338787612d52565b15612a395760145460ff1661288a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610a93565b82806128935750815b15612957576001600160a01b03871660009081526006602052604090205460ff161580156128da57506001600160a01b03861660009081526006602052604090205460ff16155b15612957576012548511156129575760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610a93565b600a546001600160a01b03878116911614801590612973575081155b15612a39576001600160a01b03861660009081526006602052604090205460ff16612a3957601354856129bb886001600160a01b031660009081526001602052604090205490565b6129c59190613ae8565b1115612a395760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610a93565b6001600160a01b03871660009081526005602052604090205460019060ff1680612a7b57506001600160a01b03871660009081526005602052604090205460ff165b15612a84575060005b8215612af757600d5460ff16158015612aa45750600d54610100900460ff165b15612af75742600e54600f54612aba9190613ae8565b1015612af757306000908152600160205260409020546010548110612af5576011548110612ae757506011545b612af081612e27565b42600f555b505b612b0688888884888888612b12565b98975050505050505050565b601454600090610100900460ff16612bbe57612b2e888861321a565b601454610100900460ff16158015612b4b5750612b4b8888612d52565b15612bbe5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610a93565b612bc88888612d52565b15612c7b576014546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015612c64575060408051601f3d908101601f19168201909252612c6191810190613acb565b60015b612c6d57600080fd5b905080612c7957600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290612ca3908490613a23565b909155506000905085612cb65786612cc2565b612cc28986868a613378565b6001600160a01b038916600090815260016020526040812080549293508392909190612cef908490613ae8565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d3b91815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590612d7f57506000546001600160a01b03838116911614155b8015612d9657506000546001600160a01b03163214155b8015612dbb57506001600160a01b03821660009081526007602052604090205460ff16155b8015612de057506001600160a01b03831660009081526007602052604090205460ff16155b8015612df757506001600160a01b03821661dead14155b8015612e0b57506001600160a01b03821615155b8015612e2057506001600160a01b0383163014155b9392505050565b600d805460ff191660011790556040805160608101825260095461ffff8082168352620100008204811660208401526401000000009091041691810182905290600003612e74575061320d565b306000908152600460209081526040808320600a546001600160a01b0316845290915290205460001914612ecd57306000908152600460209081526040808320600a546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685612eee9190613a04565b612ef891906139c9565b612f0291906139c9565b90506000612f108285613a23565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612f4a57612f4a613a3a565b6001600160a01b03928316602091820292909201810191909152600a54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe09190613aae565b81600181518110612ff357612ff3613a3a565b6001600160a01b039283166020918202929092010152600a546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613052908590600090869030904290600401613b00565b600060405180830381600087803b15801561306c57600080fd5b505af1158015613080573d6000803e3d6000fd5b50479250600091508490506130958684613a04565b61309f91906139c9565b9050841561319057600a546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561312e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131539190613b71565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61319a8183613a23565b91508560000151866040018181516131b29190613b9f565b61ffff9081169091526020880151849250161561320557600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613203573d6000803e3d6000fd5b505b505050505050505b50600d805460ff19169055565b601454610100900460ff16156132985760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610a93565b6132a28282612d52565b1580156132bc5750600b546001600160a01b038281169116145b15611a81576001600160a01b038083166000908152600760205260409020805460ff191660011790556014805461ff00191661010017908190556201000090041661333157601480547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b600d805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600080841561338e575060085461ffff166133b8565b83156133a7575060085462010000900461ffff166133b8565b50600854640100000000900461ffff165b60006127106133c78386613a04565b6133d191906139c9565b306000908152600160205260408120805492935083929091906133f5908490613ae8565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36134448185613a23565b979650505050505050565b80151581146124bf57600080fd5b6000806040838503121561347057600080fd5b823561347b8161344f565b9150602083013561348b8161344f565b809150509250929050565b600060208083528351808285015260005b818110156134c3578581018301518582016040015282016134a7565b818111156134d5576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156134fd57600080fd5b5035919050565b6001600160a01b03811681146124bf57600080fd5b6000806040838503121561352c57600080fd5b823561353781613504565b946020939093013593505050565b60008060006060848603121561355a57600080fd5b833561356581613504565b9250602084013561357581613504565b929592945050506040919091013590565b6000806040838503121561359957600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613600576136006135a8565b604052919050565b600067ffffffffffffffff821115613622576136226135a8565b5060051b60200190565b600082601f83011261363d57600080fd5b8135602061365261364d83613608565b6135d7565b82815260059290921b8401810191818101908684111561367157600080fd5b8286015b8481101561368c5780358352918301918301613675565b509695505050505050565b600080604083850312156136aa57600080fd5b823567ffffffffffffffff808211156136c257600080fd5b818501915085601f8301126136d657600080fd5b813560206136e661364d83613608565b82815260059290921b8401810191818101908984111561370557600080fd5b948201945b8386101561372c57853561371d81613504565b8252948201949082019061370a565b9650508601359250508082111561374257600080fd5b5061374f8582860161362c565b9150509250929050565b803561ffff8116811461376b57600080fd5b919050565b60008060006060848603121561378557600080fd5b61378e84613759565b925061379c60208501613759565b91506137aa60408501613759565b90509250925092565b6000602082840312156137c557600080fd5b8135612e2081613504565b600080600080600060a086880312156137e857600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561381e57600080fd5b823561347b81613504565b6000806040838503121561383c57600080fd5b61384583613759565b915061385360208401613759565b90509250929050565b60006020828403121561386e57600080fd5b8135612e208161344f565b6000806040838503121561388c57600080fd5b823561389781613504565b9150602083013561348b81613504565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156139115781600019048211156138f7576138f76138a7565b8085161561390457918102915b93841c93908002906138db565b509250929050565b60008261392857506001610c56565b8161393557506000610c56565b816001811461394b576002811461395557613971565b6001915050610c56565b60ff841115613966576139666138a7565b50506001821b610c56565b5060208310610133831016604e8410600b8410161715613994575081810a610c56565b61399e83836138d6565b80600019048211156139b2576139b26138a7565b029392505050565b6000612e2060ff841683613919565b6000826139ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615613a1e57613a1e6138a7565b500290565b600082821015613a3557613a356138a7565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff8103613a7f57613a7f6138a7565b60010192915050565b600061ffff808316818516808303821115613aa557613aa56138a7565b01949350505050565b600060208284031215613ac057600080fd5b8151612e2081613504565b600060208284031215613add57600080fd5b8151612e208161344f565b60008219821115613afb57613afb6138a7565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613b505784516001600160a01b031683529383019391830191600101613b2b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613b8657600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015613bba57613bba6138a7565b03939250505056fea264697066735822122065515827f9171a257d9d5321d9ff85d9e97c7bab59631b4aaf7faacf3fa293f964736f6c634300080d0033

Deployed Bytecode Sourcemap

3920:19639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5436:73;;;;;;;;;;;;5467:42;5436:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5436:73:0;;;;;;;;5875:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;5875:28:0;245:177:1;13403:151:0;;;;;;;;;;-1:-1:-1;13403:151:0;;;;;:::i;:::-;;:::i;:::-;;4933:113;;;;;;;;;;-1:-1:-1;4933:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;4933:113:0;931:365:1;10154:80:0;;;;;;;;;;-1:-1:-1;10226:5:0;;;;;;;;;;;;;;;;;10154:80;;;;;;;:::i;5375:26::-;;;;;;;;;;-1:-1:-1;5375:26:0;;;;-1:-1:-1;;;;;5375:26:0;;;13562:149;;;;;;;;;;-1:-1:-1;13562:149:0;;;;;:::i;:::-;;:::i;10764:159::-;;;;;;;;;;-1:-1:-1;10764:159:0;;;;;:::i;:::-;;:::i;:::-;;;3039:14:1;;3032:22;3014:41;;3002:2;2987:18;10764:159:0;2874:187:1;15573:112:0;;;;;;;;;;;;;:::i;9857:115::-;;;;;;;;;;;;;:::i;11430:306::-;;;;;;;;;;-1:-1:-1;11430:306:0;;;;;:::i;:::-;;:::i;14623:267::-;;;;;;;;;;-1:-1:-1;14623:267:0;;;;;:::i;:::-;;:::i;21614:418::-;;;;;;;;;;-1:-1:-1;21614:418:0;;;;;:::i;:::-;;:::i;5172:42::-;;;;;;;;;;;;5210:4;5172:42;;5910:25;;;;;;;;;;;;;;;;9978:80;;;;;;;;;;-1:-1:-1;9978:80:0;;4635:2;6525:36:1;;6513:2;6498:18;9978:80:0;6383:184:1;13719:397:0;;;;;;;;;;-1:-1:-1;13719:397:0;;;;;:::i;:::-;;:::i;13287:108::-;;;;;;;;;;-1:-1:-1;13287:108:0;;;;;:::i;:::-;;:::i;15693:338::-;;;;;;;;;;-1:-1:-1;15693:338:0;;;;;:::i;:::-;;:::i;14898:140::-;;;;;;;;;;-1:-1:-1;14898:140:0;;;;;:::i;:::-;;:::i;14346:269::-;;;;;;;;;;-1:-1:-1;14346:269:0;;;;;:::i;:::-;;:::i;5408:21::-;;;;;;;;;;-1:-1:-1;5408:21:0;;;;-1:-1:-1;;;;;5408:21:0;;;6196:34;;;;;;;;;;-1:-1:-1;6196:34:0;;;;;;;;8680:623;;;;;;;;;;-1:-1:-1;8680:623:0;;;;;:::i;:::-;;:::i;15184:125::-;;;;;;;;;;-1:-1:-1;15184:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;15273:28:0;15249:4;15273:28;;;:19;:28;;;;;;;;;15184:125;6237:36;;;;;;;;;;-1:-1:-1;6237:36:0;;;;;;;;;;;15317:134;;;;;;;;;;-1:-1:-1;15317:134:0;;;;;:::i;:::-;;:::i;12800:220::-;;;;;;;;;;-1:-1:-1;12800:220:0;;;;;:::i;:::-;;:::i;15046:130::-;;;;;;;;;;-1:-1:-1;15046:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;15138:30:0;15114:4;15138:30;;;:21;:30;;;;;;;;;15046:130;15459:106;;;;;;;;;;;;;:::i;10466:117::-;;;;;;;;;;-1:-1:-1;10466:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;10559:16:0;10532:7;10559:16;;;:7;:16;;;;;;;10466:117;9311:193;;;;;;;;;;;;;:::i;12292:500::-;;;;;;;;;;-1:-1:-1;12292:500:0;;;;;:::i;:::-;;:::i;10240:79::-;;;;;;;;;;-1:-1:-1;10292:7:0;10310:6;-1:-1:-1;;;;;10310:6:0;10240:79;;11249:173;;;;;;;;;;;;;:::i;20872:544::-;;;;;;;;;;;;;:::i;10064:84::-;;;;;;;;;;-1:-1:-1;10138:7:0;;;;;;;;;;;;;;;;;10064:84;;10591:165;;;;;;;;;;-1:-1:-1;10591:165:0;;;;;:::i;:::-;;:::i;14128:210::-;;;;;;;;;;-1:-1:-1;14128:210:0;;;;;:::i;:::-;;:::i;13028:118::-;;;;;;;;;;-1:-1:-1;13028:118:0;;;;;:::i;:::-;;:::i;16174:164::-;;;;;;;;;;-1:-1:-1;16174:164:0;;;;;:::i;:::-;;:::i;5055:108::-;;;;;;;;;;-1:-1:-1;5055:108:0;;;;;;;;;;;;;;;;;;;;;;10325:133;;;;;;;;;;-1:-1:-1;10325:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10427:19:0;;;10409:7;10427:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10325:133;5793:44;;;;;;;;;;;;;;;;11744:540;;;;;;;;;;-1:-1:-1;11744:540:0;;;;;:::i;:::-;;:::i;16039:127::-;;;;;;;;;;-1:-1:-1;16039:127:0;;;;;:::i;:::-;;:::i;21424:182::-;;;;;;;;;;;;;:::i;5588:128::-;;;;;;;;;;-1:-1:-1;5588:128:0;;;;-1:-1:-1;;;;;5588:128:0;;;5747:39;;;;;;;;;;-1:-1:-1;5747:39:0;;;;;;;;;;;13154:125;;;;;;;;;;-1:-1:-1;13154:125:0;;;;;:::i;:::-;;:::i;13403:151::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;;;;;;;;;13498:9:::1;::::0;:48:::1;::::0;;;;10107:14:1;;10100:22;13498:48:0::1;::::0;::::1;10082:41:1::0;10166:14;;10159:22;10139:18;;;10132:50;13498:9:0;;;::::1;-1:-1:-1::0;;;;;13498:9:0::1;::::0;:24:::1;::::0;10055:18:1;;13498:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13403:151:::0;;:::o;13562:149::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;13646:2:::1;13639:3;:9;;13631:30;;;::::0;-1:-1:-1;;;13631:30:0;;10395:2:1;13631:30:0::1;::::0;::::1;10377:21:1::0;10434:1;10414:18;;;10407:29;10472:10;10452:18;;;10445:38;10500:18;;13631:30:0::1;10193:331:1::0;13631:30:0::1;13672:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;13672:9:0;;;::::1;-1:-1:-1::0;;;;;13672:9:0::1;::::0;:26:::1;::::0;364:18:1;;13672:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13562:149:::0;:::o;10764:159::-;10839:4;10856:37;10865:10;10877:7;10886:6;10856:8;:37::i;:::-;-1:-1:-1;10911:4:0;10764:159;;;;;:::o;15573:112::-;15618:7;15663:13;4635:2;15663;:13;:::i;:::-;15645:14;;:32;;;;:::i;:::-;15638:39;;15573:112;:::o;9857:115::-;9912:7;4698:13;4635:2;4698;:13;:::i;:::-;4681:30;;4484:13;4681:30;:::i;:::-;9938:1;9927:12;9923:31;;9943:8;;;9923:31;4698:13;4635:2;4698;:13;:::i;:::-;4681:30;;4484:13;4681:30;:::i;11430:306::-;-1:-1:-1;;;;;11551:19:0;;11530:4;11551:19;;;:11;:19;;;;;;;;11571:10;11551:31;;;;;;;;-1:-1:-1;;11551:52:0;11547:126;;-1:-1:-1;;;;;11620:19:0;;;;;;:11;:19;;;;;;;;11640:10;11620:31;;;;;;;:41;;11655:6;;11620:19;:41;;11655:6;;11620:41;:::i;:::-;;;;-1:-1:-1;;11547:126:0;11692:36;11702:6;11710:9;11721:6;11692:9;:36::i;:::-;11685:43;11430:306;-1:-1:-1;;;;11430:306:0:o;14623:267::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;14765:4:::1;4698:13;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;14755:14;;;;:::i;:::-;14743:7:::0;14732;4698:13:::1;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;14722:17;;;;:::i;:::-;14721:29;;;;:::i;:::-;:49;;14713:112;;;::::0;-1:-1:-1;;;14713:112:0;;13065:2:1;14713:112:0::1;::::0;::::1;13047:21:1::0;13104:2;13084:18;;;13077:30;13143:34;13123:18;;;13116:62;13214:20;13194:18;;;13187:48;13252:19;;14713:112:0::1;12863:414:1::0;14713:112:0::1;14875:7:::0;14864;4698:13:::1;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;14854:17;;;;:::i;:::-;14853:29;;;;:::i;:::-;14836:14;:46:::0;-1:-1:-1;;14623:267:0:o;21614:418::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;21749:7:::1;:14;21730:8;:15;:33;21722:67;;;::::0;-1:-1:-1;;;21722:67:0;;13484:2:1;21722:67:0::1;::::0;::::1;13466:21:1::0;13523:2;13503:18;;;13496:30;13562:23;13542:18;;;13535:51;13603:18;;21722:67:0::1;13282:345:1::0;21722:67:0::1;21805:7;21800:225;21822:8;:15;21818:1;:19;;;21800:225;;;21892:7;21900:1;21892:10;;;;;;;;;;:::i;:::-;;;;;;;21867:21;21877:10;-1:-1:-1::0;;;;;10559:16:0;10532:7;10559:16;;;:7;:16;;;;;;;10466:117;21867:21:::1;:35;;21859:44;;;::::0;::::1;;21918:95;21936:10;21948:8;21957:1;21948:11;;;;;;;;;;:::i;:::-;;;;;;;4635:2;21972;:13;;;;:::i;:::-;21961:7;21969:1;21961:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;21987:5;21994::::0;22001::::1;22008:4;21918:17;:95::i;:::-;-1:-1:-1::0;21839:3:0;::::1;::::0;::::1;:::i;:::-;;;;21800:225;;;;21614:418:::0;;:::o;13719:397::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;5210:4:::1;13826:6;:21;;;;:65;;;;;5260:4;13868:7;:23;;;;13826:65;:117;;;;;5314:4;13912:11;:31;;;;13826:117;13818:170;;;::::0;-1:-1:-1;;;13818:170:0;;14203:2:1;13818:170:0::1;::::0;::::1;14185:21:1::0;14242:2;14222:18;;;14215:30;14281:25;14261:18;;;14254:53;14324:18;;13818:170:0::1;14001:347:1::0;13818:170:0::1;13999:9;:25:::0;;::::1;::::0;;::::1;14035:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;14073:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;13719:397::o;13287:108::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;13356:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;13356:31:0::1;::::0;::::1;160:74:1::0;13356:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;13356:31:0::1;14:226:1::0;15693:338:0;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;15907:16;15887;4698:13:::1;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;15877:26;;;;:::i;:::-;15876:47;;;;:::i;:::-;15860:13;:63:::0;15975:13;15958;4698::::1;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;15948:23;;;;:::i;:::-;15947:41;;;;:::i;:::-;15934:10;:54:::0;15999:17:::1;:24:::0;-1:-1:-1;;;;15693:338:0:o;14898:140::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;-1:-1:-1;;;;;14990:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14990:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14898:140::o;14346:269::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;14487:4:::1;4698:13;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;14477:14;;;;:::i;:::-;14465:7:::0;14454;4698:13:::1;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;14444:17;;;;:::i;:::-;14443:29;;;;:::i;:::-;:49;;14435:117;;;::::0;-1:-1:-1;;;14435:117:0;;14555:2:1;14435:117:0::1;::::0;::::1;14537:21:1::0;14594:2;14574:18;;;14567:30;14633:34;14613:18;;;14606:62;14704:25;14684:18;;;14677:53;14747:19;;14435:117:0::1;14353:419:1::0;14435:117:0::1;14600:7:::0;14589;4698:13:::1;4635:2;4698;:13;:::i;:::-;4681:30;::::0;4484:13:::1;4681:30;:::i;:::-;14579:17;;;;:::i;:::-;14578:29;;;;:::i;:::-;14563:12;:44:::0;-1:-1:-1;;14346:269:0:o;8680:623::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;-1:-1:-1;;;;;8759:22:0;::::1;8751:96;;;::::0;-1:-1:-1;;;8751:96:0;;14979:2:1;8751:96:0::1;::::0;::::1;14961:21:1::0;15018:2;14998:18;;;14991:30;15057:34;15037:18;;;15030:62;15128:31;15108:18;;;15101:59;15177:19;;8751:96:0::1;14777:425:1::0;8751:96:0::1;8866:16:::0;-1:-1:-1;;;;;8866:16:0;::::1;::::0;8858:90:::1;;;::::0;-1:-1:-1;;;8858:90:0;;14979:2:1;8858:90:0::1;::::0;::::1;14961:21:1::0;15018:2;14998:18;;;14991:30;15057:34;15037:18;;;15030:62;15128:31;15108:18;;;15101:59;15177:19;;8858:90:0::1;14777:425:1::0;8858:90:0::1;8979:6;::::0;;8959:34:::1;::::0;-1:-1:-1;;;;;8979:6:0;;::::1;::::0;8959:19:::1;:34::i;:::-;9004:35;9024:8;9034:4;9004:19;:35::i;:::-;9083:1;9073:6:::0;;-1:-1:-1;;;;;9073:6:0::1;10559:16:::0;;:7;:16;;;;;;9063:21;9060:134:::1;;9119:6;::::0;;-1:-1:-1;;;;;9119:6:0::1;10559:16:::0;;;:7;:16;;;;;;;9101:81:::1;::::0;9119:6;9127:8;;9137:17:::1;10466:117:::0;9101:81:::1;;9060:134;9214:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;9214:17:0;::::1;::::0;;::::1;::::0;;9247:38:::1;::::0;9214:17;;;;9247:38:::1;::::0;9214:6;9247:38:::1;8680:623:::0;:::o;15317:134::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;-1:-1:-1;;;;;15405:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15405:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15317:134::o;12800:220::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;12884:16:::1;::::0;::::1;::::0;::::1;;;12883:17;12875:26;;;::::0;::::1;;12943:4;-1:-1:-1::0;;;;;12920:28:0;::::1;::::0;12912:55:::1;;;::::0;-1:-1:-1;;;12912:55:0;;15409:2:1;12912:55:0::1;::::0;::::1;15391:21:1::0;15448:2;15428:18;;;15421:30;15487:16;15467:18;;;15460:44;15521:18;;12912:55:0::1;15207:338:1::0;12912:55:0::1;12978:9;:34:::0;;-1:-1:-1;;;;;12978:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;12800:220::o;15459:106::-;15500:7;15543:13;4635:2;15543;:13;:::i;:::-;15527:12;;:30;;;;:::i;9311:193::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;9396:6:::1;::::0;;9376:34:::1;::::0;-1:-1:-1;;;;;9396:6:0;;::::1;::::0;9376:19:::1;:34::i;:::-;9438:1;9421:19:::0;;;::::1;::::0;;9456:40:::1;::::0;9438:1;;9456:40:::1;::::0;9438:1;;9456:40:::1;9311:193::o:0;12292:500::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;12373:16;::::1;;12384:5;12373:16:::0;12369:416:::1;;-1:-1:-1::0;;;;;12406:13:0;;::::1;12422:5;12406:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;12406:21:0::1;::::0;;12442:9:::1;::::0;:32;;;;;::::1;::::0;::::1;15718:74:1::0;;;;15808:18;;;15801:50;;;;12442:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;15691:18:1;;12442:32:0::1;15550:307:1::0;12369:416:0::1;12511:17;::::0;:22;12507:136:::1;;12600:6;12580:17;;12562:15;:35;;;;:::i;:::-;:44;12554:73;;;::::0;-1:-1:-1;;;12554:73:0;;16064:2:1;12554:73:0::1;::::0;::::1;16046:21:1::0;16103:2;16083:18;;;16076:30;16142:18;16122;;;16115:46;16178:18;;12554:73:0::1;15862:340:1::0;12554:73:0::1;-1:-1:-1::0;;;;;12657:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;12657:20:0::1;12673:4;12657:20:::0;;::::1;::::0;;;12712:15:::1;12692:17;:35:::0;12742:9:::1;::::0;:31;;;;;::::1;::::0;::::1;15718:74:1::0;;;;15808:18;;;15801:50;12742:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;15691:18:1;;12742:31:0::1;15550:307:1::0;12369:416:0::1;12292:500:::0;;:::o;11249:173::-;11313:4;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;11362:9:::1;::::0;11330:62:::1;::::0;11347:4:::1;::::0;-1:-1:-1;;;;;11362:9:0::1;-1:-1:-1::0;;11330:8:0::1;:62::i;:::-;-1:-1:-1::0;11410:4:0::1;11249:173:::0;:::o;20872:544::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;20934:14:::1;::::0;::::1;;20933:15;20925:52;;;::::0;-1:-1:-1;;;20925:52:0;;16409:2:1;20925:52:0::1;::::0;::::1;16391:21:1::0;16448:2;16428:18;;;16421:30;16487:26;16467:18;;;16460:54;16531:18;;20925:52:0::1;16207:348:1::0;20925:52:0::1;20996:16;::::0;::::1;::::0;::::1;;;20988:53;;;::::0;-1:-1:-1;;;20988:53:0;;16762:2:1;20988:53:0::1;::::0;::::1;16744:21:1::0;16801:2;16781:18;;;16774:30;16840:26;16820:18;;;16813:54;16884:18;;20988:53:0::1;16560:348:1::0;20988:53:0::1;21063:9;::::0;;;::::1;-1:-1:-1::0;;;;;21063:9:0::1;21052:99;;21103:9;:36:::0;;;::::1;21133:4;21103:36:::0;::::1;;::::0;;21052:99:::1;21165:9;::::0;21185:6:::1;::::0;21165:85:::1;::::0;;;;-1:-1:-1;;;;;21185:6:0;;::::1;21165:85;::::0;::::1;17136:74:1::0;17258:10;21200:12:0::1;17246:23:1::0;17226:18;;;17219:51;17318:18;21222:15:0::1;17306:31:1::0;17286:18;;;17279:59;4635:2:0::1;17354:18:1::0;;;17347:45;21165:9:0;;;::::1;;::::0;:19:::1;::::0;17108::1;;21165:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21161:101:::0;21272:14:::1;:21:::0;;-1:-1:-1;;21272:21:0::1;21289:4;21272:21;::::0;;21331:6:::1;::::0;21347:5:::1;::::0;21321:17:::1;::::0;-1:-1:-1;;;;;21331:6:0::1;-1:-1:-1::0;;;;;10559:16:0;10532:7;10559:16;;;:7;:16;;;;;;;10466:117;21321:17:::1;:22;::::0;21341:2:::1;21321:22;:::i;:::-;21320:32;;;;:::i;:::-;21304:13;:48:::0;21387:6:::1;::::0;-1:-1:-1;;;;;21387:6:0::1;10532:7:::0;10559:16;;;:7;:16;;;;;;21403:5:::1;::::0;21377:22:::1;::::0;21397:2:::1;21377:22;:::i;:::-;21376:32;;;;:::i;:::-;21363:10;:45:::0;20872:544::o;10591:165::-;10669:4;10686:40;10696:10;10708:9;10719:6;10686:9;:40::i;:::-;-1:-1:-1;10744:4:0;;10591:165;-1:-1:-1;;;10591:165:0:o;14128:210::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;14213:7:::1;:29:::0;;::::1;14253::::0;;::::1;::::0;::::1;::::0;;;;14213;;::::1;14253::::0;::::1;::::0;;14309:21:::1;14273:9:::0;14233;14309:21:::1;:::i;:::-;14293:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;14128:210:0:o;13028:118::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;13102:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;13102:36:0::1;::::0;::::1;160:74:1::0;13102:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;13102:36:0::1;14:226:1::0;16174:164:0;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;16250:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;16250:29:0;;::::1;;::::0;;16295:35:::1;::::0;::::1;::::0;::::1;::::0;16272:7;3039:14:1;3032:22;3014:41;;3002:2;2987:18;;2874:187;16295:35:0::1;;;;;;;;16174:164:::0;:::o;11744:540::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;11813:20:::1;11846:9;11813:43;;11867:16;11897:10;-1:-1:-1::0;;;;;11897:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11886:40:0::1;;11935:4;11942:10;-1:-1:-1::0;;;;;11942:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11886:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;18141:15:1;;;11886:74:0::1;::::0;::::1;18123:34:1::0;18193:15;;18173:18;;;18166:43;18035:18;;11886:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11867:93:::0;-1:-1:-1;;;;;;11975:22:0;::::1;11971:200;;12034:10;-1:-1:-1::0;;;;;12034:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12023:43:0::1;;12075:4;12082:10;-1:-1:-1::0;;;;;12082:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12023:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;18141:15:1;;;12023:77:0::1;::::0;::::1;18123:34:1::0;18193:15;;18173:18;;;18166:43;18035:18;;12023:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12014:6;:86:::0;;;::::1;-1:-1:-1::0;;;;;12014:86:0;;;::::1;::::0;;;::::1;::::0;;11971:200:::1;;;12142:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;12142:17:0;::::1;;::::0;;11971:200:::1;12181:9;:22:::0;;;::::1;-1:-1:-1::0;;;;;12181:22:0;::::1;::::0;;::::1;::::0;;;12214:62:::1;::::0;12231:4:::1;::::0;-1:-1:-1;;12214:8:0::1;:62::i;16039:127::-:0;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;16116:11:::1;:42:::0;;;::::1;-1:-1:-1::0;;;;;16116:42:0;;;::::1;::::0;;;::::1;::::0;;16039:127::o;21424:182::-;6665:6;;-1:-1:-1;;;;;6665:6:0;6675:10;6665:20;6657:50;;;;-1:-1:-1;;;6657:50:0;;9776:2:1;6657:50:0;;;9758:21:1;9815:2;9795:18;;;9788:30;-1:-1:-1;;;9834:18:1;;;9827:47;9891:18;;6657:50:0;9574:341:1;6657:50:0;21491:16:::1;::::0;::::1;::::0;::::1;;;21490:17;21482:58;;;::::0;-1:-1:-1;;;21482:58:0;;18422:2:1;21482:58:0::1;::::0;::::1;18404:21:1::0;18461:2;18441:18;;;18434:30;18500;18480:18;;;18473:58;18548:18;;21482:58:0::1;18220:352:1::0;21482:58:0::1;21559:6;::::0;;21551:47:::1;::::0;-1:-1:-1;;;;;21559:6:0;;::::1;::::0;21576:21:::1;21551:47:::0;::::1;;;::::0;21576:21;;21551:47;21559:6;21551:47;21576:21;21559:6;21551:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21424:182::o:0;13154:125::-;13239:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;13239:32:0;;;160:74:1;13215:4:0;;13239:9;;;;;:23;;133:18:1;;13239:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10931:310::-;-1:-1:-1;;;;;11026:20:0;;11018:52;;;;-1:-1:-1;;;11018:52:0;;19029:2:1;11018:52:0;;;19011:21:1;19068:2;19048:18;;;19041:30;19107:21;19087:18;;;19080:49;19146:18;;11018:52:0;18827:343:1;11018:52:0;-1:-1:-1;;;;;11089:21:0;;11081:53;;;;-1:-1:-1;;;11081:53:0;;19029:2:1;11081:53:0;;;19011:21:1;19068:2;19048:18;;;19041:30;19107:21;19087:18;;;19080:49;19146:18;;11081:53:0;18827:343:1;11081:53:0;-1:-1:-1;;;;;11147:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11200:33;;391:25:1;;;11200:33:0;;364:18:1;11200:33:0;;;;;;;10931:310;;;:::o;16714:2061::-;16793:4;-1:-1:-1;;;;;16818:18:0;;16810:68;;;;-1:-1:-1;;;16810:68:0;;19377:2:1;16810:68:0;;;19359:21:1;19416:2;19396:18;;;19389:30;19455:34;19435:18;;;19428:62;19526:7;19506:18;;;19499:35;19551:19;;16810:68:0;19175:401:1;16810:68:0;-1:-1:-1;;;;;16897:16:0;;16889:64;;;;-1:-1:-1;;;16889:64:0;;19783:2:1;16889:64:0;;;19765:21:1;19822:2;19802:18;;;19795:30;19861:34;19841:18;;;19834:62;19932:5;19912:18;;;19905:33;19955:19;;16889:64:0;19581:399:1;16889:64:0;16981:1;16972:6;:10;16964:64;;;;-1:-1:-1;;;16964:64:0;;20187:2:1;16964:64:0;;;20169:21:1;20226:2;20206:18;;;20199:30;20265:34;20245:18;;;20238:62;20336:11;20316:18;;;20309:39;20365:19;;16964:64:0;19985:405:1;16964:64:0;-1:-1:-1;;;;;17127:13:0;;17039:8;17127:13;;;:7;:13;;;;;;17039:8;;;;17127:13;;17123:162;;;17163:4;17157:10;;17123:162;;;-1:-1:-1;;;;;17189:11:0;;;;;;:7;:11;;;;;;;;17185:100;;;17224:4;17217:11;;17185:100;;;-1:-1:-1;17269:4:0;17185:100;17298:20;17309:4;17315:2;17298:10;:20::i;:::-;17295:641;;;17339:14;;;;17335:89;;17374:34;;-1:-1:-1;;;17374:34:0;;20597:2:1;17374:34:0;;;20579:21:1;20636:2;20616:18;;;20609:30;20675:26;20655:18;;;20648:54;20719:18;;17374:34:0;20395:348:1;17335:89:0;17441:3;:11;;;;17448:4;17441:11;17438:231;;;-1:-1:-1;;;;;17477:27:0;;;;;;:21;:27;;;;;;;;17476:28;:58;;;;-1:-1:-1;;;;;;17509:25:0;;;;;;:21;:25;;;;;;;;17508:26;17476:58;17472:182;;;17577:12;;17567:6;:22;;17559:75;;;;-1:-1:-1;;;17559:75:0;;20950:2:1;17559:75:0;;;20932:21:1;20989:2;20969:18;;;20962:30;21028:34;21008:18;;;21001:62;21099:10;21079:18;;;21072:38;21127:19;;17559:75:0;20748:404:1;17559:75:0;17700:9;;-1:-1:-1;;;;;17686:24:0;;;17700:9;;17686:24;;;;:33;;;17715:4;17714:5;17686:33;17683:242;;;-1:-1:-1;;;;;17745:25:0;;;;;;:21;:25;;;;;;;;17740:170;;17829:14;;17819:6;17803:13;17813:2;-1:-1:-1;;;;;10559:16:0;10532:7;10559:16;;;:7;:16;;;;;;;10466:117;17803:13;:22;;;;:::i;:::-;:40;;17795:95;;;;-1:-1:-1;;;17795:95:0;;21492:2:1;17795:95:0;;;21474:21:1;21531:2;21511:18;;;21504:30;21570:34;21550:18;;;21543:62;21641:12;21621:18;;;21614:40;21671:19;;17795:95:0;21290:406:1;17795:95:0;-1:-1:-1;;;;;17981:25:0;;17948:12;17981:25;;;:19;:25;;;;;;17963:4;;17981:25;;;:52;;-1:-1:-1;;;;;;18010:23:0;;;;;;:19;:23;;;;;;;;17981:52;17978:98;;;-1:-1:-1;18059:5:0;17978:98;18092:4;18088:599;;;18118:6;;;;18117:7;:47;;;;-1:-1:-1;18145:19:0;;;;;;;18117:47;18113:557;;;18234:15;18214:17;;18203:8;;:28;;;;:::i;:::-;:46;18199:456;;;18323:4;18274:28;10559:16;;;:7;:16;;;;;;18380:13;;18356:37;;18352:284;;18449:10;;18425:20;:34;18422:77;;-1:-1:-1;18486:10:0;;18422:77;18525:34;18538:20;18525:12;:34::i;:::-;18597:15;18586:8;:26;18352:284;18251:404;18199:456;18705:62;18723:4;18729:2;18733:6;18741:7;18750:3;18755:4;18761:5;18705:17;:62::i;:::-;18698:69;16714:2061;-1:-1:-1;;;;;;;;16714:2061:0:o;22040:946::-;22196:16;;22174:4;;22196:16;;;;;22191:221;;22229:28;22248:4;22254:2;22229:18;:28::i;:::-;22277:16;;;;;;;22276:17;:41;;;;;22297:20;22308:4;22314:2;22297:10;:20::i;:::-;22272:129;;;22338:47;;-1:-1:-1;;;22338:47:0;;21903:2:1;22338:47:0;;;21885:21:1;21942:2;21922:18;;;21915:30;21981:34;21961:18;;;21954:62;22052:7;22032:18;;;22025:35;22077:19;;22338:47:0;21701:401:1;22272:129:0;22428:20;22439:4;22445:2;22428:10;:20::i;:::-;22424:314;;;22496:9;;:37;;;;;-1:-1:-1;;;;;22388:15:1;;;22496:37:0;;;22370:34:1;22440:15;;;22420:18;;;22413:43;22472:18;;;22465:34;;;:12:0;;22496:9;;;;;:19;;22282:18:1;;22496:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;22496:37:0;;;;;;;;-1:-1:-1;;22496:37:0;;;;;;;;;;;;:::i;:::-;;;22492:163;;22631:8;;;22492:163;22584:5;-1:-1:-1;22675:7:0;22671:56;;22703:8;;;22671:56;22450:288;22424:314;-1:-1:-1;;;;;22750:13:0;;;;;;:7;:13;;;;;:23;;22767:6;;22750:13;:23;;22767:6;;22750:23;:::i;:::-;;;;-1:-1:-1;22784:22:0;;-1:-1:-1;22810:7:0;22809:55;;22858:6;22809:55;;;22821:34;22831:4;22837:3;22842:4;22848:6;22821:9;:34::i;:::-;-1:-1:-1;;;;;22875:11:0;;;;;;:7;:11;;;;;:29;;22784:80;;-1:-1:-1;22784:80:0;;22875:11;;;:29;;22784:80;;22875:29;:::i;:::-;;;;;;;;22937:2;-1:-1:-1;;;;;22922:34:0;22931:4;-1:-1:-1;;;;;22922:34:0;;22941:14;22922:34;;;;391:25:1;;379:2;364:18;;245:177;22922:34:0;;;;;;;;-1:-1:-1;22974:4:0;;22040:946;-1:-1:-1;;;;;;;;22040:946:0:o;16348:358::-;16417:4;16449:6;;-1:-1:-1;;;;;16441:14:0;;;16449:6;;16441:14;;;;:43;;-1:-1:-1;16478:6:0;;-1:-1:-1;;;;;16472:12:0;;;16478:6;;16472:12;;16441:43;:79;;;;-1:-1:-1;16514:6:0;;-1:-1:-1;;;;;16514:6:0;16501:9;:19;;16441:79;:118;;;;-1:-1:-1;;;;;;16538:21:0;;;;;;:17;:21;;;;;;;;16537:22;16441:118;:159;;;;-1:-1:-1;;;;;;16577:23:0;;;;;;:17;:23;;;;;;;;16576:24;16441:159;:186;;;;-1:-1:-1;;;;;;16617:10:0;;5467:42;16617:10;;16441:186;:219;;;;-1:-1:-1;;;;;;16644:16:0;;;;16441:219;:257;;;;-1:-1:-1;;;;;;16677:21:0;;16693:4;16677:21;;16441:257;16434:264;16348:358;-1:-1:-1;;;16348:358:0:o;18783:1564::-;6559:6;:13;;-1:-1:-1;;6559:13:0;6568:4;6559:13;;;18867:30:::1;::::0;;::::1;::::0;::::1;::::0;;18890:7:::1;18867:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;6559:6;18912:17;18908:56:::1;;18946:7;;;18908:56;18999:4;18979:26;::::0;;;:11:::1;:26;::::0;;;;;;;19014:9:::1;::::0;-1:-1:-1;;;;;19014:9:0::1;18979:46:::0;;;;;;;;-1:-1:-1;;18979:67:0::1;18976:165;;19083:4;19063:26;::::0;;;:11:::1;:26;::::0;;;;;;;19098:9:::1;::::0;-1:-1:-1;;;;;19098:9:0::1;19063:46:::0;;;;;;;-1:-1:-1;;19063:66:0;;18976:165:::1;19153:17;19234:1;19218:6;:12;;;19174:56;;19198:6;:16;;;19175:39;;:20;:39;;;;:::i;:::-;19174:56;;;;:::i;:::-;19173:62;;;;:::i;:::-;19153:82:::0;-1:-1:-1;19246:15:0::1;19264:32;19153:82:::0;19264:20;:32:::1;:::i;:::-;19341:16;::::0;;19355:1:::1;19341:16:::0;;;;;::::1;::::0;;19246:50;;-1:-1:-1;19317:21:0::1;::::0;19341:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19341:16:0::1;19317:40;;19386:4;19368;19373:1;19368:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19368:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;19412:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;19368:7;;19412:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19402:4;19407:1;19402:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19402:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;19441:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;19516:7;;19441:9:::1;::::0;19554:4;;19581::::1;::::0;19601:15:::1;::::0;19441:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;19661:21:0::1;::::0;-1:-1:-1;19640:18:0::1;::::0;-1:-1:-1;19747:7:0;;-1:-1:-1;19721:22:0::1;19734:9:::0;19661:21;19721:22:::1;:::i;:::-;19720:34;;;;:::i;:::-;19693:61:::0;-1:-1:-1;19771:13:0;;19767:328:::1;;19801:9;::::0;:222:::1;::::0;;;;19878:4:::1;19801:222;::::0;::::1;23905:34:1::0;23955:18;;;23948:34;;;19801:9:0::1;23998:18:1::0;;;23991:34;;;24041:18;;;24034:34;5467:42:0::1;24084:19:1::0;;;24077:44;19993:15:0::1;24137:19:1::0;;;24130:35;-1:-1:-1;;;;;19801:9:0;;::::1;::::0;:25:::1;::::0;19834:16;;23816:19:1;;19801:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;20043:40:0::1;::::0;;24661:25:1;;;24717:2;24702:18;;24695:34;;;20043:40:0::1;::::0;-1:-1:-1;24634:18:1;20043:40:0::1;;;;;;;19767:328;20107:30;20121:16:::0;20107:30;::::1;:::i;:::-;;;20164:6;:16;;;20148:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;20243:16:::1;::::0;::::1;::::0;20218:10;;-1:-1:-1;20243:20:0::1;::::0;20239:101:::1;;20280:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;20280:21:0;;::::1;::::0;:48;::::1;;;::::0;20311:16;;20280:21:::1;:48:::0;:21;:48;20311:16;20280:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;20239:101;18856:1491;;;;;;;6583:1;-1:-1:-1::0;6595:6:0;:14;;-1:-1:-1;;6595:14:0;;;18783:1564::o;20355:509::-;20438:16;;;;;;;20437:17;20429:65;;;;-1:-1:-1;;;20429:65:0;;25164:2:1;20429:65:0;;;25146:21:1;25203:2;25183:18;;;25176:30;25242:34;25222:18;;;25215:62;25313:5;25293:18;;;25286:33;25336:19;;20429:65:0;24962:399:1;20429:65:0;20510:20;20521:4;20527:2;20510:10;:20::i;:::-;20509:21;:37;;;;-1:-1:-1;20540:6:0;;-1:-1:-1;;;;;20534:12:0;;;20540:6;;20534:12;20509:37;20505:352;;;-1:-1:-1;;;;;20563:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;20563:30:0;20589:4;20563:30;;;20608:16;:23;;-1:-1:-1;;20608:23:0;20563:30;20608:23;;;;;20657:9;;;;20646:107;;20701:9;:36;;;;20731:4;20701:36;;;;;20646:107;20767:19;:26;;-1:-1:-1;;20767:26:0;;;;;20813:32;;-1:-1:-1;3014:41:1;;20813:32:0;;3002:2:1;2987:18;20813:32:0;;;;;;;20355:509;;:::o;22994:562::-;23082:7;23102:18;23135:3;23131:205;;;-1:-1:-1;23168:9:0;:16;;;23131:205;;;23206:4;23202:134;;;-1:-1:-1;23240:9:0;:17;;;;;;23202:134;;;-1:-1:-1;23303:9:0;:21;;;;;;23202:134;23348:17;5361:5;23368:19;23377:10;23368:6;:19;:::i;:::-;:38;;;;:::i;:::-;23435:4;23419:22;;;;:7;:22;;;;;:35;;23348:58;;-1:-1:-1;23348:58:0;;23419:22;;;:35;;23348:58;;23419:35;:::i;:::-;;;;-1:-1:-1;;23470:40:0;;391:25:1;;;23493:4:0;;-1:-1:-1;;;;;23470:40:0;;;;;379:2:1;364:18;23470:40:0;;;;;;;23530:18;23539:9;23530:6;:18;:::i;:::-;23523:25;22994:562;-1:-1:-1;;;;;;;22994:562:0:o;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:656::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1739:6;1736:1;1733:13;1730:91;;;1809:1;1804:2;1795:6;1784:9;1780:22;1776:31;1769:42;1730:91;-1:-1:-1;1873:2:1;1861:15;-1:-1:-1;;1857:88:1;1842:104;;;;1948:2;1838:113;;1301:656;-1:-1:-1;;;1301:656:1:o;2210:180::-;2269:6;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;-1:-1:-1;2361:23:1;;2210:180;-1:-1:-1;2210:180:1:o;2395:154::-;-1:-1:-1;;;;;2474:5:1;2470:54;2463:5;2460:65;2450:93;;2539:1;2536;2529:12;2554:315;2622:6;2630;2683:2;2671:9;2662:7;2658:23;2654:32;2651:52;;;2699:1;2696;2689:12;2651:52;2738:9;2725:23;2757:31;2782:5;2757:31;:::i;:::-;2807:5;2859:2;2844:18;;;;2831:32;;-1:-1:-1;;;2554:315:1:o;3066:456::-;3143:6;3151;3159;3212:2;3200:9;3191:7;3187:23;3183:32;3180:52;;;3228:1;3225;3218:12;3180:52;3267:9;3254:23;3286:31;3311:5;3286:31;:::i;:::-;3336:5;-1:-1:-1;3393:2:1;3378:18;;3365:32;3406:33;3365:32;3406:33;:::i;:::-;3066:456;;3458:7;;-1:-1:-1;;;3512:2:1;3497:18;;;;3484:32;;3066:456::o;3527:248::-;3595:6;3603;3656:2;3644:9;3635:7;3631:23;3627:32;3624:52;;;3672:1;3669;3662:12;3624:52;-1:-1:-1;;3695:23:1;;;3765:2;3750:18;;;3737:32;;-1:-1:-1;3527:248:1:o;3780:184::-;3832:77;3829:1;3822:88;3929:4;3926:1;3919:15;3953:4;3950:1;3943:15;3969:334;4040:2;4034:9;4096:2;4086:13;;-1:-1:-1;;4082:86:1;4070:99;;4199:18;4184:34;;4220:22;;;4181:62;4178:88;;;4246:18;;:::i;:::-;4282:2;4275:22;3969:334;;-1:-1:-1;3969:334:1:o;4308:183::-;4368:4;4401:18;4393:6;4390:30;4387:56;;;4423:18;;:::i;:::-;-1:-1:-1;4468:1:1;4464:14;4480:4;4460:25;;4308:183::o;4496:662::-;4550:5;4603:3;4596:4;4588:6;4584:17;4580:27;4570:55;;4621:1;4618;4611:12;4570:55;4657:6;4644:20;4683:4;4707:60;4723:43;4763:2;4723:43;:::i;:::-;4707:60;:::i;:::-;4801:15;;;4887:1;4883:10;;;;4871:23;;4867:32;;;4832:12;;;;4911:15;;;4908:35;;;4939:1;4936;4929:12;4908:35;4975:2;4967:6;4963:15;4987:142;5003:6;4998:3;4995:15;4987:142;;;5069:17;;5057:30;;5107:12;;;;5020;;4987:142;;;-1:-1:-1;5147:5:1;4496:662;-1:-1:-1;;;;;;4496:662:1:o;5163:1215::-;5281:6;5289;5342:2;5330:9;5321:7;5317:23;5313:32;5310:52;;;5358:1;5355;5348:12;5310:52;5398:9;5385:23;5427:18;5468:2;5460:6;5457:14;5454:34;;;5484:1;5481;5474:12;5454:34;5522:6;5511:9;5507:22;5497:32;;5567:7;5560:4;5556:2;5552:13;5548:27;5538:55;;5589:1;5586;5579:12;5538:55;5625:2;5612:16;5647:4;5671:60;5687:43;5727:2;5687:43;:::i;5671:60::-;5765:15;;;5847:1;5843:10;;;;5835:19;;5831:28;;;5796:12;;;;5871:19;;;5868:39;;;5903:1;5900;5893:12;5868:39;5927:11;;;;5947:217;5963:6;5958:3;5955:15;5947:217;;;6043:3;6030:17;6060:31;6085:5;6060:31;:::i;:::-;6104:18;;5980:12;;;;6142;;;;5947:217;;;6183:5;-1:-1:-1;;6226:18:1;;6213:32;;-1:-1:-1;;6257:16:1;;;6254:36;;;6286:1;6283;6276:12;6254:36;;6309:63;6364:7;6353:8;6342:9;6338:24;6309:63;:::i;:::-;6299:73;;;5163:1215;;;;;:::o;6572:159::-;6639:20;;6699:6;6688:18;;6678:29;;6668:57;;6721:1;6718;6711:12;6668:57;6572:159;;;:::o;6736:328::-;6810:6;6818;6826;6879:2;6867:9;6858:7;6854:23;6850:32;6847:52;;;6895:1;6892;6885:12;6847:52;6918:28;6936:9;6918:28;:::i;:::-;6908:38;;6965:37;6998:2;6987:9;6983:18;6965:37;:::i;:::-;6955:47;;7021:37;7054:2;7043:9;7039:18;7021:37;:::i;:::-;7011:47;;6736:328;;;;;:::o;7069:247::-;7128:6;7181:2;7169:9;7160:7;7156:23;7152:32;7149:52;;;7197:1;7194;7187:12;7149:52;7236:9;7223:23;7255:31;7280:5;7255:31;:::i;7321:454::-;7416:6;7424;7432;7440;7448;7501:3;7489:9;7480:7;7476:23;7472:33;7469:53;;;7518:1;7515;7508:12;7469:53;-1:-1:-1;;7541:23:1;;;7611:2;7596:18;;7583:32;;-1:-1:-1;7662:2:1;7647:18;;7634:32;;7713:2;7698:18;;7685:32;;-1:-1:-1;7764:3:1;7749:19;7736:33;;-1:-1:-1;7321:454:1;-1:-1:-1;7321:454:1:o;7780:382::-;7845:6;7853;7906:2;7894:9;7885:7;7881:23;7877:32;7874:52;;;7922:1;7919;7912:12;7874:52;7961:9;7948:23;7980:31;8005:5;7980:31;:::i;8167:256::-;8233:6;8241;8294:2;8282:9;8273:7;8269:23;8265:32;8262:52;;;8310:1;8307;8300:12;8262:52;8333:28;8351:9;8333:28;:::i;:::-;8323:38;;8380:37;8413:2;8402:9;8398:18;8380:37;:::i;:::-;8370:47;;8167:256;;;;;:::o;8428:241::-;8484:6;8537:2;8525:9;8516:7;8512:23;8508:32;8505:52;;;8553:1;8550;8543:12;8505:52;8592:9;8579:23;8611:28;8633:5;8611:28;:::i;8674:388::-;8742:6;8750;8803:2;8791:9;8782:7;8778:23;8774:32;8771:52;;;8819:1;8816;8809:12;8771:52;8858:9;8845:23;8877:31;8902:5;8877:31;:::i;:::-;8927:5;-1:-1:-1;8984:2:1;8969:18;;8956:32;8997:33;8956:32;8997:33;:::i;10529:184::-;10581:77;10578:1;10571:88;10678:4;10675:1;10668:15;10702:4;10699:1;10692:15;10718:482;10807:1;10850:5;10807:1;10864:330;10885:7;10875:8;10872:21;10864:330;;;11004:4;-1:-1:-1;;10932:77:1;10926:4;10923:87;10920:113;;;11013:18;;:::i;:::-;11063:7;11053:8;11049:22;11046:55;;;11083:16;;;;11046:55;11162:22;;;;11122:15;;;;10864:330;;;10868:3;10718:482;;;;;:::o;11205:866::-;11254:5;11284:8;11274:80;;-1:-1:-1;11325:1:1;11339:5;;11274:80;11373:4;11363:76;;-1:-1:-1;11410:1:1;11424:5;;11363:76;11455:4;11473:1;11468:59;;;;11541:1;11536:130;;;;11448:218;;11468:59;11498:1;11489:10;;11512:5;;;11536:130;11573:3;11563:8;11560:17;11557:43;;;11580:18;;:::i;:::-;-1:-1:-1;;11636:1:1;11622:16;;11651:5;;11448:218;;11750:2;11740:8;11737:16;11731:3;11725:4;11722:13;11718:36;11712:2;11702:8;11699:16;11694:2;11688:4;11685:12;11681:35;11678:77;11675:159;;;-1:-1:-1;11787:19:1;;;11819:5;;11675:159;11866:34;11891:8;11885:4;11866:34;:::i;:::-;11996:6;-1:-1:-1;;11924:79:1;11915:7;11912:92;11909:118;;;12007:18;;:::i;:::-;12045:20;;11205:866;-1:-1:-1;;;11205:866:1:o;12076:140::-;12134:5;12163:47;12204:4;12194:8;12190:19;12184:4;12163:47;:::i;12221:274::-;12261:1;12287;12277:189;;12322:77;12319:1;12312:88;12423:4;12420:1;12413:15;12451:4;12448:1;12441:15;12277:189;-1:-1:-1;12480:9:1;;12221:274::o;12500:228::-;12540:7;12666:1;-1:-1:-1;;12594:74:1;12591:1;12588:81;12583:1;12576:9;12569:17;12565:105;12562:131;;;12673:18;;:::i;:::-;-1:-1:-1;12713:9:1;;12500:228::o;12733:125::-;12773:4;12801:1;12798;12795:8;12792:34;;;12806:18;;:::i;:::-;-1:-1:-1;12843:9:1;;12733:125::o;13632:184::-;13684:77;13681:1;13674:88;13781:4;13778:1;13771:15;13805:4;13802:1;13795:15;13821:175;13858:3;13902:4;13895:5;13891:16;13931:4;13922:7;13919:17;13916:43;;13939:18;;:::i;:::-;13988:1;13975:15;;13821:175;-1:-1:-1;;13821:175:1:o;17403:224::-;17442:3;17470:6;17503:2;17500:1;17496:10;17533:2;17530:1;17526:10;17564:3;17560:2;17556:12;17551:3;17548:21;17545:47;;;17572:18;;:::i;:::-;17608:13;;17403:224;-1:-1:-1;;;;17403:224:1:o;17632:251::-;17702:6;17755:2;17743:9;17734:7;17730:23;17726:32;17723:52;;;17771:1;17768;17761:12;17723:52;17803:9;17797:16;17822:31;17847:5;17822:31;:::i;18577:245::-;18644:6;18697:2;18685:9;18676:7;18672:23;18668:32;18665:52;;;18713:1;18710;18703:12;18665:52;18745:9;18739:16;18764:28;18786:5;18764:28;:::i;21157:128::-;21197:3;21228:1;21224:6;21221:1;21218:13;21215:39;;;21234:18;;:::i;:::-;-1:-1:-1;21270:9:1;;21157:128::o;22510:1026::-;22772:4;22820:3;22809:9;22805:19;22851:6;22840:9;22833:25;22877:2;22915:6;22910:2;22899:9;22895:18;22888:34;22958:3;22953:2;22942:9;22938:18;22931:31;22982:6;23017;23011:13;23048:6;23040;23033:22;23086:3;23075:9;23071:19;23064:26;;23125:2;23117:6;23113:15;23099:29;;23146:1;23156:218;23170:6;23167:1;23164:13;23156:218;;;23235:13;;-1:-1:-1;;;;;23231:62:1;23219:75;;23349:15;;;;23314:12;;;;23192:1;23185:9;23156:218;;;-1:-1:-1;;;;;;;23430:55:1;;;;23425:2;23410:18;;23403:83;-1:-1:-1;;;23517:3:1;23502:19;23495:35;23391:3;22510:1026;-1:-1:-1;;;22510:1026:1:o;24176:306::-;24264:6;24272;24280;24333:2;24321:9;24312:7;24308:23;24304:32;24301:52;;;24349:1;24346;24339:12;24301:52;24378:9;24372:16;24362:26;;24428:2;24417:9;24413:18;24407:25;24397:35;;24472:2;24461:9;24457:18;24451:25;24441:35;;24176:306;;;;;:::o;24740:217::-;24779:4;24808:6;24864:10;;;;24834;;24886:12;;;24883:38;;;24901:18;;:::i;:::-;24938:13;;24740:217;-1:-1:-1;;;24740:217:1:o

Swarm Source

ipfs://65515827f9171a257d9d5321d9ff85d9e97c7bab59631b4aaf7faacf3fa293f9

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.