ETH Price: $3,897.64 (-0.41%)

Token

MonstaVerse (MONSTR)
 

Overview

Max Total Supply

666,000,000,000,000 MONSTR

Holders

1,087 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
87,620.686642417 MONSTR

Value
$0.00
0xca95f7261ee75730e1ae6b86cb7dabefe1f2769d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

MonstaVerse is an ecosystem and Metaverse using all assets is planned which will be announced in a few months basis the overall market conditions, project development and MetaVerse market scenario.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MonstaVerse

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-19
*/

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

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

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

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

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

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

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

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

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

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

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

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

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

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

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

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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    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;
}

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 _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getAmountBlockDelay() external view returns (uint8);
    function setAmountBlocks(uint8 blocks) external;
}

contract MonstaVerse is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    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 _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;
    uint256 private _rTotal;

    struct CurrentFees {
        uint16 reflect;
        uint16 totalSwap;
    }

    struct Fees {
        uint16 reflect;
        uint16 liquidity;
        uint16 marketing;
        uint16 totalSwap;
    }

    struct StaticValuesStruct {
        uint16 maxReflect;
        uint16 maxLiquidity;
        uint16 maxMarketing;
        uint16 masterTaxDivisor;
    }

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

    CurrentFees private currentTaxes = CurrentFees({
        reflect: 0,
        totalSwap: 0
        });

    Fees public _buyTaxes = Fees({
        reflect: 200,
        liquidity: 400,
        marketing: 600,
        totalSwap: 1000
        });

    Fees public _sellTaxes = Fees({
        reflect: 200,
        liquidity: 400,
        marketing: 600,
        totalSwap: 1000
        });

    Fees public _transferTaxes = Fees({
        reflect: 200,
        liquidity: 400,
        marketing: 600,
        totalSwap: 1000
        });

    Ratios public _ratios = Ratios({
        liquidity: 4,
        marketing: 6,
        total: 10
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxReflect: 800,
        maxLiquidity: 800,
        maxMarketing: 800,
        masterTaxDivisor: 10000
        });


    IRouter02 public dexRouter;
    address public lpPair;

    address public currentRouter;
    // PCS ROUTER
    address private pcsV2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    // UNI ROUTER
    address private uniswapV2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xf958d92F9CBFAf65d2c156C942dCdA485cBd505F)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;

    AntiSnipe antiSnipe;
    uint256 public launch;
    bool contractInitialized = false;

    address[] path;

    uint256 public maxEthBuy = 5 * 10**18;
    uint256 public maxEthSell = 5 * 10**18;
    bool public timedLimitsEnabled = true;
    bool public maxEthTradesEnabled = true;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event ContractSwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        if (block.chainid == 56 || block.chainid == 97) {
            currentRouter = pcsV2Router;
        } else if (block.chainid == 1) {
            currentRouter = uniswapV2Router;
        }

        _approve(msg.sender, currentRouter, type(uint256).max);
        _approve(address(this), currentRouter, type(uint256).max);

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

    function intializeContract(address[] memory accounts, uint256[] memory amounts, uint256[] memory amountsD, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length < 200, "2");
        require(accounts.length == amounts.length, "3");
        require(amounts.length == amountsD.length, "4");
        startingSupply = 666_000_000_000_000;
        antiSnipe = AntiSnipe(_antiSnipe);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.transfer(address(this)) {} catch {}
        if (startingSupply < 10000000000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _rTotal = (~uint256(0) - (~uint256(0) % _tTotal));
        _name = "MonstaVerse";
        _symbol = "MONSTR";
        dexRouter = IRouter02(currentRouter);
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;        
        path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _maxTxAmount = (_tTotal * 5) / 1000;
        _maxWalletSize = (_tTotal * 15) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 25) / 10000;
        contractInitialized = true;     
        _rOwned[owner()] = _rTotal;
        emit Transfer(address(0), owner(), _tTotal);

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

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = (_tTotal*amounts[i]) / amountsD[i];
            _transfer(owner(), accounts[i], amount);
        }

        _transfer(owner(), address(this), balanceOf(owner()));

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

        enableTrading();
    }

    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 owner() public view returns (address) {
        return _owner;
    }

    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) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _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 view override returns (uint256) {
        if (_tTotal == 0) {
            revert();
        }
        return _tTotal; 
    }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view 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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    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 changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        currentRouter = router;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            if(_excluded.length == 1){
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

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

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

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

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

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

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

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

    function getAmountBlockDelay() public view returns (uint8) {
        return antiSnipe.getAmountBlockDelay();
    }

    function setAmountBlocks(uint8 blocks) external onlyOwner {
        require(blocks <= 10);
        antiSnipe.setAmountBlocks(blocks);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2000);
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.reflect = reflect;
        _buyTaxes.marketing = marketing;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2000);
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.reflect = reflect;
        _sellTaxes.marketing = marketing;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing) external onlyOwner {
        require(reflect <= staticVals.maxReflect
                && liquidity <= staticVals.maxLiquidity
                && marketing <= staticVals.maxMarketing);
        uint16 check = reflect + liquidity + marketing;
        require(check <= 2000);
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.reflect = reflect;
        _transferTaxes.marketing = marketing;
        _transferTaxes.totalSwap = check - reflect;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.total = liquidity + marketing;
    }

    function setEthLimits(uint256 buyVal, uint256 buyMult, uint256 sellVal, uint256 sellMult) external onlyOwner {
        maxEthBuy = buyVal * 10**buyMult;
        maxEthSell = sellVal * 10**sellMult;
        require(maxEthBuy >= 5 * 10**18 && maxEthSell >= 5 * 10**18);
    }

    function setEthLimitsEnabled(bool timeLimits, bool maxEthTrades) external onlyOwner {
        timedLimitsEnabled = timeLimits;
        maxEthTradesEnabled = maxEthTrades;
    }

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

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

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != 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 takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            uint256 _ethBalance = dexRouter.getAmountsOut(amount, path)[1];
            if (maxEthTradesEnabled) {
                if(lpPairs[from]) {
                    if (timedLimitsEnabled) {
                        if(block.timestamp <= launch + 2 hours) {
                            require(_ethBalance <= 25 * 10**16);
                        } else if (block.timestamp <= launch + 22 hours) {
                            require(_ethBalance <= 2 * 10**18);
                        } else {
                            require(_ethBalance <= maxEthBuy);
                        }
                    } else {
                        require(_ethBalance <= maxEthBuy);
                    }
                } else if (lpPairs[to]) {
                    if (timedLimitsEnabled) {
                        if(block.timestamp <= launch + 2 hours) {
                            require(_ethBalance <= 25 * 10**16);
                        } else if (block.timestamp <= launch + 22 hours) {
                            require(_ethBalance <= 2 * 10**18);
                        } else {
                            require(_ethBalance <= maxEthSell);
                        }
                    } else {
                        require(_ethBalance <= maxEthSell);
                    }
                }
            }
        }

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        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 toSwapForEth = contractTokenBalance - toLiquify;

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

        uint256 liquidityBalance = ((address(this).balance * _ratios.liquidity) / _ratios.total) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (address(this).balance > 0 && _ratios.total - _ratios.liquidity > 0) {
            _taxWallets.marketing.transfer(address(this).balance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        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.");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        launch = block.timestamp;
    }

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

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

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

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        }
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] = _rOwned[address(this)] + (values.tSwap * _getRate());
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + values.tSwap;
            emit Transfer(from, address(this), values.tSwap); // Transparency is the key to success.
        }
        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }


        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) private returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

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

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

        if(takeFee) {
            if (lpPairs[to]) {
                currentTaxes.reflect = _sellTaxes.reflect;
                currentTaxes.totalSwap = _sellTaxes.totalSwap;
            } else if (lpPairs[from]) {
                currentTaxes.reflect = _buyTaxes.reflect;
                currentTaxes.totalSwap = _buyTaxes.totalSwap;
            } else {
                currentTaxes.reflect = _transferTaxes.reflect;
                currentTaxes.totalSwap = _transferTaxes.totalSwap;
            }

            values.tFee = (tAmount * currentTaxes.reflect) / staticVals.masterTaxDivisor;
            values.tSwap = (tAmount * currentTaxes.totalSwap) / staticVals.masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tSwap = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }
        values.rTransferAmount = values.rAmount - (values.rFee + (values.tSwap * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint8 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return _rTotal / _tTotal;
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"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":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"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":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAmountBlockDelay","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsD","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxEthTradesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"uint8","name":"blocks","type":"uint8"}],"name":"setAmountBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyVal","type":"uint256"},{"internalType":"uint256","name":"buyMult","type":"uint256"},{"internalType":"uint256","name":"sellVal","type":"uint256"},{"internalType":"uint256","name":"sellMult","type":"uint256"}],"name":"setEthLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"timeLimits","type":"bool"},{"internalType":"bool","name":"maxEthTrades","type":"bool"}],"name":"setEthLimitsEnabled","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":"setExcludedFromReward","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":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","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"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxReflect","type":"uint16"},{"internalType":"uint16","name":"maxLiquidity","type":"uint16"},{"internalType":"uint16","name":"maxMarketing","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timedLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]

60006004818155608082905260a08290526010805463ffffffff1916905560c860c081905261019060e08190526102586101008190526103e8610120819052601180546001600160401b03199081166703e80258019000c89081179092556101408690526101608590526101808490526101a0839052601280548216831790556101c0959095526101e0939093526102009190915261022052601380548316909117905561024091909152600661026052600a610280526014805465ffffffffffff1916640a000600041790556103206102a08190526102c08190526102e0819052612710610300526015805490921667271003200320032017909155601980547310ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031991821617909155601a8054737a250d5630b4cf539739df2c5dacb4c659f2488d90831617905561034060405273f958d92f9cbfaf65d2c156c942dcda485cbd505f91829052601b80548216909217909155601c805461ff00191690556021805461ffff199081169091556023805460ff19169055674563918244f4000060258190556026556027805490911661010117905581543391161790554660381480620001c85750466061145b15620001f657601954601880546001600160a01b0319166001600160a01b0390921691909117905562000223565b46600114156200022357601a54601880546001600160a01b0319166001600160a01b039092169190911790555b6018546200023f9033906001600160a01b03166000196200032a565b6018546200025b9030906001600160a01b03166000196200032a565b600160066000620002746000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080548316600190811790915561dead82527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549093168117909255600990620002fc6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200042b565b6001600160a01b0383166200037c5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003ca5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000373565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6158bd806200043b6000396000f3fe6080604052600436106103fd5760003560e01c806370a082311161020d578063c011f20311610128578063dd62ed3e116100bb578063eec2744e1161008a578063fb78680d1161006f578063fb78680d14610ca7578063fdb78c0e14610cc7578063fe575a8714610ce657600080fd5b8063eec2744e14610c67578063f94aa1b414610c8757600080fd5b8063dd62ed3e14610bcc578063eafb5a3c14610c12578063eb50e70e14610c32578063ee5d9c2d14610c5257600080fd5b8063cab5ebea116100f7578063cab5ebea14610b20578063cf84770614610b40578063d285d8d014610b96578063d32e507314610bb657600080fd5b8063c011f20314610a67578063c2fa418f14610a86578063c6831cd814610ac3578063c6a276c214610b0057600080fd5b80638a8c523c116101a0578063a457c2d71161016f578063a457c2d7146109e7578063a9059cbb14610a07578063adc59ae014610a27578063bcd96a2514610a4757600080fd5b80638a8c523c146109a75780638da5cb5b1461095457806395d89b41146109bc5780639baf6a3b146109d157600080fd5b806388f82020116101dc57806388f820201461091b578063893d20e8146109545780638965b55d146109725780638a63bd9b1461099257600080fd5b806370a0823114610889578063715018a6146108a95780637b45d431146108be57806380c581d1146108fb57600080fd5b80632d838119116103185780634ada218b116102ab57806353b692251161027a57806355dbc3691161025f57806355dbc36914610834578063590ffdce146108495780635c24b0741461086957600080fd5b806353b69225146107fa57806355d8ece61461081457600080fd5b80634ada218b146107685780634fb2e45d146107825780634fbee193146107a257806350a8e016146107db57600080fd5b806339509351116102e757806339509351146106e85780633ae07ad51461070857806343b5beec14610728578063452ed4f11461074857600080fd5b80632d83811914610670578063313ce5671461069057806333251a0b146106a8578063384f36b6146106c857600080fd5b806313e46192116103905780631e90afe31161035f5780631e90afe3146105fb57806323b872dd1461061b57806329dd87981461063b5780632b112e491461065b57600080fd5b806313e461921461053457806318160ddd146105545780631b6afa2d146105695780631dea5c71146105d457600080fd5b80630758d924116103cc5780630758d924146104a457806309231602146104c4578063095ea7b3146104e4578063122fea3b1461051457600080fd5b806301339c211461040957806303fd2a451461043257806305bbedb61461046057806306fdde031461048257600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041f60225481565b6040519081526020015b60405180910390f35b34801561043e57600080fd5b5061044861dead81565b6040516001600160a01b039091168152602001610429565b34801561046c57600080fd5b5061048061047b366004614f4a565b610d06565b005b34801561048e57600080fd5b50610497610ddf565b6040516104299190614f9c565b3480156104b057600080fd5b50601654610448906001600160a01b031681565b3480156104d057600080fd5b506104806104df366004614ff1565b610e71565b3480156104f057600080fd5b506105046104ff36600461500a565b610f90565b6040519015158152602001610429565b34801561052057600080fd5b50601854610448906001600160a01b031681565b34801561054057600080fd5b5061048061054f366004615036565b610fa7565b34801561056057600080fd5b5061041f611362565b34801561057557600080fd5b506015546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610429565b3480156105e057600080fd5b506105e961137b565b60405160ff9091168152602001610429565b34801561060757600080fd5b5061048061061636600461507b565b6113f9565b34801561062757600080fd5b506105046106363660046150be565b61157c565b34801561064757600080fd5b506104806106563660046150ff565b6115f4565b34801561066757600080fd5b5061041f6116dd565b34801561067c57600080fd5b5061041f61068b366004614ff1565b61170b565b34801561069c57600080fd5b50600d5460ff166105e9565b3480156106b457600080fd5b506104806106c336600461515b565b6117a2565b3480156106d457600080fd5b506104806106e336600461515b565b611842565b3480156106f457600080fd5b5061050461070336600461500a565b6118d4565b34801561071457600080fd5b50610480610723366004615178565b611910565b34801561073457600080fd5b506104806107433660046151f1565b61199f565b34801561075457600080fd5b50601754610448906001600160a01b031681565b34801561077457600080fd5b506021546105049060ff1681565b34801561078e57600080fd5b5061048061079d36600461515b565b612348565b3480156107ae57600080fd5b506105046107bd36600461515b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107e757600080fd5b5060215461050490610100900460ff1681565b34801561080657600080fd5b506027546105049060ff1681565b34801561082057600080fd5b5061048061082f36600461507b565b612547565b34801561084057600080fd5b5061041f6126ca565b34801561085557600080fd5b50610480610864366004615036565b612743565b34801561087557600080fd5b5061048061088436600461515b565b6127bc565b34801561089557600080fd5b5061041f6108a436600461515b565b6128fb565b3480156108b557600080fd5b5061048061295a565b3480156108ca57600080fd5b506011546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b34801561090757600080fd5b50610480610916366004615036565b612a0a565b34801561092757600080fd5b5061050461093636600461515b565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561096057600080fd5b506000546001600160a01b0316610448565b34801561097e57600080fd5b5061048061098d36600461507b565b612bc6565b34801561099e57600080fd5b50610504612d49565b3480156109b357600080fd5b50610480612db8565b3480156109c857600080fd5b50610497612fce565b3480156109dd57600080fd5b5061041f60265481565b3480156109f357600080fd5b50610504610a0236600461500a565b612fdd565b348015610a1357600080fd5b50610504610a2236600461500a565b613014565b348015610a3357600080fd5b50610480610a42366004615281565b61302b565b348015610a5357600080fd5b50610480610a623660046152b3565b6130d6565b348015610a7357600080fd5b5060275461050490610100900460ff1681565b348015610a9257600080fd5b506013546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610acf57600080fd5b506012546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b0c57600080fd5b50610480610b1b36600461515b565b61318d565b348015610b2c57600080fd5b50610480610b3b3660046152e6565b61322d565b348015610b4c57600080fd5b50601454610b719061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610429565b348015610ba257600080fd5b50610480610bb1366004615312565b6132cf565b348015610bc257600080fd5b5061041f60255481565b348015610bd857600080fd5b5061041f610be736600461532f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c1e57600080fd5b50610480610c2d36600461515b565b61337f565b348015610c3e57600080fd5b50610480610c4d36600461515b565b61372e565b348015610c5e57600080fd5b506104806137ab565b348015610c7357600080fd5b50610480610c82366004615036565b61388e565b348015610c9357600080fd5b50601b54610448906001600160a01b031681565b348015610cb357600080fd5b50610480610cc2366004615281565b613936565b348015610cd357600080fd5b50601c5461050490610100900460ff1681565b348015610cf257600080fd5b50610504610d0136600461515b565b6139c3565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610da9908590859060040161535d565b600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050505050565b6060600b8054610dee906153b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1a906153b1565b8015610e675780601f10610e3c57610100808354040283529160200191610e67565b820191906000526020600020905b815481529060010190602001808311610e4a57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ebf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b604b811015610f105760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d50565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b5050505050565b6000610f9d338484613a51565b5060015b92915050565b6000546001600160a01b03163314610ff55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60018115151415611137576001600160a01b03821660009081526007602052604090205460ff16156110695760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d50565b6001600160a01b038216600090815260016020526040902054156110c3576001600160a01b0382166000908152600160205260409020546110a99061170b565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b8061135e576001600160a01b03821660009081526007602052604090205460ff166111a45760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d50565b60085460011415611220576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff1916905560088054806111ed576111ed615405565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561135c57826001600160a01b03166008828154811061124a5761124a615434565b6000918252602090912001546001600160a01b0316141561134a576008805461127590600190615492565b8154811061128557611285615434565b600091825260209091200154600880546001600160a01b0390921691839081106112b1576112b1615434565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061131657611316615405565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905561135c565b80611354816154a9565b915050611223565b505b5050565b6000600e546000141561137457600080fd5b50600e5490565b6000602160029054906101000a90046001600160a01b03166001600160a01b0316631dea5c716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906154c4565b905090565b6000546001600160a01b031633146114475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60155461ffff90811690841611801590611471575060155461ffff62010000909104811690831611155b801561148f575060155461ffff640100000000909104811690821611155b61149857600080fd5b6000816114a584866154e1565b6114af91906154e1565b90506107d08161ffff1611156114c457600080fd5b6013805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556115388482615507565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146115e1576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906115db908490615492565b90915550505b6115ec848484613b5e565b949350505050565b6000546001600160a01b031633146116425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b5050505050505050565b60006116e960006128fb565b6116f461dead6128fb565b6116fe919061552a565b600e546113f49190615492565b6000600f548211156117855760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d50565b600061178f613ff7565b905061179b8184615571565b9392505050565b6000546001600160a01b031633146117f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f5b565b6000546001600160a01b031633146118905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602154610100900460ff16156118a557600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9d91859061190b90869061552a565b613a51565b6000546001600160a01b0316331461195e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60235460ff1615611a405760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b60c8845110611a915760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b8251845114611ae25760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b8151835114611b335760405162461bcd60e51b815260206004820152600160248201527f34000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b66025db9356ba000600a55602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038481168202929092179283905590910416611bb557602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6021546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b158015611c1857600080fd5b505af1925050508015611c29575060015b506402540be400600a541015611c4b57600d805460ff19166012179055611c59565b600d805460ff191660091790555b600d54611c6a9060ff16600a615669565b600a54611c779190615678565b600e819055611c8890600019615697565b611c9490600019615492565b600f5560408051808201909152600b8082527f4d6f6e73746156657273650000000000000000000000000000000000000000006020909201918252611cd99181614d34565b506040805180820190915260068082527f4d4f4e53545200000000000000000000000000000000000000000000000000006020909201918252611d1e91600c91614d34565b506018546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015611da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc591906156ab565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4a91906156ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed291906156ab565b601780546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199092168217905560009081526003602052604090819020805460ff1916600117905580516002808252606082019092529081602001602082028036833750508151611f4a926024925060200190614db8565b50306024600081548110611f6057611f60615434565b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f91906156ab565b602460018154811061202357612023615434565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506103e8600e5460056120639190615678565b61206d9190615571565b601d55600e546103e89061208290600f615678565b61208c9190615571565b601e55600e54612710906120a1906005615678565b6120ab9190615571565b601f55600e54612710906120c0906019615678565b6120ca9190615571565b6020556023805460ff19166001908117909155600f549060006120f56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556121216000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e5460405161216891815260200190565b60405180910390a360165461218a9030906001600160a01b0316600019613a51565b60005b845181101561222f5760008382815181106121aa576121aa615434565b60200260200101518583815181106121c4576121c4615434565b6020026020010151600e546121d99190615678565b6121e39190615571565b905061221a6121fa6000546001600160a01b031690565b87848151811061220c5761220c615434565b602002602001015183613b5e565b50508080612227906154a9565b91505061218d565b506122606122456000546001600160a01b031690565b3061225b6108a46000546001600160a01b031690565b613b5e565b506016546001600160a01b031663f305d719473061227d816128fb565b6000806122926000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612312573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061233791906156c8565b505050612342612db8565b50505050565b6000546001600160a01b031633146123965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6001600160a01b0381166124125760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d50565b6001600160a01b03811661dead14156124935760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d50565b600080546124ac916001600160a01b0390911690612743565b6124b7816001612743565b600080546124cd906001600160a01b03166128fb565b11156124ef576000546124ed906001600160a01b03168261225b826128fb565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146125955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60155461ffff908116908416118015906125bf575060155461ffff62010000909104811690831611155b80156125dd575060155461ffff640100000000909104811690821611155b6125e657600080fd5b6000816125f384866154e1565b6125fd91906154e1565b90506107d08161ffff16111561261257600080fd5b6011805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556126868482615507565b6011805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000602160029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906156f6565b6000546001600160a01b031633146127915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461280a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602154610100900460ff16156128625760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d50565b6001600160a01b0381163014156128bb5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d50565b602180546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561293857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610fa19061170b565b6000546001600160a01b031633146129a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b600080546129c1916001600160a01b0390911690612743565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314612a585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b80612ae4576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610dc357600080fd5b60045415612b4b576203f48060045442612afe9190615492565b11612b4b5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d50565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610da9565b6000546001600160a01b03163314612c145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60155461ffff90811690841611801590612c3e575060155461ffff62010000909104811690831611155b8015612c5c575060155461ffff640100000000909104811690821611155b612c6557600080fd5b600081612c7284866154e1565b612c7c91906154e1565b90506107d08161ffff161115612c9157600080fd5b6012805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009093169290921790871617179055612d058482615507565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b03163314612d985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b601654612db29030906001600160a01b0316600019613a51565b50600190565b6000546001600160a01b03163314612e065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60215460ff1615612e595760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d50565b602154610100900460ff16612eb05760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d50565b612ebb306001610fa7565b601754612ed2906001600160a01b03166001610fa7565b6021546201000090046001600160a01b0316612f1857602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612fa957600080fd5b505af1925050508015612fba575060015b506021805460ff1916600117905542602255565b6060600c8054610dee906153b1565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9d91859061190b908690615492565b6000613021338484613b5e565b5060019392505050565b6000546001600160a01b031633146130795760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b61308483600a61570f565b61308e9085615678565b60255561309c81600a61570f565b6130a69083615678565b602655602554674563918244f40000118015906130cd5750674563918244f4000060265410155b61234257600080fd5b6000546001600160a01b031633146131245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6014805461ffff838116620100000263ffffffff199092169085161717905561314d81836154e1565b6014805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146131db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f5b565b6000546001600160a01b0316331461327b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b601c80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906132c490831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461331d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b600a8160ff16111561332e57600080fd5b6021546040517fd285d8d000000000000000000000000000000000000000000000000000000000815260ff83166004820152620100009091046001600160a01b03169063d285d8d090602401610f5b565b6000546001600160a01b031633146133cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343691906156ab565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a791906156ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561350a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352e91906156ab565b90506001600160a01b0381166136cc57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561357c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a091906156ab565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361191906156ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369a91906156ab565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556136f5565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561135c903090600019613a51565b6000546001600160a01b0316331461377c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146137f95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602154610100900460ff16156138515760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d50565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561388b573d6000803e3d6000fd5b50565b6000546001600160a01b031633146138dc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610da9565b6000546001600160a01b031633146139845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b8284600e546139939190615678565b61399d9190615571565b601f55600e5481906139b0908490615678565b6139ba9190615571565b60205550505050565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa1919061571b565b6001600160a01b038316613aa75760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d50565b6001600160a01b038216613afd5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d50565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416613bdc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d50565b6001600160a01b038316613c585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d50565b60008211613cce5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d50565b6001600160a01b03841660009081526006602052604090205460019060ff1680613d1057506001600160a01b03841660009081526006602052604090205460ff165b15613d19575060005b613d238585614197565b15613f735760215460ff16613d7a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d50565b6016546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f90613dc7908790602490600401615781565b600060405180830381865afa158015613de4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e0c919081019061579a565b600181518110613e1e57613e1e615434565b60200260200101519050602760019054906101000a900460ff1615613f71576001600160a01b03861660009081526003602052604090205460ff1615613ed25760275460ff1615613ec357602254613e7890611c2061552a565b4211613e98576703782dace9d90000811115613e9357600080fd5b613f71565b602254613ea8906201356061552a565b4211613ec357671bc16d674ec80000811115613e9357600080fd5b602554811115613e9357600080fd5b6001600160a01b03851660009081526003602052604090205460ff1615613f715760275460ff1615613f6257602254613f0d90611c2061552a565b4211613f28576703782dace9d90000811115613e9357600080fd5b602254613f38906201356061552a565b4211613f5357671bc16d674ec80000811115613e9357600080fd5b602654811115613e9357600080fd5b602654811115613f7157600080fd5b505b6001600160a01b03841660009081526003602052604090205460ff1615613fe257601c5460ff16158015613fae5750601c54610100900460ff165b15613fe2576000613fbe306128fb565b9050601f548110613fe0576020548110613fd757506020545b613fe081614254565b505b613fee8585858461454d565b95945050505050565b600f54600e5460009190825b60085460ff8216101561415e57826001600060088460ff168154811061402b5761402b615434565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806140995750816002600060088460ff168154811061407257614072615434565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156140b657600e54600f546140ae9190615571565b935050505090565b6001600060088360ff16815481106140d0576140d0615434565b60009182526020808320909101546001600160a01b031683528201929092526040019020546140ff9084615492565b92506002600060088360ff168154811061411b5761411b615434565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461414a9083615492565b9150806141568161582b565b915050614003565b50600e54600f5461416f9190615571565b82101561418d57600e54600f546141869190615571565b9250505090565b6141868183615571565b600080546001600160a01b038481169116148015906141c457506000546001600160a01b03838116911614155b80156141e957506001600160a01b03821660009081526009602052604090205460ff16155b801561420e57506001600160a01b03831660009081526009602052604090205460ff16155b801561422557506001600160a01b03821661dead14155b801561423957506001600160a01b03821615155b801561179b57506001600160a01b0383163014159392505050565b601c805460ff1916600117905560145461ffff6401000000009091041661427a57614540565b3060009081526005602090815260408083206016546001600160a01b03168452909152902054600019146142d3573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff64010000000082048116916142f5911685615678565b6142ff9190615571565b6143099190615571565b905060006143178284615492565b6016546040517f791ac9470000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063791ac9479061436b9084906000906024903090429060040161584b565b600060405180830381600087803b15801561438557600080fd5b505af1158015614399573d6000803e3d6000fd5b5050601454600092506002915061ffff64010000000082048116916143bf911647615678565b6143c99190615571565b6143d39190615571565b905082156144cc576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614462573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061448791906156c8565b505060408051858152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000471180156144fc57506014546000906144f69061ffff80821691640100000000900416615507565b61ffff16115b1561453c57601b546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561453a573d6000803e3d6000fd5b505b5050505b50601c805460ff19169055565b602154600090610100900460ff166145f95761456985856148b1565b602154610100900460ff1615801561458657506145868585614197565b156145f95760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d50565b600061460786868686614a0f565b60808101516001600160a01b03881660009081526001602052604090205491925061463191615492565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054614668919061552a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156146da576001600160a01b0386166000908152600260205260409020546146c0908590615492565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff161561473a5780516001600160a01b038616600090815260026020526040902054614720919061552a565b6001600160a01b0386166000908152600260205260409020555b60408101511561481c5761474c613ff7565b816040015161475b9190615678565b30600090815260016020526040902054614775919061552a565b3060009081526001602090815260408083209390935560079052205460ff16156147ca57604080820151306000908152600260205291909120546147b9919061552a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161481391815260200190565b60405180910390a35b60008160a001511180614833575060008160200151115b15614854578060a00151600f600082825461484e9190615492565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161489d91815260200190565b60405180910390a350600195945050505050565b602154610100900460ff161561492f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d50565b6149398282614197565b15801561495357506017546001600160a01b038281169116145b1561135e576001600160a01b038083166000908152600960205260409020805460ff191660011790556021805461ff0019166101001790819055620100009004166149c857602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614a486040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614a816040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000614a8b613ff7565b9050614a978186615678565b6080830152614aa68787614197565b15614b59576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614b42575060408051601f3d908101601f19168201909252614b3f9181019061571b565b60015b614b4b57600080fd5b905080614b5757600080fd5b505b8315614cde576001600160a01b03861660009081526003602052604090205460ff1615614bb6576012546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614c3f565b6001600160a01b03871660009081526003602052604090205460ff1615614c0d576011546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614c3f565b6013546010805461ffff80841663ffffffff199092169190911766010000000000009093041662010000029190911790555b60155460105461ffff6601000000000000909204821691614c61911687615678565b614c6b9190615571565b602083015260155460105461ffff6601000000000000909204821691614c98916201000090041687615678565b614ca29190615571565b604083018190526020830151614cb8919061552a565b614cc29086615492565b82526020820151614cd4908290615678565b60a0830152614cf7565b6000602083018190526040830181905285835260a08301525b808260400151614d079190615678565b8260a00151614d16919061552a565b8260800151614d259190615492565b60608301525095945050505050565b828054614d40906153b1565b90600052602060002090601f016020900481019282614d625760008555614da8565b82601f10614d7b57805160ff1916838001178555614da8565b82800160010185558215614da8579182015b82811115614da8578251825591602001919060010190614d8d565b50614db4929150614e1a565b5090565b828054828255906000526020600020908101928215614da8579160200282015b82811115614da8578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190614dd8565b5b80821115614db45760008155600101614e1b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e8757614e87614e2f565b604052919050565b600067ffffffffffffffff821115614ea957614ea9614e2f565b5060051b60200190565b6001600160a01b038116811461388b57600080fd5b600082601f830112614ed957600080fd5b81356020614eee614ee983614e8f565b614e5e565b82815260059290921b84018101918181019086841115614f0d57600080fd5b8286015b84811015614f31578035614f2481614eb3565b8352918301918301614f11565b509695505050505050565b801515811461388b57600080fd5b60008060408385031215614f5d57600080fd5b823567ffffffffffffffff811115614f7457600080fd5b614f8085828601614ec8565b9250506020830135614f9181614f3c565b809150509250929050565b600060208083528351808285015260005b81811015614fc957858101830151858201604001528201614fad565b81811115614fdb576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561500357600080fd5b5035919050565b6000806040838503121561501d57600080fd5b823561502881614eb3565b946020939093013593505050565b6000806040838503121561504957600080fd5b823561505481614eb3565b91506020830135614f9181614f3c565b803561ffff8116811461507657600080fd5b919050565b60008060006060848603121561509057600080fd5b61509984615064565b92506150a760208501615064565b91506150b560408501615064565b90509250925092565b6000806000606084860312156150d357600080fd5b83356150de81614eb3565b925060208401356150ee81614eb3565b929592945050506040919091013590565b6000806000806080858703121561511557600080fd5b843561512081614f3c565b9350602085013561513081614f3c565b9250604085013561514081614f3c565b9150606085013561515081614f3c565b939692955090935050565b60006020828403121561516d57600080fd5b813561179b81614eb3565b6000806040838503121561518b57600080fd5b823561505481614f3c565b600082601f8301126151a757600080fd5b813560206151b7614ee983614e8f565b82815260059290921b840181019181810190868411156151d657600080fd5b8286015b84811015614f3157803583529183019183016151da565b6000806000806080858703121561520757600080fd5b843567ffffffffffffffff8082111561521f57600080fd5b61522b88838901614ec8565b9550602087013591508082111561524157600080fd5b61524d88838901615196565b9450604087013591508082111561526357600080fd5b5061527087828801615196565b925050606085013561515081614eb3565b6000806000806080858703121561529757600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156152c657600080fd5b6152cf83615064565b91506152dd60208401615064565b90509250929050565b6000602082840312156152f857600080fd5b813561179b81614f3c565b60ff8116811461388b57600080fd5b60006020828403121561532457600080fd5b813561179b81615303565b6000806040838503121561534257600080fd5b823561534d81614eb3565b91506020830135614f9181614eb3565b604080825283519082018190526000906020906060840190828701845b8281101561539f5781516001600160a01b03168452928401929084019060010161537a565b50505093151592019190915250919050565b600181811c908216806153c557607f821691505b602082108114156153ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156154a4576154a4615463565b500390565b60006000198214156154bd576154bd615463565b5060010190565b6000602082840312156154d657600080fd5b815161179b81615303565b600061ffff8083168185168083038211156154fe576154fe615463565b01949350505050565b600061ffff8381169083168181101561552257615522615463565b039392505050565b6000821982111561553d5761553d615463565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261558057615580615542565b500490565b600181815b808511156155c05781600019048211156155a6576155a6615463565b808516156155b357918102915b93841c939080029061558a565b509250929050565b6000826155d757506001610fa1565b816155e457506000610fa1565b81600181146155fa576002811461560457615620565b6001915050610fa1565b60ff84111561561557615615615463565b50506001821b610fa1565b5060208310610133831016604e8410600b8410161715615643575081810a610fa1565b61564d8383615585565b806000190482111561566157615661615463565b029392505050565b600061179b60ff8416836155c8565b600081600019048311821515161561569257615692615463565b500290565b6000826156a6576156a6615542565b500690565b6000602082840312156156bd57600080fd5b815161179b81614eb3565b6000806000606084860312156156dd57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561570857600080fd5b5051919050565b600061179b83836155c8565b60006020828403121561572d57600080fd5b815161179b81614f3c565b6000815480845260208085019450836000528060002060005b838110156157765781546001600160a01b031687529582019560019182019101615751565b509495945050505050565b8281526040602082015260006115ec6040830184615738565b600060208083850312156157ad57600080fd5b825167ffffffffffffffff8111156157c457600080fd5b8301601f810185136157d557600080fd5b80516157e3614ee982614e8f565b81815260059190911b8201830190838101908783111561580257600080fd5b928401925b8284101561582057835182529284019290840190615807565b979650505050505050565b600060ff821660ff81141561584257615842615463565b60010192915050565b85815284602082015260a06040820152600061586a60a0830186615738565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212204d8fd21a6375791da5d1aa3534ce2b4633cbb31ff529b9a007b3d843b9563fde64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103fd5760003560e01c806370a082311161020d578063c011f20311610128578063dd62ed3e116100bb578063eec2744e1161008a578063fb78680d1161006f578063fb78680d14610ca7578063fdb78c0e14610cc7578063fe575a8714610ce657600080fd5b8063eec2744e14610c67578063f94aa1b414610c8757600080fd5b8063dd62ed3e14610bcc578063eafb5a3c14610c12578063eb50e70e14610c32578063ee5d9c2d14610c5257600080fd5b8063cab5ebea116100f7578063cab5ebea14610b20578063cf84770614610b40578063d285d8d014610b96578063d32e507314610bb657600080fd5b8063c011f20314610a67578063c2fa418f14610a86578063c6831cd814610ac3578063c6a276c214610b0057600080fd5b80638a8c523c116101a0578063a457c2d71161016f578063a457c2d7146109e7578063a9059cbb14610a07578063adc59ae014610a27578063bcd96a2514610a4757600080fd5b80638a8c523c146109a75780638da5cb5b1461095457806395d89b41146109bc5780639baf6a3b146109d157600080fd5b806388f82020116101dc57806388f820201461091b578063893d20e8146109545780638965b55d146109725780638a63bd9b1461099257600080fd5b806370a0823114610889578063715018a6146108a95780637b45d431146108be57806380c581d1146108fb57600080fd5b80632d838119116103185780634ada218b116102ab57806353b692251161027a57806355dbc3691161025f57806355dbc36914610834578063590ffdce146108495780635c24b0741461086957600080fd5b806353b69225146107fa57806355d8ece61461081457600080fd5b80634ada218b146107685780634fb2e45d146107825780634fbee193146107a257806350a8e016146107db57600080fd5b806339509351116102e757806339509351146106e85780633ae07ad51461070857806343b5beec14610728578063452ed4f11461074857600080fd5b80632d83811914610670578063313ce5671461069057806333251a0b146106a8578063384f36b6146106c857600080fd5b806313e46192116103905780631e90afe31161035f5780631e90afe3146105fb57806323b872dd1461061b57806329dd87981461063b5780632b112e491461065b57600080fd5b806313e461921461053457806318160ddd146105545780631b6afa2d146105695780631dea5c71146105d457600080fd5b80630758d924116103cc5780630758d924146104a457806309231602146104c4578063095ea7b3146104e4578063122fea3b1461051457600080fd5b806301339c211461040957806303fd2a451461043257806305bbedb61461046057806306fdde031461048257600080fd5b3661040457005b600080fd5b34801561041557600080fd5b5061041f60225481565b6040519081526020015b60405180910390f35b34801561043e57600080fd5b5061044861dead81565b6040516001600160a01b039091168152602001610429565b34801561046c57600080fd5b5061048061047b366004614f4a565b610d06565b005b34801561048e57600080fd5b50610497610ddf565b6040516104299190614f9c565b3480156104b057600080fd5b50601654610448906001600160a01b031681565b3480156104d057600080fd5b506104806104df366004614ff1565b610e71565b3480156104f057600080fd5b506105046104ff36600461500a565b610f90565b6040519015158152602001610429565b34801561052057600080fd5b50601854610448906001600160a01b031681565b34801561054057600080fd5b5061048061054f366004615036565b610fa7565b34801561056057600080fd5b5061041f611362565b34801561057557600080fd5b506015546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610429565b3480156105e057600080fd5b506105e961137b565b60405160ff9091168152602001610429565b34801561060757600080fd5b5061048061061636600461507b565b6113f9565b34801561062757600080fd5b506105046106363660046150be565b61157c565b34801561064757600080fd5b506104806106563660046150ff565b6115f4565b34801561066757600080fd5b5061041f6116dd565b34801561067c57600080fd5b5061041f61068b366004614ff1565b61170b565b34801561069c57600080fd5b50600d5460ff166105e9565b3480156106b457600080fd5b506104806106c336600461515b565b6117a2565b3480156106d457600080fd5b506104806106e336600461515b565b611842565b3480156106f457600080fd5b5061050461070336600461500a565b6118d4565b34801561071457600080fd5b50610480610723366004615178565b611910565b34801561073457600080fd5b506104806107433660046151f1565b61199f565b34801561075457600080fd5b50601754610448906001600160a01b031681565b34801561077457600080fd5b506021546105049060ff1681565b34801561078e57600080fd5b5061048061079d36600461515b565b612348565b3480156107ae57600080fd5b506105046107bd36600461515b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107e757600080fd5b5060215461050490610100900460ff1681565b34801561080657600080fd5b506027546105049060ff1681565b34801561082057600080fd5b5061048061082f36600461507b565b612547565b34801561084057600080fd5b5061041f6126ca565b34801561085557600080fd5b50610480610864366004615036565b612743565b34801561087557600080fd5b5061048061088436600461515b565b6127bc565b34801561089557600080fd5b5061041f6108a436600461515b565b6128fb565b3480156108b557600080fd5b5061048061295a565b3480156108ca57600080fd5b506011546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b34801561090757600080fd5b50610480610916366004615036565b612a0a565b34801561092757600080fd5b5061050461093636600461515b565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561096057600080fd5b506000546001600160a01b0316610448565b34801561097e57600080fd5b5061048061098d36600461507b565b612bc6565b34801561099e57600080fd5b50610504612d49565b3480156109b357600080fd5b50610480612db8565b3480156109c857600080fd5b50610497612fce565b3480156109dd57600080fd5b5061041f60265481565b3480156109f357600080fd5b50610504610a0236600461500a565b612fdd565b348015610a1357600080fd5b50610504610a2236600461500a565b613014565b348015610a3357600080fd5b50610480610a42366004615281565b61302b565b348015610a5357600080fd5b50610480610a623660046152b3565b6130d6565b348015610a7357600080fd5b5060275461050490610100900460ff1681565b348015610a9257600080fd5b506013546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610acf57600080fd5b506012546105a69061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b0c57600080fd5b50610480610b1b36600461515b565b61318d565b348015610b2c57600080fd5b50610480610b3b3660046152e6565b61322d565b348015610b4c57600080fd5b50601454610b719061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610429565b348015610ba257600080fd5b50610480610bb1366004615312565b6132cf565b348015610bc257600080fd5b5061041f60255481565b348015610bd857600080fd5b5061041f610be736600461532f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c1e57600080fd5b50610480610c2d36600461515b565b61337f565b348015610c3e57600080fd5b50610480610c4d36600461515b565b61372e565b348015610c5e57600080fd5b506104806137ab565b348015610c7357600080fd5b50610480610c82366004615036565b61388e565b348015610c9357600080fd5b50601b54610448906001600160a01b031681565b348015610cb357600080fd5b50610480610cc2366004615281565b613936565b348015610cd357600080fd5b50601c5461050490610100900460ff1681565b348015610cf257600080fd5b50610504610d0136600461515b565b6139c3565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6021546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610da9908590859060040161535d565b600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050505050565b6060600b8054610dee906153b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1a906153b1565b8015610e675780601f10610e3c57610100808354040283529160200191610e67565b820191906000526020600020905b815481529060010190602001808311610e4a57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ebf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b604b811015610f105760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d50565b6021546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610f7557600080fd5b505af1158015610f89573d6000803e3d6000fd5b5050505050565b6000610f9d338484613a51565b5060015b92915050565b6000546001600160a01b03163314610ff55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60018115151415611137576001600160a01b03821660009081526007602052604090205460ff16156110695760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d50565b6001600160a01b038216600090815260016020526040902054156110c3576001600160a01b0382166000908152600160205260409020546110a99061170b565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805473ffffffffffffffffffffffffffffffffffffffff19169091179055565b8061135e576001600160a01b03821660009081526007602052604090205460ff166111a45760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d50565b60085460011415611220576001600160a01b038216600090815260026020908152604080832083905560079091529020805460ff1916905560088054806111ed576111ed615405565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60085481101561135c57826001600160a01b03166008828154811061124a5761124a615434565b6000918252602090912001546001600160a01b0316141561134a576008805461127590600190615492565b8154811061128557611285615434565b600091825260209091200154600880546001600160a01b0390921691839081106112b1576112b1615434565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061131657611316615405565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905561135c565b80611354816154a9565b915050611223565b505b5050565b6000600e546000141561137457600080fd5b50600e5490565b6000602160029054906101000a90046001600160a01b03166001600160a01b0316631dea5c716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906154c4565b905090565b6000546001600160a01b031633146114475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60155461ffff90811690841611801590611471575060155461ffff62010000909104811690831611155b801561148f575060155461ffff640100000000909104811690821611155b61149857600080fd5b6000816114a584866154e1565b6114af91906154e1565b90506107d08161ffff1611156114c457600080fd5b6013805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556115388482615507565b6013805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146115e1576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906115db908490615492565b90915550505b6115ec848484613b5e565b949350505050565b6000546001600160a01b031633146116425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b5050505050505050565b60006116e960006128fb565b6116f461dead6128fb565b6116fe919061552a565b600e546113f49190615492565b6000600f548211156117855760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d50565b600061178f613ff7565b905061179b8184615571565b9392505050565b6000546001600160a01b031633146117f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610f5b565b6000546001600160a01b031633146118905760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602154610100900460ff16156118a557600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9d91859061190b90869061552a565b613a51565b6000546001600160a01b0316331461195e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b031633146119ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60235460ff1615611a405760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b60c8845110611a915760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b8251845114611ae25760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b8151835114611b335760405162461bcd60e51b815260206004820152600160248201527f34000000000000000000000000000000000000000000000000000000000000006044820152606401610d50565b66025db9356ba000600a55602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b038481168202929092179283905590910416611bb557602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6021546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b158015611c1857600080fd5b505af1925050508015611c29575060015b506402540be400600a541015611c4b57600d805460ff19166012179055611c59565b600d805460ff191660091790555b600d54611c6a9060ff16600a615669565b600a54611c779190615678565b600e819055611c8890600019615697565b611c9490600019615492565b600f5560408051808201909152600b8082527f4d6f6e73746156657273650000000000000000000000000000000000000000006020909201918252611cd99181614d34565b506040805180820190915260068082527f4d4f4e53545200000000000000000000000000000000000000000000000000006020909201918252611d1e91600c91614d34565b506018546016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa158015611da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc591906156ab565b6001600160a01b031663c9c65396601660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4a91906156ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed291906156ab565b601780546001600160a01b039290921673ffffffffffffffffffffffffffffffffffffffff199092168217905560009081526003602052604090819020805460ff1916600117905580516002808252606082019092529081602001602082028036833750508151611f4a926024925060200190614db8565b50306024600081548110611f6057611f60615434565b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055601654604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f91906156ab565b602460018154811061202357612023615434565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506103e8600e5460056120639190615678565b61206d9190615571565b601d55600e546103e89061208290600f615678565b61208c9190615571565b601e55600e54612710906120a1906005615678565b6120ab9190615571565b601f55600e54612710906120c0906019615678565b6120ca9190615571565b6020556023805460ff19166001908117909155600f549060006120f56000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556121216000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e5460405161216891815260200190565b60405180910390a360165461218a9030906001600160a01b0316600019613a51565b60005b845181101561222f5760008382815181106121aa576121aa615434565b60200260200101518583815181106121c4576121c4615434565b6020026020010151600e546121d99190615678565b6121e39190615571565b905061221a6121fa6000546001600160a01b031690565b87848151811061220c5761220c615434565b602002602001015183613b5e565b50508080612227906154a9565b91505061218d565b506122606122456000546001600160a01b031690565b3061225b6108a46000546001600160a01b031690565b613b5e565b506016546001600160a01b031663f305d719473061227d816128fb565b6000806122926000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612312573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061233791906156c8565b505050612342612db8565b50505050565b6000546001600160a01b031633146123965760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6001600160a01b0381166124125760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d50565b6001600160a01b03811661dead14156124935760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d50565b600080546124ac916001600160a01b0390911690612743565b6124b7816001612743565b600080546124cd906001600160a01b03166128fb565b11156124ef576000546124ed906001600160a01b03168261225b826128fb565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146125955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60155461ffff908116908416118015906125bf575060155461ffff62010000909104811690831611155b80156125dd575060155461ffff640100000000909104811690821611155b6125e657600080fd5b6000816125f384866154e1565b6125fd91906154e1565b90506107d08161ffff16111561261257600080fd5b6011805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931692909217908716171790556126868482615507565b6011805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000602160029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f491906156f6565b6000546001600160a01b031633146127915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461280a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602154610100900460ff16156128625760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610d50565b6001600160a01b0381163014156128bb5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d50565b602180546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561293857506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610fa19061170b565b6000546001600160a01b031633146129a85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b600080546129c1916001600160a01b0390911690612743565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314612a585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b80612ae4576001600160a01b03828116600081815260036020526040808220805460ff1916905560215490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610dc357600080fd5b60045415612b4b576203f48060045442612afe9190615492565b11612b4b5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d50565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560215492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610da9565b6000546001600160a01b03163314612c145760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60155461ffff90811690841611801590612c3e575060155461ffff62010000909104811690831611155b8015612c5c575060155461ffff640100000000909104811690821611155b612c6557600080fd5b600081612c7284866154e1565b612c7c91906154e1565b90506107d08161ffff161115612c9157600080fd5b6012805461ffff848116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00008288166201000002167fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009093169290921790871617179055612d058482615507565b6012805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b03163314612d985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b601654612db29030906001600160a01b0316600019613a51565b50600190565b6000546001600160a01b03163314612e065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60215460ff1615612e595760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d50565b602154610100900460ff16612eb05760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d50565b612ebb306001610fa7565b601754612ed2906001600160a01b03166001610fa7565b6021546201000090046001600160a01b0316612f1857602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b602154601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015612fa957600080fd5b505af1925050508015612fba575060015b506021805460ff1916600117905542602255565b6060600c8054610dee906153b1565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610f9d91859061190b908690615492565b6000613021338484613b5e565b5060019392505050565b6000546001600160a01b031633146130795760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b61308483600a61570f565b61308e9085615678565b60255561309c81600a61570f565b6130a69083615678565b602655602554674563918244f40000118015906130cd5750674563918244f4000060265410155b61234257600080fd5b6000546001600160a01b031633146131245760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6014805461ffff838116620100000263ffffffff199092169085161717905561314d81836154e1565b6014805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146131db5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610f5b565b6000546001600160a01b0316331461327b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b601c80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906132c490831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461331d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b600a8160ff16111561332e57600080fd5b6021546040517fd285d8d000000000000000000000000000000000000000000000000000000000815260ff83166004820152620100009091046001600160a01b03169063d285d8d090602401610f5b565b6000546001600160a01b031633146133cd5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613412573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343691906156ab565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a791906156ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561350a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352e91906156ab565b90506001600160a01b0381166136cc57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561357c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a091906156ab565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361191906156ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369a91906156ab565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556136f5565b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561135c903090600019613a51565b6000546001600160a01b0316331461377c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b601b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146137f95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b602154610100900460ff16156138515760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d50565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561388b573d6000803e3d6000fd5b50565b6000546001600160a01b031633146138dc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610da9565b6000546001600160a01b031633146139845760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d50565b8284600e546139939190615678565b61399d9190615571565b601f55600e5481906139b0908490615678565b6139ba9190615571565b60205550505050565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa1919061571b565b6001600160a01b038316613aa75760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d50565b6001600160a01b038216613afd5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d50565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416613bdc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d50565b6001600160a01b038316613c585760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d50565b60008211613cce5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d50565b6001600160a01b03841660009081526006602052604090205460019060ff1680613d1057506001600160a01b03841660009081526006602052604090205460ff165b15613d19575060005b613d238585614197565b15613f735760215460ff16613d7a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d50565b6016546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f90613dc7908790602490600401615781565b600060405180830381865afa158015613de4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e0c919081019061579a565b600181518110613e1e57613e1e615434565b60200260200101519050602760019054906101000a900460ff1615613f71576001600160a01b03861660009081526003602052604090205460ff1615613ed25760275460ff1615613ec357602254613e7890611c2061552a565b4211613e98576703782dace9d90000811115613e9357600080fd5b613f71565b602254613ea8906201356061552a565b4211613ec357671bc16d674ec80000811115613e9357600080fd5b602554811115613e9357600080fd5b6001600160a01b03851660009081526003602052604090205460ff1615613f715760275460ff1615613f6257602254613f0d90611c2061552a565b4211613f28576703782dace9d90000811115613e9357600080fd5b602254613f38906201356061552a565b4211613f5357671bc16d674ec80000811115613e9357600080fd5b602654811115613e9357600080fd5b602654811115613f7157600080fd5b505b6001600160a01b03841660009081526003602052604090205460ff1615613fe257601c5460ff16158015613fae5750601c54610100900460ff165b15613fe2576000613fbe306128fb565b9050601f548110613fe0576020548110613fd757506020545b613fe081614254565b505b613fee8585858461454d565b95945050505050565b600f54600e5460009190825b60085460ff8216101561415e57826001600060088460ff168154811061402b5761402b615434565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806140995750816002600060088460ff168154811061407257614072615434565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156140b657600e54600f546140ae9190615571565b935050505090565b6001600060088360ff16815481106140d0576140d0615434565b60009182526020808320909101546001600160a01b031683528201929092526040019020546140ff9084615492565b92506002600060088360ff168154811061411b5761411b615434565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461414a9083615492565b9150806141568161582b565b915050614003565b50600e54600f5461416f9190615571565b82101561418d57600e54600f546141869190615571565b9250505090565b6141868183615571565b600080546001600160a01b038481169116148015906141c457506000546001600160a01b03838116911614155b80156141e957506001600160a01b03821660009081526009602052604090205460ff16155b801561420e57506001600160a01b03831660009081526009602052604090205460ff16155b801561422557506001600160a01b03821661dead14155b801561423957506001600160a01b03821615155b801561179b57506001600160a01b0383163014159392505050565b601c805460ff1916600117905560145461ffff6401000000009091041661427a57614540565b3060009081526005602090815260408083206016546001600160a01b03168452909152902054600019146142d3573060009081526005602090815260408083206016546001600160a01b03168452909152902060001990555b60145460009060029061ffff64010000000082048116916142f5911685615678565b6142ff9190615571565b6143099190615571565b905060006143178284615492565b6016546040517f791ac9470000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063791ac9479061436b9084906000906024903090429060040161584b565b600060405180830381600087803b15801561438557600080fd5b505af1158015614399573d6000803e3d6000fd5b5050601454600092506002915061ffff64010000000082048116916143bf911647615678565b6143c99190615571565b6143d39190615571565b905082156144cc576016546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614462573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061448791906156c8565b505060408051858152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000471180156144fc57506014546000906144f69061ffff80821691640100000000900416615507565b61ffff16115b1561453c57601b546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561453a573d6000803e3d6000fd5b505b5050505b50601c805460ff19169055565b602154600090610100900460ff166145f95761456985856148b1565b602154610100900460ff1615801561458657506145868585614197565b156145f95760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d50565b600061460786868686614a0f565b60808101516001600160a01b03881660009081526001602052604090205491925061463191615492565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054614668919061552a565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16156146da576001600160a01b0386166000908152600260205260409020546146c0908590615492565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526007602052604090205460ff161561473a5780516001600160a01b038616600090815260026020526040902054614720919061552a565b6001600160a01b0386166000908152600260205260409020555b60408101511561481c5761474c613ff7565b816040015161475b9190615678565b30600090815260016020526040902054614775919061552a565b3060009081526001602090815260408083209390935560079052205460ff16156147ca57604080820151306000908152600260205291909120546147b9919061552a565b306000908152600260205260409020555b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040015160405161481391815260200190565b60405180910390a35b60008160a001511180614833575060008160200151115b15614854578060a00151600f600082825461484e9190615492565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161489d91815260200190565b60405180910390a350600195945050505050565b602154610100900460ff161561492f5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d50565b6149398282614197565b15801561495357506017546001600160a01b038281169116145b1561135e576001600160a01b038083166000908152600960205260409020805460ff191660011790556021805461ff0019166101001790819055620100009004166149c857602180547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614a486040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614a816040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000614a8b613ff7565b9050614a978186615678565b6080830152614aa68787614197565b15614b59576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614b42575060408051601f3d908101601f19168201909252614b3f9181019061571b565b60015b614b4b57600080fd5b905080614b5757600080fd5b505b8315614cde576001600160a01b03861660009081526003602052604090205460ff1615614bb6576012546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614c3f565b6001600160a01b03871660009081526003602052604090205460ff1615614c0d576011546010805461ffff80841663ffffffff19909216919091176601000000000000909304166201000002919091179055614c3f565b6013546010805461ffff80841663ffffffff199092169190911766010000000000009093041662010000029190911790555b60155460105461ffff6601000000000000909204821691614c61911687615678565b614c6b9190615571565b602083015260155460105461ffff6601000000000000909204821691614c98916201000090041687615678565b614ca29190615571565b604083018190526020830151614cb8919061552a565b614cc29086615492565b82526020820151614cd4908290615678565b60a0830152614cf7565b6000602083018190526040830181905285835260a08301525b808260400151614d079190615678565b8260a00151614d16919061552a565b8260800151614d259190615492565b60608301525095945050505050565b828054614d40906153b1565b90600052602060002090601f016020900481019282614d625760008555614da8565b82601f10614d7b57805160ff1916838001178555614da8565b82800160010185558215614da8579182015b82811115614da8578251825591602001919060010190614d8d565b50614db4929150614e1a565b5090565b828054828255906000526020600020908101928215614da8579160200282015b82811115614da8578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190614dd8565b5b80821115614db45760008155600101614e1b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614e8757614e87614e2f565b604052919050565b600067ffffffffffffffff821115614ea957614ea9614e2f565b5060051b60200190565b6001600160a01b038116811461388b57600080fd5b600082601f830112614ed957600080fd5b81356020614eee614ee983614e8f565b614e5e565b82815260059290921b84018101918181019086841115614f0d57600080fd5b8286015b84811015614f31578035614f2481614eb3565b8352918301918301614f11565b509695505050505050565b801515811461388b57600080fd5b60008060408385031215614f5d57600080fd5b823567ffffffffffffffff811115614f7457600080fd5b614f8085828601614ec8565b9250506020830135614f9181614f3c565b809150509250929050565b600060208083528351808285015260005b81811015614fc957858101830151858201604001528201614fad565b81811115614fdb576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561500357600080fd5b5035919050565b6000806040838503121561501d57600080fd5b823561502881614eb3565b946020939093013593505050565b6000806040838503121561504957600080fd5b823561505481614eb3565b91506020830135614f9181614f3c565b803561ffff8116811461507657600080fd5b919050565b60008060006060848603121561509057600080fd5b61509984615064565b92506150a760208501615064565b91506150b560408501615064565b90509250925092565b6000806000606084860312156150d357600080fd5b83356150de81614eb3565b925060208401356150ee81614eb3565b929592945050506040919091013590565b6000806000806080858703121561511557600080fd5b843561512081614f3c565b9350602085013561513081614f3c565b9250604085013561514081614f3c565b9150606085013561515081614f3c565b939692955090935050565b60006020828403121561516d57600080fd5b813561179b81614eb3565b6000806040838503121561518b57600080fd5b823561505481614f3c565b600082601f8301126151a757600080fd5b813560206151b7614ee983614e8f565b82815260059290921b840181019181810190868411156151d657600080fd5b8286015b84811015614f3157803583529183019183016151da565b6000806000806080858703121561520757600080fd5b843567ffffffffffffffff8082111561521f57600080fd5b61522b88838901614ec8565b9550602087013591508082111561524157600080fd5b61524d88838901615196565b9450604087013591508082111561526357600080fd5b5061527087828801615196565b925050606085013561515081614eb3565b6000806000806080858703121561529757600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156152c657600080fd5b6152cf83615064565b91506152dd60208401615064565b90509250929050565b6000602082840312156152f857600080fd5b813561179b81614f3c565b60ff8116811461388b57600080fd5b60006020828403121561532457600080fd5b813561179b81615303565b6000806040838503121561534257600080fd5b823561534d81614eb3565b91506020830135614f9181614eb3565b604080825283519082018190526000906020906060840190828701845b8281101561539f5781516001600160a01b03168452928401929084019060010161537a565b50505093151592019190915250919050565b600181811c908216806153c557607f821691505b602082108114156153ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156154a4576154a4615463565b500390565b60006000198214156154bd576154bd615463565b5060010190565b6000602082840312156154d657600080fd5b815161179b81615303565b600061ffff8083168185168083038211156154fe576154fe615463565b01949350505050565b600061ffff8381169083168181101561552257615522615463565b039392505050565b6000821982111561553d5761553d615463565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261558057615580615542565b500490565b600181815b808511156155c05781600019048211156155a6576155a6615463565b808516156155b357918102915b93841c939080029061558a565b509250929050565b6000826155d757506001610fa1565b816155e457506000610fa1565b81600181146155fa576002811461560457615620565b6001915050610fa1565b60ff84111561561557615615615463565b50506001821b610fa1565b5060208310610133831016604e8410600b8410161715615643575081810a610fa1565b61564d8383615585565b806000190482111561566157615661615463565b029392505050565b600061179b60ff8416836155c8565b600081600019048311821515161561569257615692615463565b500290565b6000826156a6576156a6615542565b500690565b6000602082840312156156bd57600080fd5b815161179b81614eb3565b6000806000606084860312156156dd57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561570857600080fd5b5051919050565b600061179b83836155c8565b60006020828403121561572d57600080fd5b815161179b81614f3c565b6000815480845260208085019450836000528060002060005b838110156157765781546001600160a01b031687529582019560019182019101615751565b509495945050505050565b8281526040602082015260006115ec6040830184615738565b600060208083850312156157ad57600080fd5b825167ffffffffffffffff8111156157c457600080fd5b8301601f810185136157d557600080fd5b80516157e3614ee982614e8f565b81815260059190911b8201830190838101908783111561580257600080fd5b928401925b8284101561582057835182529284019290840190615807565b979650505050505050565b600060ff821660ff81141561584257615842615463565b60010192915050565b85815284602082015260a06040820152600061586a60a0830186615738565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212204d8fd21a6375791da5d1aa3534ce2b4633cbb31ff529b9a007b3d843b9563fde64736f6c634300080a0033

Deployed Bytecode Sourcemap

6155:28116:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9247:21;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9247:21:0;;;;;;;;8627:73;;;;;;;;;;;;8658:42;8627:73;;;;;-1:-1:-1;;;;;360:55:1;;;342:74;;330:2;315:18;8627:73:0;196:226:1;20801:172:0;;;;;;;;;;-1:-1:-1;20801:172:0;;;;;:::i;:::-;;:::i;:::-;;15092:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8327:26::-;;;;;;;;;;-1:-1:-1;8327:26:0;;;;-1:-1:-1;;;;;8327:26:0;;;21671:149;;;;;;;;;;-1:-1:-1;21671:149:0;;;;;:::i;:::-;;:::i;15786:161::-;;;;;;;;;;-1:-1:-1;15786:161:0;;;;;:::i;:::-;;:::i;:::-;;;4228:14:1;;4221:22;4203:41;;4191:2;4176:18;15786:161:0;4063:187:1;8390:28:0;;;;;;;;;;-1:-1:-1;8390:28:0;;;;-1:-1:-1;;;;;8390:28:0;;;18987:1139;;;;;;;;;;-1:-1:-1;18987:1139:0;;;;;:::i;:::-;;:::i;14749:161::-;;;;;;;;;;;;;:::i;8130:186::-;;;;;;;;;;-1:-1:-1;8130:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4875:6:1;4908:15;;;4890:34;;4960:15;;;4955:2;4940:18;;4933:43;5012:15;;;4992:18;;;4985:43;;;;5064:15;;;5059:2;5044:18;;5037:43;4852:3;4837:19;8130:186:0;4642:444:1;21828:116:0;;;;;;;;;;;;;:::i;:::-;;;5263:4:1;5251:17;;;5233:36;;5221:2;5206:18;21828:116:0;5091:184:1;23179:551:0;;;;;;;;;;-1:-1:-1;23179:551:0;;;;;:::i;:::-;;:::i;16453:306::-;;;;;;;;;;-1:-1:-1;16453:306:0;;;;;:::i;:::-;;:::i;21468:195::-;;;;;;;;;;-1:-1:-1;21468:195:0;;;;;:::i;:::-;;:::i;18435:141::-;;;;;;;;;;;;;:::i;20134:250::-;;;;;;;;;;-1:-1:-1;20134:250:0;;;;;:::i;:::-;;:::i;14916:80::-;;;;;;;;;;-1:-1:-1;14984:9:0;;;;14916:80;;21352:108;;;;;;;;;;-1:-1:-1;21352:108:0;;;;;:::i;:::-;;:::i;18281:146::-;;;;;;;;;;-1:-1:-1;18281:146:0;;;;;:::i;:::-;;:::i;16767:215::-;;;;;;;;;;-1:-1:-1;16767:215:0;;;;;:::i;:::-;;:::i;24241:179::-;;;;;;;;;;-1:-1:-1;24241:179:0;;;;;:::i;:::-;;:::i;10751:2176::-;;;;;;;;;;-1:-1:-1;10751:2176:0;;;;;:::i;:::-;;:::i;8360:21::-;;;;;;;;;;-1:-1:-1;8360:21:0;;;;-1:-1:-1;;;;;8360:21:0;;;9135:34;;;;;;;;;;-1:-1:-1;9135:34:0;;;;;;;;13603:590;;;;;;;;;;-1:-1:-1;13603:590:0;;;;;:::i;:::-;;:::i;18584:125::-;;;;;;;;;;-1:-1:-1;18584:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;18673:28:0;18649:4;18673:28;;;:19;:28;;;;;;;;;18584:125;9176:36;;;;;;;;;;-1:-1:-1;9176:36:0;;;;;;;;;;;9428:37;;;;;;;;;;-1:-1:-1;9428:37:0;;;;;;;;22106:526;;;;;;;;;;-1:-1:-1;22106:526:0;;;;;:::i;:::-;;:::i;21240:104::-;;;;;;;;;;;;;:::i;18717:134::-;;;;;;;;;;-1:-1:-1;18717:134:0;;;;;:::i;:::-;;:::i;20392:248::-;;;;;;;;;;-1:-1:-1;20392:248:0;;;;;:::i;:::-;;:::i;15405:198::-;;;;;;;;;;-1:-1:-1;15405:198:0;;;;;:::i;:::-;;:::i;14201:195::-;;;;;;;;;;;;;:::i;7559:140::-;;;;;;;;;;-1:-1:-1;7559:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;17773:500;;;;;;;;;;-1:-1:-1;17773:500:0;;;;;:::i;:::-;;:::i;18859:120::-;;;;;;;;;;-1:-1:-1;18859:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18951:20:0;18927:4;18951:20;;;:11;:20;;;;;;;;;18859:120;15178:80;;;;;;;;;;-1:-1:-1;15230:7:0;13581:6;-1:-1:-1;;;;;13581:6:0;15178:80;21828:116;22640:531;;;;;;;;;;-1:-1:-1;22640:531:0;;;;;:::i;:::-;;:::i;16272:173::-;;;;;;;;;;;;;:::i;29760:563::-;;;;;;;;;;;;;:::i;15002:84::-;;;;;;;;;;;;;:::i;9383:38::-;;;;;;;;;;;;;;;;16990:225;;;;;;;;;;-1:-1:-1;16990:225:0;;;;;:::i;:::-;;:::i;15611:167::-;;;;;;;;;;-1:-1:-1;15611:167:0;;;;;:::i;:::-;;:::i;23956:277::-;;;;;;;;;;-1:-1:-1;23956:277:0;;;;;:::i;:::-;;:::i;23738:210::-;;;;;;;;;;-1:-1:-1;23738:210:0;;;;;:::i;:::-;;:::i;9472:38::-;;;;;;;;;;-1:-1:-1;9472:38:0;;;;;;;;;;;7858:145;;;;;;;;;;-1:-1:-1;7858:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7708:141;;;;;;;;;;-1:-1:-1;7708:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20981:118;;;;;;;;;;-1:-1:-1;20981:118:0;;;;;:::i;:::-;;:::i;24860:165::-;;;;;;;;;;-1:-1:-1;24860:165:0;;;;;:::i;:::-;;:::i;8012:109::-;;;;;;;;;;-1:-1:-1;8012:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;10255:6:1;10288:15;;;10270:34;;10340:15;;;10335:2;10320:18;;10313:43;10392:15;;10372:18;;;10365:43;;;;10233:2;10218:18;8012:109:0;10049:365:1;21952:142:0;;;;;;;;;;-1:-1:-1;21952:142:0;;;;;:::i;:::-;;:::i;9339:37::-;;;;;;;;;;;;;;;;15264:133;;;;;;;;;;-1:-1:-1;15264:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15366:19:0;;;15348:7;15366:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15264:133;17223:542;;;;;;;;;;-1:-1:-1;17223:542:0;;;;;:::i;:::-;;:::i;24725:127::-;;;;;;;;;;-1:-1:-1;24725:127:0;;;;;:::i;:::-;;:::i;30331:183::-;;;;;;;;;;;;;:::i;20648:145::-;;;;;;;;;;-1:-1:-1;20648:145:0;;;;;:::i;:::-;;:::i;8779:128::-;;;;;;;;;;-1:-1:-1;8779:128:0;;;;-1:-1:-1;;;;;8779:128:0;;;24428:289;;;;;;;;;;-1:-1:-1;24428:289:0;;;;;:::i;:::-;;:::i;8938:39::-;;;;;;;;;;-1:-1:-1;8938:39:0;;;;;;;;;;;21107:125;;;;;;;;;;-1:-1:-1;21107:125:0;;;;;:::i;:::-;;:::i;20801:172::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;;;;;;;;;20909:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20909:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20947:8;;20957:7;;20909:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20801:172:::0;;:::o;15092:80::-;15140:13;15164:5;15157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15092:80;:::o;21671:149::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;21755:2:::1;21748:3;:9;;21740:30;;;::::0;-1:-1:-1;;;21740:30:0;;13445:2:1;21740:30:0::1;::::0;::::1;13427:21:1::0;13484:1;13464:18;;;13457:29;13522:10;13502:18;;;13495:38;13550:18;;21740:30:0::1;13243:331:1::0;21740:30:0::1;21781:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;160:25:1::0;;;21781:9:0;;;::::1;-1:-1:-1::0;;;;;21781:9:0::1;::::0;:26:::1;::::0;133:18:1;;21781:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21671:149:::0;:::o;15786:161::-;15861:4;15878:39;189:10;15901:7;15910:6;15878:8;:39::i;:::-;-1:-1:-1;15935:4:0;15786:161;;;;;:::o;18987:1139::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;19092:4:::1;19081:15:::0;::::1;;;19077:1042;;;-1:-1:-1::0;;;;;19122:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19121:21;19113:62;;;::::0;-1:-1:-1;;;19113:62:0;;13781:2:1;19113:62:0::1;::::0;::::1;13763:21:1::0;13820:2;13800:18;;;13793:30;13859;13839:18;;;13832:58;13907:18;;19113:62:0::1;13579:352:1::0;19113:62:0::1;-1:-1:-1::0;;;;;19193:16:0;::::1;19212:1;19193:16:::0;;;:7:::1;:16;::::0;;;;;:20;19190:116:::1;;-1:-1:-1::0;;;;;19273:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19253:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19234:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19190:116:::1;-1:-1:-1::0;;;;;;19320:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19320:27:0::1;19343:4;19320:27:::0;;::::1;::::0;;;19362:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;19362:23:0::1;::::0;;::::1;::::0;;18987:1139::o;19077:1042::-:1;19407:16:::0;19403:716:::1;;-1:-1:-1::0;;;;;19448:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19440:61;;;::::0;-1:-1:-1;;;19440:61:0;;14138:2:1;19440:61:0::1;::::0;::::1;14120:21:1::0;14177:2;14157:18;;;14150:30;14216;14196:18;;;14189:58;14264:18;;19440:61:0::1;13936:352:1::0;19440:61:0::1;19519:9;:16:::0;19539:1:::1;19519:21;19516:592;;;-1:-1:-1::0;;;;;19560:16:0;::::1;19579:1;19560:16:::0;;;:7:::1;:16;::::0;;;;;;;:20;;;19599:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;19599:28:0::1;::::0;;19646:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19646:15:0;;;;;-1:-1:-1;;19646:15:0::1;::::0;;;;;18987:1139;;:::o;19516:592::-:1;19707:9;19702:391;19726:9;:16:::0;19722:20;::::1;19702:391;;;19792:7;-1:-1:-1::0;;;;;19776:23:0::1;:9;19786:1;19776:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19776:12:0::1;:23;19772:302;;;19843:9;19853:16:::0;;:20:::1;::::0;19872:1:::1;::::0;19853:20:::1;:::i;:::-;19843:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19828:9:::1;:12:::0;;-1:-1:-1;;;;;19843:31:0;;::::1;::::0;19838:1;;19828:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19828:46:0::1;-1:-1:-1::0;;;;;19828:46:0;;::::1;;::::0;;19901:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19948:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19948:28:0::1;::::0;;20003:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20003:15:0;;;;;-1:-1:-1;;20003:15:0::1;::::0;;;;;20045:5:::1;;19772:302;19744:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19702:391;;;;19516:592;18987:1139:::0;;:::o;14749:161::-;14804:7;14828;;14839:1;14828:12;14824:53;;;14857:8;;;14824:53;-1:-1:-1;14894:7:0;;;14749:161::o;21828:116::-;21880:5;21905:9;;;;;;;;;-1:-1:-1;;;;;21905:9:0;-1:-1:-1;;;;;21905:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21898:38;;21828:116;:::o;23179:551::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;23306:10:::1;:21:::0;::::1;::::0;;::::1;23295:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;23361:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;23348:36:::0;;::::1;;;23295:89;:146;;;;-1:-1:-1::0;23418:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;23405:36:::0;;::::1;;;23295:146;23287:155;;;::::0;::::1;;23453:12;23490:9:::0;23468:19:::1;23478:9:::0;23468:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;23453:46;;23527:4;23518:5;:13;;;;23510:22;;;::::0;::::1;;23543:14;:36:::0;;::::1;23633::::0;;::::1;::::0;::::1;::::0;23543;;::::1;::::0;::::1;23633::::0;;;;;;;;;23590:32;;::::1;23633:36:::0;::::1;::::0;;23707:15:::1;23615:7:::0;23707:5;:15:::1;:::i;:::-;23680:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;23179:551:0:o;16453:306::-;-1:-1:-1;;;;;16574:19:0;;16553:4;16574:19;;;:11;:19;;;;;;;;16594:10;16574:31;;;;;;;;-1:-1:-1;;16574:52:0;16570:126;;-1:-1:-1;;;;;16643:19:0;;;;;;:11;:19;;;;;;;;16663:10;16643:31;;;;;;;:41;;16678:6;;16643:19;:41;;16678:6;;16643:41;:::i;:::-;;;;-1:-1:-1;;16570:126:0;16715:36;16725:6;16733:9;16744:6;16715:9;:36::i;:::-;16708:43;16453:306;-1:-1:-1;;;;16453:306:0:o;21468:195::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;21590:9:::1;::::0;:65:::1;::::0;;;;16125:14:1;;16118:22;21590:65:0::1;::::0;::::1;16100:41:1::0;16184:14;;16177:22;16157:18;;;16150:50;16243:14;;16236:22;16216:18;;;16209:50;16302:14;;16295:22;16275:18;;;16268:50;21590:9:0;;;::::1;-1:-1:-1::0;;;;;21590:9:0::1;::::0;:24:::1;::::0;16072:19:1;;21590:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21468:195:::0;;;;:::o;18435:141::-;18488:7;18545:21;18563:1;18545:9;:21::i;:::-;18527:15;8658:42;18527:9;:15::i;:::-;:39;;;;:::i;:::-;18516:7;;:51;;;;:::i;20134:250::-;20200:7;20239;;20228;:18;;20220:73;;;;-1:-1:-1;;;20220:73:0;;16664:2:1;20220:73:0;;;16646:21:1;16703:2;16683:18;;;16676:30;16742:34;16722:18;;;16715:62;16813:12;16793:18;;;16786:40;16843:19;;20220:73:0;16462:406:1;20220:73:0;20304:19;20327:10;:8;:10::i;:::-;20304:33;-1:-1:-1;20355:21:0;20304:33;20355:7;:21;:::i;:::-;20348:28;20134:250;-1:-1:-1;;;20134:250:0:o;21352:108::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;21421:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;360:55:1;;;21421:31:0::1;::::0;::::1;342:74:1::0;21421:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;315:18:1;;21421:31:0::1;196:226:1::0;18281:146:0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;18369:16:::1;::::0;::::1;::::0;::::1;;;18368:17;18360:26;;;::::0;::::1;;18397:13;:22:::0;;-1:-1:-1;;18397:22:0::1;-1:-1:-1::0;;;;;18397:22:0;;;::::1;::::0;;;::::1;::::0;;18281:146::o;16767:215::-;189:10;16855:4;16904:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16904:34:0;;;;;;;;;;16855:4;;16872:80;;16895:7;;16904:47;;16941:10;;16904:47;:::i;:::-;16872:8;:80::i;24241:179::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;24336:18:::1;:31:::0;;24378:34;;24336:31;::::1;;-1:-1:-1::0;;24378:34:0;;;;;24336:31:::1;24378:34:::0;::::1;;::::0;;;::::1;;::::0;;24241:179::o;10751:2176::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;10917:19:::1;::::0;::::1;;10916:20;10908:34;;;::::0;-1:-1:-1;;;10908:34:0;;17389:2:1;10908:34:0::1;::::0;::::1;17371:21:1::0;17428:1;17408:18;;;17401:29;17466:3;17446:18;;;17439:31;17487:18;;10908:34:0::1;17187:324:1::0;10908:34:0::1;10979:3;10961:8;:15;:21;10953:35;;;::::0;-1:-1:-1;;;10953:35:0;;17718:2:1;10953:35:0::1;::::0;::::1;17700:21:1::0;17757:1;17737:18;;;17730:29;17795:3;17775:18;;;17768:31;17816:18;;10953:35:0::1;17516:324:1::0;10953:35:0::1;11026:7;:14;11007:8;:15;:33;10999:47;;;::::0;-1:-1:-1;;;10999:47:0;;18047:2:1;10999:47:0::1;::::0;::::1;18029:21:1::0;18086:1;18066:18;;;18059:29;18124:3;18104:18;;;18097:31;18145:18;;10999:47:0::1;17845:324:1::0;10999:47:0::1;11083:8;:15;11065:7;:14;:33;11057:47;;;::::0;-1:-1:-1;;;11057:47:0;;18376:2:1;11057:47:0::1;::::0;::::1;18358:21:1::0;18415:1;18395:18;;;18388:29;18453:3;18433:18;;;18426:31;18474:18;;11057:47:0::1;18174:324:1::0;11057:47:0::1;11132:19;11115:14;:36:::0;11162:9:::1;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11162:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11217:9;;::::1;;11206:99;;11257:9;:36:::0;;;::::1;11287:4;11257:36:::0;::::1;;::::0;;11206:99:::1;11319:9;::::0;:33:::1;::::0;;;;11346:4:::1;11319:33;::::0;::::1;342:74:1::0;11319:9:0;;;::::1;-1:-1:-1::0;;;;;11319:9:0::1;::::0;:18:::1;::::0;315::1;;11319:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;11315:49:::0;11395:11:::1;11378:14;;:28;11374:121;;;11423:9;:14:::0;;-1:-1:-1;;11423:14:0::1;11435:2;11423:14;::::0;;11374:121:::1;;;11470:9;:13:::0;;-1:-1:-1;;11470:13:0::1;11482:1;11470:13;::::0;;11374:121:::1;11537:9;::::0;11533:13:::1;::::0;11537:9:::1;;11533:2;:13;:::i;:::-;11515:14;;:32;;;;:::i;:::-;11505:7;:42:::0;;;11584:21:::1;::::0;-1:-1:-1;;11584:21:0::1;:::i;:::-;11569:37;::::0;-1:-1:-1;;11569:37:0::1;:::i;:::-;11558:7;:49:::0;11618:21:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;11650:18:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:18:::1;:::i;:::-;-1:-1:-1::0;11701:13:0::1;::::0;11679:9:::1;:36:::0;;-1:-1:-1;;11679:36:0::1;-1:-1:-1::0;;;;;11701:13:0;;::::1;11679:36:::0;;::::1;::::0;;11746:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;11701:13;11746:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11735:42:0::1;;11778:9;;;;;;;;;-1:-1:-1::0;;;;;11778:9:0::1;-1:-1:-1::0;;;;;11778:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11735:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20865:15:1;;;11735:75:0::1;::::0;::::1;20847:34:1::0;11804:4:0::1;20897:18:1::0;;;20890:43;20759:18;;11735:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11726:6;:84:::0;;-1:-1:-1;;;;;11726:84:0;;;::::1;-1:-1:-1::0;;11726:84:0;;::::1;::::0;::::1;::::0;;-1:-1:-1;11821:15:0;;;:7:::1;:15;::::0;;;;;;:22;;-1:-1:-1;;11821:22:0::1;-1:-1:-1::0;11821:22:0::1;::::0;;11869:16;;11883:1:::1;11869:16:::0;;;;;::::1;::::0;;;;::::1;;;;;;;;;;-1:-1:-1::0;;11862:23:0;;::::1;::::0;:4:::1;::::0;-1:-1:-1;11862:23:0::1;;::::0;::::1;:::i;:::-;;11914:4;11896;11901:1;11896:7;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;:23:::0;;-1:-1:-1;;11896:23:0::1;-1:-1:-1::0;;;;;11896:23:0;;::::1;;::::0;;11940:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;11896:7;;11940:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11930:4;11935:1;11930:7;;;;;;;;:::i;:::-;;;;;;;;;:26;;;;;-1:-1:-1::0;;;;;11930:26:0::1;;;;;-1:-1:-1::0;;;;;11930:26:0::1;;;;;;11998:4;11983:7;;11993:1;11983:11;;;;:::i;:::-;11982:20;;;;:::i;:::-;11967:12;:35:::0;12031:7:::1;::::0;12047:4:::1;::::0;12031:12:::1;::::0;12041:2:::1;12031:12;:::i;:::-;12030:21;;;;:::i;:::-;12013:14;:38:::0;12079:7:::1;::::0;12094:5:::1;::::0;12079:11:::1;::::0;12089:1:::1;12079:11;:::i;:::-;12078:21;;;;:::i;:::-;12062:13;:37:::0;12124:7:::1;::::0;12140:5:::1;::::0;12124:12:::1;::::0;12134:2:::1;12124:12;:::i;:::-;12123:22;;;;:::i;:::-;12110:10;:35:::0;12156:19:::1;:26:::0;;-1:-1:-1;;12156:26:0::1;12178:4;12156:26:::0;;::::1;::::0;;;12217:7:::1;::::0;;12156:19:::1;12206:7;13554::::0;13581:6;-1:-1:-1;;;;;13581:6:0;;13516:79;12206:7:::1;-1:-1:-1::0;;;;;12198:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12198:16:0;:26;12261:7:::1;13554::::0;13581:6;-1:-1:-1;;;;;13581:6:0;;13516:79;12261:7:::1;-1:-1:-1::0;;;;;12240:38:0::1;12257:1;-1:-1:-1::0;;;;;12240:38:0::1;;12270:7;;12240:38;;;;160:25:1::0;;148:2;133:18;;14:177;12240:38:0::1;;;;;;;;12323:9;::::0;12291:62:::1;::::0;12308:4:::1;::::0;-1:-1:-1;;;;;12323:9:0::1;-1:-1:-1::0;;12291:8:0::1;:62::i;:::-;12370:9;12366:176;12389:8;:15;12385:1;:19;12366:176;;;12425:14;12465:8;12474:1;12465:11;;;;;;;;:::i;:::-;;;;;;;12451:7;12459:1;12451:10;;;;;;;;:::i;:::-;;;;;;;12443:7;;:18;;;;:::i;:::-;12442:34;;;;:::i;:::-;12425:51;;12491:39;12501:7;13554::::0;13581:6;-1:-1:-1;;;;;13581:6:0;;13516:79;12501:7:::1;12510:8;12519:1;12510:11;;;;;;;;:::i;:::-;;;;;;;12523:6;12491:9;:39::i;:::-;;12410:132;12406:3;;;;;:::i;:::-;;;;12366:176;;;;12554:53;12564:7;13554::::0;13581:6;-1:-1:-1;;;;;13581:6:0;;13516:79;12564:7:::1;12581:4;12588:18;12598:7;13554::::0;13581:6;-1:-1:-1;;;;;13581:6:0;;13516:79;12588:18:::1;12554:9;:53::i;:::-;-1:-1:-1::0;12620:9:0::1;::::0;-1:-1:-1;;;;;12620:9:0::1;:25;12653:21;12698:4;12718:24;12698:4:::0;12718:9:::1;:24::i;:::-;12757:1;12800::::0;12843:7:::1;13554::::0;13581:6;-1:-1:-1;;;;;13581:6:0;;13516:79;12843:7:::1;12620:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;21326:15:1;;;12620:271:0::1;::::0;::::1;21308:34:1::0;21358:18;;;21351:34;;;;21401:18;;;21394:34;;;;21444:18;;;21437:34;21508:15;;;21487:19;;;21480:44;12865:15:0::1;21540:19:1::0;;;21533:35;21219:19;;12620:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12904:15;:13;:15::i;:::-;10751:2176:::0;;;;:::o;13603:590::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;-1:-1:-1;;;;;13684:22:0;::::1;13676:96;;;::::0;-1:-1:-1;;;13676:96:0;;22092:2:1;13676:96:0::1;::::0;::::1;22074:21:1::0;22131:2;22111:18;;;22104:30;22170:34;22150:18;;;22143:62;22241:31;22221:18;;;22214:59;22290:19;;13676:96:0::1;21890:425:1::0;13676:96:0::1;-1:-1:-1::0;;;;;13791:16:0;::::1;8658:42;13791:16;;13783:90;;;::::0;-1:-1:-1;;;13783:90:0;;22092:2:1;13783:90:0::1;::::0;::::1;22074:21:1::0;22131:2;22111:18;;;22104:30;22170:34;22150:18;;;22143:62;22241:31;22221:18;;;22214:59;22290:19;;13783:90:0::1;21890:425:1::0;13783:90:0::1;13904:6;::::0;;13884:34:::1;::::0;-1:-1:-1;;;;;13904:6:0;;::::1;::::0;13884:19:::1;:34::i;:::-;13929:35;13949:8;13959:4;13929:19;:35::i;:::-;14008:1;13998:6:::0;;13988:17:::1;::::0;-1:-1:-1;;;;;13998:6:0::1;13988:9;:17::i;:::-;:21;13985:99;;;14036:6;::::0;14026:46:::1;::::0;-1:-1:-1;;;;;14036:6:0::1;14044:8:::0;14054:17:::1;14036:6:::0;14054:9:::1;:17::i;14026:46::-;;13985:99;14104:6;:17:::0;;-1:-1:-1;;14104:17:0::1;-1:-1:-1::0;;;;;14104:17:0;::::1;::::0;;::::1;::::0;;14137:38:::1;::::0;14104:17;;;;14137:38:::1;::::0;14104:6;14137:38:::1;13603:590:::0;:::o;22106:526::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;22228:10:::1;:21:::0;::::1;::::0;;::::1;22217:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22283:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22270:36:::0;;::::1;;;22217:89;:146;;;;-1:-1:-1::0;22340:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22327:36:::0;;::::1;;;22217:146;22209:155;;;::::0;::::1;;22375:12;22412:9:::0;22390:19:::1;22400:9:::0;22390:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;22375:46;;22449:4;22440:5;:13;;;;22432:22;;;::::0;::::1;;22465:9;:31:::0;;::::1;22545::::0;;::::1;::::0;::::1;::::0;22465;;::::1;::::0;::::1;22545::::0;;;;;;;;;22507:27;;::::1;22545:31:::0;::::1;::::0;;22609:15:::1;22527:7:::0;22609:5;:15:::1;:::i;:::-;22587:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;22106:526:0:o;21240:104::-;21285:7;21312:9;;;;;;;;;-1:-1:-1;;;;;21312:9:0;-1:-1:-1;;;;;21312:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18717:134::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;-1:-1:-1;;;;;18805:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18805:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18717:134::o;20392:248::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;20476:16:::1;::::0;::::1;::::0;::::1;;;20475:17;20467:54;;;::::0;-1:-1:-1;;;20467:54:0;;22711:2:1;20467:54:0::1;::::0;::::1;22693:21:1::0;22750:2;22730:18;;;22723:30;22789:26;22769:18;;;22762:54;22833:18;;20467:54:0::1;22509:348:1::0;20467:54:0::1;-1:-1:-1::0;;;;;20540:28:0;::::1;20563:4;20540:28;;20532:55;;;::::0;-1:-1:-1;;;20532:55:0;;23064:2:1;20532:55:0::1;::::0;::::1;23046:21:1::0;23103:2;23083:18;;;23076:30;23142:16;23122:18;;;23115:44;23176:18;;20532:55:0::1;22862:338:1::0;20532:55:0::1;20598:9;:34:::0;;-1:-1:-1;;;;;20598:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;20392:248::o;15405:198::-;-1:-1:-1;;;;;15495:20:0;;15471:7;15495:20;;;:11;:20;;;;;;;;15491:49;;;-1:-1:-1;;;;;;15524:16:0;;;;;:7;:16;;;;;;;15405:198::o;15491:49::-;-1:-1:-1;;;;;15578:16:0;;;;;;:7;:16;;;;;;15558:37;;:19;:37::i;14201:195::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;14288:6:::1;::::0;;14268:34:::1;::::0;-1:-1:-1;;;;;14288:6:0;;::::1;::::0;14268:19:::1;:34::i;:::-;14330:1;14313:19:::0;;-1:-1:-1;;14313:19:0::1;::::0;;14348:40:::1;::::0;14330:1;;14348:40:::1;::::0;14330:1;;14348:40:::1;14201:195::o:0;17773:500::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;17854:16;17850:416:::1;;-1:-1:-1::0;;;;;17887:13:0;;::::1;17903:5;17887:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17887:21:0::1;::::0;;17923:9:::1;::::0;:32;;;;;::::1;::::0;::::1;23373:74:1::0;;;;23463:18;;;23456:50;;;;17923:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23346:18:1;;17923:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17850:416;17992:17;::::0;:22;17988:136:::1;;18081:6;18061:17;;18043:15;:35;;;;:::i;:::-;:44;18035:73;;;::::0;-1:-1:-1;;;18035:73:0;;23719:2:1;18035:73:0::1;::::0;::::1;23701:21:1::0;23758:2;23738:18;;;23731:30;23797:18;23777;;;23770:46;23833:18;;18035:73:0::1;23517:340:1::0;18035:73:0::1;-1:-1:-1::0;;;;;18138:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18138:20:0::1;18154:4;18138:20:::0;;::::1;::::0;;;18193:15:::1;18173:17;:35:::0;;;18223:9:::1;::::0;:31;;;;;;;::::1;23373:74:1::0;;;;23463:18;;;23456:50;18223:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23346:18:1;;18223:31:0::1;23205:307:1::0;22640:531:0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;22763:10:::1;:21:::0;::::1;::::0;;::::1;22752:32:::0;;::::1;;::::0;::::1;::::0;:89:::1;;-1:-1:-1::0;22818:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22805:36:::0;;::::1;;;22752:89;:146;;;;-1:-1:-1::0;22875:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;22862:36:::0;;::::1;;;22752:146;22744:155;;;::::0;::::1;;22910:12;22947:9:::0;22925:19:::1;22935:9:::0;22925:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;22910:46;;22984:4;22975:5;:13;;;;22967:22;;;::::0;::::1;;23000:10;:32:::0;;::::1;23082::::0;;::::1;::::0;::::1;::::0;23000;;::::1;::::0;::::1;23082::::0;;;;;;;;;23043:28;;::::1;23082:32:::0;::::1;::::0;;23148:15:::1;23064:7:::0;23148:5;:15:::1;:::i;:::-;23125:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;22640:531:0:o;16272:173::-;16336:4;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;16385:9:::1;::::0;16353:62:::1;::::0;16370:4:::1;::::0;-1:-1:-1;;;;;16385:9:0::1;-1:-1:-1::0;;16353:8:0::1;:62::i;:::-;-1:-1:-1::0;16433:4:0::1;16272:173:::0;:::o;29760:563::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;29822:14:::1;::::0;::::1;;29821:15;29813:52;;;::::0;-1:-1:-1;;;29813:52:0;;24064:2:1;29813:52:0::1;::::0;::::1;24046:21:1::0;24103:2;24083:18;;;24076:30;24142:26;24122:18;;;24115:54;24186:18;;29813:52:0::1;23862:348:1::0;29813:52:0::1;29884:16;::::0;::::1;::::0;::::1;;;29876:53;;;::::0;-1:-1:-1;;;29876:53:0;;24417:2:1;29876:53:0::1;::::0;::::1;24399:21:1::0;24456:2;24436:18;;;24429:30;24495:26;24475:18;;;24468:54;24539:18;;29876:53:0::1;24215:348:1::0;29876:53:0::1;29940:42;29970:4;29977;29940:21;:42::i;:::-;30015:6;::::0;29993:35:::1;::::0;-1:-1:-1;;;;;30015:6:0::1;::::0;29993:21:::1;:35::i;:::-;30050:9;::::0;;;::::1;-1:-1:-1::0;;;;;30050:9:0::1;30039:99;;30090:9;:36:::0;;;::::1;30120:4;30090:36:::0;::::1;;::::0;;30039:99:::1;30152:9;::::0;30172:6:::1;::::0;30227:9:::1;::::0;30152:85:::1;::::0;;;;-1:-1:-1;;;;;30172:6:0;;::::1;30152:85;::::0;::::1;24791:74:1::0;24913:10;30187:12:0::1;24901:23:1::0;24881:18;;;24874:51;24973:18;30209:15:0::1;24961:31:1::0;24941:18;;;24934:59;30227:9:0::1;::::0;;::::1;25009:18:1::0;;;25002:45;30152:9:0;;;::::1;;::::0;:19:::1;::::0;24763::1;;30152:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;30148:101:::0;30259:14:::1;:21:::0;;-1:-1:-1;;30259:21:0::1;30276:4;30259:21;::::0;;30300:15:::1;30291:6;:24:::0;29760:563::o;15002:84::-;15052:13;15076:7;15069:14;;;;;:::i;16990:225::-;189:10;17083:4;17132:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17132:34:0;;;;;;;;;;17083:4;;17100:85;;17123:7;;17132:52;;17169:15;;17132:52;:::i;15611:167::-;15689:4;15706:42;189:10;15730:9;15741:6;15706:9;:42::i;:::-;-1:-1:-1;15766:4:0;;15611:167;-1:-1:-1;;;15611:167:0:o;23956:277::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;24097:11:::1;24101:7:::0;24097:2:::1;:11;:::i;:::-;24088:20;::::0;:6;:20:::1;:::i;:::-;24076:9;:32:::0;24142:12:::1;24146:8:::0;24142:2:::1;:12;:::i;:::-;24132:22;::::0;:7;:22:::1;:::i;:::-;24119:10;:35:::0;24173:9:::1;::::0;24186:10:::1;-1:-1:-1::0;24173:23:0;::::1;::::0;:51:::1;;;24214:10;24200;;:24;;24173:51;24165:60;;;::::0;::::1;23738:210:::0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;23823:7:::1;:29:::0;;::::1;23863::::0;;::::1;::::0;::::1;-1:-1:-1::0;;23863:29:0;;;23823;;::::1;23863::::0;::::1;::::0;;23919:21:::1;23883:9:::0;23843;23919:21:::1;:::i;:::-;23903:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;23738:210:0:o;20981:118::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;21055:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;360:55:1;;;21055:36:0::1;::::0;::::1;342:74:1::0;21055:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;315:18:1;;21055:36:0::1;196:226:1::0;24860:165:0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;24935:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;24935:30:0;;::::1;;::::0;;24981:36:::1;::::0;::::1;::::0;::::1;::::0;24957:8;4228:14:1;4221:22;4203:41;;4191:2;4176:18;;4063:187;24981:36:0::1;;;;;;;;24860:165:::0;:::o;21952:142::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;22039:2:::1;22029:6;:12;;;;22021:21;;;::::0;::::1;;22053:9;::::0;:33:::1;::::0;;;;5263:4:1;5251:17;;22053:33:0::1;::::0;::::1;5233:36:1::0;22053:9:0;;;::::1;-1:-1:-1::0;;;;;22053:9:0::1;::::0;:25:::1;::::0;5206:18:1;;22053:33:0::1;5091:184:1::0;17223:542:0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;17294:20:::1;17327:9;17294:43;;17348:16;17378:10;-1:-1:-1::0;;;;;17378:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17367:40:0::1;;17416:4;17423:10;-1:-1:-1::0;;;;;17423:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17367:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20865:15:1;;;17367:74:0::1;::::0;::::1;20847:34:1::0;20917:15;;20897:18;;;20890:43;20759:18;;17367:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17348:93:::0;-1:-1:-1;;;;;;17456:22:0;::::1;17452:200;;17515:10;-1:-1:-1::0;;;;;17515:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17504:43:0::1;;17556:4;17563:10;-1:-1:-1::0;;;;;17563:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17504:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;20865:15:1;;;17504:77:0::1;::::0;::::1;20847:34:1::0;20917:15;;20897:18;;;20890:43;20759:18;;17504:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17495:6;:86:::0;;-1:-1:-1;;17495:86:0::1;-1:-1:-1::0;;;;;17495:86:0;;;::::1;::::0;;;::::1;::::0;;17452:200:::1;;;17623:6;:17:::0;;-1:-1:-1;;17623:17:0::1;-1:-1:-1::0;;;;;17623:17:0;::::1;;::::0;;17452:200:::1;17662:9;:22:::0;;-1:-1:-1;;17662:22:0::1;-1:-1:-1::0;;;;;17662:22:0;::::1;::::0;;::::1;::::0;;;17695:62:::1;::::0;17712:4:::1;::::0;-1:-1:-1;;17695:8:0::1;:62::i;24725:127::-:0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;24802:11:::1;:42:::0;;-1:-1:-1;;24802:42:0::1;-1:-1:-1::0;;;;;24802:42:0;;;::::1;::::0;;;::::1;::::0;;24725:127::o;30331:183::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;30398:16:::1;::::0;::::1;::::0;::::1;;;30397:17;30389:58;;;::::0;-1:-1:-1;;;30389:58:0;;25396:2:1;30389:58:0::1;::::0;::::1;25378:21:1::0;25435:2;25415:18;;;25408:30;25474;25454:18;;;25447:58;25522:18;;30389:58:0::1;25194:352:1::0;30389:58:0::1;13554:7:::0;13581:6;;30458:48:::1;::::0;-1:-1:-1;;;;;13581:6:0;;;;30484:21:::1;30458:48:::0;::::1;;;::::0;30484:21;;30458:48;13554:7;30458:48;30484:21;13581:6;30458:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30331:183::o:0;20648:145::-;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;20738:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23391:55:1;;;20738:47:0::1;::::0;::::1;23373:74:1::0;23490:14;;23483:22;23463:18;;;23456:50;20738:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23346:18:1;;20738:47:0::1;23205:307:1::0;24428:289:0;10055:6;;-1:-1:-1;;;;;10055:6:0;189:10;10055:22;10047:52;;;;-1:-1:-1;;;10047:52:0;;11888:2:1;10047:52:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:47;12003:18;;10047:52:0;11686:341:1;10047:52:0;24628:16:::1;24608;24598:7;;:26;;;;:::i;:::-;24597:47;;;;:::i;:::-;24581:13;:63:::0;24669:7:::1;::::0;24696:13;;24669:23:::1;::::0;24679:13;;24669:23:::1;:::i;:::-;24668:41;;;;:::i;:::-;24655:10;:54:::0;-1:-1:-1;;;;24428:289:0:o;21107:125::-;21192:9;;:32;;;;;-1:-1:-1;;;;;360:55:1;;;21192:32:0;;;342:74:1;21168:4:0;;21192:9;;;;;:23;;315:18:1;;21192:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15955:309::-;-1:-1:-1;;;;;16049:20:0;;16041:52;;;;-1:-1:-1;;;16041:52:0;;26003:2:1;16041:52:0;;;25985:21:1;26042:2;26022:18;;;26015:30;26081:21;26061:18;;;26054:49;26120:18;;16041:52:0;25801:343:1;16041:52:0;-1:-1:-1;;;;;16112:21:0;;16104:53;;;;-1:-1:-1;;;16104:53:0;;26003:2:1;16104:53:0;;;25985:21:1;26042:2;26022:18;;;26015:30;26081:21;26061:18;;;26054:49;26120:18;;16104:53:0;25801:343:1;16104:53:0;-1:-1:-1;;;;;16170:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16223:33;;160:25:1;;;16223:33:0;;133:18:1;16223:33:0;;;;;;;15955:309;;;:::o;25364:2481::-;25443:4;-1:-1:-1;;;;;25468:18:0;;25460:68;;;;-1:-1:-1;;;25460:68:0;;26351:2:1;25460:68:0;;;26333:21:1;26390:2;26370:18;;;26363:30;26429:34;26409:18;;;26402:62;26500:7;26480:18;;;26473:35;26525:19;;25460:68:0;26149:401:1;25460:68:0;-1:-1:-1;;;;;25547:16:0;;25539:64;;;;-1:-1:-1;;;25539:64:0;;26757:2:1;25539:64:0;;;26739:21:1;26796:2;26776:18;;;26769:30;26835:34;26815:18;;;26808:62;26906:5;26886:18;;;26879:33;26929:19;;25539:64:0;26555:399:1;25539:64:0;25631:1;25622:6;:10;25614:64;;;;-1:-1:-1;;;25614:64:0;;27161:2:1;25614:64:0;;;27143:21:1;27200:2;27180:18;;;27173:30;27239:34;27219:18;;;27212:62;27310:11;27290:18;;;27283:39;27339:19;;25614:64:0;26959:405:1;25614:64:0;-1:-1:-1;;;;;25722:25:0;;25689:12;25722:25;;;:19;:25;;;;;;25704:4;;25722:25;;;:52;;-1:-1:-1;;;;;;25751:23:0;;;;;;:19;:23;;;;;;;;25722:52;25719:98;;;-1:-1:-1;25800:5:0;25719:98;25832:20;25843:4;25849:2;25832:10;:20::i;:::-;25829:1491;;;25873:14;;;;25869:89;;25908:34;;-1:-1:-1;;;25908:34:0;;27571:2:1;25908:34:0;;;27553:21:1;27610:2;27590:18;;;27583:30;27649:26;27629:18;;;27622:54;27693:18;;25908:34:0;27369:348:1;25869:89:0;25994:9;;:37;;;;;25972:19;;-1:-1:-1;;;;;25994:9:0;;:23;;:37;;26018:6;;26026:4;;25994:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25994:37:0;;;;;;;;;;;;:::i;:::-;26032:1;25994:40;;;;;;;;:::i;:::-;;;;;;;25972:62;;26053:19;;;;;;;;;;;26049:1260;;;-1:-1:-1;;;;;26096:13:0;;;;;;:7;:13;;;;;;;;26093:1201;;;26138:18;;;;26134:537;;;26207:6;;:16;;26216:7;26207:16;:::i;:::-;26188:15;:35;26185:373;;26279:11;26264;:26;;26256:35;;;;;;26093:1201;;26185:373;26348:6;;:17;;26357:8;26348:17;:::i;:::-;26329:15;:36;26325:233;;26421:10;26406:11;:25;;26398:34;;;;;26325:233;26520:9;;26505:11;:24;;26497:33;;;;;26093:1201;-1:-1:-1;;;;;26700:11:0;;;;;;:7;:11;;;;;;;;26696:598;;;26740:18;;;;26736:539;;;26809:6;;:16;;26818:7;26809:16;:::i;:::-;26790:15;:35;26787:374;;26881:11;26866;:26;;26858:35;;;;;26787:374;26950:6;;:17;;26959:8;26950:17;:::i;:::-;26931:15;:36;26927:234;;27023:10;27008:11;:25;;27000:34;;;;;26927:234;27122:10;;27107:11;:25;;27099:34;;;;;26736:539;27240:10;;27225:11;:25;;27217:34;;;;;;25854:1466;25829:1491;-1:-1:-1;;;;;27336:11:0;;;;;;:7;:11;;;;;;;;27332:443;;;27369:6;;;;27368:7;:47;;;;-1:-1:-1;27396:19:0;;;;;;;27368:47;27364:394;;;27450:28;27481:24;27499:4;27481:9;:24::i;:::-;27450:55;;27552:13;;27528:20;:37;27524:219;;27617:10;;27593:20;:34;27590:77;;-1:-1:-1;27654:10:0;;27590:77;27689:34;27702:20;27689:12;:34::i;:::-;27431:327;27364:394;27793:44;27811:4;27817:2;27821:6;27829:7;27793:17;:44::i;:::-;27786:51;25364:2481;-1:-1:-1;;;;;25364:2481:0:o;33744:524::-;33824:7;;33860;;33786;;33824;33786;33878:280;33900:9;:16;33896:20;;;;33878:280;;;33966:7;33942;:21;33950:9;33960:1;33950:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33950:12:0;33942:21;;;;;;;;;;;;;:31;;:66;;;34001:7;33977;:21;33985:9;33995:1;33985:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33985:12:0;33977:21;;;;;;;;;;;;;:31;33942:66;33938:96;;;34027:7;;34017;;:17;;;;:::i;:::-;34010:24;;;;;33744:524;:::o;33938:96::-;34069:7;:21;34077:9;34087:1;34077:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34077:12:0;34069:21;;;;;;;;;;;;;34059:31;;:7;:31;:::i;:::-;34049:41;;34125:7;:21;34133:9;34143:1;34133:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34133:12:0;34125:21;;;;;;;;;;;;;34115:31;;:7;:31;:::i;:::-;34105:41;-1:-1:-1;33918:3:0;;;;:::i;:::-;;;;33878:280;;;;34192:7;;34182;;:17;;;;:::i;:::-;34172:7;:27;34168:57;;;34218:7;;34208;;:17;;;;:::i;:::-;34201:24;;;;33744:524;:::o;34168:57::-;34243:17;34253:7;34243;:17;:::i;25033:323::-;25101:4;13581:6;;-1:-1:-1;;;;;25125:15:0;;;13581:6;;25125:15;;;;:45;;-1:-1:-1;13554:7:0;13581:6;-1:-1:-1;;;;;25157:13:0;;;13581:6;;25157:13;;25125:45;:84;;;;-1:-1:-1;;;;;;25188:21:0;;;;;;:17;:21;;;;;;;;25187:22;25125:84;:125;;;;-1:-1:-1;;;;;;25227:23:0;;;;;;:17;:23;;;;;;;;25226:24;25125:125;:152;;;;-1:-1:-1;;;;;;25267:10:0;;8658:42;25267:10;;25125:152;:185;;;;-1:-1:-1;;;;;;25294:16:0;;;;25125:185;:223;;;;-1:-1:-1;;;;;;25327:21:0;;25343:4;25327:21;;25118:230;25033:323;-1:-1:-1;;;25033:323:0:o;27853:1383::-;9949:6;:13;;-1:-1:-1;;9949:13:0;9958:4;9949:13;;;27940:7:::1;:13:::0;::::1;::::0;;;::::1;;27936:44;;27973:7;;27936:44;28015:4;27995:26;::::0;;;:11:::1;:26;::::0;;;;;;;28030:9:::1;::::0;-1:-1:-1;;;;;28030:9:0::1;27995:46:::0;;;;;;;;-1:-1:-1;;27995:67:0::1;27992:165;;28099:4;28079:26;::::0;;;:11:::1;:26;::::0;;;;;;;28114:9:::1;::::0;-1:-1:-1;;;;;28114:9:0::1;28079:46:::0;;;;;;;-1:-1:-1;;28079:66:0;;27992:165:::1;28235:7;:13:::0;28169:17:::1;::::0;28252:1:::1;::::0;28235:13:::1;::::0;;::::1;::::0;::::1;::::0;28191:40:::1;::::0;28214:17:::1;28191:20:::0;:40:::1;:::i;:::-;28190:58;;;;:::i;:::-;28189:64;;;;:::i;:::-;28169:84:::0;-1:-1:-1;28266:20:0::1;28289:32;28169:84:::0;28289:20;:32:::1;:::i;:::-;28334:9;::::0;:219:::1;::::0;;;;28266:55;;-1:-1:-1;;;;;;28334:9:0::1;::::0;:60:::1;::::0;:219:::1;::::0;28266:55;;28334:9:::1;::::0;28480:4:::1;::::0;28507::::1;::::0;28527:15:::1;::::0;28334:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28640:7:0::1;:13:::0;28566:24:::1;::::0;-1:-1:-1;28657:1:0::1;::::0;-1:-1:-1;28640:13:0::1;::::0;;::::1;::::0;::::1;::::0;28595:41:::1;::::0;28619:17:::1;28595:21;:41;:::i;:::-;28594:59;;;;:::i;:::-;28593:65;;;;:::i;:::-;28566:92:::0;-1:-1:-1;28675:13:0;;28671:396:::1;;28705:9;::::0;:276:::1;::::0;;;;28782:4:::1;28705:276;::::0;::::1;21308:34:1::0;21358:18;;;21351:34;;;28705:9:0::1;21401:18:1::0;;;21394:34;;;21444:18;;;21437:34;8658:42:0::1;21487:19:1::0;;;21480:44;28951:15:0::1;21540:19:1::0;;;21533:35;-1:-1:-1;;;;;28705:9:0;;::::1;::::0;:25:::1;::::0;28738:16;;21219:19:1;;28705:276:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29001:54:0::1;::::0;;30470:25:1;;;30526:2;30511:18;;30504:34;;;30554:18;;;30547:34;;;29001:54:0::1;::::0;-1:-1:-1;30458:2:1;30443:18;29001:54:0::1;;;;;;;28671:396;29105:1;29081:21;:25;:66;;;;-1:-1:-1::0;29126:7:0::1;:17:::0;29146:1:::1;::::0;29110:33:::1;::::0;29126:17:::1;::::0;;::::1;::::0;29110:13;;::::1;;:33;:::i;:::-;:37;;;29081:66;29077:152;;;29164:11;:21:::0;:53:::1;::::0;-1:-1:-1;;;;;29164:21:0;;::::1;::::0;29195::::1;29164:53:::0;::::1;;;::::0;:21:::1;:53:::0;:21;:53;29195:21;29164;:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29077:152;27925:1311;;;9973:1;-1:-1:-1::0;9985:6:0;:14;;-1:-1:-1;;9985:14:0;;;27853:1383::o;30723:1302::-;30846:16;;30824:4;;30846:16;;;;;30841:221;;30879:28;30898:4;30904:2;30879:18;:28::i;:::-;30927:16;;;;;;;30926:17;:41;;;;;30947:20;30958:4;30964:2;30947:10;:20::i;:::-;30922:129;;;30988:47;;-1:-1:-1;;;30988:47:0;;30794:2:1;30988:47:0;;;30776:21:1;30833:2;30813:18;;;30806:30;30872:34;30852:18;;;30845:62;30943:7;30923:18;;;30916:35;30968:19;;30988:47:0;30592:401:1;30922:129:0;31074:25;31102:38;31113:4;31119:2;31123:7;31132;31102:10;:38::i;:::-;31185:14;;;;-1:-1:-1;;;;;31169:13:0;;;;;;:7;:13;;;;;;31074:66;;-1:-1:-1;31169:30:0;;;:::i;:::-;-1:-1:-1;;;;;31153:13:0;;;;;;;:7;:13;;;;;;:46;;;;31238:22;;;;31224:11;;;;;;;;;;:36;;31238:22;31224:36;:::i;:::-;-1:-1:-1;;;;;31210:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;31277:17;;;;;:11;:17;;;;;;;31273:89;;;-1:-1:-1;;;;;31327:13:0;;;;;;:7;:13;;;;;;:23;;31343:7;;31327:23;:::i;:::-;-1:-1:-1;;;;;31311:13:0;;;;;;:7;:13;;;;;:39;31273:89;-1:-1:-1;;;;;31376:15:0;;;;;;:11;:15;;;;;;;;31372:98;;;31436:22;;-1:-1:-1;;;;;31422:11:0;;31436:22;31422:11;;;:7;:11;;;;;;:36;;31436:22;31422:36;:::i;:::-;-1:-1:-1;;;;;31408:11:0;;;;;;:7;:11;;;;;:50;31372:98;31486:12;;;;:16;31482:353;;31585:10;:8;:10::i;:::-;31570:6;:12;;;:25;;;;:::i;:::-;31560:4;31544:22;;;;:7;:22;;;;;;:52;;;;:::i;:::-;31535:4;31519:22;;;;:7;:22;;;;;;;;:77;;;;31614:11;:26;;;;;;31611:110;;;31709:12;;;;;31700:4;31684:22;;;;:7;:22;;;;;;;:37;;31709:12;31684:37;:::i;:::-;31675:4;31659:22;;;;:7;:22;;;;;:62;31611:110;31764:4;-1:-1:-1;;;;;31741:43:0;31750:4;-1:-1:-1;;;;;31741:43:0;;31771:6;:12;;;31741:43;;;;160:25:1;;148:2;133:18;;14:177;31741:43:0;;;;;;;;31482:353;31863:1;31849:6;:11;;;:15;:34;;;;31882:1;31868:6;:11;;;:15;31849:34;31845:89;;;31911:6;:11;;;31900:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31845:89:0;31968:2;-1:-1:-1;;;;;31953:42:0;31962:4;-1:-1:-1;;;;;31953:42:0;;31972:6;:22;;;31953:42;;;;160:25:1;;148:2;133:18;;14:177;31953:42:0;;;;;;;;-1:-1:-1;32013:4:0;;30723:1302;-1:-1:-1;;;;;30723:1302:0:o;29244:508::-;29326:16;;;;;;;29325:17;29317:65;;;;-1:-1:-1;;;29317:65:0;;31200:2:1;29317:65:0;;;31182:21:1;31239:2;31219:18;;;31212:30;31278:34;31258:18;;;31251:62;31349:5;31329:18;;;31322:33;31372:19;;29317:65:0;30998:399:1;29317:65:0;29398:20;29409:4;29415:2;29398:10;:20::i;:::-;29397:21;:37;;;;-1:-1:-1;29428:6:0;;-1:-1:-1;;;;;29422:12:0;;;29428:6;;29422:12;29397:37;29393:352;;;-1:-1:-1;;;;;29451:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;29451:30:0;29477:4;29451:30;;;29496:16;:23;;-1:-1:-1;;29496:23:0;29451:30;29496:23;;;;;29545:9;;;;29534:107;;29589:9;:36;;;;29619:4;29589:36;;;;;29534:107;29655:19;:26;;-1:-1:-1;;29655:26:0;;;;;29701:32;;-1:-1:-1;4203:41:1;;29701:32:0;;4191:2:1;4176:18;29701:32:0;;;;;;;29244:508;;:::o;32033:1703::-;32127:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32127:18:0;32158:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32158:25:0;32194:19;32216:10;:8;:10::i;:::-;32194:32;-1:-1:-1;32256:21:0;32194:32;32256:7;:21;:::i;:::-;32239:14;;;:38;32294:20;32305:4;32311:2;32294:10;:20::i;:::-;32290:315;;;32362:9;;:38;;;;;-1:-1:-1;;;;;31683:15:1;;;32362:38:0;;;31665:34:1;31735:15;;;31715:18;;;31708:43;31767:18;;;31760:34;;;32331:12:0;;32362:9;;;;;:19;;31577:18:1;;32362:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;32362:38:0;;;;;;;;-1:-1:-1;;32362:38:0;;;;;;;;;;;;:::i;:::-;;;32358:164;;32498:8;;;32358:164;32451:5;-1:-1:-1;32542:7:0;32538:56;;32570:8;;;32538:56;32316:289;32290:315;32620:7;32617:991;;;-1:-1:-1;;;;;32648:11:0;;;;;;:7;:11;;;;;;;;32644:474;;;32703:10;:18;32680:12;:41;;32703:18;;;;-1:-1:-1;;32740:45:0;;;;;;;32765:20;;;;;32740:45;;;;;;;;32644:474;;;-1:-1:-1;;;;;32811:13:0;;;;;;:7;:13;;;;;;;;32807:311;;;32868:9;:17;32845:12;:40;;32868:17;;;;-1:-1:-1;;32904:44:0;;;;;;;32929:19;;;;;32904:44;;;;;;;;32807:311;;;33012:14;:22;32989:12;:45;;33012:22;;;;-1:-1:-1;;33053:49:0;;;;;;;33078:24;;;;;33053:49;;;;;;;;32807:311;33183:10;:27;33159:12;:20;33183:27;;;;;;;;33149:30;;33159:20;33149:7;:30;:::i;:::-;33148:62;;;;:::i;:::-;33134:11;;;:76;33277:10;:27;33251:12;:22;33277:27;;;;;;;;33241:32;;33251:22;;;;33241:7;:32;:::i;:::-;33240:64;;;;:::i;:::-;33225:12;;;:79;;;33355:11;;;;:26;;33225:79;33355:26;:::i;:::-;33344:38;;:7;:38;:::i;:::-;33319:63;;33413:11;;;;:25;;33427:11;;33413:25;:::i;:::-;33399:11;;;:39;32617:991;;;33485:1;33471:11;;;:15;;;33501:12;;;:16;;;33532:32;;;33581:11;;;:15;32617:991;33691:11;33676:6;:12;;;:26;;;;:::i;:::-;33661:6;:11;;;:42;;;;:::i;:::-;33643:6;:14;;;:61;;;;:::i;:::-;33618:22;;;:86;-1:-1:-1;33618:22:0;32033:1703;-1:-1:-1;;;;;32033:1703:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;2649:656::-;2761:4;2790:2;2819;2808:9;2801:21;2851:6;2845:13;2894:6;2889:2;2878:9;2874:18;2867:34;2919:1;2929:140;2943:6;2940:1;2937:13;2929:140;;;3038:14;;;3034:23;;3028:30;3004:17;;;3023:2;3000:26;2993:66;2958:10;;2929:140;;;3087:6;3084:1;3081:13;3078:91;;;3157:1;3152:2;3143:6;3132:9;3128:22;3124:31;3117:42;3078:91;-1:-1:-1;3221:2:1;3209:15;-1:-1:-1;;3205:88:1;3190:104;;;;3296:2;3186:113;;2649:656;-1:-1:-1;;;2649:656:1:o;3558:180::-;3617:6;3670:2;3658:9;3649:7;3645:23;3641:32;3638:52;;;3686:1;3683;3676:12;3638:52;-1:-1:-1;3709:23:1;;3558:180;-1:-1:-1;3558:180:1:o;3743:315::-;3811:6;3819;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;3927:9;3914:23;3946:31;3971:5;3946:31;:::i;:::-;3996:5;4048:2;4033:18;;;;4020:32;;-1:-1:-1;;;3743:315:1:o;4255:382::-;4320:6;4328;4381:2;4369:9;4360:7;4356:23;4352:32;4349:52;;;4397:1;4394;4387:12;4349:52;4436:9;4423:23;4455:31;4480:5;4455:31;:::i;:::-;4505:5;-1:-1:-1;4562:2:1;4547:18;;4534:32;4575:30;4534:32;4575:30;:::i;5280:159::-;5347:20;;5407:6;5396:18;;5386:29;;5376:57;;5429:1;5426;5419:12;5376:57;5280:159;;;:::o;5444:328::-;5518:6;5526;5534;5587:2;5575:9;5566:7;5562:23;5558:32;5555:52;;;5603:1;5600;5593:12;5555:52;5626:28;5644:9;5626:28;:::i;:::-;5616:38;;5673:37;5706:2;5695:9;5691:18;5673:37;:::i;:::-;5663:47;;5729:37;5762:2;5751:9;5747:18;5729:37;:::i;:::-;5719:47;;5444:328;;;;;:::o;5777:456::-;5854:6;5862;5870;5923:2;5911:9;5902:7;5898:23;5894:32;5891:52;;;5939:1;5936;5929:12;5891:52;5978:9;5965:23;5997:31;6022:5;5997:31;:::i;:::-;6047:5;-1:-1:-1;6104:2:1;6089:18;;6076:32;6117:33;6076:32;6117:33;:::i;:::-;5777:456;;6169:7;;-1:-1:-1;;;6223:2:1;6208:18;;;;6195:32;;5777:456::o;6238:647::-;6312:6;6320;6328;6336;6389:3;6377:9;6368:7;6364:23;6360:33;6357:53;;;6406:1;6403;6396:12;6357:53;6445:9;6432:23;6464:28;6486:5;6464:28;:::i;:::-;6511:5;-1:-1:-1;6568:2:1;6553:18;;6540:32;6581:30;6540:32;6581:30;:::i;:::-;6630:7;-1:-1:-1;6689:2:1;6674:18;;6661:32;6702:30;6661:32;6702:30;:::i;:::-;6751:7;-1:-1:-1;6810:2:1;6795:18;;6782:32;6823:30;6782:32;6823:30;:::i;:::-;6238:647;;;;-1:-1:-1;6238:647:1;;-1:-1:-1;;6238:647:1:o;6890:247::-;6949:6;7002:2;6990:9;6981:7;6977:23;6973:32;6970:52;;;7018:1;7015;7008:12;6970:52;7057:9;7044:23;7076:31;7101:5;7076:31;:::i;7142:376::-;7204:6;7212;7265:2;7253:9;7244:7;7240:23;7236:32;7233:52;;;7281:1;7278;7271:12;7233:52;7320:9;7307:23;7339:28;7361:5;7339:28;:::i;7523:662::-;7577:5;7630:3;7623:4;7615:6;7611:17;7607:27;7597:55;;7648:1;7645;7638:12;7597:55;7684:6;7671:20;7710:4;7734:60;7750:43;7790:2;7750:43;:::i;7734:60::-;7828:15;;;7914:1;7910:10;;;;7898:23;;7894:32;;;7859:12;;;;7938:15;;;7935:35;;;7966:1;7963;7956:12;7935:35;8002:2;7994:6;7990:15;8014:142;8030:6;8025:3;8022:15;8014:142;;;8096:17;;8084:30;;8134:12;;;;8047;;8014:142;;8190:957;8351:6;8359;8367;8375;8428:3;8416:9;8407:7;8403:23;8399:33;8396:53;;;8445:1;8442;8435:12;8396:53;8485:9;8472:23;8514:18;8555:2;8547:6;8544:14;8541:34;;;8571:1;8568;8561:12;8541:34;8594:61;8647:7;8638:6;8627:9;8623:22;8594:61;:::i;:::-;8584:71;;8708:2;8697:9;8693:18;8680:32;8664:48;;8737:2;8727:8;8724:16;8721:36;;;8753:1;8750;8743:12;8721:36;8776:63;8831:7;8820:8;8809:9;8805:24;8776:63;:::i;:::-;8766:73;;8892:2;8881:9;8877:18;8864:32;8848:48;;8921:2;8911:8;8908:16;8905:36;;;8937:1;8934;8927:12;8905:36;;8960:63;9015:7;9004:8;8993:9;8989:24;8960:63;:::i;:::-;8950:73;;;9073:2;9062:9;9058:18;9045:32;9086:31;9111:5;9086:31;:::i;9152:385::-;9238:6;9246;9254;9262;9315:3;9303:9;9294:7;9290:23;9286:33;9283:53;;;9332:1;9329;9322:12;9283:53;-1:-1:-1;;9355:23:1;;;9425:2;9410:18;;9397:32;;-1:-1:-1;9476:2:1;9461:18;;9448:32;;9527:2;9512:18;9499:32;;-1:-1:-1;9152:385:1;-1:-1:-1;9152:385:1:o;9542:256::-;9608:6;9616;9669:2;9657:9;9648:7;9644:23;9640:32;9637:52;;;9685:1;9682;9675:12;9637:52;9708:28;9726:9;9708:28;:::i;:::-;9698:38;;9755:37;9788:2;9777:9;9773:18;9755:37;:::i;:::-;9745:47;;9542:256;;;;;:::o;9803:241::-;9859:6;9912:2;9900:9;9891:7;9887:23;9883:32;9880:52;;;9928:1;9925;9918:12;9880:52;9967:9;9954:23;9986:28;10008:5;9986:28;:::i;10419:114::-;10503:4;10496:5;10492:16;10485:5;10482:27;10472:55;;10523:1;10520;10513:12;10538:243;10595:6;10648:2;10636:9;10627:7;10623:23;10619:32;10616:52;;;10664:1;10661;10654:12;10616:52;10703:9;10690:23;10722:29;10745:5;10722:29;:::i;10786:388::-;10854:6;10862;10915:2;10903:9;10894:7;10890:23;10886:32;10883:52;;;10931:1;10928;10921:12;10883:52;10970:9;10957:23;10989:31;11014:5;10989:31;:::i;:::-;11039:5;-1:-1:-1;11096:2:1;11081:18;;11068:32;11109:33;11068:32;11109:33;:::i;12032:764::-;12244:2;12256:21;;;12326:13;;12229:18;;;12348:22;;;12196:4;;12423;;12401:2;12386:18;;;12450:15;;;12196:4;12493:218;12507:6;12504:1;12501:13;12493:218;;;12572:13;;-1:-1:-1;;;;;12568:62:1;12556:75;;12651:12;;;;12686:15;;;;12529:1;12522:9;12493:218;;;-1:-1:-1;;;12774:14:1;;12767:22;12747:18;;12740:50;;;;-1:-1:-1;12728:3:1;12032:764;-1:-1:-1;12032:764:1:o;12801:437::-;12880:1;12876:12;;;;12923;;;12944:61;;12998:4;12990:6;12986:17;12976:27;;12944:61;13051:2;13043:6;13040:14;13020:18;13017:38;13014:218;;;13088:77;13085:1;13078:88;13189:4;13186:1;13179:15;13217:4;13214:1;13207:15;13014:218;;12801:437;;;:::o;14293:184::-;14345:77;14342:1;14335:88;14442:4;14439:1;14432:15;14466:4;14463:1;14456:15;14482:184;14534:77;14531:1;14524:88;14631:4;14628:1;14621:15;14655:4;14652:1;14645:15;14671:184;14723:77;14720:1;14713:88;14820:4;14817:1;14810:15;14844:4;14841:1;14834:15;14860:125;14900:4;14928:1;14925;14922:8;14919:34;;;14933:18;;:::i;:::-;-1:-1:-1;14970:9:1;;14860:125::o;14990:195::-;15029:3;-1:-1:-1;;15053:5:1;15050:77;15047:103;;;15130:18;;:::i;:::-;-1:-1:-1;15177:1:1;15166:13;;14990:195::o;15190:247::-;15258:6;15311:2;15299:9;15290:7;15286:23;15282:32;15279:52;;;15327:1;15324;15317:12;15279:52;15359:9;15353:16;15378:29;15401:5;15378:29;:::i;15442:224::-;15481:3;15509:6;15542:2;15539:1;15535:10;15572:2;15569:1;15565:10;15603:3;15599:2;15595:12;15590:3;15587:21;15584:47;;;15611:18;;:::i;:::-;15647:13;;15442:224;-1:-1:-1;;;;15442:224:1:o;15671:217::-;15710:4;15739:6;15795:10;;;;15765;;15817:12;;;15814:38;;;15832:18;;:::i;:::-;15869:13;;15671:217;-1:-1:-1;;;15671:217:1:o;16329:128::-;16369:3;16400:1;16396:6;16393:1;16390:13;16387:39;;;16406:18;;:::i;:::-;-1:-1:-1;16442:9:1;;16329:128::o;16873:184::-;16925:77;16922:1;16915:88;17022:4;17019:1;17012:15;17046:4;17043:1;17036:15;17062:120;17102:1;17128;17118:35;;17133:18;;:::i;:::-;-1:-1:-1;17167:9:1;;17062:120::o;18503:482::-;18592:1;18635:5;18592:1;18649:330;18670:7;18660:8;18657:21;18649:330;;;18789:4;-1:-1:-1;;18717:77:1;18711:4;18708:87;18705:113;;;18798:18;;:::i;:::-;18848:7;18838:8;18834:22;18831:55;;;18868:16;;;;18831:55;18947:22;;;;18907:15;;;;18649:330;;;18653:3;18503:482;;;;;:::o;18990:866::-;19039:5;19069:8;19059:80;;-1:-1:-1;19110:1:1;19124:5;;19059:80;19158:4;19148:76;;-1:-1:-1;19195:1:1;19209:5;;19148:76;19240:4;19258:1;19253:59;;;;19326:1;19321:130;;;;19233:218;;19253:59;19283:1;19274:10;;19297:5;;;19321:130;19358:3;19348:8;19345:17;19342:43;;;19365:18;;:::i;:::-;-1:-1:-1;;19421:1:1;19407:16;;19436:5;;19233:218;;19535:2;19525:8;19522:16;19516:3;19510:4;19507:13;19503:36;19497:2;19487:8;19484:16;19479:2;19473:4;19470:12;19466:35;19463:77;19460:159;;;-1:-1:-1;19572:19:1;;;19604:5;;19460:159;19651:34;19676:8;19670:4;19651:34;:::i;:::-;19781:6;-1:-1:-1;;19709:79:1;19700:7;19697:92;19694:118;;;19792:18;;:::i;:::-;19830:20;;18990:866;-1:-1:-1;;;18990:866:1:o;19861:140::-;19919:5;19948:47;19989:4;19979:8;19975:19;19969:4;19948:47;:::i;20006:228::-;20046:7;20172:1;-1:-1:-1;;20100:74:1;20097:1;20094:81;20089:1;20082:9;20075:17;20071:105;20068:131;;;20179:18;;:::i;:::-;-1:-1:-1;20219:9:1;;20006:228::o;20239:112::-;20271:1;20297;20287:35;;20302:18;;:::i;:::-;-1:-1:-1;20336:9:1;;20239:112::o;20356:251::-;20426:6;20479:2;20467:9;20458:7;20454:23;20450:32;20447:52;;;20495:1;20492;20485:12;20447:52;20527:9;20521:16;20546:31;20571:5;20546:31;:::i;21579:306::-;21667:6;21675;21683;21736:2;21724:9;21715:7;21711:23;21707:32;21704:52;;;21752:1;21749;21742:12;21704:52;21781:9;21775:16;21765:26;;21831:2;21820:9;21816:18;21810:25;21800:35;;21875:2;21864:9;21860:18;21854:25;21844:35;;21579:306;;;;;:::o;22320:184::-;22390:6;22443:2;22431:9;22422:7;22418:23;22414:32;22411:52;;;22459:1;22456;22449:12;22411:52;-1:-1:-1;22482:16:1;;22320:184;-1:-1:-1;22320:184:1:o;25058:131::-;25118:5;25147:36;25174:8;25168:4;25147:36;:::i;25551:245::-;25618:6;25671:2;25659:9;25650:7;25646:23;25642:32;25639:52;;;25687:1;25684;25677:12;25639:52;25719:9;25713:16;25738:28;25760:5;25738:28;:::i;27722:518::-;27783:3;27821:5;27815:12;27848:6;27843:3;27836:19;27874:4;27903:2;27898:3;27894:12;27887:19;;27925:5;27922:1;27915:16;27967:2;27964:1;27954:16;27988:1;27998:217;28012:6;28009:1;28006:13;27998:217;;;28077:13;;-1:-1:-1;;;;;28073:62:1;28061:75;;28156:12;;;;28203:1;28191:14;;;;28027:9;27998:217;;;-1:-1:-1;28231:3:1;;27722:518;-1:-1:-1;;;;;27722:518:1:o;28245:337::-;28449:6;28438:9;28431:25;28492:2;28487;28476:9;28472:18;28465:30;28412:4;28512:64;28572:2;28561:9;28557:18;28549:6;28512:64;:::i;28587:881::-;28682:6;28713:2;28756;28744:9;28735:7;28731:23;28727:32;28724:52;;;28772:1;28769;28762:12;28724:52;28805:9;28799:16;28838:18;28830:6;28827:30;28824:50;;;28870:1;28867;28860:12;28824:50;28893:22;;28946:4;28938:13;;28934:27;-1:-1:-1;28924:55:1;;28975:1;28972;28965:12;28924:55;29004:2;28998:9;29027:60;29043:43;29083:2;29043:43;:::i;29027:60::-;29121:15;;;29203:1;29199:10;;;;29191:19;;29187:28;;;29152:12;;;;29227:19;;;29224:39;;;29259:1;29256;29249:12;29224:39;29283:11;;;;29303:135;29319:6;29314:3;29311:15;29303:135;;;29385:10;;29373:23;;29336:12;;;;29416;;;;29303:135;;;29457:5;28587:881;-1:-1:-1;;;;;;;28587:881:1:o;29473:175::-;29510:3;29554:4;29547:5;29543:16;29583:4;29574:7;29571:17;29568:43;;;29591:18;;:::i;:::-;29640:1;29627:15;;29473:175;-1:-1:-1;;29473:175:1:o;29653:610::-;29949:6;29938:9;29931:25;29992:6;29987:2;29976:9;29972:18;29965:34;30035:3;30030:2;30019:9;30015:18;30008:31;29912:4;30056:65;30116:3;30105:9;30101:19;30093:6;30056:65;:::i;:::-;-1:-1:-1;;;;;30157:55:1;;;;30152:2;30137:18;;30130:83;-1:-1:-1;30244:3:1;30229:19;30222:35;30048:73;29653:610;-1:-1:-1;;;29653:610:1:o

Swarm Source

ipfs://4d8fd21a6375791da5d1aa3534ce2b4633cbb31ff529b9a007b3d843b9563fde
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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