ETH Price: $3,270.54 (-4.10%)
Gas: 14 Gwei

Token

Shumo.io (SHUMO)
 

Overview

Max Total Supply

100,000,000,000 SHUMO

Holders

1,326 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
27,089,160.431820114 SHUMO

Value
$0.00
0xe179F75eEB78bFC6F56060b22aFe6a32FC69Af2d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Shumo is a meme coin and holders can vote for SHUMO to squash some supply, or how to use the marketing funds. This could include investing in other projects or NFTs and funneling profits to holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Shumo

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-09
*/

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

/*


  _________.__                          
 /   _____/|  |__  __ __  _____   ____  
 \_____  \ |  |  \|  |  \/     \ /  _ \ 
 /        \|   Y  \  |  /  Y Y  (  <_> )
/_______  /|___|  /____/|__|_|  /\____/ 
        \/      \/            \/        


t.me/ShumoOfficial
https://twitter.com/ShumoOfficial
https://www.shumo.io/
https://medium.com/@Shumoofficial


*/

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 addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint256 _liqAddBlock, 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 removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function getMarketCap(address token) external view returns (uint256);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
    function setTradesBlockDelay(uint8 delay) external;
}

contract Shumo is 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 _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal;

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

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

    Fees public _buyTaxes = Fees({
        reflect: 200,
        liquidity: 500,
        marketing: 300,
        empire: 400,
        totalSwap: 1200
        });

    Fees public _sellTaxes = Fees({
        reflect: 200,
        liquidity: 500,
        marketing: 900,
        empire: 400,
        totalSwap: 1800
        });

    Fees public _transferTaxes = Fees({
        reflect: 200,
        liquidity: 500,
        marketing: 300,
        empire: 400,
        totalSwap: 1200
        });

    Ratios public _ratios = Ratios({
        liquidity: 10,
        marketing: 12,
        empire: 8,
        total: 30
        });

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

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

    struct TaxWallets {
        address payable marketing;
        address payable empire;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x53f9A814ad6BB38101e96f0708b491D70aA00F7D),
        empire: payable(0xC310237250c13443968C429053A2695B15e520D5)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    bool public maxETHTradesEnabled = true;
    uint256 private maxETHBuy = 25*10**16;
    uint256 private maxETHSell = 25*10**16;

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

    bool contractInitialized = false;

    mapping (address => bool) privateSaleHolders;
    mapping (address => uint256) privateSaleSold;
    mapping (address => uint256) privateSaleSellTime;
    uint256 public privateSaleMaxDailySell = 5*10**17;
    uint256 public privateSaleDelay = 24 hours;
    bool public privateSaleLimitsEnabled = true;

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

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

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

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

    function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == amounts.length, "2");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
            _rTotal = (MAX - (MAX % _tTotal));
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 3) / 10000;
        swapAmount = (_tTotal * 5) / 10000;
        contractInitialized = true;     
        _rOwned[_owner] = _rTotal;
        emit Transfer(address(0), _owner, _tTotal);

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

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            _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 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(msg.sender, recipient, amount);
        return true;
    }

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

    function _approve(address sender, address spender, uint256 amount) 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            if(account != lpPair){
                _excluded.push(account);
            }
        } else if (!enabled) {
            require(_isExcluded[account], "Account is already included.");
            if (account == lpPair) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
            } else if(_excluded.length == 1) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _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;
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _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 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 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 >= 200, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTradesBlockDelay(uint8 delay) external onlyOwner {
        require(delay <= 10);
        antiSnipe.setTradesBlockDelay(delay);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 empire) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + empire;
        require(check <= maxBuyTaxes);
        _buyTaxes.reflect = reflect;
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.marketing = marketing;
        _buyTaxes.empire = empire;
        _buyTaxes.totalSwap = check - reflect;
    }

    function setTaxesSell(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 empire) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + empire;
        require(check <= maxBuyTaxes);
        _sellTaxes.reflect = reflect;
        _sellTaxes.liquidity = liquidity;
        _sellTaxes.marketing = marketing;
        _sellTaxes.empire = empire;
        _sellTaxes.totalSwap = check - reflect;
    }

    function setTaxesTransfer(uint16 reflect, uint16 liquidity, uint16 marketing, uint16 empire) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + empire;
        require(check <= maxBuyTaxes);
        _transferTaxes.reflect = reflect;
        _transferTaxes.liquidity = liquidity;
        _transferTaxes.marketing = marketing;
        _transferTaxes.empire = empire;
        _transferTaxes.totalSwap = check - reflect;
    }

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

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

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

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

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

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

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

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

    function setPrivateSaleLimitsEnabled(bool enabled) external onlyOwner {
        privateSaleLimitsEnabled = enabled;
    }

    function setPrivateSalersEnabled(address[] memory accounts, bool enabled) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            privateSaleHolders[accounts[i]] = enabled;
        }
    }

    function setPrivateSaleSettings(uint256 value, uint256 multiplier, uint256 time) external onlyOwner {
        require(value * 10**multiplier >= 5 * 10**17);
        require(time <= 48 hours);
        privateSaleMaxDailySell = value * 10**multiplier;
        privateSaleDelay = time;
    }

    function setETHLimits(uint256 buyVal, uint256 buyMult, uint256 sellVal, uint256 sellMult) external onlyOwner {
        maxETHBuy = buyVal * 10**buyMult;
        maxETHSell = sellVal * 10**sellMult;
        require(maxETHBuy >= 25 * 10**16 && maxETHSell >= 25 * 10**16);
    }

    function setEthLimitsEnabled(bool maxEthTrades) external onlyOwner {
        maxETHTradesEnabled = maxEthTrades;
    }

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = dexRouter.WETH();
            if (maxETHTradesEnabled) {
                uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
                if(lpPairs[from]) {
                    require(ethBalance <= maxETHBuy);
                } else if (lpPairs[to]) {
                    require(ethBalance <= maxETHSell);
                }
            }

            if(privateSaleLimitsEnabled) {
                if(privateSaleHolders[from]) {
                    require(lpPairs[to] || lpPairs[from]);
                }
                if(lpPairs[to] && privateSaleHolders[from] && !inSwap) {
                    uint256 ethBalance = dexRouter.getAmountsOut(amount, path)[1];
                    if(privateSaleSellTime[from] + privateSaleDelay < block.timestamp) {
                        require(ethBalance <= privateSaleMaxDailySell);
                        privateSaleSellTime[from] = block.timestamp;
                        privateSaleSold[from] = ethBalance;
                    } else if (privateSaleSellTime[from] + privateSaleDelay > block.timestamp) {
                        require(privateSaleSold[from] + ethBalance <= privateSaleMaxDailySell);
                        privateSaleSold[from] += ethBalance;
                    }
                }
            }
        }

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

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

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

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

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

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

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

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

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 empireBalance = (amtBalance * ratios.empire) / ratios.total;
        uint256 marketingBalance = amtBalance - empireBalance;
        bool success;
        if (ratios.empire > 0) {
            (success,) = _taxWallets.empire.call{value: empireBalance, gas: 30000}("");
        }
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 30000}("");
        }
    }

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    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] -= values.rAmount;
        _rOwned[to] += values.rTransferAmount;

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

        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;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.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) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 divisor = masterTaxDivisor;

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

            values.tFee = (tAmount * currentReflect) / divisor;
            values.tSwap = (tAmount * currentSwap) / divisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

            values.rFee = 0;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if(_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

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

    function _getRate() internal view returns(uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(_isExcluded[lpPair]) {
            if (_rOwned[lpPair] > rSupply || _tOwned[lpPair] > tSupply) return _rTotal / _tTotal;
            rSupply -= _rOwned[lpPair];
            tSupply -= _tOwned[lpPair];
        }
        if(_excluded.length > 0) {
            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;
    }

    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.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, block.number, _decimals) {} catch {}
        tradingEnabled = true;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }
    
    function recoverNonNativeTokens(address token) external onlyOwner {
        require (token != address(this), "Cannot reclaim native.");
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }
}

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":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"empire","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":"empire","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":"empire","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"empire","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":"empire","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":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","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":"isExcludedFromLimits","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":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxETHTradesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleMaxDailySell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"recoverNonNativeTokens","outputs":[],"stateMutability":"nonpayable","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":"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":"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":"setExcludedFromLimits","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":"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":"enabled","type":"bool"}],"name":"setPrivateSaleLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setPrivateSaleSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPrivateSalersEnabled","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"},{"internalType":"uint16","name":"empire","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"empire","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"},{"internalType":"uint16","name":"empire","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"},{"internalType":"uint16","name":"empire","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"delay","type":"uint8"}],"name":"setTradesBlockDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"empire","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"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"}]

60006004819055600b8054600160ff19918216811790925560c860808190526101f460a081905261012c60c081905261019060e08190526104b0610100819052601380546001600160501b03199081166904b00190012c01f400c8908117909255610120879052610140869052610384610160526101808490526107086101a0526014805482166907080190038401f400c81790556101c0969096526101e09490945261020092909252610220526102405260158054909216179055600a61026052600c6102805260086102a052601e6102c052601680546001600160401b031916661e0008000c000a1790556103206040527353f9a814ad6bb38101e96f0708b491d70aa00f7d6102e081905273c310237250c13443968c429053a2695b15e520d5610300819052601980546001600160a01b03199081169093179055601a805483169091179055601b805461ff0019169055601c849055602080548316841790556703782dace9d9000060218190556022556023805461ffff60ff60b01b01191690556706f05b59d3b200006027556201518060285560298054909216909217905581543391161790554660381415620001e157601780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000295565b46606114156200021757601780546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000295565b4660011480620002275750466004145b156200025957601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000295565b4661a86a14156200029057601780546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000295565b600080fd5b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600c90925283208054909216179055615d129081906200031f90396000f3fe6080604052600436106104185760003560e01c8063715018a611610228578063becdf13f11610128578063dd62ed3e116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610d00578063fdb78c0e14610d47578063fe575a8714610d6657600080fd5b8063ee5d9c2d14610ccb578063eec2744e14610ce057600080fd5b8063dd62ed3e14610c2f578063de3a3b6914610c75578063e4fcfd1814610c95578063eafb5a3c14610cab57600080fd5b8063cab5ebea116100f7578063cab5ebea14610b6e578063cbdf6d5014610b8e578063cf84770614610ba4578063d3f6a15714610c0f57600080fd5b8063becdf13f14610a94578063c2fa418f14610ab4578063c6831cd814610b01578063c6a276c214610b4e57600080fd5b80639242b759116101bb578063aa22b1721161018a578063b1b08f711161016f578063b1b08f71146105fe578063b3d514fb146105fe578063bc77169d14610a7457600080fd5b8063aa22b17214610a34578063aa54547314610a5457600080fd5b80639242b759146109c557806395d89b41146109df578063a75dbac3146109f4578063a9059cbb14610a1457600080fd5b806388f82020116101f757806388f8202014610944578063893d20e81461097d5780638a63bd9b1461099b5780638a8c523c146109b057600080fd5b8063715018a614610877578063749f2ef21461088c5780637b45d431146108a257806380c581d11461092457600080fd5b80632e8fa8211161033357806346fe2246116102c657806350a8e016116102955780635cce86cd1161027a5780635cce86cd146107fe578063684c81991461083757806370a082311461085757600080fd5b806350a8e016146107bf578063590ffdce146107de57600080fd5b806346fe22461461072c5780634ada218b1461074c5780634fb2e45d146107665780634fbee1931461078657600080fd5b806334cd82601161030257806334cd8260146106ac57806336fddb04146106cc57806340eccb0a146106ec578063452ed4f11461070c57600080fd5b80632e8fa82114610634578063313ce5671461064a57806333251a0b1461066c578063342594df1461068c57600080fd5b806310d0417c116103ab578063275a03a21161037a578063275a03a2146105c457806329dd8798146105de5780632b28fc7a146105fe5780632d8381191461061457600080fd5b806310d0417c1461054f57806313e461921461056f57806318160ddd1461058f57806323b872dd146105a457600080fd5b806306fdde03116103e757806306fdde03146104bd5780630758d924146104df57806309231602146104ff578063095ea7b31461051f57600080fd5b8063017ec1a31461042457806303fd2a45146104465780630445b6671461047957806305bbedb61461049d57600080fd5b3661041f57005b600080fd5b34801561043057600080fd5b5061044461043f3660046151cc565b610d86565b005b34801561045257600080fd5b5061045c61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561048557600080fd5b5061048f601e5481565b604051908152602001610470565b3480156104a957600080fd5b506104446104b83660046152ef565b610f52565b3480156104c957600080fd5b506104d2611026565b604051610470919061536d565b3480156104eb57600080fd5b5060175461045c906001600160a01b031681565b34801561050b57600080fd5b5061044461051a3660046153a0565b6110b8565b34801561052b57600080fd5b5061053f61053a3660046153b9565b6111d7565b6040519015158152602001610470565b34801561055b57600080fd5b5061044461056a3660046153e5565b6111ee565b34801561057b57600080fd5b5061044461058a366004615417565b61129f565b34801561059b57600080fd5b5061048f61175d565b3480156105b057600080fd5b5061053f6105bf366004615445565b611776565b3480156105d057600080fd5b5060205461053f9060ff1681565b3480156105ea57600080fd5b506104446105f9366004615486565b6117ee565b34801561060a57600080fd5b5061048f6107d081565b34801561062057600080fd5b5061048f61062f3660046153a0565b6118d7565b34801561064057600080fd5b5061048f601f5481565b34801561065657600080fd5b5060105460405160ff9091168152602001610470565b34801561067857600080fd5b506104446106873660046151cc565b61196e565b34801561069857600080fd5b506104446106a73660046152ef565b611a0e565b3480156106b857600080fd5b506104446106c73660046154e2565b611ac3565b3480156106d857600080fd5b506104446106e7366004615417565b611b53565b3480156106f857600080fd5b5061044461070736600461552c565b611bcc565b34801561071857600080fd5b5060185461045c906001600160a01b031681565b34801561073857600080fd5b50610444610747366004615549565b611c7c565b34801561075857600080fd5b5060235461053f9060ff1681565b34801561077257600080fd5b506104446107813660046151cc565b611d22565b34801561079257600080fd5b5061053f6107a13660046151cc565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107cb57600080fd5b5060235461053f90610100900460ff1681565b3480156107ea57600080fd5b506104446107f9366004615417565b611f26565b34801561080a57600080fd5b5061053f6108193660046151cc565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084357600080fd5b50610444610852366004615575565b611f9f565b34801561086357600080fd5b5061048f6108723660046151cc565b612000565b34801561088357600080fd5b5061044461205f565b34801561089857600080fd5b5061048f60285481565b3480156108ae57600080fd5b506013546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610470565b34801561093057600080fd5b5061044461093f366004615417565b61210f565b34801561095057600080fd5b5061053f61095f3660046151cc565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561098957600080fd5b506000546001600160a01b031661045c565b3480156109a757600080fd5b5061053f6122cb565b3480156109bc57600080fd5b5061044461233a565b3480156109d157600080fd5b5060295461053f9060ff1681565b3480156109eb57600080fd5b506104d2612514565b348015610a0057600080fd5b50610444610a0f366004615575565b612523565b348015610a2057600080fd5b5061053f610a2f3660046153b9565b612584565b348015610a4057600080fd5b50610444610a4f3660046155a4565b61259b565b348015610a6057600080fd5b50610444610a6f3660046155e7565b61267c565b348015610a8057600080fd5b50610444610a8f3660046155e7565b6127bc565b348015610aa057600080fd5b50610444610aaf3660046155e7565b6128fc565b348015610ac057600080fd5b506015546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b0d57600080fd5b506014546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b5a57600080fd5b50610444610b693660046151cc565b612a3c565b348015610b7a57600080fd5b50610444610b89366004615575565b612adc565b348015610b9a57600080fd5b5061048f60275481565b348015610bb057600080fd5b50601654610be19061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610470565b348015610c1b57600080fd5b50610444610c2a36600461563b565b612b7e565b348015610c3b57600080fd5b5061048f610c4a36600461563b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c8157600080fd5b50610444610c90366004615669565b612c0a565b348015610ca157600080fd5b5061048f601c5481565b348015610cb757600080fd5b50610444610cc63660046151cc565b61335b565b348015610cd757600080fd5b5061044461370a565b348015610cec57600080fd5b50610444610cfb366004615417565b6137ed565b348015610d0c57600080fd5b50601954601a54610d27916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610470565b348015610d5357600080fd5b50601b5461053f90610100900460ff1681565b348015610d7257600080fd5b5061053f610d813660046151cc565b613895565b6000546001600160a01b03163314610dd95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6001600160a01b038116301415610e325760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207265636c61696d206e61746976652e000000000000000000006044820152606401610dd0565b6000546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec6919061572b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d9190615744565b505050565b6000546001600160a01b03163314610fa05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610ff090859085906004016157a5565b600060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050505050565b6060600e8054611035906157c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611061906157c9565b80156110ae5780601f10611083576101008083540402835291602001916110ae565b820191906000526020600020905b81548152906001019060200180831161109157829003601f168201915b5050505050905090565b6000546001600160a01b031633146111065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60c88110156111575760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610dd0565b6023546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050565b60006111e4338484613923565b5060015b92915050565b6000546001600160a01b0316331461123c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b61124783600a615930565b611251908561593c565b60215561125f81600a615930565b611269908361593c565b6022556021546703782dace9d900001180159061129057506703782dace9d9000060225410155b61129957600080fd5b50505050565b6000546001600160a01b031633146112ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b8015611442576001600160a01b03821660009081526008602052604090205460ff161561135c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dd0565b6001600160a01b038216600090815260016020526040902054156113b6576001600160a01b03821660009081526001602052604090205461139c906118d7565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556018549091161461143e57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061143e576001600160a01b03821660009081526008602052604090205460ff166114af5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dd0565b6018546001600160a01b038381169116141561152a576114cd613a30565b6001600160a01b0383166000908152600260205260409020546114f0919061593c565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156115da5761153d613a30565b6001600160a01b038316600090815260026020526040902054611560919061593c565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806115a7576115a761595b565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600954811015610f4d57826001600160a01b0316600982815481106116045761160461598a565b6000918252602090912001546001600160a01b0316141561174b576009805461162f906001906159b9565b8154811061163f5761163f61598a565b600091825260209091200154600980546001600160a01b03909216918390811061166b5761166b61598a565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556116b7613a30565b6001600160a01b0384166000908152600260205260409020546116da919061593c565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806117175761171761595b565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b80611755816159d0565b9150506115dd565b60006011546000141561176f57600080fd5b5060115490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146117db576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906117d59084906159b9565b90915550505b6117e6848484613ca3565b949350505050565b6000546001600160a01b0316331461183c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156118b957600080fd5b505af11580156118cd573d6000803e3d6000fd5b5050505050505050565b60006012548211156119515760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610dd0565b600061195b613a30565b90506119678184615a1a565b9392505050565b6000546001600160a01b031633146119bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024016111a2565b6000546001600160a01b03163314611a5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60005b8251811015610f4d578160246000858481518110611a7f57611a7f61598a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611abb816159d0565b915050611a5f565b6000546001600160a01b03163314611b115760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b8385601154611b20919061593c565b611b2a9190615a1a565b601e556011548290611b3d90859061593c565b611b479190615a1a565b601f55601c5550505050565b6000546001600160a01b03163314611ba15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611c1a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600a8160ff161115611c2b57600080fd5b6023546040517f40eccb0a00000000000000000000000000000000000000000000000000000000815260ff83166004820152620100009091046001600160a01b0316906340eccb0a906024016111a2565b6000546001600160a01b03163314611cca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6706f05b59d3b20000611cde83600a615930565b611ce8908561593c565b1015611cf357600080fd5b6202a300811115611d0357600080fd5b611d0e82600a615930565b611d18908461593c565b6027556028555050565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6001600160a01b038116611dec5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd0565b6001600160a01b03811661dead1415611e6d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd0565b60008054611e86916001600160a01b0390911690611f26565b611e91816001611f26565b60008054611ea7906001600160a01b0316612000565b1115611ece57600054611ecc906001600160a01b031682611ec782612000565b613ca3565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611f745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611fed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6020805460ff1916911515919091179055565b6001600160a01b03811660009081526008602052604081205460ff161561203d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111e8906118d7565b6000546001600160a01b031633146120ad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600080546120c6916001600160a01b0390911690611f26565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461215d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b806121e9576001600160a01b03828116600081815260036020526040808220805460ff1916905560235490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b15801561100a57600080fd5b60045415612250576203f4806004544261220391906159b9565b116122505760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610dd0565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560235492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610ff0565b600080546001600160a01b0316331461231a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6017546123349030906001600160a01b0316600019613923565b50600190565b6000546001600160a01b031633146123885760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60235460ff16156123db5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dd0565b602354610100900460ff166124325760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610dd0565b6023546201000090046001600160a01b031661247857602380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6023546018546010546040517fedd52e670000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015243602482015260ff909116604482015262010000909204169063edd52e6790606401600060405180830381600087803b1580156124f357600080fd5b505af1925050508015612504575060015b506023805460ff19166001179055565b6060600f8054611035906157c9565b6000546001600160a01b031633146125715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6029805460ff1916911515919091179055565b6000612591338484613ca3565b5060019392505050565b6000546001600160a01b031633146125e95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6016805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff19909416928816929092179290921716179055806126468385615a2e565b6126509190615a2e565b6016805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146126ca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600081836126d88688615a2e565b6126e29190615a2e565b6126ec9190615a2e565b90506107d08161ffff16111561270157600080fd5b6015805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556127758582615a54565b6015805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461280a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600081836128188688615a2e565b6128229190615a2e565b61282c9190615a2e565b90506107d08161ffff16111561284157600080fd5b6013805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556128b58582615a54565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461294a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600081836129588688615a2e565b6129629190615a2e565b61296c9190615a2e565b90506107d08161ffff16111561298157600080fd5b6014805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556129f58582615a54565b6014805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612a8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016111a2565b6000546001600160a01b03163314612b2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b601b80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612b7390831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612bcc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b601a80546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199182161790915560198054939092169216919091179055565b6000546001600160a01b03163314612c585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b602354760100000000000000000000000000000000000000000000900460ff1615612cc55760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610dd0565b8151835114612d165760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610dd0565b602380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612da857600080fd5b505af1925050508015612db9575060015b50602360029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612e2e57506040513d6000823e601f3d908101601f19168201604052612e2b9190810190615adb565b60015b612e7a5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610dd0565b8351612e8d90600e90602087019061510e565b508251612ea190600f90602086019061510e565b50600d8290556010805460ff191660ff8316908117909155612ec490600a615b50565b600d54612ed1919061593c565b6011819055612ee290600019615b5f565b612eee906000196159b9565b60125550505050601760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190615b73565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff19190615b73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190615b73565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360208190526040909120805460ff19166001179055601154612710916130d2919061593c565b6130dc9190615a1a565b601e55601154612710906130f190600561593c565b6130fb9190615a1a565b601f55602380547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601254600080546001600160a01b0390811682526001602052604080832093909355815460115493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161319991815260200190565b60405180910390a36000546017546131c0916001600160a01b039081169116600019613923565b6017546131da9030906001600160a01b0316600019613923565b60005b835181101561326c576010546000906131fa9060ff16600a615b50565b84838151811061320c5761320c61598a565b602002602001015161321e919061593c565b905061325760008054906101000a90046001600160a01b03168684815181106132495761324961598a565b602002602001015183613ca3565b50508080613264906159d0565b9150506131dd565b50600054613287906001600160a01b031630611ec782612000565b506017546001600160a01b031663f305d71947306132a481612000565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af115801561332b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133509190615b90565b505050610f4d61233a565b6000546001600160a01b031633146133a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134129190615b73565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561345f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134839190615b73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156134e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350a9190615b73565b90506001600160a01b0381166136a857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357c9190615b73565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ed9190615b73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136769190615b73565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556136d1565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f4d903090600019613923565b6000546001600160a01b031633146137585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b602354610100900460ff16156137b05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610dd0565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156137ea573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461383b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610ff0565b6023546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156138ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e89190615744565b6001600160a01b0383166139795760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dd0565b6001600160a01b0382166139cf5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dd0565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546011546018546001600160a01b03166000908152600860205260408120549092919060ff1615613b0a576018546001600160a01b0316600090815260016020526040902054821080613a9e57506018546001600160a01b031660009081526002602052604090205481105b15613aba57601154601254613ab39190615a1a565b9250505090565b6018546001600160a01b0316600090815260016020526040902054613adf90836159b9565b6018546001600160a01b0316600090815260026020526040902054909250613b0790826159b9565b90505b60095415613c725760005b60095460ff82161015613c7057826001600060098460ff1681548110613b3d57613b3d61598a565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613bab5750816002600060098460ff1681548110613b8457613b8461598a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bc857601154601254613bc09190615a1a565b935050505090565b6001600060098360ff1681548110613be257613be261598a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1190846159b9565b92506002600060098360ff1681548110613c2d57613c2d61598a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c5c90836159b9565b915080613c6881615bbe565b915050613b15565b505b601154601254613c829190615a1a565b821015613c9957601154601254613ab39190615a1a565b613ab38183615a1a565b60006001600160a01b038416613d215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dd0565b6001600160a01b038316613d9d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610dd0565b60008211613e135760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610dd0565b613e1d84846143f3565b156143085760235460ff16613e745760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dd0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ea957613ea961598a565b6001600160a01b03928316602091820292909201810191909152601754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3f9190615b73565b81600181518110613f5257613f5261598a565b6001600160a01b039092166020928302919091018201525460ff161561408c576017546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f90613fbe9087908690600401615bde565b600060405180830381865afa158015613fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140039190810190615bf7565b6001815181106140155761401561598a565b6020908102919091018101516001600160a01b0388166000908152600390925260409091205490915060ff161561405a5760215481111561405557600080fd5b61408a565b6001600160a01b03851660009081526003602052604090205460ff161561408a5760225481111561408a57600080fd5b505b60295460ff1615614306576001600160a01b03851660009081526024602052604090205460ff1615614100576001600160a01b03841660009081526003602052604090205460ff16806140f757506001600160a01b03851660009081526003602052604090205460ff165b61410057600080fd5b6001600160a01b03841660009081526003602052604090205460ff16801561414057506001600160a01b03851660009081526024602052604090205460ff165b801561414f5750601b5460ff16155b15614306576017546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f906141a09087908690600401615bde565b600060405180830381865afa1580156141bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141e59190810190615bf7565b6001815181106141f7576141f761598a565b602002602001015190504260285460266000896001600160a01b03166001600160a01b03168152602001908152602001600020546142359190615c88565b10156142775760275481111561424a57600080fd5b6001600160a01b038616600090815260266020908152604080832042905560259091529020819055614304565b6028546001600160a01b038716600090815260266020526040902054429161429e91615c88565b1115614304576027546001600160a01b0387166000908152602560205260409020546142cb908390615c88565b11156142d657600080fd5b6001600160a01b038616600090815260256020526040812080548392906142fe908490615c88565b90915550505b505b505b6001600160a01b03841660009081526006602052604090205460019060ff168061434a57506001600160a01b03841660009081526006602052604090205460ff165b15614353575060005b6001600160a01b03841660009081526003602052604090205460ff16156143de57601b5460ff1615801561438e5750601b54610100900460ff165b156143de5742601c54601d546143a49190615c88565b10156143de5760006143b530612000565b9050601e5481106143dc57601f5481106143ce5750601f545b6143d7816144c7565b42601d555b505b6143ea85858584614994565b95945050505050565b600080546001600160a01b0384811691161480159061442057506000546001600160a01b03838116911614155b801561443757506000546001600160a01b03163214155b801561445c57506001600160a01b0382166000908152600c602052604090205460ff16155b801561448157506001600160a01b0383166000908152600c602052604090205460ff16155b801561449857506001600160a01b03821661dead14155b80156144ac57506001600160a01b03821615155b801561196757506001600160a01b0383163014159392505050565b601b805460ff191660011790556040805160808101825260165461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526145255750614987565b3060009081526005602090815260408083206017546001600160a01b031684529091529020546000191461457e573060009081526005602090815260408083206017546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561459f919061593c565b6145a99190615a1a565b6145b39190615a1a565b905060006145c182856159b9565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106145fb576145fb61598a565b6001600160a01b03928316602091820292909201810191909152601754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561466d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146919190615b73565b816001815181106146a4576146a461598a565b6001600160a01b0392831660209182029290920101526017546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614703908590600090869030904290600401615ca0565b600060405180830381600087803b15801561471d57600080fd5b505af1158015614731573d6000803e3d6000fd5b5047925060009150849050614746868461593c565b6147509190615a1a565b90508415614841576017546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156147df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148049190615b90565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61484b81836159b9565b91508560000151866060018181516148639190615a54565b61ffff90811690915260608801516040890151600093509082169161488991168561593c565b6148939190615a1a565b905060006148a182856159b9565b9050600080896040015161ffff16111561491257601a546040516001600160a01b03909116906175309085906000818181858888f193505050503d8060008114614907576040519150601f19603f3d011682016040523d82523d6000602084013e61490c565b606091505b50909150505b602089015161ffff161561497d576019546040516001600160a01b03909116906175309084906000818181858888f193505050503d8060008114614972576040519150601f19603f3d011682016040523d82523d6000602084013e614977565b606091505b50909150505b5050505050505050505b50601b805460ff19169055565b602354600090610100900460ff16614a40576149b08585614c08565b602354610100900460ff161580156149cd57506149cd85856143f3565b15614a405760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610dd0565b6000614a4e86868686614d66565b60808101516001600160a01b038816600090815260016020526040812080549394509192614a7d9084906159b9565b909155505060608101516001600160a01b03861660009081526001602052604081208054909190614aaf908490615c88565b90915550506001600160a01b03861660009081526008602052604090205460ff1615614b13576001600160a01b038616600090815260026020526040902054614af99085906159b9565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff1615614b735780516001600160a01b038616600090815260026020526040902054614b599190615c88565b6001600160a01b0386166000908152600260205260409020555b60008160a001511180614b8a575060008160200151115b15614bab578060a0015160126000828254614ba591906159b9565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051614bf491815260200190565b60405180910390a350600195945050505050565b602354610100900460ff1615614c865760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610dd0565b614c9082826143f3565b158015614caa57506018546001600160a01b038281169116145b1561143e576001600160a01b038083166000908152600c60205260409020805460ff191660011790556023805461ff001916610100179081905562010000900416614d1f57602380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614da66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614de66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614dee613a30565b60c08201819052614dff908561593c565b6080820152614e0e86866143f3565b15614ec1576023546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614eaa575060408051601f3d908101601f19168201909252614ea791810190615744565b60015b614eb357600080fd5b905080614ebf57600080fd5b505b8215614fde576001600160a01b03851660009081526003602052604081205481906127109060ff1615614f0e5760145461ffff808216945068010000000000000000909104169150614f6b565b6001600160a01b03891660009081526003602052604090205460ff1615614f4f5760135461ffff808216945068010000000000000000909104169150614f6b565b60155461ffff8082169450680100000000000000009091041691505b80614f76848961593c565b614f809190615a1a565b602085015280614f90838961593c565b614f9a9190615a1a565b604085018190526020850151614fb09190615c88565b614fba90886159b9565b845260c08401516020850151614fd0919061593c565b60a085015250614ff7915050565b6000602082018190526040820181905284825260a08201525b6040810151156150ce578060c001518160400151615015919061593c565b3060009081526001602052604081208054909190615034908490615c88565b90915550503060009081526008602052604090205460ff161561507c576040808201513060009081526002602052918220805491929091615076908490615c88565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516150c591815260200190565b60405180910390a35b8060c0015181604001516150e2919061593c565b8160a001516150f19190615c88565b816080015161510091906159b9565b606082015295945050505050565b82805461511a906157c9565b90600052602060002090601f01602090048101928261513c5760008555615182565b82601f1061515557805160ff1916838001178555615182565b82800160010185558215615182579182015b82811115615182578251825591602001919060010190615167565b5061518e929150615192565b5090565b5b8082111561518e5760008155600101615193565b6001600160a01b03811681146137ea57600080fd5b80356151c7816151a7565b919050565b6000602082840312156151de57600080fd5b8135611967816151a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615241576152416151e9565b604052919050565b600067ffffffffffffffff821115615263576152636151e9565b5060051b60200190565b600082601f83011261527e57600080fd5b8135602061529361528e83615249565b615218565b82815260059290921b840181019181810190868411156152b257600080fd5b8286015b848110156152d65780356152c9816151a7565b83529183019183016152b6565b509695505050505050565b80151581146137ea57600080fd5b6000806040838503121561530257600080fd5b823567ffffffffffffffff81111561531957600080fd5b6153258582860161526d565b9250506020830135615336816152e1565b809150509250929050565b60005b8381101561535c578181015183820152602001615344565b838111156112995750506000910152565b602081526000825180602084015261538c816040850160208701615341565b601f01601f19169190910160400192915050565b6000602082840312156153b257600080fd5b5035919050565b600080604083850312156153cc57600080fd5b82356153d7816151a7565b946020939093013593505050565b600080600080608085870312156153fb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561542a57600080fd5b8235615435816151a7565b91506020830135615336816152e1565b60008060006060848603121561545a57600080fd5b8335615465816151a7565b92506020840135615475816151a7565b929592945050506040919091013590565b6000806000806080858703121561549c57600080fd5b84356154a7816152e1565b935060208501356154b7816152e1565b925060408501356154c7816152e1565b915060608501356154d7816152e1565b939692955090935050565b600080600080600060a086880312156154fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60ff811681146137ea57600080fd5b60006020828403121561553e57600080fd5b81356119678161551d565b60008060006060848603121561555e57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561558757600080fd5b8135611967816152e1565b803561ffff811681146151c757600080fd5b6000806000606084860312156155b957600080fd5b6155c284615592565b92506155d060208501615592565b91506155de60408501615592565b90509250925092565b600080600080608085870312156155fd57600080fd5b61560685615592565b935061561460208601615592565b925061562260408601615592565b915061563060608601615592565b905092959194509250565b6000806040838503121561564e57600080fd5b8235615659816151a7565b91506020830135615336816151a7565b60008060006060848603121561567e57600080fd5b833567ffffffffffffffff8082111561569657600080fd5b6156a28783880161526d565b94506020915081860135818111156156b957600080fd5b86019050601f810187136156cc57600080fd5b80356156da61528e82615249565b81815260059190911b820183019083810190898311156156f957600080fd5b928401925b82841015615717578335825292840192908401906156fe565b80965050505050506155de604085016151bc565b60006020828403121561573d57600080fd5b5051919050565b60006020828403121561575657600080fd5b8151611967816152e1565b600081518084526020808501945080840160005b8381101561579a5781516001600160a01b031687529582019590820190600101615775565b509495945050505050565b6040815260006157b86040830185615761565b905082151560208301529392505050565b600181811c908216806157dd57607f821691505b60208210811415615817577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b8085111561588757816000190482111561586d5761586d61581d565b8085161561587a57918102915b93841c9390800290615851565b509250929050565b60008261589e575060016111e8565b816158ab575060006111e8565b81600181146158c157600281146158cb576158e7565b60019150506111e8565b60ff8411156158dc576158dc61581d565b50506001821b6111e8565b5060208310610133831016604e8410600b841016171561590a575081810a6111e8565b615914838361584c565b80600019048211156159285761592861581d565b029392505050565b6000611967838361588f565b60008160001904831182151516156159565761595661581d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156159cb576159cb61581d565b500390565b60006000198214156159e4576159e461581d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a2957615a296159eb565b500490565b600061ffff808316818516808303821115615a4b57615a4b61581d565b01949350505050565b600061ffff83811690831681811015615a6f57615a6f61581d565b039392505050565b600082601f830112615a8857600080fd5b815167ffffffffffffffff811115615aa257615aa26151e9565b615ab56020601f19601f84011601615218565b818152846020838601011115615aca57600080fd5b6117e6826020830160208701615341565b60008060008060808587031215615af157600080fd5b845167ffffffffffffffff80821115615b0957600080fd5b615b1588838901615a77565b95506020870151915080821115615b2b57600080fd5b50615b3887828801615a77565b9350506040850151915060608501516154d78161551d565b600061196760ff84168361588f565b600082615b6e57615b6e6159eb565b500690565b600060208284031215615b8557600080fd5b8151611967816151a7565b600080600060608486031215615ba557600080fd5b8351925060208401519150604084015190509250925092565b600060ff821660ff811415615bd557615bd561581d565b60010192915050565b8281526040602082015260006117e66040830184615761565b60006020808385031215615c0a57600080fd5b825167ffffffffffffffff811115615c2157600080fd5b8301601f81018513615c3257600080fd5b8051615c4061528e82615249565b81815260059190911b82018301908381019087831115615c5f57600080fd5b928401925b82841015615c7d57835182529284019290840190615c64565b979650505050505050565b60008219821115615c9b57615c9b61581d565b500190565b85815284602082015260a060408201526000615cbf60a0830186615761565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212207ef865eb22fb08e7f4604816487e347c59933dbe51a68129c770668c289f9c0264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106104185760003560e01c8063715018a611610228578063becdf13f11610128578063dd62ed3e116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610d00578063fdb78c0e14610d47578063fe575a8714610d6657600080fd5b8063ee5d9c2d14610ccb578063eec2744e14610ce057600080fd5b8063dd62ed3e14610c2f578063de3a3b6914610c75578063e4fcfd1814610c95578063eafb5a3c14610cab57600080fd5b8063cab5ebea116100f7578063cab5ebea14610b6e578063cbdf6d5014610b8e578063cf84770614610ba4578063d3f6a15714610c0f57600080fd5b8063becdf13f14610a94578063c2fa418f14610ab4578063c6831cd814610b01578063c6a276c214610b4e57600080fd5b80639242b759116101bb578063aa22b1721161018a578063b1b08f711161016f578063b1b08f71146105fe578063b3d514fb146105fe578063bc77169d14610a7457600080fd5b8063aa22b17214610a34578063aa54547314610a5457600080fd5b80639242b759146109c557806395d89b41146109df578063a75dbac3146109f4578063a9059cbb14610a1457600080fd5b806388f82020116101f757806388f8202014610944578063893d20e81461097d5780638a63bd9b1461099b5780638a8c523c146109b057600080fd5b8063715018a614610877578063749f2ef21461088c5780637b45d431146108a257806380c581d11461092457600080fd5b80632e8fa8211161033357806346fe2246116102c657806350a8e016116102955780635cce86cd1161027a5780635cce86cd146107fe578063684c81991461083757806370a082311461085757600080fd5b806350a8e016146107bf578063590ffdce146107de57600080fd5b806346fe22461461072c5780634ada218b1461074c5780634fb2e45d146107665780634fbee1931461078657600080fd5b806334cd82601161030257806334cd8260146106ac57806336fddb04146106cc57806340eccb0a146106ec578063452ed4f11461070c57600080fd5b80632e8fa82114610634578063313ce5671461064a57806333251a0b1461066c578063342594df1461068c57600080fd5b806310d0417c116103ab578063275a03a21161037a578063275a03a2146105c457806329dd8798146105de5780632b28fc7a146105fe5780632d8381191461061457600080fd5b806310d0417c1461054f57806313e461921461056f57806318160ddd1461058f57806323b872dd146105a457600080fd5b806306fdde03116103e757806306fdde03146104bd5780630758d924146104df57806309231602146104ff578063095ea7b31461051f57600080fd5b8063017ec1a31461042457806303fd2a45146104465780630445b6671461047957806305bbedb61461049d57600080fd5b3661041f57005b600080fd5b34801561043057600080fd5b5061044461043f3660046151cc565b610d86565b005b34801561045257600080fd5b5061045c61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561048557600080fd5b5061048f601e5481565b604051908152602001610470565b3480156104a957600080fd5b506104446104b83660046152ef565b610f52565b3480156104c957600080fd5b506104d2611026565b604051610470919061536d565b3480156104eb57600080fd5b5060175461045c906001600160a01b031681565b34801561050b57600080fd5b5061044461051a3660046153a0565b6110b8565b34801561052b57600080fd5b5061053f61053a3660046153b9565b6111d7565b6040519015158152602001610470565b34801561055b57600080fd5b5061044461056a3660046153e5565b6111ee565b34801561057b57600080fd5b5061044461058a366004615417565b61129f565b34801561059b57600080fd5b5061048f61175d565b3480156105b057600080fd5b5061053f6105bf366004615445565b611776565b3480156105d057600080fd5b5060205461053f9060ff1681565b3480156105ea57600080fd5b506104446105f9366004615486565b6117ee565b34801561060a57600080fd5b5061048f6107d081565b34801561062057600080fd5b5061048f61062f3660046153a0565b6118d7565b34801561064057600080fd5b5061048f601f5481565b34801561065657600080fd5b5060105460405160ff9091168152602001610470565b34801561067857600080fd5b506104446106873660046151cc565b61196e565b34801561069857600080fd5b506104446106a73660046152ef565b611a0e565b3480156106b857600080fd5b506104446106c73660046154e2565b611ac3565b3480156106d857600080fd5b506104446106e7366004615417565b611b53565b3480156106f857600080fd5b5061044461070736600461552c565b611bcc565b34801561071857600080fd5b5060185461045c906001600160a01b031681565b34801561073857600080fd5b50610444610747366004615549565b611c7c565b34801561075857600080fd5b5060235461053f9060ff1681565b34801561077257600080fd5b506104446107813660046151cc565b611d22565b34801561079257600080fd5b5061053f6107a13660046151cc565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107cb57600080fd5b5060235461053f90610100900460ff1681565b3480156107ea57600080fd5b506104446107f9366004615417565b611f26565b34801561080a57600080fd5b5061053f6108193660046151cc565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561084357600080fd5b50610444610852366004615575565b611f9f565b34801561086357600080fd5b5061048f6108723660046151cc565b612000565b34801561088357600080fd5b5061044461205f565b34801561089857600080fd5b5061048f60285481565b3480156108ae57600080fd5b506013546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610470565b34801561093057600080fd5b5061044461093f366004615417565b61210f565b34801561095057600080fd5b5061053f61095f3660046151cc565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561098957600080fd5b506000546001600160a01b031661045c565b3480156109a757600080fd5b5061053f6122cb565b3480156109bc57600080fd5b5061044461233a565b3480156109d157600080fd5b5060295461053f9060ff1681565b3480156109eb57600080fd5b506104d2612514565b348015610a0057600080fd5b50610444610a0f366004615575565b612523565b348015610a2057600080fd5b5061053f610a2f3660046153b9565b612584565b348015610a4057600080fd5b50610444610a4f3660046155a4565b61259b565b348015610a6057600080fd5b50610444610a6f3660046155e7565b61267c565b348015610a8057600080fd5b50610444610a8f3660046155e7565b6127bc565b348015610aa057600080fd5b50610444610aaf3660046155e7565b6128fc565b348015610ac057600080fd5b506015546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b0d57600080fd5b506014546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b5a57600080fd5b50610444610b693660046151cc565b612a3c565b348015610b7a57600080fd5b50610444610b89366004615575565b612adc565b348015610b9a57600080fd5b5061048f60275481565b348015610bb057600080fd5b50601654610be19061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610470565b348015610c1b57600080fd5b50610444610c2a36600461563b565b612b7e565b348015610c3b57600080fd5b5061048f610c4a36600461563b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c8157600080fd5b50610444610c90366004615669565b612c0a565b348015610ca157600080fd5b5061048f601c5481565b348015610cb757600080fd5b50610444610cc63660046151cc565b61335b565b348015610cd757600080fd5b5061044461370a565b348015610cec57600080fd5b50610444610cfb366004615417565b6137ed565b348015610d0c57600080fd5b50601954601a54610d27916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610470565b348015610d5357600080fd5b50601b5461053f90610100900460ff1681565b348015610d7257600080fd5b5061053f610d813660046151cc565b613895565b6000546001600160a01b03163314610dd95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6001600160a01b038116301415610e325760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207265636c61696d206e61746976652e000000000000000000006044820152606401610dd0565b6000546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec6919061572b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d9190615744565b505050565b6000546001600160a01b03163314610fa05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610ff090859085906004016157a5565b600060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b505050505050565b6060600e8054611035906157c9565b80601f0160208091040260200160405190810160405280929190818152602001828054611061906157c9565b80156110ae5780601f10611083576101008083540402835291602001916110ae565b820191906000526020600020905b81548152906001019060200180831161109157829003601f168201915b5050505050905090565b6000546001600160a01b031633146111065760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60c88110156111575760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610dd0565b6023546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050565b60006111e4338484613923565b5060015b92915050565b6000546001600160a01b0316331461123c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b61124783600a615930565b611251908561593c565b60215561125f81600a615930565b611269908361593c565b6022556021546703782dace9d900001180159061129057506703782dace9d9000060225410155b61129957600080fd5b50505050565b6000546001600160a01b031633146112ed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b8015611442576001600160a01b03821660009081526008602052604090205460ff161561135c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dd0565b6001600160a01b038216600090815260016020526040902054156113b6576001600160a01b03821660009081526001602052604090205461139c906118d7565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556018549091161461143e57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061143e576001600160a01b03821660009081526008602052604090205460ff166114af5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dd0565b6018546001600160a01b038381169116141561152a576114cd613a30565b6001600160a01b0383166000908152600260205260409020546114f0919061593c565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156115da5761153d613a30565b6001600160a01b038316600090815260026020526040902054611560919061593c565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806115a7576115a761595b565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600954811015610f4d57826001600160a01b0316600982815481106116045761160461598a565b6000918252602090912001546001600160a01b0316141561174b576009805461162f906001906159b9565b8154811061163f5761163f61598a565b600091825260209091200154600980546001600160a01b03909216918390811061166b5761166b61598a565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556116b7613a30565b6001600160a01b0384166000908152600260205260409020546116da919061593c565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806117175761171761595b565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b80611755816159d0565b9150506115dd565b60006011546000141561176f57600080fd5b5060115490565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019146117db576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906117d59084906159b9565b90915550505b6117e6848484613ca3565b949350505050565b6000546001600160a01b0316331461183c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156118b957600080fd5b505af11580156118cd573d6000803e3d6000fd5b5050505050505050565b60006012548211156119515760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610dd0565b600061195b613a30565b90506119678184615a1a565b9392505050565b6000546001600160a01b031633146119bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b906024016111a2565b6000546001600160a01b03163314611a5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60005b8251811015610f4d578160246000858481518110611a7f57611a7f61598a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611abb816159d0565b915050611a5f565b6000546001600160a01b03163314611b115760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b8385601154611b20919061593c565b611b2a9190615a1a565b601e556011548290611b3d90859061593c565b611b479190615a1a565b601f55601c5550505050565b6000546001600160a01b03163314611ba15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611c1a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600a8160ff161115611c2b57600080fd5b6023546040517f40eccb0a00000000000000000000000000000000000000000000000000000000815260ff83166004820152620100009091046001600160a01b0316906340eccb0a906024016111a2565b6000546001600160a01b03163314611cca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6706f05b59d3b20000611cde83600a615930565b611ce8908561593c565b1015611cf357600080fd5b6202a300811115611d0357600080fd5b611d0e82600a615930565b611d18908461593c565b6027556028555050565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6001600160a01b038116611dec5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd0565b6001600160a01b03811661dead1415611e6d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610dd0565b60008054611e86916001600160a01b0390911690611f26565b611e91816001611f26565b60008054611ea7906001600160a01b0316612000565b1115611ece57600054611ecc906001600160a01b031682611ec782612000565b613ca3565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611f745760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611fed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6020805460ff1916911515919091179055565b6001600160a01b03811660009081526008602052604081205460ff161561203d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111e8906118d7565b6000546001600160a01b031633146120ad5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600080546120c6916001600160a01b0390911690611f26565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461215d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b806121e9576001600160a01b03828116600081815260036020526040808220805460ff1916905560235490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b15801561100a57600080fd5b60045415612250576203f4806004544261220391906159b9565b116122505760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610dd0565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560235492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610ff0565b600080546001600160a01b0316331461231a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6017546123349030906001600160a01b0316600019613923565b50600190565b6000546001600160a01b031633146123885760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60235460ff16156123db5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dd0565b602354610100900460ff166124325760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610dd0565b6023546201000090046001600160a01b031661247857602380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6023546018546010546040517fedd52e670000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015243602482015260ff909116604482015262010000909204169063edd52e6790606401600060405180830381600087803b1580156124f357600080fd5b505af1925050508015612504575060015b506023805460ff19166001179055565b6060600f8054611035906157c9565b6000546001600160a01b031633146125715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6029805460ff1916911515919091179055565b6000612591338484613ca3565b5060019392505050565b6000546001600160a01b031633146125e95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6016805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff868316620100000263ffffffff19909416928816929092179290921716179055806126468385615a2e565b6126509190615a2e565b6016805461ffff9290921666010000000000000267ffff00000000000019909216919091179055505050565b6000546001600160a01b031633146126ca5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600081836126d88688615a2e565b6126e29190615a2e565b6126ec9190615a2e565b90506107d08161ffff16111561270157600080fd5b6015805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556127758582615a54565b6015805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461280a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600081836128188688615a2e565b6128229190615a2e565b61282c9190615a2e565b90506107d08161ffff16111561284157600080fd5b6013805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556128b58582615a54565b6013805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b0316331461294a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b600081836129588688615a2e565b6129629190615a2e565b61296c9190615a2e565b90506107d08161ffff16111561298157600080fd5b6014805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000008683160267ffff0000000000001916176601000000000000918516919091021790556129f58582615a54565b6014805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612a8a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016111a2565b6000546001600160a01b03163314612b2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b601b80548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612b7390831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612bcc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b601a80546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff199182161790915560198054939092169216919091179055565b6000546001600160a01b03163314612c585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b602354760100000000000000000000000000000000000000000000900460ff1615612cc55760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610dd0565b8151835114612d165760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610dd0565b602380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b158015612da857600080fd5b505af1925050508015612db9575060015b50602360029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015612e2e57506040513d6000823e601f3d908101601f19168201604052612e2b9190810190615adb565b60015b612e7a5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610dd0565b8351612e8d90600e90602087019061510e565b508251612ea190600f90602086019061510e565b50600d8290556010805460ff191660ff8316908117909155612ec490600a615b50565b600d54612ed1919061593c565b6011819055612ee290600019615b5f565b612eee906000196159b9565b60125550505050601760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190615b73565b6001600160a01b031663c9c65396601760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff19190615b73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190615b73565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600360208190526040909120805460ff19166001179055601154612710916130d2919061593c565b6130dc9190615a1a565b601e55601154612710906130f190600561593c565b6130fb9190615a1a565b601f55602380547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055601254600080546001600160a01b0390811682526001602052604080832093909355815460115493519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161319991815260200190565b60405180910390a36000546017546131c0916001600160a01b039081169116600019613923565b6017546131da9030906001600160a01b0316600019613923565b60005b835181101561326c576010546000906131fa9060ff16600a615b50565b84838151811061320c5761320c61598a565b602002602001015161321e919061593c565b905061325760008054906101000a90046001600160a01b03168684815181106132495761324961598a565b602002602001015183613ca3565b50508080613264906159d0565b9150506131dd565b50600054613287906001600160a01b031630611ec782612000565b506017546001600160a01b031663f305d71947306132a481612000565b6000805460405160e087901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af115801561332b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133509190615b90565b505050610f4d61233a565b6000546001600160a01b031633146133a95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134129190615b73565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561345f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134839190615b73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156134e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350a9190615b73565b90506001600160a01b0381166136a857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357c9190615b73565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ed9190615b73565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136769190615b73565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556136d1565b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6017805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f4d903090600019613923565b6000546001600160a01b031633146137585760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b602354610100900460ff16156137b05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610dd0565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156137ea573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461383b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610dd0565b6023546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610ff0565b6023546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa1580156138ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e89190615744565b6001600160a01b0383166139795760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dd0565b6001600160a01b0382166139cf5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610dd0565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6012546011546018546001600160a01b03166000908152600860205260408120549092919060ff1615613b0a576018546001600160a01b0316600090815260016020526040902054821080613a9e57506018546001600160a01b031660009081526002602052604090205481105b15613aba57601154601254613ab39190615a1a565b9250505090565b6018546001600160a01b0316600090815260016020526040902054613adf90836159b9565b6018546001600160a01b0316600090815260026020526040902054909250613b0790826159b9565b90505b60095415613c725760005b60095460ff82161015613c7057826001600060098460ff1681548110613b3d57613b3d61598a565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613bab5750816002600060098460ff1681548110613b8457613b8461598a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bc857601154601254613bc09190615a1a565b935050505090565b6001600060098360ff1681548110613be257613be261598a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1190846159b9565b92506002600060098360ff1681548110613c2d57613c2d61598a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c5c90836159b9565b915080613c6881615bbe565b915050613b15565b505b601154601254613c829190615a1a565b821015613c9957601154601254613ab39190615a1a565b613ab38183615a1a565b60006001600160a01b038416613d215760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dd0565b6001600160a01b038316613d9d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610dd0565b60008211613e135760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610dd0565b613e1d84846143f3565b156143085760235460ff16613e745760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dd0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ea957613ea961598a565b6001600160a01b03928316602091820292909201810191909152601754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3f9190615b73565b81600181518110613f5257613f5261598a565b6001600160a01b039092166020928302919091018201525460ff161561408c576017546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f90613fbe9087908690600401615bde565b600060405180830381865afa158015613fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140039190810190615bf7565b6001815181106140155761401561598a565b6020908102919091018101516001600160a01b0388166000908152600390925260409091205490915060ff161561405a5760215481111561405557600080fd5b61408a565b6001600160a01b03851660009081526003602052604090205460ff161561408a5760225481111561408a57600080fd5b505b60295460ff1615614306576001600160a01b03851660009081526024602052604090205460ff1615614100576001600160a01b03841660009081526003602052604090205460ff16806140f757506001600160a01b03851660009081526003602052604090205460ff165b61410057600080fd5b6001600160a01b03841660009081526003602052604090205460ff16801561414057506001600160a01b03851660009081526024602052604090205460ff165b801561414f5750601b5460ff16155b15614306576017546040517fd06ca61f0000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063d06ca61f906141a09087908690600401615bde565b600060405180830381865afa1580156141bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141e59190810190615bf7565b6001815181106141f7576141f761598a565b602002602001015190504260285460266000896001600160a01b03166001600160a01b03168152602001908152602001600020546142359190615c88565b10156142775760275481111561424a57600080fd5b6001600160a01b038616600090815260266020908152604080832042905560259091529020819055614304565b6028546001600160a01b038716600090815260266020526040902054429161429e91615c88565b1115614304576027546001600160a01b0387166000908152602560205260409020546142cb908390615c88565b11156142d657600080fd5b6001600160a01b038616600090815260256020526040812080548392906142fe908490615c88565b90915550505b505b505b6001600160a01b03841660009081526006602052604090205460019060ff168061434a57506001600160a01b03841660009081526006602052604090205460ff165b15614353575060005b6001600160a01b03841660009081526003602052604090205460ff16156143de57601b5460ff1615801561438e5750601b54610100900460ff165b156143de5742601c54601d546143a49190615c88565b10156143de5760006143b530612000565b9050601e5481106143dc57601f5481106143ce5750601f545b6143d7816144c7565b42601d555b505b6143ea85858584614994565b95945050505050565b600080546001600160a01b0384811691161480159061442057506000546001600160a01b03838116911614155b801561443757506000546001600160a01b03163214155b801561445c57506001600160a01b0382166000908152600c602052604090205460ff16155b801561448157506001600160a01b0383166000908152600c602052604090205460ff16155b801561449857506001600160a01b03821661dead14155b80156144ac57506001600160a01b03821615155b801561196757506001600160a01b0383163014159392505050565b601b805460ff191660011790556040805160808101825260165461ffff808216835262010000820481166020840152640100000000820481169383019390935266010000000000009004909116606082018190526145255750614987565b3060009081526005602090815260408083206017546001600160a01b031684529091529020546000191461457e573060009081526005602090815260408083206017546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff168561459f919061593c565b6145a99190615a1a565b6145b39190615a1a565b905060006145c182856159b9565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106145fb576145fb61598a565b6001600160a01b03928316602091820292909201810191909152601754604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa15801561466d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146919190615b73565b816001815181106146a4576146a461598a565b6001600160a01b0392831660209182029290920101526017546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614703908590600090869030904290600401615ca0565b600060405180830381600087803b15801561471d57600080fd5b505af1158015614731573d6000803e3d6000fd5b5047925060009150849050614746868461593c565b6147509190615a1a565b90508415614841576017546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156147df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148049190615b90565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61484b81836159b9565b91508560000151866060018181516148639190615a54565b61ffff90811690915260608801516040890151600093509082169161488991168561593c565b6148939190615a1a565b905060006148a182856159b9565b9050600080896040015161ffff16111561491257601a546040516001600160a01b03909116906175309085906000818181858888f193505050503d8060008114614907576040519150601f19603f3d011682016040523d82523d6000602084013e61490c565b606091505b50909150505b602089015161ffff161561497d576019546040516001600160a01b03909116906175309084906000818181858888f193505050503d8060008114614972576040519150601f19603f3d011682016040523d82523d6000602084013e614977565b606091505b50909150505b5050505050505050505b50601b805460ff19169055565b602354600090610100900460ff16614a40576149b08585614c08565b602354610100900460ff161580156149cd57506149cd85856143f3565b15614a405760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610dd0565b6000614a4e86868686614d66565b60808101516001600160a01b038816600090815260016020526040812080549394509192614a7d9084906159b9565b909155505060608101516001600160a01b03861660009081526001602052604081208054909190614aaf908490615c88565b90915550506001600160a01b03861660009081526008602052604090205460ff1615614b13576001600160a01b038616600090815260026020526040902054614af99085906159b9565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff1615614b735780516001600160a01b038616600090815260026020526040902054614b599190615c88565b6001600160a01b0386166000908152600260205260409020555b60008160a001511180614b8a575060008160200151115b15614bab578060a0015160126000828254614ba591906159b9565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051614bf491815260200190565b60405180910390a350600195945050505050565b602354610100900460ff1615614c865760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610dd0565b614c9082826143f3565b158015614caa57506018546001600160a01b038281169116145b1561143e576001600160a01b038083166000908152600c60205260409020805460ff191660011790556023805461ff001916610100179081905562010000900416614d1f57602380547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b614da66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614de66040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b614dee613a30565b60c08201819052614dff908561593c565b6080820152614e0e86866143f3565b15614ec1576023546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614eaa575060408051601f3d908101601f19168201909252614ea791810190615744565b60015b614eb357600080fd5b905080614ebf57600080fd5b505b8215614fde576001600160a01b03851660009081526003602052604081205481906127109060ff1615614f0e5760145461ffff808216945068010000000000000000909104169150614f6b565b6001600160a01b03891660009081526003602052604090205460ff1615614f4f5760135461ffff808216945068010000000000000000909104169150614f6b565b60155461ffff8082169450680100000000000000009091041691505b80614f76848961593c565b614f809190615a1a565b602085015280614f90838961593c565b614f9a9190615a1a565b604085018190526020850151614fb09190615c88565b614fba90886159b9565b845260c08401516020850151614fd0919061593c565b60a085015250614ff7915050565b6000602082018190526040820181905284825260a08201525b6040810151156150ce578060c001518160400151615015919061593c565b3060009081526001602052604081208054909190615034908490615c88565b90915550503060009081526008602052604090205460ff161561507c576040808201513060009081526002602052918220805491929091615076908490615c88565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516150c591815260200190565b60405180910390a35b8060c0015181604001516150e2919061593c565b8160a001516150f19190615c88565b816080015161510091906159b9565b606082015295945050505050565b82805461511a906157c9565b90600052602060002090601f01602090048101928261513c5760008555615182565b82601f1061515557805160ff1916838001178555615182565b82800160010185558215615182579182015b82811115615182578251825591602001919060010190615167565b5061518e929150615192565b5090565b5b8082111561518e5760008155600101615193565b6001600160a01b03811681146137ea57600080fd5b80356151c7816151a7565b919050565b6000602082840312156151de57600080fd5b8135611967816151a7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615241576152416151e9565b604052919050565b600067ffffffffffffffff821115615263576152636151e9565b5060051b60200190565b600082601f83011261527e57600080fd5b8135602061529361528e83615249565b615218565b82815260059290921b840181019181810190868411156152b257600080fd5b8286015b848110156152d65780356152c9816151a7565b83529183019183016152b6565b509695505050505050565b80151581146137ea57600080fd5b6000806040838503121561530257600080fd5b823567ffffffffffffffff81111561531957600080fd5b6153258582860161526d565b9250506020830135615336816152e1565b809150509250929050565b60005b8381101561535c578181015183820152602001615344565b838111156112995750506000910152565b602081526000825180602084015261538c816040850160208701615341565b601f01601f19169190910160400192915050565b6000602082840312156153b257600080fd5b5035919050565b600080604083850312156153cc57600080fd5b82356153d7816151a7565b946020939093013593505050565b600080600080608085870312156153fb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561542a57600080fd5b8235615435816151a7565b91506020830135615336816152e1565b60008060006060848603121561545a57600080fd5b8335615465816151a7565b92506020840135615475816151a7565b929592945050506040919091013590565b6000806000806080858703121561549c57600080fd5b84356154a7816152e1565b935060208501356154b7816152e1565b925060408501356154c7816152e1565b915060608501356154d7816152e1565b939692955090935050565b600080600080600060a086880312156154fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60ff811681146137ea57600080fd5b60006020828403121561553e57600080fd5b81356119678161551d565b60008060006060848603121561555e57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561558757600080fd5b8135611967816152e1565b803561ffff811681146151c757600080fd5b6000806000606084860312156155b957600080fd5b6155c284615592565b92506155d060208501615592565b91506155de60408501615592565b90509250925092565b600080600080608085870312156155fd57600080fd5b61560685615592565b935061561460208601615592565b925061562260408601615592565b915061563060608601615592565b905092959194509250565b6000806040838503121561564e57600080fd5b8235615659816151a7565b91506020830135615336816151a7565b60008060006060848603121561567e57600080fd5b833567ffffffffffffffff8082111561569657600080fd5b6156a28783880161526d565b94506020915081860135818111156156b957600080fd5b86019050601f810187136156cc57600080fd5b80356156da61528e82615249565b81815260059190911b820183019083810190898311156156f957600080fd5b928401925b82841015615717578335825292840192908401906156fe565b80965050505050506155de604085016151bc565b60006020828403121561573d57600080fd5b5051919050565b60006020828403121561575657600080fd5b8151611967816152e1565b600081518084526020808501945080840160005b8381101561579a5781516001600160a01b031687529582019590820190600101615775565b509495945050505050565b6040815260006157b86040830185615761565b905082151560208301529392505050565b600181811c908216806157dd57607f821691505b60208210811415615817577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b8085111561588757816000190482111561586d5761586d61581d565b8085161561587a57918102915b93841c9390800290615851565b509250929050565b60008261589e575060016111e8565b816158ab575060006111e8565b81600181146158c157600281146158cb576158e7565b60019150506111e8565b60ff8411156158dc576158dc61581d565b50506001821b6111e8565b5060208310610133831016604e8410600b841016171561590a575081810a6111e8565b615914838361584c565b80600019048211156159285761592861581d565b029392505050565b6000611967838361588f565b60008160001904831182151516156159565761595661581d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156159cb576159cb61581d565b500390565b60006000198214156159e4576159e461581d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a2957615a296159eb565b500490565b600061ffff808316818516808303821115615a4b57615a4b61581d565b01949350505050565b600061ffff83811690831681811015615a6f57615a6f61581d565b039392505050565b600082601f830112615a8857600080fd5b815167ffffffffffffffff811115615aa257615aa26151e9565b615ab56020601f19601f84011601615218565b818152846020838601011115615aca57600080fd5b6117e6826020830160208701615341565b60008060008060808587031215615af157600080fd5b845167ffffffffffffffff80821115615b0957600080fd5b615b1588838901615a77565b95506020870151915080821115615b2b57600080fd5b50615b3887828801615a77565b9350506040850151915060608501516154d78161551d565b600061196760ff84168361588f565b600082615b6e57615b6e6159eb565b500690565b600060208284031215615b8557600080fd5b8151611967816151a7565b600080600060608486031215615ba557600080fd5b8351925060208401519150604084015190509250925092565b600060ff821660ff811415615bd557615bd561581d565b60010192915050565b8281526040602082015260006117e66040830184615761565b60006020808385031215615c0a57600080fd5b825167ffffffffffffffff811115615c2157600080fd5b8301601f81018513615c3257600080fd5b8051615c4061528e82615249565b81815260059190911b82018301908381019087831115615c5f57600080fd5b928401925b82841015615c7d57835182529284019290840190615c64565b979650505050505050565b60008219821115615c9b57615c9b61581d565b500190565b85815284602082015260a060408201526000615cbf60a0830186615761565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212207ef865eb22fb08e7f4604816487e347c59933dbe51a68129c770668c289f9c0264736f6c634300080b0033

Deployed Bytecode Sourcemap

6798:28753:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35301:247;;;;;;;;;;-1:-1:-1;35301:247:0;;;;;:::i;:::-;;:::i;:::-;;9011:73;;;;;;;;;;;;9042:42;9011:73;;;;;-1:-1:-1;;;;;728:55:1;;;710:74;;698:2;683:18;9011:73:0;;;;;;;;9553:28;;;;;;;;;;;;;;;;;;;941:25:1;;;929:2;914:18;9553:28:0;795:177:1;20168:172:0;;;;;;;;;;-1:-1:-1;20168:172:0;;;;;:::i;:::-;;:::i;15376:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8950:26::-;;;;;;;;;;-1:-1:-1;8950:26:0;;;;-1:-1:-1;;;;;8950:26:0;;;20926:150;;;;;;;;;;-1:-1:-1;20926:150:0;;;;;:::i;:::-;;:::i;16067:159::-;;;;;;;;;;-1:-1:-1;16067:159:0;;;;;:::i;:::-;;:::i;:::-;;;4668:14:1;;4661:22;4643:41;;4631:2;4616:18;16067:159:0;4503:187:1;24810:279:0;;;;;;;;;;-1:-1:-1;24810:279:0;;;;;:::i;:::-;;:::i;18230:1519::-;;;;;;;;;;-1:-1:-1;18230:1519:0;;;;;:::i;:::-;;:::i;15079:115::-;;;;;;;;;;;;;:::i;16732:306::-;;;;;;;;;;-1:-1:-1;16732:306:0;;;;;:::i;:::-;;:::i;9626:38::-;;;;;;;;;;-1:-1:-1;9626:38:0;;;;;;;;20723:195;;;;;;;;;;-1:-1:-1;20723:195:0;;;;;:::i;:::-;;:::i;8747:42::-;;;;;;;;;;;;8785:4;8747:42;;19757:250;;;;;;;;;;-1:-1:-1;19757:250:0;;;;;:::i;:::-;;:::i;9588:25::-;;;;;;;;;;;;;;;;15200:80;;;;;;;;;;-1:-1:-1;15268:9:0;;15200:80;;15268:9;;;;6727:36:1;;6715:2;6700:18;15200:80:0;6585:184:1;20607:108:0;;;;;;;;;;-1:-1:-1;20607:108:0;;;;;:::i;:::-;;:::i;24276:225::-;;;;;;;;;;-1:-1:-1;24276:225:0;;;;;:::i;:::-;;:::i;23421:338::-;;;;;;;;;;-1:-1:-1;23421:338:0;;;;;:::i;:::-;;:::i;22860:140::-;;;;;;;;;;-1:-1:-1;22860:140:0;;;;;:::i;:::-;;:::i;21084:147::-;;;;;;;;;;-1:-1:-1;21084:147:0;;;;;:::i;:::-;;:::i;8983:21::-;;;;;;;;;;-1:-1:-1;8983:21:0;;;;-1:-1:-1;;;;;8983:21:0;;;24509:293;;;;;;;;;;-1:-1:-1;24509:293:0;;;;;:::i;:::-;;:::i;9762:34::-;;;;;;;;;;-1:-1:-1;9762:34:0;;;;;;;;13937:588;;;;;;;;;;-1:-1:-1;13937:588:0;;;;;:::i;:::-;;:::i;23146:125::-;;;;;;;;;;-1:-1:-1;23146:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23235:28:0;23211:4;23235:28;;;:19;:28;;;;;;;;;23146:125;9803:36;;;;;;;;;;-1:-1:-1;9803:36:0;;;;;;;;;;;23279:134;;;;;;;;;;-1:-1:-1;23279:134:0;;;;;:::i;:::-;;:::i;23008:130::-;;;;;;;;;;-1:-1:-1;23008:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;23100:30:0;23076:4;23100:30;;;:21;:30;;;;;;;;;23008:130;25097:120;;;;;;;;;;-1:-1:-1;25097:120:0;;;;;:::i;:::-;;:::i;15688:198::-;;;;;;;;;;-1:-1:-1;15688:198:0;;;;;:::i;:::-;;:::i;14533:193::-;;;;;;;;;;;;;:::i;10128:42::-;;;;;;;;;;;;;;;;8088:162;;;;;;;;;;-1:-1:-1;8088:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8426:6:1;8459:15;;;8441:34;;8511:15;;;8506:2;8491:18;;8484:43;8563:15;;;8543:18;;;8536:43;;;;8615:15;;8610:2;8595:18;;8588:43;8668:15;;;8662:3;8647:19;;8640:44;8403:3;8388:19;8088:162:0;8167:523:1;17594:500:0;;;;;;;;;;-1:-1:-1;17594:500:0;;;;;:::i;:::-;;:::i;18102:120::-;;;;;;;;;;-1:-1:-1;18102:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;18194:20:0;18170:4;18194:20;;;:11;:20;;;;;;;;;18102:120;15462:79;;;;;;;;;;-1:-1:-1;15514:7:0;15532:6;-1:-1:-1;;;;;15532:6:0;15462:79;;16551:173;;;;;;;;;;;;;:::i;34703:396::-;;;;;;;;;;;;;:::i;10177:43::-;;;;;;;;;;-1:-1:-1;10177:43:0;;;;;;;;15286:84;;;;;;;;;;;;;:::i;24145:123::-;;;;;;;;;;-1:-1:-1;24145:123:0;;;;;:::i;:::-;;:::i;15894:165::-;;;;;;;;;;-1:-1:-1;15894:165:0;;;;;:::i;:::-;;:::i;22584:268::-;;;;;;;;;;-1:-1:-1;22584:268:0;;;;;:::i;:::-;;:::i;22119:457::-;;;;;;;;;;-1:-1:-1;22119:457:0;;;;;:::i;:::-;;:::i;21243:427::-;;;;;;;;;;-1:-1:-1;21243:427:0;;;;;:::i;:::-;;:::i;21678:433::-;;;;;;;;;;-1:-1:-1;21678:433:0;;;;;:::i;:::-;;:::i;8431:167::-;;;;;;;;;;-1:-1:-1;8431:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:163;;;;;;;;;;-1:-1:-1;8259:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20348:118;;;;;;;;;;-1:-1:-1;20348:118:0;;;;;:::i;:::-;;:::i;23973:164::-;;;;;;;;;;-1:-1:-1;23973:164:0;;;;;:::i;:::-;;:::i;10072:49::-;;;;;;;;;;;;;;;;8607:131;;;;;;;;;;-1:-1:-1;8607:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9831:6:1;9864:15;;;9846:34;;9916:15;;;9911:2;9896:18;;9889:43;9968:15;;;9948:18;;;9941:43;;;;10020:15;;;10015:2;10000:18;;9993:43;9808:3;9793:19;8607:131:0;9598:444:1;23767:198:0;;;;;;;;;;-1:-1:-1;23767:198:0;;;;;:::i;:::-;;:::i;15547:133::-;;;;;;;;;;-1:-1:-1;15547:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15649:19:0;;;15631:7;15649:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15547:133;11504:1844;;;;;;;;;;-1:-1:-1;11504:1844:0;;;;;:::i;:::-;;:::i;9471:44::-;;;;;;;;;;;;;;;;17046:540;;;;;;;;;;-1:-1:-1;17046:540:0;;;;;:::i;:::-;;:::i;35107:182::-;;;;;;;;;;;;;:::i;20015:145::-;;;;;;;;;;-1:-1:-1;20015:145:0;;;;;:::i;:::-;;:::i;9196:198::-;;;;;;;;;;-1:-1:-1;9196:198:0;;;;;;-1:-1:-1;;;;;9196:198:0;;;;;;;;;;;-1:-1:-1;;;;;12351:15:1;;;12333:34;;12403:15;;;;12398:2;12383:18;;12376:43;12245:18;9196:198:0;12066:359:1;9425:39:0;;;;;;;;;;-1:-1:-1;9425:39:0;;;;;;;;;;;20474:125;;;;;;;;;;-1:-1:-1;20474:125:0;;;;;:::i;:::-;;:::i;35301:247::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;;;;;;;;;-1:-1:-1;;;;;35387:22:0;::::1;35404:4;35387:22;;35378:58;;;::::0;-1:-1:-1;;;35378:58:0;;12978:2:1;35378:58:0::1;::::0;::::1;12960:21:1::0;13017:2;12997:18;;;12990:30;13056:24;13036:18;;;13029:52;13098:18;;35378:58:0::1;12776:346:1::0;35378:58:0::1;35447:12;35501:6:::0;35509:30:::1;::::0;;;;35533:4:::1;35509:30;::::0;::::1;710:74:1::0;35469:5:0;;-1:-1:-1;;;;;35486:14:0;;::::1;::::0;::::1;::::0;35501:6;;;::::1;::::0;35486:14;;35509:15:::1;::::0;683:18:1;;35509:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35486:54;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13508:55:1;;;35486:54:0::1;::::0;::::1;13490:74:1::0;13580:18;;;13573:34;13463:18;;35486:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35367:181;35301:247:::0;:::o;20168:172::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;20276:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20276:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20314:8;;20324:7;;20276:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20168:172:::0;;:::o;15376:80::-;15424:13;15448:5;15441:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15376:80;:::o;20926:150::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;21010:3:::1;21003;:10;;20995:31;;;::::0;-1:-1:-1;;;20995:31:0;;15348:2:1;20995:31:0::1;::::0;::::1;15330:21:1::0;15387:1;15367:18;;;15360:29;15425:10;15405:18;;;15398:38;15453:18;;20995:31:0::1;15146:331:1::0;20995:31:0::1;21037:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;941:25:1::0;;;21037:9:0;;;::::1;-1:-1:-1::0;;;;;21037:9:0::1;::::0;:26:::1;::::0;914:18:1;;21037:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20926:150:::0;:::o;16067:159::-;16142:4;16159:37;16168:10;16180:7;16189:6;16159:8;:37::i;:::-;-1:-1:-1;16214:4:0;16067:159;;;;;:::o;24810:279::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;24951:11:::1;24955:7:::0;24951:2:::1;:11;:::i;:::-;24942:20;::::0;:6;:20:::1;:::i;:::-;24930:9;:32:::0;24996:12:::1;25000:8:::0;24996:2:::1;:12;:::i;:::-;24986:22;::::0;:7;:22:::1;:::i;:::-;24973:10;:35:::0;25027:9:::1;::::0;25040:11:::1;-1:-1:-1::0;25027:24:0;::::1;::::0;:53:::1;;;25069:11;25055:10;;:25;;25027:53;25019:62;;;::::0;::::1;;24810:279:::0;;;;:::o;18230:1519::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;18324:7:::1;18320:1422;;;-1:-1:-1::0;;;;;18357:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18356:21;18348:62;;;::::0;-1:-1:-1;;;18348:62:0;;17600:2:1;18348:62:0::1;::::0;::::1;17582:21:1::0;17639:2;17619:18;;;17612:30;17678;17658:18;;;17651:58;17726:18;;18348:62:0::1;17398:352:1::0;18348:62:0::1;-1:-1:-1::0;;;;;18428:16:0;::::1;18447:1;18428:16:::0;;;:7:::1;:16;::::0;;;;;:20;18425:116:::1;;-1:-1:-1::0;;;;;18508:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18488:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18469:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18425:116:::1;-1:-1:-1::0;;;;;18555:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18555:27:0::1;18578:4;18555:27;::::0;;18611:6:::1;::::0;;;::::1;18600:17;18597:79;;18637:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;18637:23:0;;;;;::::1;::::0;;-1:-1:-1;;18637:23:0::1;-1:-1:-1::0;;;;;18637:23:0;::::1;;::::0;;18597:79:::1;18230:1519:::0;;:::o;18320:1422::-:1;18698:7;18693:1049;;-1:-1:-1::0;;;;;18730:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18722:61;;;::::0;-1:-1:-1;;;18722:61:0;;17957:2:1;18722:61:0::1;::::0;::::1;17939:21:1::0;17996:2;17976:18;;;17969:30;18035;18015:18;;;18008:58;18083:18;;18722:61:0::1;17755:352:1::0;18722:61:0::1;18813:6;::::0;-1:-1:-1;;;;;18802:17:0;;::::1;18813:6:::0;::::1;18802:17;18798:933;;;18878:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;18859:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;18840:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;18907:7:::1;:16:::0;;;;;:20;;;18946:11:::1;:20:::0;;;:28;;-1:-1:-1;;18946:28:0::1;::::0;;18230:1519;;:::o;18798:933::-:1;18999:9;:16:::0;19019:1:::1;18999:21;18996:735;;;19079:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;19060:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19041:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19108:7:::1;:16:::0;;;;;:20;;;19147:11:::1;:20:::0;;;:28;;-1:-1:-1;;19147:28:0::1;::::0;;19194:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19194:15:0;;;;;-1:-1:-1;;19194:15:0::1;::::0;;;;;18230:1519;;:::o;18996:735::-:1;19255:9;19250:466;19274:9;:16:::0;19270:20;::::1;19250:466;;;19340:7;-1:-1:-1::0;;;;;19324:23:0::1;:9;19334:1;19324:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19324:12:0::1;:23;19320:377;;;19391:9;19401:16:::0;;:20:::1;::::0;19420:1:::1;::::0;19401:20:::1;:::i;:::-;19391:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19376:9:::1;:12:::0;;-1:-1:-1;;;;;19391:31:0;;::::1;::::0;19386:1;;19376:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;19376:46:0::1;-1:-1:-1::0;;;;;19376:46:0;;::::1;;::::0;;19449:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;19534:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;19515:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19496:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;19571:11:::1;:20:::0;;;:28;;-1:-1:-1;;19571:28:0::1;::::0;;19626:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19626:15:0;;;;;-1:-1:-1;;19626:15:0::1;::::0;;;;;35486:54:::1;35367:181;35301:247:::0;:::o;19320:377::-:1;19292:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19250:466;;15079:115:::0;15134:7;15149;;15160:1;15149:12;15145:31;;;15165:8;;;15145:31;-1:-1:-1;15184:7:0;;;15079:115::o;16732:306::-;-1:-1:-1;;;;;16853:19:0;;16832:4;16853:19;;;:11;:19;;;;;;;;16873:10;16853:31;;;;;;;;-1:-1:-1;;16853:52:0;16849:126;;-1:-1:-1;;;;;16922:19:0;;;;;;:11;:19;;;;;;;;16942:10;16922:31;;;;;;;:41;;16957:6;;16922:19;:41;;16957:6;;16922:41;:::i;:::-;;;;-1:-1:-1;;16849:126:0;16994:36;17004:6;17012:9;17023:6;16994:9;:36::i;:::-;16987:43;16732:306;-1:-1:-1;;;;16732:306:0:o;20723:195::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;20845:9:::1;::::0;:65:::1;::::0;;;;19052:14:1;;19045:22;20845:65:0::1;::::0;::::1;19027:41:1::0;19111:14;;19104:22;19084:18;;;19077:50;19170:14;;19163:22;19143:18;;;19136:50;19229:14;;19222:22;19202:18;;;19195:50;20845:9:0;;;::::1;-1:-1:-1::0;;;;;20845:9:0::1;::::0;:24:::1;::::0;18999:19:1;;20845:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20723:195:::0;;;;:::o;19757:250::-;19823:7;19862;;19851;:18;;19843:73;;;;-1:-1:-1;;;19843:73:0;;19458:2:1;19843:73:0;;;19440:21:1;19497:2;19477:18;;;19470:30;19536:34;19516:18;;;19509:62;19607:12;19587:18;;;19580:40;19637:19;;19843:73:0;19256:406:1;19843:73:0;19927:19;19950:10;:8;:10::i;:::-;19927:33;-1:-1:-1;19978:21:0;19927:33;19978:7;:21;:::i;:::-;19971:28;19757:250;-1:-1:-1;;;19757:250:0:o;20607:108::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;20676:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;728:55:1;;;20676:31:0::1;::::0;::::1;710:74:1::0;20676:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;683:18:1;;20676:31:0::1;564:226:1::0;24276:225:0;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;24385:9:::1;24380:114;24404:8;:15;24400:1;:19;24380:114;;;24475:7;24441:18;:31;24460:8;24469:1;24460:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24441:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24441:31:0;:41;;-1:-1:-1;;24441:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24421:3;::::1;::::0;::::1;:::i;:::-;;;;24380:114;;23421:338:::0;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;23635:16:::1;23615;23605:7;;:26;;;;:::i;:::-;23604:47;;;;:::i;:::-;23588:13;:63:::0;23676:7:::1;::::0;23703:13;;23676:23:::1;::::0;23686:13;;23676:23:::1;:::i;:::-;23675:41;;;;:::i;:::-;23662:10;:54:::0;23727:17:::1;:24:::0;-1:-1:-1;;;;23421:338:0:o;22860:140::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;-1:-1:-1;;;;;22952:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;22952:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22860:140::o;21084:147::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;21173:2:::1;21164:5;:11;;;;21156:20;;;::::0;::::1;;21187:9;::::0;:36:::1;::::0;;;;6757:4:1;6745:17;;21187:36:0::1;::::0;::::1;6727::1::0;21187:9:0;;;::::1;-1:-1:-1::0;;;;;21187:9:0::1;::::0;:29:::1;::::0;6700:18:1;;21187:36:0::1;6585:184:1::0;24509:293:0;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;24654:10:::1;24636:14;24640:10:::0;24636:2:::1;:14;:::i;:::-;24628:22;::::0;:5;:22:::1;:::i;:::-;:36;;24620:45;;;::::0;::::1;;24692:8;24684:4;:16;;24676:25;;;::::0;::::1;;24746:14;24750:10:::0;24746:2:::1;:14;:::i;:::-;24738:22;::::0;:5;:22:::1;:::i;:::-;24712:23;:48:::0;24771:16:::1;:23:::0;-1:-1:-1;;24509:293:0:o;13937:588::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;-1:-1:-1;;;;;14016:22:0;::::1;14008:96;;;::::0;-1:-1:-1;;;14008:96:0;;20183:2:1;14008:96:0::1;::::0;::::1;20165:21:1::0;20222:2;20202:18;;;20195:30;20261:34;20241:18;;;20234:62;20332:31;20312:18;;;20305:59;20381:19;;14008:96:0::1;19981:425:1::0;14008:96:0::1;-1:-1:-1::0;;;;;14123:16:0;::::1;9042:42;14123:16;;14115:90;;;::::0;-1:-1:-1;;;14115:90:0;;20183:2:1;14115:90:0::1;::::0;::::1;20165:21:1::0;20222:2;20202:18;;;20195:30;20261:34;20241:18;;;20234:62;20332:31;20312:18;;;20305:59;20381:19;;14115:90:0::1;19981:425:1::0;14115:90:0::1;14236:6;::::0;;14216:34:::1;::::0;-1:-1:-1;;;;;14236:6:0;;::::1;::::0;14216:19:::1;:34::i;:::-;14261:35;14281:8;14291:4;14261:19;:35::i;:::-;14340:1;14330:6:::0;;14320:17:::1;::::0;-1:-1:-1;;;;;14330:6:0::1;14320:9;:17::i;:::-;:21;14317:99;;;14368:6;::::0;14358:46:::1;::::0;-1:-1:-1;;;;;14368:6:0::1;14376:8:::0;14386:17:::1;14368:6:::0;14386:9:::1;:17::i;:::-;14358:9;:46::i;:::-;;14317:99;14436:6;:17:::0;;-1:-1:-1;;14436:17:0::1;-1:-1:-1::0;;;;;14436:17:0;::::1;::::0;;::::1;::::0;;14469:38:::1;::::0;14436:17;;;;14469:38:::1;::::0;14436:6;14469:38:::1;13937:588:::0;:::o;23279:134::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;-1:-1:-1;;;;;23367:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;23367:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23279:134::o;25097:120::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;25175:19:::1;:34:::0;;-1:-1:-1;;25175:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25097:120::o;15688:198::-;-1:-1:-1;;;;;15778:20:0;;15754:7;15778:20;;;:11;:20;;;;;;;;15774:49;;;-1:-1:-1;;;;;;15807:16:0;;;;;:7;:16;;;;;;;15688:198::o;15774:49::-;-1:-1:-1;;;;;15861:16:0;;;;;;:7;:16;;;;;;15841:37;;:19;:37::i;14533:193::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;14618:6:::1;::::0;;14598:34:::1;::::0;-1:-1:-1;;;;;14618:6:0;;::::1;::::0;14598:19:::1;:34::i;:::-;14660:1;14643:19:::0;;-1:-1:-1;;14643:19:0::1;::::0;;14678:40:::1;::::0;14660:1;;14678:40:::1;::::0;14660:1;;14678:40:::1;14533:193::o:0;17594:500::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;17675:16;17671:416:::1;;-1:-1:-1::0;;;;;17708:13:0;;::::1;17724:5;17708:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;17708:21:0::1;::::0;;17744:9:::1;::::0;:32;;;;;::::1;::::0;::::1;20579:74:1::0;;;;20669:18;;;20662:50;;;;17744:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20552:18:1;;17744:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;17671:416;17813:17;::::0;:22;17809:136:::1;;17902:6;17882:17;;17864:15;:35;;;;:::i;:::-;:44;17856:73;;;::::0;-1:-1:-1;;;17856:73:0;;20925:2:1;17856:73:0::1;::::0;::::1;20907:21:1::0;20964:2;20944:18;;;20937:30;21003:18;20983;;;20976:46;21039:18;;17856:73:0::1;20723:340:1::0;17856:73:0::1;-1:-1:-1::0;;;;;17959:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;17959:20:0::1;17975:4;17959:20:::0;;::::1;::::0;;;18014:15:::1;17994:17;:35:::0;;;18044:9:::1;::::0;:31;;;;;;;::::1;20579:74:1::0;;;;20669:18;;;20662:50;18044:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20552:18:1;;18044:31:0::1;20411:307:1::0;16551:173:0;16615:4;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;16664:9:::1;::::0;16632:62:::1;::::0;16649:4:::1;::::0;-1:-1:-1;;;;;16664:9:0::1;-1:-1:-1::0;;16632:8:0::1;:62::i;:::-;-1:-1:-1::0;16712:4:0::1;16551:173:::0;:::o;34703:396::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;34765:14:::1;::::0;::::1;;34764:15;34756:52;;;::::0;-1:-1:-1;;;34756:52:0;;21270:2:1;34756:52:0::1;::::0;::::1;21252:21:1::0;21309:2;21289:18;;;21282:30;21348:26;21328:18;;;21321:54;21392:18;;34756:52:0::1;21068:348:1::0;34756:52:0::1;34827:16;::::0;::::1;::::0;::::1;;;34819:53;;;::::0;-1:-1:-1;;;34819:53:0;;21623:2:1;34819:53:0::1;::::0;::::1;21605:21:1::0;21662:2;21642:18;;;21635:30;21701:26;21681:18;;;21674:54;21745:18;;34819:53:0::1;21421:348:1::0;34819:53:0::1;34894:9;::::0;;;::::1;-1:-1:-1::0;;;;;34894:9:0::1;34883:99;;34934:9;:36:::0;;;::::1;34964:4;34934:36:::0;::::1;;::::0;;34883:99:::1;34996:9;::::0;35016:6:::1;::::0;35038:9:::1;::::0;34996:52:::1;::::0;;;;-1:-1:-1;;;;;35016:6:0;;::::1;34996:52;::::0;::::1;21972:74:1::0;35024:12:0::1;22062:18:1::0;;;22055:34;35038:9:0::1;::::0;;::::1;22105:18:1::0;;;22098:45;34996:9:0;;;::::1;;::::0;:19:::1;::::0;21945:18:1;;34996:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;34992:68:::0;35070:14:::1;:21:::0;;-1:-1:-1;;35070:21:0::1;35087:4;35070:21;::::0;;34703:396::o;15286:84::-;15336:13;15360:7;15353:14;;;;;:::i;24145:123::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;24226:24:::1;:34:::0;;-1:-1:-1;;24226:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24145:123::o;15894:165::-;15972:4;15989:40;15999:10;16011:9;16022:6;15989:9;:40::i;:::-;-1:-1:-1;16047:4:0;;15894:165;-1:-1:-1;;;15894:165:0:o;22584:268::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;22684:7:::1;:29:::0;;::::1;22764:23:::0;;::::1;::::0;::::1;::::0;22724:29;;::::1;::::0;::::1;-1:-1:-1::0;;22724:29:0;;;22684;;::::1;22724::::0;;;;;;;::::1;22764:23;;::::0;;22781:6;22814:21:::1;22744:9:::0;22704;22814:21:::1;:::i;:::-;:30;;;;:::i;:::-;22798:7;:46:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;22798:46:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;22584:268:0:o;22119:457::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;22242:12:::1;22291:6:::0;22279:9;22257:19:::1;22267:9:::0;22257:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:40;;;;:::i;:::-;22242:55;;8785:4;22316:5;:20;;;;22308:29;;;::::0;::::1;;22348:14;:32:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;22391:36:0;;;;;;;;;;::::1;;;22485:30:::0;;22438:36;;;::::1;;-1:-1:-1::0;;22485:30:0;;;;;::::1;::::0;;;::::1;;::::0;;22553:15:::1;22348:32:::0;22553:5;:15:::1;:::i;:::-;22526:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;22119:457:0:o;21243:427::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;21361:12:::1;21410:6:::0;21398:9;21376:19:::1;21386:9:::0;21376:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:40;;;;:::i;:::-;21361:55;;8785:4;21435:5;:20;;;;21427:29;;;::::0;::::1;;21467:9;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21505:31:0;;;;;;;;;;::::1;;;21589:25:::0;;21547:31;;;::::1;;-1:-1:-1::0;;21589:25:0;;;;;::::1;::::0;;;::::1;;::::0;;21647:15:::1;21467:27:::0;21647:5;:15:::1;:::i;:::-;21625:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21243:427:0:o;21678:433::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;21797:12:::1;21846:6:::0;21834:9;21812:19:::1;21822:9:::0;21812:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:40;;;;:::i;:::-;21797:55;;8785:4;21871:5;:20;;;;21863:29;;;::::0;::::1;;21903:10;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21942:32:0;;;;;;;;;;::::1;;;22028:26:::0;;21985:32;;;::::1;;-1:-1:-1::0;;22028:26:0;;;;;::::1;::::0;;;::::1;;::::0;;22088:15:::1;21903:28:::0;22088:5;:15:::1;:::i;:::-;22065:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;21678:433:0:o;20348:118::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;20422:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;728:55:1;;;20422:36:0::1;::::0;::::1;710:74:1::0;20422:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;683:18:1;;20422:36:0::1;564:226:1::0;23973:164:0;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;24049:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;24049:29:0;;::::1;;::::0;;24094:35:::1;::::0;::::1;::::0;::::1;::::0;24071:7;4668:14:1;4661:22;4643:41;;4631:2;4616:18;;4503:187;24094:35:0::1;;;;;;;;23973:164:::0;:::o;23767:198::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;23868:18;:36;;-1:-1:-1;;;;;23868:36:0;;::::1;-1:-1:-1::0;;23868:36:0;;::::1;;::::0;;;:11:::1;23915:42:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;23767:198::o;11504:1844::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;11643:19:::1;::::0;;;::::1;;;11642:20;11634:34;;;::::0;-1:-1:-1;;;11634:34:0;;22807:2:1;11634:34:0::1;::::0;::::1;22789:21:1::0;22846:1;22826:18;;;22819:29;22884:3;22864:18;;;22857:31;22905:18;;11634:34:0::1;22605:324:1::0;11634:34:0::1;11706:7;:14;11687:8;:15;:33;11679:47;;;::::0;-1:-1:-1;;;11679:47:0;;23136:2:1;11679:47:0::1;::::0;::::1;23118:21:1::0;23175:1;23155:18;;;23148:29;23213:3;23193:18;;;23186:31;23234:18;;11679:47:0::1;22934:324:1::0;11679:47:0::1;11737:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11737:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11785::::1;::::0;;;;11812:4:::1;11785:33;::::0;::::1;710:74:1::0;11785:9:0;::::1;;::::0;:18:::1;::::0;683::1;;11785:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;11781:49:::0;11844:9:::1;;;;;;;;;-1:-1:-1::0;;;;;11844:9:0::1;-1:-1:-1::0;;;;;11844:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;11844:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;11840:454;;12271:11;::::0;-1:-1:-1;;;12271:11:0;;24779:2:1;12271:11:0::1;::::0;::::1;24761:21:1::0;24818:1;24798:18;;;24791:29;24856:3;24836:18;;;24829:31;24877:18;;12271:11:0::1;24577:324:1::0;11840:454:0::1;11994:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12025:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12060:14:0::1;:35:::0;;;12110:9:::1;:24:::0;;-1:-1:-1;;12110:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;12176:13:::1;::::0;:2:::1;:13;:::i;:::-;12159:14;;:30;;;;:::i;:::-;12149:7;:40:::0;;;12222:13:::1;::::0;-1:-1:-1;;12222:13:0::1;:::i;:::-;12215:21;::::0;-1:-1:-1;;12215:21:0::1;:::i;:::-;12204:7;:33:::0;-1:-1:-1;;;;12324:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;12324:9:0::1;-1:-1:-1::0;;;;;12324:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12313:42:0::1;;12356:9;;;;;;;;;-1:-1:-1::0;;;;;12356:9:0::1;-1:-1:-1::0;;;;;12356:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12313:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;12351:15:1;;;12313:75:0::1;::::0;::::1;12333:34:1::0;12382:4:0::1;12383:18:1::0;;;12376:43;12245:18;;12313:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12304:6;:84:::0;;-1:-1:-1;;12304:84:0::1;-1:-1:-1::0;;;;;12304:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;12399:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;12399:22:0::1;-1:-1:-1::0;12399:22:0::1;::::0;;12449:7:::1;::::0;12464:5:::1;::::0;12449:11:::1;::::0;:7;:11:::1;:::i;:::-;12448:21;;;;:::i;:::-;12432:13;:37:::0;12494:7:::1;::::0;12509:5:::1;::::0;12494:11:::1;::::0;12504:1:::1;12494:11;:::i;:::-;12493:21;;;;:::i;:::-;12480:10;:34:::0;12525:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;12585:7:::1;::::0;12525:26;12575:6;;-1:-1:-1;;;;;12575:6:0;;::::1;12567:15:::0;;12547:4:::1;12567:15;::::0;;;;;:25;;;;12629:6;;12637:7:::1;::::0;12608:37;;12629:6;::::1;::::0;12608:37:::1;::::0;::::1;::::0;941:25:1;;929:2;914:18;;795:177;12608:37:0::1;;;;;;;;12667:6;::::0;12683:9:::1;::::0;12658:55:::1;::::0;-1:-1:-1;;;;;12667:6:0;;::::1;::::0;12683:9:::1;-1:-1:-1::0;;12658:8:0::1;:55::i;:::-;12756:9;::::0;12724:62:::1;::::0;12741:4:::1;::::0;-1:-1:-1;;;;;12756:9:0::1;-1:-1:-1::0;;12724:8:0::1;:62::i;:::-;12803:9;12799:167;12822:8;:15;12818:1;:19;12799:167;;;12892:9;::::0;12858:14:::1;::::0;12888:13:::1;::::0;12892:9:::1;;12888:2;:13;:::i;:::-;12875:7;12883:1;12875:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;12858:43;;12916:38;12926:6;::::0;::::1;;;;;;-1:-1:-1::0;;;;;12926:6:0::1;12934:8;12943:1;12934:11;;;;;;;;:::i;:::-;;;;;;;12947:6;12916:9;:38::i;:::-;;12843:123;12839:3;;;;;:::i;:::-;;;;12799:167;;;-1:-1:-1::0;12988:6:0::1;::::0;12978:51:::1;::::0;-1:-1:-1;;;;;12988:6:0::1;13004:4;13011:17;12988:6:::0;13011:9:::1;:17::i;12978:51::-;-1:-1:-1::0;13042:9:0::1;::::0;-1:-1:-1;;;;;13042:9:0::1;:25;13075:21;13120:4;13140:24;13120:4:::0;13140:9:::1;:24::i;:::-;13179:1;13265:6:::0;;13042:270:::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;26138:15:1;;;13042:270:0::1;::::0;::::1;26120:34:1::0;26170:18;;;26163:34;;;;26213:18;;;26206:34;;;26256:18;;;26249:34;;;;13265:6:0;;;::::1;26299:19:1::0;;;26292:44;13286:15:0::1;26352:19:1::0;;;26345:35;26031:19;;13042:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13325:15;:13;:15::i;17046:540::-:0;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;17115:20:::1;17148:9;17115:43;;17169:16;17199:10;-1:-1:-1::0;;;;;17199:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17188:40:0::1;;17237:4;17244:10;-1:-1:-1::0;;;;;17244:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17188:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;12351:15:1;;;17188:74:0::1;::::0;::::1;12333:34:1::0;12403:15;;12383:18;;;12376:43;12245:18;;17188:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17169:93:::0;-1:-1:-1;;;;;;17277:22:0;::::1;17273:200;;17336:10;-1:-1:-1::0;;;;;17336:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17325:43:0::1;;17377:4;17384:10;-1:-1:-1::0;;;;;17384:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17325:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;12351:15:1;;;17325:77:0::1;::::0;::::1;12333:34:1::0;12403:15;;12383:18;;;12376:43;12245:18;;17325:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17316:6;:86:::0;;-1:-1:-1;;17316:86:0::1;-1:-1:-1::0;;;;;17316:86:0;;;::::1;::::0;;;::::1;::::0;;17273:200:::1;;;17444:6;:17:::0;;-1:-1:-1;;17444:17:0::1;-1:-1:-1::0;;;;;17444:17:0;::::1;;::::0;;17273:200:::1;17483:9;:22:::0;;-1:-1:-1;;17483:22:0::1;-1:-1:-1::0;;;;;17483:22:0;::::1;::::0;;::::1;::::0;;;17516:62:::1;::::0;17533:4:::1;::::0;-1:-1:-1;;17516:8:0::1;:62::i;35107:182::-:0;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;35174:16:::1;::::0;::::1;::::0;::::1;;;35173:17;35165:58;;;::::0;-1:-1:-1;;;35165:58:0;;26904:2:1;35165:58:0::1;::::0;::::1;26886:21:1::0;26943:2;26923:18;;;26916:30;26982;26962:18;;;26955:58;27030:18;;35165:58:0::1;26702:352:1::0;35165:58:0::1;35242:6;::::0;;35234:47:::1;::::0;-1:-1:-1;;;;;35242:6:0;;::::1;::::0;35259:21:::1;35234:47:::0;::::1;;;::::0;35259:21;;35234:47;35242:6;35234:47;35259:21;35242:6;35234:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35107:182::o:0;20015:145::-;10586:6;;-1:-1:-1;;;;;10586:6:0;10596:10;10586:20;10578:50;;;;-1:-1:-1;;;10578:50:0;;12632:2:1;10578:50:0;;;12614:21:1;12671:2;12651:18;;;12644:30;-1:-1:-1;;;12690:18:1;;;12683:47;12747:18;;10578:50:0;12430:341:1;10578:50:0;20105:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;20597:55:1;;;20105:47:0::1;::::0;::::1;20579:74:1::0;20696:14;;20689:22;20669:18;;;20662:50;20105:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;20552:18:1;;20105:47:0::1;20411:307:1::0;20474:125:0;20559:9;;:32;;;;;-1:-1:-1;;;;;728:55:1;;;20559:32:0;;;710:74:1;20535:4:0;;20559:9;;;;;:23;;683:18:1;;20559:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16234:309::-;-1:-1:-1;;;;;16328:20:0;;16320:52;;;;-1:-1:-1;;;16320:52:0;;27261:2:1;16320:52:0;;;27243:21:1;27300:2;27280:18;;;27273:30;27339:21;27319:18;;;27312:49;27378:18;;16320:52:0;27059:343:1;16320:52:0;-1:-1:-1;;;;;16391:21:0;;16383:53;;;;-1:-1:-1;;;16383:53:0;;27261:2:1;16383:53:0;;;27243:21:1;27300:2;27280:18;;;27273:30;27339:21;27319:18;;;27312:49;27378:18;;16383:53:0;27059:343:1;16383:53:0;-1:-1:-1;;;;;16449:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16502:33;;941:25:1;;;16502:33:0;;914:18:1;16502:33:0;;;;;;;16234:309;;;:::o;33361:818::-;33441:7;;33477;;33510:6;;-1:-1:-1;;;;;33510:6:0;33403:7;33498:19;;;:11;:19;;;;;;33403:7;;33441;33477;33498:19;;33495:217;;;33546:6;;-1:-1:-1;;;;;33546:6:0;33538:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33538:25:0;:54;;-1:-1:-1;33575:6:0;;-1:-1:-1;;;;;33575:6:0;33567:15;;;;:7;:15;;;;;;:25;-1:-1:-1;33538:54:0;33534:84;;;33611:7;;33601;;:17;;;;:::i;:::-;33594:24;;;;33361:818;:::o;33534:84::-;33652:6;;-1:-1:-1;;;;;33652:6:0;33644:15;;;;:7;:15;;;;;;33633:26;;;;:::i;:::-;33693:6;;-1:-1:-1;;;;;33693:6:0;33685:15;;;;:7;:15;;;;;;33633:26;;-1:-1:-1;33674:26:0;;;;:::i;:::-;;;33495:217;33725:9;:16;:20;33722:347;;33767:7;33762:296;33784:9;:16;33780:20;;;;33762:296;;;33854:7;33830;:21;33838:9;33848:1;33838:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33838:12:0;33830:21;;;;;;;;;;;;;:31;;:66;;;33889:7;33865;:21;33873:9;33883:1;33873:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33873:12:0;33865:21;;;;;;;;;;;;;:31;33830:66;33826:96;;;33915:7;;33905;;:17;;;;:::i;:::-;33898:24;;;;;33361:818;:::o;33826:96::-;33961:7;:21;33969:9;33979:1;33969:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33969:12:0;33961:21;;;;;;;;;;;;;33951:31;;:7;:31;:::i;:::-;33941:41;;34021:7;:21;34029:9;34039:1;34029:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34029:12:0;34021:21;;;;;;;;;;;;;34011:31;;:7;:31;:::i;:::-;34001:41;-1:-1:-1;33802:3:0;;;;:::i;:::-;;;;33762:296;;;;33722:347;34103:7;;34093;;:17;;;;:::i;:::-;34083:7;:27;34079:57;;;34129:7;;34119;;:17;;;;:::i;34079:57::-;34154:17;34164:7;34154;:17;:::i;25590:2711::-;25669:4;-1:-1:-1;;;;;25694:18:0;;25686:68;;;;-1:-1:-1;;;25686:68:0;;27789:2:1;25686:68:0;;;27771:21:1;27828:2;27808:18;;;27801:30;27867:34;27847:18;;;27840:62;27938:7;27918:18;;;27911:35;27963:19;;25686:68:0;27587:401:1;25686:68:0;-1:-1:-1;;;;;25773:16:0;;25765:64;;;;-1:-1:-1;;;25765:64:0;;28195:2:1;25765:64:0;;;28177:21:1;28234:2;28214:18;;;28207:30;28273:34;28253:18;;;28246:62;28344:5;28324:18;;;28317:33;28367:19;;25765:64:0;27993:399:1;25765:64:0;25857:1;25848:6;:10;25840:64;;;;-1:-1:-1;;;25840:64:0;;28599:2:1;25840:64:0;;;28581:21:1;28638:2;28618:18;;;28611:30;28677:34;28657:18;;;28650:62;28748:11;28728:18;;;28721:39;28777:19;;25840:64:0;28397:405:1;25840:64:0;25918:20;25929:4;25935:2;25918:10;:20::i;:::-;25915:1558;;;25959:14;;;;25955:89;;25994:34;;-1:-1:-1;;;25994:34:0;;29009:2:1;25994:34:0;;;28991:21:1;29048:2;29028:18;;;29021:30;29087:26;29067:18;;;29060:54;29131:18;;25994:34:0;28807:348:1;25955:89:0;26082:16;;;26096:1;26082:16;;;;;;;;26058:21;;26082:16;;;;;;;;;;-1:-1:-1;26082:16:0;26058:40;;26131:4;26113;26118:1;26113:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26113:23:0;;;:7;;;;;;;;;;:23;;;;26161:9;;:16;;;;;;;;:9;;;;;:14;;:16;;;;;26113:7;;26161:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26151:4;26156:1;26151:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26151:26:0;;;:7;;;;;;;;;;:26;26196:19;;;26192:331;;;26257:9;;:37;;;;;26236:18;;-1:-1:-1;;;;;26257:9:0;;:23;;:37;;26281:6;;26289:4;;26257:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26257:37:0;;;;;;;;;;;;:::i;:::-;26295:1;26257:40;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;26319:13:0;;;;;;:7;:13;;;;;;;;26257:40;;-1:-1:-1;26319:13:0;;26316:192;;;26379:9;;26365:10;:23;;26357:32;;;;;;26316:192;;;-1:-1:-1;;;;;26419:11:0;;;;;;:7;:11;;;;;;;;26415:93;;;26477:10;;26463;:24;;26455:33;;;;;;26217:306;26192:331;26542:24;;;;26539:923;;;-1:-1:-1;;;;;26590:24:0;;;;;;:18;:24;;;;;;;;26587:109;;;-1:-1:-1;;;;;26647:11:0;;;;;;:7;:11;;;;;;;;;:28;;-1:-1:-1;;;;;;26662:13:0;;;;;;:7;:13;;;;;;;;26647:28;26639:37;;;;;;-1:-1:-1;;;;;26717:11:0;;;;;;:7;:11;;;;;;;;:39;;;;-1:-1:-1;;;;;;26732:24:0;;;;;;:18;:24;;;;;;;;26717:39;:50;;;;-1:-1:-1;26761:6:0;;;;26760:7;26717:50;26714:733;;;26813:9;;:37;;;;;26792:18;;-1:-1:-1;;;;;26813:9:0;;:23;;:37;;26837:6;;26845:4;;26813:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26813:37:0;;;;;;;;;;;;:::i;:::-;26851:1;26813:40;;;;;;;;:::i;:::-;;;;;;;26792:61;;26926:15;26907:16;;26879:19;:25;26899:4;-1:-1:-1;;;;;26879:25:0;-1:-1:-1;;;;;26879:25:0;;;;;;;;;;;;;:44;;;;:::i;:::-;:62;26876:552;;;26992:23;;26978:10;:37;;26970:46;;;;;;-1:-1:-1;;;;;27043:25:0;;;;;;:19;:25;;;;;;;;27071:15;27043:43;;27113:15;:21;;;;;:34;;;26876:552;;;27209:16;;-1:-1:-1;;;;;27181:25:0;;;;;;:19;:25;;;;;;27228:15;;27181:44;;;:::i;:::-;:62;27177:251;;;27318:23;;-1:-1:-1;;;;;27280:21:0;;;;;;:15;:21;;;;;;:34;;27304:10;;27280:34;:::i;:::-;:61;;27272:70;;;;;;-1:-1:-1;;;;;27369:21:0;;;;;;:15;:21;;;;;:35;;27394:10;;27369:21;:35;;27394:10;;27369:35;:::i;:::-;;;;-1:-1:-1;;27177:251:0;26769:678;26714:733;25940:1533;25915:1558;-1:-1:-1;;;;;27518:25:0;;27485:12;27518:25;;;:19;:25;;;;;;27500:4;;27518:25;;;:52;;-1:-1:-1;;;;;;27547:23:0;;;;;;:19;:23;;;;;;;;27518:52;27515:98;;;-1:-1:-1;27596:5:0;27515:98;-1:-1:-1;;;;;27629:11:0;;;;;;:7;:11;;;;;;;;27625:606;;;27662:6;;;;27661:7;:47;;;;-1:-1:-1;27689:19:0;;;;;;;27661:47;27657:557;;;27778:15;27758:17;;27747:8;;:28;;;;:::i;:::-;:46;27743:456;;;27818:28;27849:24;27867:4;27849:9;:24::i;:::-;27818:55;;27924:13;;27900:20;:37;27896:284;;27993:10;;27969:20;:34;27966:77;;-1:-1:-1;28030:10:0;;27966:77;28069:34;28082:20;28069:12;:34::i;:::-;28141:15;28130:8;:26;27896:284;27795:404;27743:456;28249:44;28267:4;28273:2;28277:6;28285:7;28249:17;:44::i;:::-;28242:51;25590:2711;-1:-1:-1;;;;;25590:2711:0:o;25225:357::-;25293:4;25325:6;;-1:-1:-1;;;;;25317:14:0;;;25325:6;;25317:14;;;;:43;;-1:-1:-1;25354:6:0;;-1:-1:-1;;;;;25348:12:0;;;25354:6;;25348:12;;25317:43;:79;;;;-1:-1:-1;25390:6:0;;-1:-1:-1;;;;;25390:6:0;25377:9;:19;;25317:79;:118;;;;-1:-1:-1;;;;;;25414:21:0;;;;;;:17;:21;;;;;;;;25413:22;25317:118;:159;;;;-1:-1:-1;;;;;;25453:23:0;;;;;;:17;:23;;;;;;;;25452:24;25317:159;:186;;;;-1:-1:-1;;;;;;25493:10:0;;9042:42;25493:10;;25317:186;:219;;;;-1:-1:-1;;;;;;25520:16:0;;;;25317:219;:257;;;;-1:-1:-1;;;;;;25553:21:0;;25569:4;25553:21;;25310:264;25225:357;-1:-1:-1;;;25225:357:0:o;28309:1846::-;10480:6;:13;;-1:-1:-1;;10480:13:0;10489:4;10480:13;;;28392:30:::1;::::0;;::::1;::::0;::::1;::::0;;28415:7:::1;28392:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;28433:56:::1;;28471:7;;;28433:56;28524:4;28504:26;::::0;;;:11:::1;:26;::::0;;;;;;;28539:9:::1;::::0;-1:-1:-1;;;;;28539:9:0::1;28504:46:::0;;;;;;;;-1:-1:-1;;28504:67:0::1;28501:165;;28608:4;28588:26;::::0;;;:11:::1;:26;::::0;;;;;;;28623:9:::1;::::0;-1:-1:-1;;;;;28623:9:0::1;28588:46:::0;;;;;;;-1:-1:-1;;28588:66:0;;28501:165:::1;28678:17;28759:1;28743:6;:12;;;28699:56;;28723:6;:16;;;28700:39;;:20;:39;;;;:::i;:::-;28699:56;;;;:::i;:::-;28698:62;;;;:::i;:::-;28678:82:::0;-1:-1:-1;28771:15:0::1;28789:32;28678:82:::0;28789:20;:32:::1;:::i;:::-;28866:16;::::0;;28880:1:::1;28866:16:::0;;;;;::::1;::::0;;28771:50;;-1:-1:-1;28842:21:0::1;::::0;28866:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28866:16:0::1;28842:40;;28911:4;28893;28898:1;28893:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28893:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28937:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;28893:7;;28937:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28927:4;28932:1;28927:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28927:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;28966:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;29041:7;;28966:9:::1;::::0;29079:4;;29106::::1;::::0;29126:15:::1;::::0;28966:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29186:21:0::1;::::0;-1:-1:-1;29165:18:0::1;::::0;-1:-1:-1;29272:7:0;;-1:-1:-1;29246:22:0::1;29259:9:::0;29186:21;29246:22:::1;:::i;:::-;29245:34;;;;:::i;:::-;29218:61:::0;-1:-1:-1;29296:13:0;;29292:328:::1;;29326:9;::::0;:222:::1;::::0;;;;29403:4:::1;29326:222;::::0;::::1;26120:34:1::0;26170:18;;;26163:34;;;29326:9:0::1;26213:18:1::0;;;26206:34;;;26256:18;;;26249:34;9042:42:0::1;26299:19:1::0;;;26292:44;29518:15:0::1;26352:19:1::0;;;26345:35;-1:-1:-1;;;;;29326:9:0;;::::1;::::0;:25:::1;::::0;29359:16;;26031:19:1;;29326:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29568:40:0::1;::::0;;31300:25:1;;;31356:2;31341:18;;31334:34;;;29568:40:0::1;::::0;-1:-1:-1;31273:18:1;29568:40:0::1;;;;;;;29292:328;29632:30;29646:16:::0;29632:30;::::1;:::i;:::-;;;29689:6;:16;;;29673:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;29771:12:::1;::::0;::::1;::::0;29754:13:::1;::::0;::::1;::::0;29716:21:::1;::::0;-1:-1:-1;29740:43:0;;::::1;::::0;29741:26:::1;::::0;::::1;:10:::0;:26:::1;:::i;:::-;29740:43;;;;:::i;:::-;29716:67:::0;-1:-1:-1;29794:24:0::1;29821:26;29716:67:::0;29821:10;:26:::1;:::i;:::-;29794:53;;29858:12;29901:1:::0;29885:6:::1;:13;;;:17;;;29881:124;;;29932:18:::0;;:61:::1;::::0;-1:-1:-1;;;;;29932:18:0;;::::1;::::0;29983:5:::1;::::0;29963:13;;29932:61:::1;::::0;;;29963:13;29932:18;29983:5;29932:61:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29919:74:0;;-1:-1:-1;;29881:124:0::1;30019:16;::::0;::::1;::::0;:20:::1;;::::0;30015:133:::1;;30069:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;30069:21:0;;::::1;::::0;30126:5:::1;::::0;30103:16;;30069:67:::1;::::0;;;30103:16;30069:21;30126:5;30069:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30056:80:0;;-1:-1:-1;;30015:133:0::1;28381:1774;;;;;;;;;10504:1;-1:-1:-1::0;10516:6:0;:14;;-1:-1:-1;;10516:14:0;;;28309:1846::o;30396:909::-;30519:16;;30497:4;;30519:16;;;;;30514:221;;30552:28;30571:4;30577:2;30552:18;:28::i;:::-;30600:16;;;;;;;30599:17;:41;;;;;30620:20;30631:4;30637:2;30620:10;:20::i;:::-;30595:129;;;30661:47;;-1:-1:-1;;;30661:47:0;;31791:2:1;30661:47:0;;;31773:21:1;31830:2;31810:18;;;31803:30;31869:34;31849:18;;;31842:62;31940:7;31920:18;;;31913:35;31965:19;;30661:47:0;31589:401:1;30595:129:0;30747:25;30775:38;30786:4;30792:2;30796:7;30805;30775:10;:38::i;:::-;30843:14;;;;-1:-1:-1;;;;;30826:13:0;;;;;;:7;:13;;;;;:31;;30747:66;;-1:-1:-1;30843:14:0;;30826:31;;30843:14;;30826:31;:::i;:::-;;;;-1:-1:-1;;30883:22:0;;;;-1:-1:-1;;;;;30868:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;30883:22;;30868:37;:::i;:::-;;;;-1:-1:-1;;;;;;;30922:17:0;;;;;;:11;:17;;;;;;;;30918:89;;;-1:-1:-1;;;;;30972:13:0;;;;;;:7;:13;;;;;;:23;;30988:7;;30972:23;:::i;:::-;-1:-1:-1;;;;;30956:13:0;;;;;;:7;:13;;;;;:39;30918:89;-1:-1:-1;;;;;31021:15:0;;;;;;:11;:15;;;;;;;;31017:98;;;31081:22;;-1:-1:-1;;;;;31067:11:0;;31081:22;31067:11;;;:7;:11;;;;;;:36;;31081:22;31067:36;:::i;:::-;-1:-1:-1;;;;;31053:11:0;;;;;;:7;:11;;;;;:50;31017:98;31145:1;31131:6;:11;;;:15;:34;;;;31164:1;31150:6;:11;;;:15;31131:34;31127:89;;;31193:6;:11;;;31182:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31127:89:0;31248:2;-1:-1:-1;;;;;31233:42:0;31242:4;-1:-1:-1;;;;;31233:42:0;;31252:6;:22;;;31233:42;;;;941:25:1;;929:2;914:18;;795:177;31233:42:0;;;;;;;;-1:-1:-1;31293:4:0;;30396:909;-1:-1:-1;;;;;30396:909:0:o;34187:508::-;34269:16;;;;;;;34268:17;34260:65;;;;-1:-1:-1;;;34260:65:0;;32197:2:1;34260:65:0;;;32179:21:1;32236:2;32216:18;;;32209:30;32275:34;32255:18;;;32248:62;32346:5;32326:18;;;32319:33;32369:19;;34260:65:0;31995:399:1;34260:65:0;34341:20;34352:4;34358:2;34341:10;:20::i;:::-;34340:21;:37;;;;-1:-1:-1;34371:6:0;;-1:-1:-1;;;;;34365:12:0;;;34371:6;;34365:12;34340:37;34336:352;;;-1:-1:-1;;;;;34394:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;34394:30:0;34420:4;34394:30;;;34439:16;:23;;-1:-1:-1;;34439:23:0;34394:30;34439:23;;;;;34488:9;;;;34477:107;;34532:9;:36;;;;34562:4;34532:36;;;;;34477:107;34598:19;:26;;-1:-1:-1;;34598:26:0;;;;;34644:32;;-1:-1:-1;4643:41:1;;34644:32:0;;4631:2:1;4616:18;34644:32:0;;;;;;;34187:508;;:::o;31313:2040::-;31407:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31407:18:0;31438:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31438:25:0;31495:10;:8;:10::i;:::-;31474:18;;;:31;;;31535:28;;:7;:28;:::i;:::-;31518:14;;;:45;31580:20;31591:4;31597:2;31580:10;:20::i;:::-;31576:315;;;31648:9;;:38;;;;;-1:-1:-1;;;;;32680:15:1;;;31648:38:0;;;32662:34:1;32732:15;;;32712:18;;;32705:43;32764:18;;;32757:34;;;31617:12:0;;31648:9;;;;;:19;;32574:18:1;;31648:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31648:38:0;;;;;;;;-1:-1:-1;;31648:38:0;;;;;;;;;;;;:::i;:::-;;;31644:164;;31784:8;;;31644:164;31737:5;-1:-1:-1;31828:7:0;31824:56;;31856:8;;;31824:56;31602:289;31576:315;31906:7;31903:1012;;;-1:-1:-1;;;;;32056:11:0;;31930:22;32056:11;;;:7;:11;;;;;;31930:22;;8936:5;;32056:11;;32052:423;;;32105:10;:18;;;;;;-1:-1:-1;32156:20:0;;;;;;-1:-1:-1;32052:423:0;;;-1:-1:-1;;;;;32202:13:0;;;;;;:7;:13;;;;;;;;32198:277;;;32253:9;:17;;;;;;-1:-1:-1;32303:19:0;;;;;;-1:-1:-1;32198:277:0;;;32380:14;:22;;;;;;-1:-1:-1;32435:24:0;;;;;;-1:-1:-1;32198:277:0;32534:7;32506:24;32516:14;32506:7;:24;:::i;:::-;32505:36;;;;:::i;:::-;32491:11;;;:50;32597:7;32572:21;32582:11;32572:7;:21;:::i;:::-;32571:33;;;;:::i;:::-;32556:12;;;:48;;;32655:11;;;;:26;;32556:48;32655:26;:::i;:::-;32644:38;;:7;:38;:::i;:::-;32619:63;;32727:18;;;;32713:11;;;;:32;;32727:18;32713:32;:::i;:::-;32699:11;;;:46;-1:-1:-1;31903:1012:0;;-1:-1:-1;;31903:1012:0;;32792:1;32778:11;;;:15;;;32808:12;;;:16;;;32839:32;;;32888:11;;;:15;31903:1012;32931:12;;;;:16;32927:289;;33005:6;:18;;;32990:6;:12;;;:33;;;;:::i;:::-;32980:4;32964:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;33061:4:0;33041:26;;;;:11;:26;;;;;;;;33038:104;;;33114:12;;;;;33104:4;33088:22;;;;:7;:22;;;;;:38;;33114:12;;33088:22;;:38;;33114:12;;33088:38;:::i;:::-;;;;-1:-1:-1;;33038:104:0;33184:4;-1:-1:-1;;;;;33161:43:0;33170:4;-1:-1:-1;;;;;33161:43:0;;33191:6;:12;;;33161:43;;;;941:25:1;;929:2;914:18;;795:177;33161:43:0;;;;;;;;32927:289;33301:6;:18;;;33286:6;:12;;;:33;;;;:::i;:::-;33271:6;:11;;;:49;;;;:::i;:::-;33253:6;:14;;;:68;;;;:::i;:::-;33228:22;;;:93;:22;31313:2040;-1:-1:-1;;;;;31313:2040:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:1;-1:-1:-1;;;;;93:5:1;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:247::-;371:6;424:2;412:9;403:7;399:23;395:32;392:52;;;440:1;437;430:12;392:52;479:9;466:23;498:31;523:5;498:31;:::i;977:184::-;1029:77;1026:1;1019:88;1126:4;1123:1;1116:15;1150:4;1147:1;1140:15;1166:334;1237:2;1231:9;1293:2;1283:13;;-1:-1:-1;;1279:86:1;1267:99;;1396:18;1381:34;;1417:22;;;1378:62;1375:88;;;1443:18;;:::i;:::-;1479:2;1472:22;1166:334;;-1:-1:-1;1166:334:1:o;1505:183::-;1565:4;1598:18;1590:6;1587:30;1584:56;;;1620:18;;:::i;:::-;-1:-1:-1;1665:1:1;1661:14;1677:4;1657:25;;1505:183::o;1693:737::-;1747:5;1800:3;1793:4;1785:6;1781:17;1777:27;1767:55;;1818:1;1815;1808:12;1767:55;1854:6;1841:20;1880:4;1904:60;1920:43;1960:2;1920:43;:::i;:::-;1904:60;:::i;:::-;1998:15;;;2084:1;2080:10;;;;2068:23;;2064:32;;;2029:12;;;;2108:15;;;2105:35;;;2136:1;2133;2126:12;2105:35;2172:2;2164:6;2160:15;2184:217;2200:6;2195:3;2192:15;2184:217;;;2280:3;2267:17;2297:31;2322:5;2297:31;:::i;:::-;2341:18;;2379:12;;;;2217;;2184:217;;;-1:-1:-1;2419:5:1;1693:737;-1:-1:-1;;;;;;1693:737:1:o;2435:118::-;2521:5;2514:13;2507:21;2500:5;2497:32;2487:60;;2543:1;2540;2533:12;2558:477;2648:6;2656;2709:2;2697:9;2688:7;2684:23;2680:32;2677:52;;;2725:1;2722;2715:12;2677:52;2765:9;2752:23;2798:18;2790:6;2787:30;2784:50;;;2830:1;2827;2820:12;2784:50;2853:61;2906:7;2897:6;2886:9;2882:22;2853:61;:::i;:::-;2843:71;;;2964:2;2953:9;2949:18;2936:32;2977:28;2999:5;2977:28;:::i;:::-;3024:5;3014:15;;;2558:477;;;;;:::o;3040:258::-;3112:1;3122:113;3136:6;3133:1;3130:13;3122:113;;;3212:11;;;3206:18;3193:11;;;3186:39;3158:2;3151:10;3122:113;;;3253:6;3250:1;3247:13;3244:48;;;-1:-1:-1;;3288:1:1;3270:16;;3263:27;3040:258::o;3303:442::-;3452:2;3441:9;3434:21;3415:4;3484:6;3478:13;3527:6;3522:2;3511:9;3507:18;3500:34;3543:66;3602:6;3597:2;3586:9;3582:18;3577:2;3569:6;3565:15;3543:66;:::i;:::-;3661:2;3649:15;-1:-1:-1;;3645:88:1;3630:104;;;;3736:2;3626:113;;3303:442;-1:-1:-1;;3303:442:1:o;3998:180::-;4057:6;4110:2;4098:9;4089:7;4085:23;4081:32;4078:52;;;4126:1;4123;4116:12;4078:52;-1:-1:-1;4149:23:1;;3998:180;-1:-1:-1;3998:180:1:o;4183:315::-;4251:6;4259;4312:2;4300:9;4291:7;4287:23;4283:32;4280:52;;;4328:1;4325;4318:12;4280:52;4367:9;4354:23;4386:31;4411:5;4386:31;:::i;:::-;4436:5;4488:2;4473:18;;;;4460:32;;-1:-1:-1;;;4183:315:1:o;4695:385::-;4781:6;4789;4797;4805;4858:3;4846:9;4837:7;4833:23;4829:33;4826:53;;;4875:1;4872;4865:12;4826:53;-1:-1:-1;;4898:23:1;;;4968:2;4953:18;;4940:32;;-1:-1:-1;5019:2:1;5004:18;;4991:32;;5070:2;5055:18;5042:32;;-1:-1:-1;4695:385:1;-1:-1:-1;4695:385:1:o;5085:382::-;5150:6;5158;5211:2;5199:9;5190:7;5186:23;5182:32;5179:52;;;5227:1;5224;5217:12;5179:52;5266:9;5253:23;5285:31;5310:5;5285:31;:::i;:::-;5335:5;-1:-1:-1;5392:2:1;5377:18;;5364:32;5405:30;5364:32;5405:30;:::i;5472:456::-;5549:6;5557;5565;5618:2;5606:9;5597:7;5593:23;5589:32;5586:52;;;5634:1;5631;5624:12;5586:52;5673:9;5660:23;5692:31;5717:5;5692:31;:::i;:::-;5742:5;-1:-1:-1;5799:2:1;5784:18;;5771:32;5812:33;5771:32;5812:33;:::i;:::-;5472:456;;5864:7;;-1:-1:-1;;;5918:2:1;5903:18;;;;5890:32;;5472:456::o;5933:647::-;6007:6;6015;6023;6031;6084:3;6072:9;6063:7;6059:23;6055:33;6052:53;;;6101:1;6098;6091:12;6052:53;6140:9;6127:23;6159:28;6181:5;6159:28;:::i;:::-;6206:5;-1:-1:-1;6263:2:1;6248:18;;6235:32;6276:30;6235:32;6276:30;:::i;:::-;6325:7;-1:-1:-1;6384:2:1;6369:18;;6356:32;6397:30;6356:32;6397:30;:::i;:::-;6446:7;-1:-1:-1;6505:2:1;6490:18;;6477:32;6518:30;6477:32;6518:30;:::i;:::-;5933:647;;;;-1:-1:-1;5933:647:1;;-1:-1:-1;;5933:647:1:o;6774:454::-;6869:6;6877;6885;6893;6901;6954:3;6942:9;6933:7;6929:23;6925:33;6922:53;;;6971:1;6968;6961:12;6922:53;-1:-1:-1;;6994:23:1;;;7064:2;7049:18;;7036:32;;-1:-1:-1;7115:2:1;7100:18;;7087:32;;7166:2;7151:18;;7138:32;;-1:-1:-1;7217:3:1;7202:19;7189:33;;-1:-1:-1;6774:454:1;-1:-1:-1;6774:454:1:o;7233:114::-;7317:4;7310:5;7306:16;7299:5;7296:27;7286:55;;7337:1;7334;7327:12;7352:243;7409:6;7462:2;7450:9;7441:7;7437:23;7433:32;7430:52;;;7478:1;7475;7468:12;7430:52;7517:9;7504:23;7536:29;7559:5;7536:29;:::i;7600:316::-;7677:6;7685;7693;7746:2;7734:9;7725:7;7721:23;7717:32;7714:52;;;7762:1;7759;7752:12;7714:52;-1:-1:-1;;7785:23:1;;;7855:2;7840:18;;7827:32;;-1:-1:-1;7906:2:1;7891:18;;;7878:32;;7600:316;-1:-1:-1;7600:316:1:o;7921:241::-;7977:6;8030:2;8018:9;8009:7;8005:23;8001:32;7998:52;;;8046:1;8043;8036:12;7998:52;8085:9;8072:23;8104:28;8126:5;8104:28;:::i;8695:159::-;8762:20;;8822:6;8811:18;;8801:29;;8791:57;;8844:1;8841;8834:12;8859:328;8933:6;8941;8949;9002:2;8990:9;8981:7;8977:23;8973:32;8970:52;;;9018:1;9015;9008:12;8970:52;9041:28;9059:9;9041:28;:::i;:::-;9031:38;;9088:37;9121:2;9110:9;9106:18;9088:37;:::i;:::-;9078:47;;9144:37;9177:2;9166:9;9162:18;9144:37;:::i;:::-;9134:47;;8859:328;;;;;:::o;9192:401::-;9274:6;9282;9290;9298;9351:3;9339:9;9330:7;9326:23;9322:33;9319:53;;;9368:1;9365;9358:12;9319:53;9391:28;9409:9;9391:28;:::i;:::-;9381:38;;9438:37;9471:2;9460:9;9456:18;9438:37;:::i;:::-;9428:47;;9494:37;9527:2;9516:9;9512:18;9494:37;:::i;:::-;9484:47;;9550:37;9583:2;9572:9;9568:18;9550:37;:::i;:::-;9540:47;;9192:401;;;;;;;:::o;10047:404::-;10131:6;10139;10192:2;10180:9;10171:7;10167:23;10163:32;10160:52;;;10208:1;10205;10198:12;10160:52;10247:9;10234:23;10266:31;10291:5;10266:31;:::i;:::-;10316:5;-1:-1:-1;10373:2:1;10358:18;;10345:32;10386:33;10345:32;10386:33;:::i;10849:1212::-;10976:6;10984;10992;11045:2;11033:9;11024:7;11020:23;11016:32;11013:52;;;11061:1;11058;11051:12;11013:52;11101:9;11088:23;11130:18;11171:2;11163:6;11160:14;11157:34;;;11187:1;11184;11177:12;11157:34;11210:61;11263:7;11254:6;11243:9;11239:22;11210:61;:::i;:::-;11200:71;;11290:2;11280:12;;11345:2;11334:9;11330:18;11317:32;11374:2;11364:8;11361:16;11358:36;;;11390:1;11387;11380:12;11358:36;11413:24;;;-1:-1:-1;11468:4:1;11460:13;;11456:27;-1:-1:-1;11446:55:1;;11497:1;11494;11487:12;11446:55;11533:2;11520:16;11556:60;11572:43;11612:2;11572:43;:::i;11556:60::-;11650:15;;;11732:1;11728:10;;;;11720:19;;11716:28;;;11681:12;;;;11756:19;;;11753:39;;;11788:1;11785;11778:12;11753:39;11812:11;;;;11832:142;11848:6;11843:3;11840:15;11832:142;;;11914:17;;11902:30;;11865:12;;;;11952;;;;11832:142;;;11993:5;11983:15;;;;;;;12017:38;12051:2;12040:9;12036:18;12017:38;:::i;13127:184::-;13197:6;13250:2;13238:9;13229:7;13225:23;13221:32;13218:52;;;13266:1;13263;13256:12;13218:52;-1:-1:-1;13289:16:1;;13127:184;-1:-1:-1;13127:184:1:o;13618:245::-;13685:6;13738:2;13726:9;13717:7;13713:23;13709:32;13706:52;;;13754:1;13751;13744:12;13706:52;13786:9;13780:16;13805:28;13827:5;13805:28;:::i;13868:484::-;13921:3;13959:5;13953:12;13986:6;13981:3;13974:19;14012:4;14041:2;14036:3;14032:12;14025:19;;14078:2;14071:5;14067:14;14099:1;14109:218;14123:6;14120:1;14117:13;14109:218;;;14188:13;;-1:-1:-1;;;;;14184:62:1;14172:75;;14267:12;;;;14302:15;;;;14145:1;14138:9;14109:218;;;-1:-1:-1;14343:3:1;;13868:484;-1:-1:-1;;;;;13868:484:1:o;14357:342::-;14558:2;14547:9;14540:21;14521:4;14578:56;14630:2;14619:9;14615:18;14607:6;14578:56;:::i;:::-;14570:64;;14684:6;14677:14;14670:22;14665:2;14654:9;14650:18;14643:50;14357:342;;;;;:::o;14704:437::-;14783:1;14779:12;;;;14826;;;14847:61;;14901:4;14893:6;14889:17;14879:27;;14847:61;14954:2;14946:6;14943:14;14923:18;14920:38;14917:218;;;14991:77;14988:1;14981:88;15092:4;15089:1;15082:15;15120:4;15117:1;15110:15;14917:218;;14704:437;;;:::o;15482:184::-;15534:77;15531:1;15524:88;15631:4;15628:1;15621:15;15655:4;15652:1;15645:15;15671:482;15760:1;15803:5;15760:1;15817:330;15838:7;15828:8;15825:21;15817:330;;;15957:4;-1:-1:-1;;15885:77:1;15879:4;15876:87;15873:113;;;15966:18;;:::i;:::-;16016:7;16006:8;16002:22;15999:55;;;16036:16;;;;15999:55;16115:22;;;;16075:15;;;;15817:330;;;15821:3;15671:482;;;;;:::o;16158:866::-;16207:5;16237:8;16227:80;;-1:-1:-1;16278:1:1;16292:5;;16227:80;16326:4;16316:76;;-1:-1:-1;16363:1:1;16377:5;;16316:76;16408:4;16426:1;16421:59;;;;16494:1;16489:130;;;;16401:218;;16421:59;16451:1;16442:10;;16465:5;;;16489:130;16526:3;16516:8;16513:17;16510:43;;;16533:18;;:::i;:::-;-1:-1:-1;;16589:1:1;16575:16;;16604:5;;16401:218;;16703:2;16693:8;16690:16;16684:3;16678:4;16675:13;16671:36;16665:2;16655:8;16652:16;16647:2;16641:4;16638:12;16634:35;16631:77;16628:159;;;-1:-1:-1;16740:19:1;;;16772:5;;16628:159;16819:34;16844:8;16838:4;16819:34;:::i;:::-;16949:6;-1:-1:-1;;16877:79:1;16868:7;16865:92;16862:118;;;16960:18;;:::i;:::-;16998:20;;16158:866;-1:-1:-1;;;16158:866:1:o;17029:131::-;17089:5;17118:36;17145:8;17139:4;17118:36;:::i;17165:228::-;17205:7;17331:1;-1:-1:-1;;17259:74:1;17256:1;17253:81;17248:1;17241:9;17234:17;17230:105;17227:131;;;17338:18;;:::i;:::-;-1:-1:-1;17378:9:1;;17165:228::o;18112:184::-;18164:77;18161:1;18154:88;18261:4;18258:1;18251:15;18285:4;18282:1;18275:15;18301:184;18353:77;18350:1;18343:88;18450:4;18447:1;18440:15;18474:4;18471:1;18464:15;18490:125;18530:4;18558:1;18555;18552:8;18549:34;;;18563:18;;:::i;:::-;-1:-1:-1;18600:9:1;;18490:125::o;18620:195::-;18659:3;-1:-1:-1;;18683:5:1;18680:77;18677:103;;;18760:18;;:::i;:::-;-1:-1:-1;18807:1:1;18796:13;;18620:195::o;19667:184::-;19719:77;19716:1;19709:88;19816:4;19813:1;19806:15;19840:4;19837:1;19830:15;19856:120;19896:1;19922;19912:35;;19927:18;;:::i;:::-;-1:-1:-1;19961:9:1;;19856:120::o;22154:224::-;22193:3;22221:6;22254:2;22251:1;22247:10;22284:2;22281:1;22277:10;22315:3;22311:2;22307:12;22302:3;22299:21;22296:47;;;22323:18;;:::i;:::-;22359:13;;22154:224;-1:-1:-1;;;;22154:224:1:o;22383:217::-;22422:4;22451:6;22507:10;;;;22477;;22529:12;;;22526:38;;;22544:18;;:::i;:::-;22581:13;;22383:217;-1:-1:-1;;;22383:217:1:o;23263:556::-;23317:5;23370:3;23363:4;23355:6;23351:17;23347:27;23337:55;;23388:1;23385;23378:12;23337:55;23417:6;23411:13;23443:18;23439:2;23436:26;23433:52;;;23465:18;;:::i;:::-;23509:114;23617:4;-1:-1:-1;;23541:4:1;23537:2;23533:13;23529:86;23525:97;23509:114;:::i;:::-;23648:2;23639:7;23632:19;23694:3;23687:4;23682:2;23674:6;23670:15;23666:26;23663:35;23660:55;;;23711:1;23708;23701:12;23660:55;23724:64;23785:2;23778:4;23769:7;23765:18;23758:4;23750:6;23746:17;23724:64;:::i;23824:748::-;23939:6;23947;23955;23963;24016:3;24004:9;23995:7;23991:23;23987:33;23984:53;;;24033:1;24030;24023:12;23984:53;24066:9;24060:16;24095:18;24136:2;24128:6;24125:14;24122:34;;;24152:1;24149;24142:12;24122:34;24175:61;24228:7;24219:6;24208:9;24204:22;24175:61;:::i;:::-;24165:71;;24282:2;24271:9;24267:18;24261:25;24245:41;;24311:2;24301:8;24298:16;24295:36;;;24327:1;24324;24317:12;24295:36;;24350:63;24405:7;24394:8;24383:9;24379:24;24350:63;:::i;:::-;24340:73;;;24453:2;24442:9;24438:18;24432:25;24422:35;;24500:2;24489:9;24485:18;24479:25;24513:29;24536:5;24513:29;:::i;24906:140::-;24964:5;24993:47;25034:4;25024:8;25020:19;25014:4;24993:47;:::i;25051:112::-;25083:1;25109;25099:35;;25114:18;;:::i;:::-;-1:-1:-1;25148:9:1;;25051:112::o;25168:251::-;25238:6;25291:2;25279:9;25270:7;25266:23;25262:32;25259:52;;;25307:1;25304;25297:12;25259:52;25339:9;25333:16;25358:31;25383:5;25358:31;:::i;26391:306::-;26479:6;26487;26495;26548:2;26536:9;26527:7;26523:23;26519:32;26516:52;;;26564:1;26561;26554:12;26516:52;26593:9;26587:16;26577:26;;26643:2;26632:9;26628:18;26622:25;26612:35;;26687:2;26676:9;26672:18;26666:25;26656:35;;26391:306;;;;;:::o;27407:175::-;27444:3;27488:4;27481:5;27477:16;27517:4;27508:7;27505:17;27502:43;;;27525:18;;:::i;:::-;27574:1;27561:15;;27407:175;-1:-1:-1;;27407:175:1:o;29160:332::-;29367:6;29356:9;29349:25;29410:2;29405;29394:9;29390:18;29383:30;29330:4;29430:56;29482:2;29471:9;29467:18;29459:6;29430:56;:::i;29497:881::-;29592:6;29623:2;29666;29654:9;29645:7;29641:23;29637:32;29634:52;;;29682:1;29679;29672:12;29634:52;29715:9;29709:16;29748:18;29740:6;29737:30;29734:50;;;29780:1;29777;29770:12;29734:50;29803:22;;29856:4;29848:13;;29844:27;-1:-1:-1;29834:55:1;;29885:1;29882;29875:12;29834:55;29914:2;29908:9;29937:60;29953:43;29993:2;29953:43;:::i;29937:60::-;30031:15;;;30113:1;30109:10;;;;30101:19;;30097:28;;;30062:12;;;;30137:19;;;30134:39;;;30169:1;30166;30159:12;30134:39;30193:11;;;;30213:135;30229:6;30224:3;30221:15;30213:135;;;30295:10;;30283:23;;30246:12;;;;30326;;;;30213:135;;;30367:5;29497:881;-1:-1:-1;;;;;;;29497:881:1:o;30383:128::-;30423:3;30454:1;30450:6;30447:1;30444:13;30441:39;;;30460:18;;:::i;:::-;-1:-1:-1;30496:9:1;;30383:128::o;30516:605::-;30815:6;30804:9;30797:25;30858:6;30853:2;30842:9;30838:18;30831:34;30901:3;30896:2;30885:9;30881:18;30874:31;30778:4;30922:57;30974:3;30963:9;30959:19;30951:6;30922:57;:::i;:::-;-1:-1:-1;;;;;31015:55:1;;;;31010:2;30995:18;;30988:83;-1:-1:-1;31102:3:1;31087:19;31080:35;30914:65;30516:605;-1:-1:-1;;;30516:605:1:o

Swarm Source

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