ETH Price: $2,421.41 (-0.11%)
 

Overview

Max Total Supply

10,000,000,000 MORIE

Holders

630

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
39.902884857568409738 MORIE

Value
$0.00
0x267887cc17e2eeee03dd76c553b45ed107b5f87f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MorieINU

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-08
*/

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

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, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function 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;
}

contract MorieINU 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 _liquidityHolders;
   
    uint256 constant private startingSupply = 10_000_000_000;

    string constant private _name = "Morie INU";
    string constant private _symbol = "MORIE";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

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

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

    Fees public _buyTaxes = Fees({
        reflect: 100,
        burn: 100,
        liquidity: 300,
        marketing: 600,
        totalSwap: 900
        });

    Fees public _sellTaxes = Fees({
        reflect: 300,
        burn: 300,
        liquidity: 700,
        marketing: 1200,
        totalSwap: 1900
        });

    Fees public _transferTaxes = Fees({
        reflect: 100,
        burn: 100,
        liquidity: 300,
        marketing: 600,
        totalSwap: 900
        });

    Ratios public _ratios = Ratios({
        liquidity: 3,
        marketing: 6,
        total: 9
        });

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

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

    struct TaxWallets {
        address payable marketing;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x322dAA81C8e3aC8775d676755DE41b670864a9c5)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold = (_tTotal * 3) / 10000;
    uint256 public swapAmount = (_tTotal * 5) / 10000;
    
    uint256 private _maxTxAmount = (_tTotal * 2) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 4) / 1000;

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

    bool lpInitialized = false;

    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 {
        _rOwned[msg.sender] = _rTotal;

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

        emit Transfer(address(0), msg.sender, _tTotal);
    }

    function initializeLP() public onlyOwner {
        require(!lpInitialized, "Already initialized");

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

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

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

        lpInitialized = true;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _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 pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function balanceOf(address account) public view override returns (uint256) {
        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 getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    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 setInitializer(address initializer) external onlyOwner {
        require(!_hasLiqBeenAdded);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

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

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

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

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

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

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }
    
    function setTaxesBuy(uint16 reflect, uint16 burn, uint16 liquidity, uint16 marketing) external onlyOwner {
        uint16 check = reflect + liquidity + marketing + burn;
        require(check <= maxBuyTaxes);
        _buyTaxes.reflect = reflect;
        _buyTaxes.burn = burn;
        _buyTaxes.liquidity = liquidity;
        _buyTaxes.marketing = marketing;
        _buyTaxes.totalSwap = check - (reflect + burn);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _hasLimits(address from, address to) 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");
        require(lpInitialized);

        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        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 marketingBalance = amtBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    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, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function preInitializeTransfer(address to, uint256 amount) public onlyOwner {
        require(!lpInitialized);
        amount = amount*10**_decimals;
        _finalizeTransfer(msg.sender, to, amount, false);
    }

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

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

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

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

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

        if (values.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 currentBurn;
            uint256 divisor = masterTaxDivisor;

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

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

            values.rFee = values.tFee * values.currentRate;
        } else {
            values.tFee = 0;
            values.tSwap = 0;
            values.tBurn = 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);
        }

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

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tSwap * values.currentRate) + (values.tBurn * 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;
    }
}

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":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeLP","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":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preInitializeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"preInitializeTransferMultiple","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":"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":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"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":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600455620000176012600a62000503565b62000028906402540be4006200051b565b620000369060001962000553565b62000044906000196200056a565b600b556040805160a080820183526064808352602080840182905261012c84860181905261025860608087018290526103846080978801819052600c80546001600160501b03199081166903840258012c006400649081179092558a51808a018c528681528088018790526102bc818d01526104b08186015261076c908b0152600d8054821669076c04b002bc012c012c1790558a519889018b5287895288870197909752878a0194909452868201929092529490950194909452600e805490921690931790558251908101835260038152600681830152600990830152600f805465ffffffffffff1916640900060003179055815190810190915273322daa81c8e3ac8775d676755de41b670864a9c590819052601280546001600160a01b03191690911781556013805461ff00191690556000601455612710906200018d90600a62000503565b6200019e906402540be4006200051b565b620001ab9060036200051b565b620001b7919062000584565b601655612710620001cb6012600a62000503565b620001dc906402540be4006200051b565b620001e99060056200051b565b620001f5919062000584565b6017556103e8620002096012600a62000503565b6200021a906402540be4006200051b565b620002279060026200051b565b62000233919062000584565b6018556103e8620002476012600a62000503565b62000258906402540be4006200051b565b620002659060046200051b565b62000271919062000584565b601955601a805461ffff60ff60b01b0119169055600b543360008181526001602052604081209290925581546001600160a01b0319161790556038461415620002e057601080546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000394565b46606114156200031657601080546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000394565b4660011480620003265750466004145b156200035857601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000394565b4661a86a14156200038f57601080546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000394565b600080fd5b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620003c66012600a62000503565b620003d7906402540be4006200051b565b60405190815260200160405180910390a36200059b565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000445578160001904821115620004295762000429620003ee565b808516156200043757918102915b93841c939080029062000409565b509250929050565b6000826200045e57506001620004fd565b816200046d57506000620004fd565b81600181146200048657600281146200049157620004b1565b6001915050620004fd565b60ff841115620004a557620004a5620003ee565b50506001821b620004fd565b5060208310610133831016604e8410600b8410161715620004d6575081810a620004fd565b620004e2838362000404565b8060001904821115620004f957620004f9620003ee565b0290505b92915050565b60006200051460ff8416836200044d565b9392505050565b6000816000190483118215151615620005385762000538620003ee565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200056557620005656200053d565b500690565b6000828210156200057f576200057f620003ee565b500390565b6000826200059657620005966200053d565b500490565b6155fd80620005ab6000396000f3fe6080604052600436106103e25760003560e01c80635cce86cd1161020d578063bc77169d11610128578063dd62ed3e116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610cc1578063fdb78c0e14610ce1578063fe575a8714610d0057600080fd5b8063ee5d9c2d14610c8c578063eec2744e14610ca157600080fd5b8063dd62ed3e14610bf0578063e4fcfd1814610c36578063eafb5a3c14610c4c578063eb50e70e14610c6c57600080fd5b8063c6831cd8116100f7578063c6831cd814610b0d578063c6a276c214610b5a578063cab5ebea14610b7a578063cf84770614610b9a57600080fd5b8063bc77169d14610a60578063bcd96a2514610a80578063becdf13f14610aa0578063c2fa418f14610ac057600080fd5b80638a63bd9b116101a0578063a9059cbb1161016f578063a9059cbb14610a20578063aa54547314610a40578063b1b08f7114610625578063b3d514fb1461062557600080fd5b80638a63bd9b1461099b5780638a8c523c146109b057806395d89b41146109c5578063a6690cf914610a0b57600080fd5b80637b45d431116101dc5780637b45d431146108a257806380c581d11461092457806388f8202014610944578063893d20e81461097d57600080fd5b80635cce86cd1461081f5780636ebd00781461085857806370a082311461086d578063715018a61461088d57600080fd5b80632b28fc7a116102fd5780633f3cf56c116102905780634fbee1931161025f5780634fbee1931461078757806350a8e016146107c0578063590ffdce146107df5780635c24b074146107ff57600080fd5b80633f3cf56c1461070d578063452ed4f11461072d5780634ada218b1461074d5780634fb2e45d1461076757600080fd5b8063313ce567116102cc578063313ce5671461069157806333251a0b146106ad57806334cd8260146106cd57806336fddb04146106ed57600080fd5b80632b28fc7a146106255780632cee76021461063b5780632d8381191461065b5780632e8fa8211461067b57600080fd5b806313e4619211610375578063260039571161034457806326003957146105b05780632610eaca146105d057806329dd8798146105f05780632b112e491461061057600080fd5b806313e461921461053b57806318160ddd1461055b5780631cc43f071461057057806323b872dd1461059057600080fd5b80630758d924116103b15780630758d924146104b657806309231602146104d6578063095ea7b3146104f65780630fa604e41461052657600080fd5b806303fd2a45146103ee5780630445b6671461042157806305bbedb61461044557806306fdde031461046757600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042d57600080fd5b5061043760165481565b604051908152602001610418565b34801561045157600080fd5b50610465610460366004614e59565b610d20565b005b34801561047357600080fd5b5060408051808201909152600981527f4d6f72696520494e55000000000000000000000000000000000000000000000060208201525b6040516104189190614eab565b3480156104c257600080fd5b50601054610404906001600160a01b031681565b3480156104e257600080fd5b506104656104f1366004614f00565b610df9565b34801561050257600080fd5b50610516610511366004614f19565b610f18565b6040519015158152602001610418565b34801561053257600080fd5b50610437610f2f565b34801561054757600080fd5b50610465610556366004614f45565b610f4f565b34801561056757600080fd5b50610437611412565b34801561057c57600080fd5b5061046561058b366004614f73565b611453565b34801561059c57600080fd5b506105166105ab36600461502e565b61159c565b3480156105bc57600080fd5b506104656105cb36600461506f565b611614565b3480156105dc57600080fd5b506104656105eb366004614f73565b611767565b3480156105fc57600080fd5b5061046561060b366004615091565b611866565b34801561061c57600080fd5b5061043761194f565b34801561063157600080fd5b506104376107d081565b34801561064757600080fd5b50610465610656366004614f19565b611995565b34801561066757600080fd5b50610437610676366004614f00565b611a32565b34801561068757600080fd5b5061043760175481565b34801561069d57600080fd5b5060405160128152602001610418565b3480156106b957600080fd5b506104656106c83660046150ed565b611ac9565b3480156106d957600080fd5b506104656106e836600461510a565b611b69565b3480156106f957600080fd5b50610465610708366004614f45565b611c28565b34801561071957600080fd5b5061046561072836600461506f565b611ca1565b34801561073957600080fd5b50601154610404906001600160a01b031681565b34801561075957600080fd5b50601a546105169060ff1681565b34801561077357600080fd5b506104656107823660046150ed565b611df4565b34801561079357600080fd5b506105166107a23660046150ed565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107cc57600080fd5b50601a5461051690610100900460ff1681565b3480156107eb57600080fd5b506104656107fa366004614f45565b611ff3565b34801561080b57600080fd5b5061046561081a3660046150ed565b61206c565b34801561082b57600080fd5b5061051661083a3660046150ed565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086457600080fd5b50610437612168565b34801561087957600080fd5b506104376108883660046150ed565b612183565b34801561089957600080fd5b506104656121e2565b3480156108ae57600080fd5b50600c546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610418565b34801561093057600080fd5b5061046561093f366004614f45565b612292565b34801561095057600080fd5b5061051661095f3660046150ed565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561098957600080fd5b506000546001600160a01b0316610404565b3480156109a757600080fd5b5061051661244e565b3480156109bc57600080fd5b506104656124bd565b3480156109d157600080fd5b5060408051808201909152600581527f4d4f52494500000000000000000000000000000000000000000000000000000060208201526104a9565b348015610a1757600080fd5b506104656126a7565b348015610a2c57600080fd5b50610516610a3b366004614f19565b612a1a565b348015610a4c57600080fd5b50610465610a5b36600461515c565b612a31565b348015610a6c57600080fd5b50610465610a7b36600461515c565b612b92565b348015610a8c57600080fd5b50610465610a9b3660046151b0565b612cf3565b348015610aac57600080fd5b50610465610abb36600461515c565b612daa565b348015610acc57600080fd5b50600e546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b1957600080fd5b50600d546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b6657600080fd5b50610465610b753660046150ed565b612f0b565b348015610b8657600080fd5b50610465610b953660046151e3565b612fab565b348015610ba657600080fd5b50600f54610bcb9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610418565b348015610bfc57600080fd5b50610437610c0b366004615200565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c4257600080fd5b5061043760145481565b348015610c5857600080fd5b50610465610c673660046150ed565b61304d565b348015610c7857600080fd5b50610465610c873660046150ed565b6133fc565b348015610c9857600080fd5b50610465613479565b348015610cad57600080fd5b50610465610cbc366004614f45565b61355c565b348015610ccd57600080fd5b50601254610404906001600160a01b031681565b348015610ced57600080fd5b5060135461051690610100900460ff1681565b348015610d0c57600080fd5b50610516610d1b3660046150ed565b613604565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610dc39085908590600401615272565b600060405180830381600087803b158015610ddd57600080fd5b505af1158015610df1573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b604b811015610e985760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d6a565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610efd57600080fd5b505af1158015610f11573d6000803e3d6000fd5b5050505050565b6000610f25338484613692565b5060015b92915050565b6000610f3d6012600a6153a9565b601954610f4a91906153b8565b905090565b6000546001600160a01b03163314610f9d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b80156110f2576001600160a01b03821660009081526008602052604090205460ff161561100c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d6a565b6001600160a01b03821660009081526001602052604090205415611066576001600160a01b03821660009081526001602052604090205461104c90611a32565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff19166001179055601154909116146110ee57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b806110ee576001600160a01b03821660009081526008602052604090205460ff1661115f5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d6a565b6011546001600160a01b03838116911614156111da5761117d61379f565b6001600160a01b0383166000908152600260205260409020546111a091906153f3565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b6009546001141561128a576111ed61379f565b6001600160a01b03831660009081526002602052604090205461121091906153f3565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff19169055600980548061125757611257615412565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561140d57826001600160a01b0316600982815481106112b4576112b4615441565b6000918252602090912001546001600160a01b031614156113fb57600980546112df90600190615470565b815481106112ef576112ef615441565b600091825260209091200154600980546001600160a01b03909216918390811061131b5761131b615441565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591851681526002909152604081205561136761379f565b6001600160a01b03841660009081526002602052604090205461138a91906153f3565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806113c7576113c7615412565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061140581615487565b91505061128d565b505050565b60006114206012600a6153a9565b61142f906402540be4006153f3565b61143857600080fd5b6114446012600a6153a9565b610f4a906402540be4006153f3565b6000546001600160a01b031633146114a15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b80518251146114f25760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d6a565b60005b82518160ff16101561140d5761150d6012600a6153a9565b828260ff168151811061152257611522615441565b602002602001015161153491906153f3565b61153d33612183565b101561154857600080fd5b61158a838260ff168151811061156057611560615441565b6020026020010151838360ff168151811061157d5761157d615441565b6020026020010151611995565b80611594816154a2565b9150506114f5565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611601576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906115fb908490615470565b90915550505b61160c848484613a71565b949350505050565b6000546001600160a01b031633146116625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6103e86116716012600a6153a9565b611680906402540be4006153f3565b61168a91906153b8565b81836116986012600a6153a9565b6116a7906402540be4006153f3565b6116b191906153f3565b6116bb91906153b8565b101561172f5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d6a565b808261173d6012600a6153a9565b61174c906402540be4006153f3565b61175691906153f3565b61176091906153b8565b6019555050565b80518251146117b85760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d6a565b60005b82518160ff16101561140d57818160ff16815181106117dc576117dc615441565b60200260200101516117ed33612183565b10156117f857600080fd5b61185333848360ff168151811061181157611811615441565b60200260200101516012600a61182791906153a9565b858560ff168151811061183c5761183c615441565b602002602001015161184e91906153f3565b613a71565b508061185e816154a2565b9150506117bb565b6000546001600160a01b031633146118b45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561193157600080fd5b505af1158015611945573d6000803e3d6000fd5b5050505050505050565b600061195b6000612183565b61196661dead612183565b61197091906154c2565b61197c6012600a6153a9565b61198b906402540be4006153f3565b610f4a9190615470565b6000546001600160a01b031633146119e35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54760100000000000000000000000000000000000000000000900460ff1615611a0d57600080fd5b611a196012600a6153a9565b611a2390826153f3565b905061140d3383836000613f40565b6000600b54821115611aac5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d6a565b6000611ab661379f565b9050611ac281846153b8565b9392505050565b6000546001600160a01b03163314611b175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610ee3565b6000546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b8385611bc56012600a6153a9565b611bd4906402540be4006153f3565b611bde91906153f3565b611be891906153b8565b6016558183611bf96012600a6153a9565b611c08906402540be4006153f3565b611c1291906153f3565b611c1c91906153b8565b60175560145550505050565b6000546001600160a01b03163314611c765760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6103e8611cfe6012600a6153a9565b611d0d906402540be4006153f3565b611d1791906153b8565b8183611d256012600a6153a9565b611d34906402540be4006153f3565b611d3e91906153f3565b611d4891906153b8565b1015611dbc5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d6a565b8082611dca6012600a6153a9565b611dd9906402540be4006153f3565b611de391906153f3565b611ded91906153b8565b6018555050565b6000546001600160a01b03163314611e425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6001600160a01b038116611ebe5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d6a565b6001600160a01b03811661dead1415611f3f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d6a565b60008054611f58916001600160a01b0390911690611ff3565b611f63816001611ff3565b60008054611f79906001600160a01b0316612183565b1115611f9b57600054611f99906001600160a01b03168261184e82612183565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146120415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54610100900460ff16156120cf57600080fd5b6001600160a01b0381163014156121285760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d6a565b601a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006121766012600a6153a9565b601854610f4a91906153b8565b6001600160a01b03811660009081526008602052604081205460ff16156121c057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f2990611a32565b6000546001600160a01b031633146122305760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008054612249916001600160a01b0390911690611ff3565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b8061236c576001600160a01b03828116600081815260036020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610ddd57600080fd5b600454156123d3576203f480600454426123869190615470565b116123d35760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d6a565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601a5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610dc3565b600080546001600160a01b0316331461249d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6010546124b79030906001600160a01b0316600019613692565b50600190565b6000546001600160a01b0316331461250b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a5460ff161561255e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d6a565b601a54610100900460ff166125b55760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d6a565b601a546201000090046001600160a01b03166125fb57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a546011546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561268657600080fd5b505af1925050508015612697575060015b50601a805460ff19166001179055565b6000546001600160a01b031633146126f55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54760100000000000000000000000000000000000000000000900460ff16156127625760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610d6a565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d991906154da565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e91906154da565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156128c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e691906154da565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554601054612940929182169116600019613692565b60105461295a9030906001600160a01b0316600019613692565b600080546001600160a01b039081168252600660209081526040808420805460ff19908116600190811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a90925290922080549091169091179055601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b6000612a27338484613a71565b5060019392505050565b6000546001600160a01b03163314612a7f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008382612a8d85886154f7565b612a9791906154f7565b612aa191906154f7565b90506107d08161ffff161115612ab657600080fd5b600e805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000091851691909102179055612b4184866154f7565b612b4b908261551d565b600e805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612be05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008382612bee85886154f7565b612bf891906154f7565b612c0291906154f7565b90506107d08161ffff161115612c1757600080fd5b600c805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000091851691909102179055612ca284866154f7565b612cac908261551d565b600c805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612d415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b600f805461ffff838116620100000263ffffffff1990921690851617179055612d6a81836154f7565b600f805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b03163314612df85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008382612e0685886154f7565b612e1091906154f7565b612e1a91906154f7565b90506107d08161ffff161115612e2f57600080fd5b600d805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000091851691909102179055612eba84866154f7565b612ec4908261551d565b600d805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612f595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610ee3565b6000546001600160a01b03163314612ff95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061304290831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461309b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310491906154da565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613151573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317591906154da565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156131d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fc91906154da565b90506001600160a01b03811661339a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561324a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326e91906154da565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132df91906154da565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336891906154da565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556133c3565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561140d903090600019613692565b6000546001600160a01b0316331461344a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146134c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54610100900460ff161561351f5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d6a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613559573d6000803e3d6000fd5b50565b6000546001600160a01b031633146135aa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610dc3565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f299190615540565b6001600160a01b0383166136e85760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d6a565b6001600160a01b03821661373e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d6a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600b54600090816137b26012600a6153a9565b6137c1906402540be4006153f3565b6011546001600160a01b031660009081526008602052604090205490915060ff16156138ac576011546001600160a01b031660009081526001602052604090205482108061382857506011546001600160a01b031660009081526002602052604090205481105b1561385c576138396012600a6153a9565b613848906402540be4006153f3565b600b5461385591906153b8565b9250505090565b6011546001600160a01b03166000908152600160205260409020546138819083615470565b6011546001600160a01b03166000908152600260205260409020549092506138a99082615470565b90505b60095415613a2c5760005b60095460ff82161015613a2a57826001600060098460ff16815481106138df576138df615441565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061394d5750816002600060098460ff168154811061392657613926615441565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139825761395e6012600a6153a9565b61396d906402540be4006153f3565b600b5461397a91906153b8565b935050505090565b6001600060098360ff168154811061399c5761399c615441565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139cb9084615470565b92506002600060098360ff16815481106139e7576139e7615441565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a169083615470565b915080613a22816154a2565b9150506138b7565b505b613a386012600a6153a9565b613a47906402540be4006153f3565b600b54613a5491906153b8565b821015613a67576138396012600a6153a9565b61385581836153b8565b60006001600160a01b038416613aef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d6a565b6001600160a01b038316613b6b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d6a565b60008211613be15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d6a565b601a54760100000000000000000000000000000000000000000000900460ff16613c0a57600080fd5b613c1484846141c2565b15613e5557601a5460ff16613c6b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d6a565b6001600160a01b03841660009081526003602052604090205460ff1680613caa57506001600160a01b03831660009081526003602052604090205460ff165b15613d6e576001600160a01b03841660009081526007602052604090205460ff16158015613cf157506001600160a01b03831660009081526007602052604090205460ff16155b15613d6e57601854821115613d6e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d6a565b6010546001600160a01b03848116911614801590613da557506001600160a01b03831660009081526003602052604090205460ff16155b15613e55576001600160a01b03831660009081526007602052604090205460ff16613e555760195482613dd785612183565b613de191906154c2565b1115613e555760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d6a565b6001600160a01b03841660009081526006602052604090205460019060ff1680613e9757506001600160a01b03841660009081526006602052604090205460ff165b15613ea0575060005b6001600160a01b03841660009081526003602052604090205460ff1615613f2b5760135460ff16158015613edb5750601354610100900460ff165b15613f2b5742601454601554613ef191906154c2565b1015613f2b576000613f0230612183565b90506016548110613f29576017548110613f1b57506017545b613f2481614296565b426015555b505b613f3785858584613f40565b95945050505050565b601a54600090610100900460ff16613fec57613f5c8585614686565b601a54610100900460ff16158015613f795750613f7985856141c2565b15613fec5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d6a565b6000613ffa868686866147e4565b60a08101516001600160a01b03881660009081526001602052604090205491925061402491615470565b6001600160a01b038088166000908152600160205260408082209390935560808401519188168152919091205461405b91906154c2565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff16156140cd576001600160a01b0386166000908152600260205260409020546140b3908590615470565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff161561412d5780516001600160a01b03861660009081526002602052604090205461411391906154c2565b6001600160a01b0386166000908152600260205260409020555b60008160c001511180614144575060008160200151115b15614165578060c00151600b600082825461415f9190615470565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516141ae91815260200190565b60405180910390a350600195945050505050565b600080546001600160a01b038481169116148015906141ef57506000546001600160a01b03838116911614155b801561420657506000546001600160a01b03163214155b801561422b57506001600160a01b0382166000908152600a602052604090205460ff16155b801561425057506001600160a01b0383166000908152600a602052604090205460ff16155b801561426757506001600160a01b03821661dead14155b801561427b57506001600160a01b03821615155b8015611ac257506001600160a01b0383163014159392505050565b6013805460ff1916600117905560408051606081018252600f5461ffff80821683526201000082048116602084015264010000000090910416918101829052906142e05750614679565b3060009081526005602090815260408083206010546001600160a01b0316845290915290205460001914614339573060009081526005602090815260408083206010546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff168561435a91906153f3565b61436491906153b8565b61436e91906153b8565b9050600061437c8285615470565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106143b6576143b6615441565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061444c91906154da565b8160018151811061445f5761445f615441565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906144be90859060009086903090429060040161555d565b600060405180830381600087803b1580156144d857600080fd5b505af11580156144ec573d6000803e3d6000fd5b504792506000915084905061450186846153f3565b61450b91906153b8565b905084156145fc576010546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561459a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145bf9190615599565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6146068183615470565b915085600001518660400181815161461e919061551d565b61ffff90811690915260208801518492501615614671576012546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561466f573d6000803e3d6000fd5b505b505050505050505b506013805460ff19169055565b601a54610100900460ff16156147045760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d6a565b61470e82826141c2565b15801561472857506011546001600160a01b038281169116145b156110ee576001600160a01b038083166000908152600a60205260409020805460ff19166001179055601a805461ff00191661010017908190556201000090041661479d57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61482c60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61487460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61487c61379f565b60e0820181905261488d90856153f3565b60a082015261489c86866141c2565b1561494f57601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614938575060408051601f3d908101601f1916820190925261493591810190615540565b60015b61494157600080fd5b90508061494d57600080fd5b505b8215614ab6576001600160a01b038516600090815260036020526040812054819081906127109060ff16156149a857600d5461ffff80821695506801000000000000000082048116945062010000909104169150614a19565b6001600160a01b038a1660009081526003602052604090205460ff16156149f357600c5461ffff80821695506801000000000000000082048116945062010000909104169150614a19565b600e5461ffff808216955068010000000000000000820481169450620100009091041691505b80614a24858a6153f3565b614a2e91906153b8565b602086015280614a3e848a6153f3565b614a4891906153b8565b604086015280614a58838a6153f3565b614a6291906153b8565b6060860181905260408601516020870151614a7d91906154c2565b614a8791906154c2565b614a919089615470565b855260e08501516020860151614aa791906153f3565b60c086015250614ad692505050565b600060208201819052604082018190526060820181905284825260c08201525b604081015115614bad578060e001518160400151614af491906153f3565b3060009081526001602052604081208054909190614b139084906154c2565b90915550503060009081526008602052604090205460ff1615614b5b576040808201513060009081526002602052918220805491929091614b559084906154c2565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614ba491815260200190565b60405180910390a35b606081015115614ce0578060e001518160600151614bcb91906153f3565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614c099084906154c2565b909155505061dead60005260086020527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342995460ff1615614c8c57606081015161dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054909190614c869084906154c2565b90915550505b61dead6001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360600151604051614cd791815260200190565b60405180910390a35b8060e001518160600151614cf491906153f3565b8160e001518260400151614d0891906153f3565b8260c00151614d1791906154c2565b614d2191906154c2565b8160a00151614d309190615470565b608082015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614d9657614d96614d3e565b604052919050565b600067ffffffffffffffff821115614db857614db8614d3e565b5060051b60200190565b6001600160a01b038116811461355957600080fd5b600082601f830112614de857600080fd5b81356020614dfd614df883614d9e565b614d6d565b82815260059290921b84018101918181019086841115614e1c57600080fd5b8286015b84811015614e40578035614e3381614dc2565b8352918301918301614e20565b509695505050505050565b801515811461355957600080fd5b60008060408385031215614e6c57600080fd5b823567ffffffffffffffff811115614e8357600080fd5b614e8f85828601614dd7565b9250506020830135614ea081614e4b565b809150509250929050565b600060208083528351808285015260005b81811015614ed857858101830151858201604001528201614ebc565b81811115614eea576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614f1257600080fd5b5035919050565b60008060408385031215614f2c57600080fd5b8235614f3781614dc2565b946020939093013593505050565b60008060408385031215614f5857600080fd5b8235614f6381614dc2565b91506020830135614ea081614e4b565b60008060408385031215614f8657600080fd5b823567ffffffffffffffff80821115614f9e57600080fd5b614faa86838701614dd7565b9350602091508185013581811115614fc157600080fd5b85019050601f81018613614fd457600080fd5b8035614fe2614df882614d9e565b81815260059190911b8201830190838101908883111561500157600080fd5b928401925b8284101561501f57833582529284019290840190615006565b80955050505050509250929050565b60008060006060848603121561504357600080fd5b833561504e81614dc2565b9250602084013561505e81614dc2565b929592945050506040919091013590565b6000806040838503121561508257600080fd5b50508035926020909101359150565b600080600080608085870312156150a757600080fd5b84356150b281614e4b565b935060208501356150c281614e4b565b925060408501356150d281614e4b565b915060608501356150e281614e4b565b939692955090935050565b6000602082840312156150ff57600080fd5b8135611ac281614dc2565b600080600080600060a0868803121561512257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b803561ffff8116811461515757600080fd5b919050565b6000806000806080858703121561517257600080fd5b61517b85615145565b935061518960208601615145565b925061519760408601615145565b91506151a560608601615145565b905092959194509250565b600080604083850312156151c357600080fd5b6151cc83615145565b91506151da60208401615145565b90509250929050565b6000602082840312156151f557600080fd5b8135611ac281614e4b565b6000806040838503121561521357600080fd5b823561521e81614dc2565b91506020830135614ea081614dc2565b600081518084526020808501945080840160005b838110156152675781516001600160a01b031687529582019590820190600101615242565b509495945050505050565b604081526000615285604083018561522e565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156153005781600019048211156152e6576152e6615296565b808516156152f357918102915b93841c93908002906152ca565b509250929050565b60008261531757506001610f29565b8161532457506000610f29565b816001811461533a576002811461534457615360565b6001915050610f29565b60ff84111561535557615355615296565b50506001821b610f29565b5060208310610133831016604e8410600b8410161715615383575081810a610f29565b61538d83836152c5565b80600019048211156153a1576153a1615296565b029392505050565b6000611ac260ff841683615308565b6000826153ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600081600019048311821515161561540d5761540d615296565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561548257615482615296565b500390565b600060001982141561549b5761549b615296565b5060010190565b600060ff821660ff8114156154b9576154b9615296565b60010192915050565b600082198211156154d5576154d5615296565b500190565b6000602082840312156154ec57600080fd5b8151611ac281614dc2565b600061ffff80831681851680830382111561551457615514615296565b01949350505050565b600061ffff8381169083168181101561553857615538615296565b039392505050565b60006020828403121561555257600080fd5b8151611ac281614e4b565b85815284602082015260a06040820152600061557c60a083018661522e565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156155ae57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b2cdaaf909f82d9190a873ac1090b4c61a82646ecb6b620d201184f36672ab9564736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103e25760003560e01c80635cce86cd1161020d578063bc77169d11610128578063dd62ed3e116100bb578063ee5d9c2d1161008a578063f94aa1b41161006f578063f94aa1b414610cc1578063fdb78c0e14610ce1578063fe575a8714610d0057600080fd5b8063ee5d9c2d14610c8c578063eec2744e14610ca157600080fd5b8063dd62ed3e14610bf0578063e4fcfd1814610c36578063eafb5a3c14610c4c578063eb50e70e14610c6c57600080fd5b8063c6831cd8116100f7578063c6831cd814610b0d578063c6a276c214610b5a578063cab5ebea14610b7a578063cf84770614610b9a57600080fd5b8063bc77169d14610a60578063bcd96a2514610a80578063becdf13f14610aa0578063c2fa418f14610ac057600080fd5b80638a63bd9b116101a0578063a9059cbb1161016f578063a9059cbb14610a20578063aa54547314610a40578063b1b08f7114610625578063b3d514fb1461062557600080fd5b80638a63bd9b1461099b5780638a8c523c146109b057806395d89b41146109c5578063a6690cf914610a0b57600080fd5b80637b45d431116101dc5780637b45d431146108a257806380c581d11461092457806388f8202014610944578063893d20e81461097d57600080fd5b80635cce86cd1461081f5780636ebd00781461085857806370a082311461086d578063715018a61461088d57600080fd5b80632b28fc7a116102fd5780633f3cf56c116102905780634fbee1931161025f5780634fbee1931461078757806350a8e016146107c0578063590ffdce146107df5780635c24b074146107ff57600080fd5b80633f3cf56c1461070d578063452ed4f11461072d5780634ada218b1461074d5780634fb2e45d1461076757600080fd5b8063313ce567116102cc578063313ce5671461069157806333251a0b146106ad57806334cd8260146106cd57806336fddb04146106ed57600080fd5b80632b28fc7a146106255780632cee76021461063b5780632d8381191461065b5780632e8fa8211461067b57600080fd5b806313e4619211610375578063260039571161034457806326003957146105b05780632610eaca146105d057806329dd8798146105f05780632b112e491461061057600080fd5b806313e461921461053b57806318160ddd1461055b5780631cc43f071461057057806323b872dd1461059057600080fd5b80630758d924116103b15780630758d924146104b657806309231602146104d6578063095ea7b3146104f65780630fa604e41461052657600080fd5b806303fd2a45146103ee5780630445b6671461042157806305bbedb61461044557806306fdde031461046757600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042d57600080fd5b5061043760165481565b604051908152602001610418565b34801561045157600080fd5b50610465610460366004614e59565b610d20565b005b34801561047357600080fd5b5060408051808201909152600981527f4d6f72696520494e55000000000000000000000000000000000000000000000060208201525b6040516104189190614eab565b3480156104c257600080fd5b50601054610404906001600160a01b031681565b3480156104e257600080fd5b506104656104f1366004614f00565b610df9565b34801561050257600080fd5b50610516610511366004614f19565b610f18565b6040519015158152602001610418565b34801561053257600080fd5b50610437610f2f565b34801561054757600080fd5b50610465610556366004614f45565b610f4f565b34801561056757600080fd5b50610437611412565b34801561057c57600080fd5b5061046561058b366004614f73565b611453565b34801561059c57600080fd5b506105166105ab36600461502e565b61159c565b3480156105bc57600080fd5b506104656105cb36600461506f565b611614565b3480156105dc57600080fd5b506104656105eb366004614f73565b611767565b3480156105fc57600080fd5b5061046561060b366004615091565b611866565b34801561061c57600080fd5b5061043761194f565b34801561063157600080fd5b506104376107d081565b34801561064757600080fd5b50610465610656366004614f19565b611995565b34801561066757600080fd5b50610437610676366004614f00565b611a32565b34801561068757600080fd5b5061043760175481565b34801561069d57600080fd5b5060405160128152602001610418565b3480156106b957600080fd5b506104656106c83660046150ed565b611ac9565b3480156106d957600080fd5b506104656106e836600461510a565b611b69565b3480156106f957600080fd5b50610465610708366004614f45565b611c28565b34801561071957600080fd5b5061046561072836600461506f565b611ca1565b34801561073957600080fd5b50601154610404906001600160a01b031681565b34801561075957600080fd5b50601a546105169060ff1681565b34801561077357600080fd5b506104656107823660046150ed565b611df4565b34801561079357600080fd5b506105166107a23660046150ed565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107cc57600080fd5b50601a5461051690610100900460ff1681565b3480156107eb57600080fd5b506104656107fa366004614f45565b611ff3565b34801561080b57600080fd5b5061046561081a3660046150ed565b61206c565b34801561082b57600080fd5b5061051661083a3660046150ed565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086457600080fd5b50610437612168565b34801561087957600080fd5b506104376108883660046150ed565b612183565b34801561089957600080fd5b506104656121e2565b3480156108ae57600080fd5b50600c546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610418565b34801561093057600080fd5b5061046561093f366004614f45565b612292565b34801561095057600080fd5b5061051661095f3660046150ed565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561098957600080fd5b506000546001600160a01b0316610404565b3480156109a757600080fd5b5061051661244e565b3480156109bc57600080fd5b506104656124bd565b3480156109d157600080fd5b5060408051808201909152600581527f4d4f52494500000000000000000000000000000000000000000000000000000060208201526104a9565b348015610a1757600080fd5b506104656126a7565b348015610a2c57600080fd5b50610516610a3b366004614f19565b612a1a565b348015610a4c57600080fd5b50610465610a5b36600461515c565b612a31565b348015610a6c57600080fd5b50610465610a7b36600461515c565b612b92565b348015610a8c57600080fd5b50610465610a9b3660046151b0565b612cf3565b348015610aac57600080fd5b50610465610abb36600461515c565b612daa565b348015610acc57600080fd5b50600e546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b1957600080fd5b50600d546108ef9061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000009091041685565b348015610b6657600080fd5b50610465610b753660046150ed565b612f0b565b348015610b8657600080fd5b50610465610b953660046151e3565b612fab565b348015610ba657600080fd5b50600f54610bcb9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610418565b348015610bfc57600080fd5b50610437610c0b366004615200565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c4257600080fd5b5061043760145481565b348015610c5857600080fd5b50610465610c673660046150ed565b61304d565b348015610c7857600080fd5b50610465610c873660046150ed565b6133fc565b348015610c9857600080fd5b50610465613479565b348015610cad57600080fd5b50610465610cbc366004614f45565b61355c565b348015610ccd57600080fd5b50601254610404906001600160a01b031681565b348015610ced57600080fd5b5060135461051690610100900460ff1681565b348015610d0c57600080fd5b50610516610d1b3660046150ed565b613604565b6000546001600160a01b03163314610d735760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610dc39085908590600401615272565b600060405180830381600087803b158015610ddd57600080fd5b505af1158015610df1573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b604b811015610e985760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610d6a565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610efd57600080fd5b505af1158015610f11573d6000803e3d6000fd5b5050505050565b6000610f25338484613692565b5060015b92915050565b6000610f3d6012600a6153a9565b601954610f4a91906153b8565b905090565b6000546001600160a01b03163314610f9d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b80156110f2576001600160a01b03821660009081526008602052604090205460ff161561100c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d6a565b6001600160a01b03821660009081526001602052604090205415611066576001600160a01b03821660009081526001602052604090205461104c90611a32565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff19166001179055601154909116146110ee57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b806110ee576001600160a01b03821660009081526008602052604090205460ff1661115f5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d6a565b6011546001600160a01b03838116911614156111da5761117d61379f565b6001600160a01b0383166000908152600260205260409020546111a091906153f3565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b6009546001141561128a576111ed61379f565b6001600160a01b03831660009081526002602052604090205461121091906153f3565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff19169055600980548061125757611257615412565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561140d57826001600160a01b0316600982815481106112b4576112b4615441565b6000918252602090912001546001600160a01b031614156113fb57600980546112df90600190615470565b815481106112ef576112ef615441565b600091825260209091200154600980546001600160a01b03909216918390811061131b5761131b615441565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394851617905591851681526002909152604081205561136761379f565b6001600160a01b03841660009081526002602052604090205461138a91906153f3565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff1916905560098054806113c7576113c7615412565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061140581615487565b91505061128d565b505050565b60006114206012600a6153a9565b61142f906402540be4006153f3565b61143857600080fd5b6114446012600a6153a9565b610f4a906402540be4006153f3565b6000546001600160a01b031633146114a15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b80518251146114f25760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d6a565b60005b82518160ff16101561140d5761150d6012600a6153a9565b828260ff168151811061152257611522615441565b602002602001015161153491906153f3565b61153d33612183565b101561154857600080fd5b61158a838260ff168151811061156057611560615441565b6020026020010151838360ff168151811061157d5761157d615441565b6020026020010151611995565b80611594816154a2565b9150506114f5565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611601576001600160a01b0384166000908152600560209081526040808320338452909152812080548492906115fb908490615470565b90915550505b61160c848484613a71565b949350505050565b6000546001600160a01b031633146116625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6103e86116716012600a6153a9565b611680906402540be4006153f3565b61168a91906153b8565b81836116986012600a6153a9565b6116a7906402540be4006153f3565b6116b191906153f3565b6116bb91906153b8565b101561172f5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d6a565b808261173d6012600a6153a9565b61174c906402540be4006153f3565b61175691906153f3565b61176091906153b8565b6019555050565b80518251146117b85760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d6a565b60005b82518160ff16101561140d57818160ff16815181106117dc576117dc615441565b60200260200101516117ed33612183565b10156117f857600080fd5b61185333848360ff168151811061181157611811615441565b60200260200101516012600a61182791906153a9565b858560ff168151811061183c5761183c615441565b602002602001015161184e91906153f3565b613a71565b508061185e816154a2565b9150506117bb565b6000546001600160a01b031633146118b45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561193157600080fd5b505af1158015611945573d6000803e3d6000fd5b5050505050505050565b600061195b6000612183565b61196661dead612183565b61197091906154c2565b61197c6012600a6153a9565b61198b906402540be4006153f3565b610f4a9190615470565b6000546001600160a01b031633146119e35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54760100000000000000000000000000000000000000000000900460ff1615611a0d57600080fd5b611a196012600a6153a9565b611a2390826153f3565b905061140d3383836000613f40565b6000600b54821115611aac5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610d6a565b6000611ab661379f565b9050611ac281846153b8565b9392505050565b6000546001600160a01b03163314611b175760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610ee3565b6000546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b8385611bc56012600a6153a9565b611bd4906402540be4006153f3565b611bde91906153f3565b611be891906153b8565b6016558183611bf96012600a6153a9565b611c08906402540be4006153f3565b611c1291906153f3565b611c1c91906153b8565b60175560145550505050565b6000546001600160a01b03163314611c765760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611cef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6103e8611cfe6012600a6153a9565b611d0d906402540be4006153f3565b611d1791906153b8565b8183611d256012600a6153a9565b611d34906402540be4006153f3565b611d3e91906153f3565b611d4891906153b8565b1015611dbc5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d6a565b8082611dca6012600a6153a9565b611dd9906402540be4006153f3565b611de391906153f3565b611ded91906153b8565b6018555050565b6000546001600160a01b03163314611e425760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6001600160a01b038116611ebe5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d6a565b6001600160a01b03811661dead1415611f3f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d6a565b60008054611f58916001600160a01b0390911690611ff3565b611f63816001611ff3565b60008054611f79906001600160a01b0316612183565b1115611f9b57600054611f99906001600160a01b03168261184e82612183565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146120415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146120ba5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54610100900460ff16156120cf57600080fd5b6001600160a01b0381163014156121285760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610d6a565b601a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006121766012600a6153a9565b601854610f4a91906153b8565b6001600160a01b03811660009081526008602052604081205460ff16156121c057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610f2990611a32565b6000546001600160a01b031633146122305760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008054612249916001600160a01b0390911690611ff3565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146122e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b8061236c576001600160a01b03828116600081815260036020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610ddd57600080fd5b600454156123d3576203f480600454426123869190615470565b116123d35760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610d6a565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601a5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610dc3565b600080546001600160a01b0316331461249d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6010546124b79030906001600160a01b0316600019613692565b50600190565b6000546001600160a01b0316331461250b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a5460ff161561255e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d6a565b601a54610100900460ff166125b55760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d6a565b601a546201000090046001600160a01b03166125fb57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a546011546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561268657600080fd5b505af1925050508015612697575060015b50601a805460ff19166001179055565b6000546001600160a01b031633146126f55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54760100000000000000000000000000000000000000000000900460ff16156127625760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610d6a565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d991906154da565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e91906154da565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156128c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e691906154da565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554601054612940929182169116600019613692565b60105461295a9030906001600160a01b0316600019613692565b600080546001600160a01b039081168252600660209081526040808420805460ff19908116600190811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a90925290922080549091169091179055601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b6000612a27338484613a71565b5060019392505050565b6000546001600160a01b03163314612a7f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008382612a8d85886154f7565b612a9791906154f7565b612aa191906154f7565b90506107d08161ffff161115612ab657600080fd5b600e805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000091851691909102179055612b4184866154f7565b612b4b908261551d565b600e805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612be05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008382612bee85886154f7565b612bf891906154f7565b612c0291906154f7565b90506107d08161ffff161115612c1757600080fd5b600c805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000091851691909102179055612ca284866154f7565b612cac908261551d565b600c805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612d415760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b600f805461ffff838116620100000263ffffffff1990921690851617179055612d6a81836154f7565b600f805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b03163314612df85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008382612e0685886154f7565b612e1091906154f7565b612e1a91906154f7565b90506107d08161ffff161115612e2f57600080fd5b600d805461ffff87811663ffffffff19909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000091851691909102179055612eba84866154f7565b612ec4908261551d565b600d805461ffff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9092169190911790555050505050565b6000546001600160a01b03163314612f595760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610ee3565b6000546001600160a01b03163314612ff95760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579061304290831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461309b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310491906154da565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613151573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317591906154da565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156131d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fc91906154da565b90506001600160a01b03811661339a57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561324a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326e91906154da565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132df91906154da565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336891906154da565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556133c3565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561140d903090600019613692565b6000546001600160a01b0316331461344a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146134c75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a54610100900460ff161561351f5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d6a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613559573d6000803e3d6000fd5b50565b6000546001600160a01b031633146135aa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610d6a565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610dc3565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561366e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f299190615540565b6001600160a01b0383166136e85760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d6a565b6001600160a01b03821661373e5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610d6a565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600b54600090816137b26012600a6153a9565b6137c1906402540be4006153f3565b6011546001600160a01b031660009081526008602052604090205490915060ff16156138ac576011546001600160a01b031660009081526001602052604090205482108061382857506011546001600160a01b031660009081526002602052604090205481105b1561385c576138396012600a6153a9565b613848906402540be4006153f3565b600b5461385591906153b8565b9250505090565b6011546001600160a01b03166000908152600160205260409020546138819083615470565b6011546001600160a01b03166000908152600260205260409020549092506138a99082615470565b90505b60095415613a2c5760005b60095460ff82161015613a2a57826001600060098460ff16815481106138df576138df615441565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061394d5750816002600060098460ff168154811061392657613926615441565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139825761395e6012600a6153a9565b61396d906402540be4006153f3565b600b5461397a91906153b8565b935050505090565b6001600060098360ff168154811061399c5761399c615441565b60009182526020808320909101546001600160a01b031683528201929092526040019020546139cb9084615470565b92506002600060098360ff16815481106139e7576139e7615441565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613a169083615470565b915080613a22816154a2565b9150506138b7565b505b613a386012600a6153a9565b613a47906402540be4006153f3565b600b54613a5491906153b8565b821015613a67576138396012600a6153a9565b61385581836153b8565b60006001600160a01b038416613aef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d6a565b6001600160a01b038316613b6b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d6a565b60008211613be15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d6a565b601a54760100000000000000000000000000000000000000000000900460ff16613c0a57600080fd5b613c1484846141c2565b15613e5557601a5460ff16613c6b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d6a565b6001600160a01b03841660009081526003602052604090205460ff1680613caa57506001600160a01b03831660009081526003602052604090205460ff165b15613d6e576001600160a01b03841660009081526007602052604090205460ff16158015613cf157506001600160a01b03831660009081526007602052604090205460ff16155b15613d6e57601854821115613d6e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d6a565b6010546001600160a01b03848116911614801590613da557506001600160a01b03831660009081526003602052604090205460ff16155b15613e55576001600160a01b03831660009081526007602052604090205460ff16613e555760195482613dd785612183565b613de191906154c2565b1115613e555760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d6a565b6001600160a01b03841660009081526006602052604090205460019060ff1680613e9757506001600160a01b03841660009081526006602052604090205460ff165b15613ea0575060005b6001600160a01b03841660009081526003602052604090205460ff1615613f2b5760135460ff16158015613edb5750601354610100900460ff165b15613f2b5742601454601554613ef191906154c2565b1015613f2b576000613f0230612183565b90506016548110613f29576017548110613f1b57506017545b613f2481614296565b426015555b505b613f3785858584613f40565b95945050505050565b601a54600090610100900460ff16613fec57613f5c8585614686565b601a54610100900460ff16158015613f795750613f7985856141c2565b15613fec5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610d6a565b6000613ffa868686866147e4565b60a08101516001600160a01b03881660009081526001602052604090205491925061402491615470565b6001600160a01b038088166000908152600160205260408082209390935560808401519188168152919091205461405b91906154c2565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff16156140cd576001600160a01b0386166000908152600260205260409020546140b3908590615470565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526008602052604090205460ff161561412d5780516001600160a01b03861660009081526002602052604090205461411391906154c2565b6001600160a01b0386166000908152600260205260409020555b60008160c001511180614144575060008160200151115b15614165578060c00151600b600082825461415f9190615470565b90915550505b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516141ae91815260200190565b60405180910390a350600195945050505050565b600080546001600160a01b038481169116148015906141ef57506000546001600160a01b03838116911614155b801561420657506000546001600160a01b03163214155b801561422b57506001600160a01b0382166000908152600a602052604090205460ff16155b801561425057506001600160a01b0383166000908152600a602052604090205460ff16155b801561426757506001600160a01b03821661dead14155b801561427b57506001600160a01b03821615155b8015611ac257506001600160a01b0383163014159392505050565b6013805460ff1916600117905560408051606081018252600f5461ffff80821683526201000082048116602084015264010000000090910416918101829052906142e05750614679565b3060009081526005602090815260408083206010546001600160a01b0316845290915290205460001914614339573060009081526005602090815260408083206010546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff168561435a91906153f3565b61436491906153b8565b61436e91906153b8565b9050600061437c8285615470565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106143b6576143b6615441565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061444c91906154da565b8160018151811061445f5761445f615441565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906144be90859060009086903090429060040161555d565b600060405180830381600087803b1580156144d857600080fd5b505af11580156144ec573d6000803e3d6000fd5b504792506000915084905061450186846153f3565b61450b91906153b8565b905084156145fc576010546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561459a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145bf9190615599565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6146068183615470565b915085600001518660400181815161461e919061551d565b61ffff90811690915260208801518492501615614671576012546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561466f573d6000803e3d6000fd5b505b505050505050505b506013805460ff19169055565b601a54610100900460ff16156147045760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d6a565b61470e82826141c2565b15801561472857506011546001600160a01b038281169116145b156110ee576001600160a01b038083166000908152600a60205260409020805460ff19166001179055601a805461ff00191661010017908190556201000090041661479d57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b61482c60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61487460405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61487c61379f565b60e0820181905261488d90856153f3565b60a082015261489c86866141c2565b1561494f57601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152878116602483015260448201879052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614938575060408051601f3d908101601f1916820190925261493591810190615540565b60015b61494157600080fd5b90508061494d57600080fd5b505b8215614ab6576001600160a01b038516600090815260036020526040812054819081906127109060ff16156149a857600d5461ffff80821695506801000000000000000082048116945062010000909104169150614a19565b6001600160a01b038a1660009081526003602052604090205460ff16156149f357600c5461ffff80821695506801000000000000000082048116945062010000909104169150614a19565b600e5461ffff808216955068010000000000000000820481169450620100009091041691505b80614a24858a6153f3565b614a2e91906153b8565b602086015280614a3e848a6153f3565b614a4891906153b8565b604086015280614a58838a6153f3565b614a6291906153b8565b6060860181905260408601516020870151614a7d91906154c2565b614a8791906154c2565b614a919089615470565b855260e08501516020860151614aa791906153f3565b60c086015250614ad692505050565b600060208201819052604082018190526060820181905284825260c08201525b604081015115614bad578060e001518160400151614af491906153f3565b3060009081526001602052604081208054909190614b139084906154c2565b90915550503060009081526008602052604090205460ff1615614b5b576040808201513060009081526002602052918220805491929091614b559084906154c2565b90915550505b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360400151604051614ba491815260200190565b60405180910390a35b606081015115614ce0578060e001518160600151614bcb91906153f3565b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054909190614c099084906154c2565b909155505061dead60005260086020527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342995460ff1615614c8c57606081015161dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054909190614c869084906154c2565b90915550505b61dead6001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360600151604051614cd791815260200190565b60405180910390a35b8060e001518160600151614cf491906153f3565b8160e001518260400151614d0891906153f3565b8260c00151614d1791906154c2565b614d2191906154c2565b8160a00151614d309190615470565b608082015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614d9657614d96614d3e565b604052919050565b600067ffffffffffffffff821115614db857614db8614d3e565b5060051b60200190565b6001600160a01b038116811461355957600080fd5b600082601f830112614de857600080fd5b81356020614dfd614df883614d9e565b614d6d565b82815260059290921b84018101918181019086841115614e1c57600080fd5b8286015b84811015614e40578035614e3381614dc2565b8352918301918301614e20565b509695505050505050565b801515811461355957600080fd5b60008060408385031215614e6c57600080fd5b823567ffffffffffffffff811115614e8357600080fd5b614e8f85828601614dd7565b9250506020830135614ea081614e4b565b809150509250929050565b600060208083528351808285015260005b81811015614ed857858101830151858201604001528201614ebc565b81811115614eea576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614f1257600080fd5b5035919050565b60008060408385031215614f2c57600080fd5b8235614f3781614dc2565b946020939093013593505050565b60008060408385031215614f5857600080fd5b8235614f6381614dc2565b91506020830135614ea081614e4b565b60008060408385031215614f8657600080fd5b823567ffffffffffffffff80821115614f9e57600080fd5b614faa86838701614dd7565b9350602091508185013581811115614fc157600080fd5b85019050601f81018613614fd457600080fd5b8035614fe2614df882614d9e565b81815260059190911b8201830190838101908883111561500157600080fd5b928401925b8284101561501f57833582529284019290840190615006565b80955050505050509250929050565b60008060006060848603121561504357600080fd5b833561504e81614dc2565b9250602084013561505e81614dc2565b929592945050506040919091013590565b6000806040838503121561508257600080fd5b50508035926020909101359150565b600080600080608085870312156150a757600080fd5b84356150b281614e4b565b935060208501356150c281614e4b565b925060408501356150d281614e4b565b915060608501356150e281614e4b565b939692955090935050565b6000602082840312156150ff57600080fd5b8135611ac281614dc2565b600080600080600060a0868803121561512257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b803561ffff8116811461515757600080fd5b919050565b6000806000806080858703121561517257600080fd5b61517b85615145565b935061518960208601615145565b925061519760408601615145565b91506151a560608601615145565b905092959194509250565b600080604083850312156151c357600080fd5b6151cc83615145565b91506151da60208401615145565b90509250929050565b6000602082840312156151f557600080fd5b8135611ac281614e4b565b6000806040838503121561521357600080fd5b823561521e81614dc2565b91506020830135614ea081614dc2565b600081518084526020808501945080840160005b838110156152675781516001600160a01b031687529582019590820190600101615242565b509495945050505050565b604081526000615285604083018561522e565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156153005781600019048211156152e6576152e6615296565b808516156152f357918102915b93841c93908002906152ca565b509250929050565b60008261531757506001610f29565b8161532457506000610f29565b816001811461533a576002811461534457615360565b6001915050610f29565b60ff84111561535557615355615296565b50506001821b610f29565b5060208310610133831016604e8410600b8410161715615383575081810a610f29565b61538d83836152c5565b80600019048211156153a1576153a1615296565b029392505050565b6000611ac260ff841683615308565b6000826153ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600081600019048311821515161561540d5761540d615296565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561548257615482615296565b500390565b600060001982141561549b5761549b615296565b5060010190565b600060ff821660ff8114156154b9576154b9615296565b60010192915050565b600082198211156154d5576154d5615296565b500190565b6000602082840312156154ec57600080fd5b8151611ac281614dc2565b600061ffff80831681851680830382111561551457615514615296565b01949350505050565b600061ffff8381169083168181101561553857615538615296565b039392505050565b60006020828403121561555257600080fd5b8151611ac281614e4b565b85815284602082015260a06040820152600061557c60a083018661522e565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156155ae57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b2cdaaf909f82d9190a873ac1090b4c61a82646ecb6b620d201184f36672ab9564736f6c634300080b0033

Deployed Bytecode Sourcemap

6272:27113:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8477:73;;;;;;;;;;;;8508:42;8477:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8477:73:0;;;;;;;;8916:52;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8916:52:0;245:177:1;18287:172:0;;;;;;;;;;-1:-1:-1;18287:172:0;;;;;:::i;:::-;;:::i;:::-;;13118:80;;;;;;;;;;-1:-1:-1;13190:5:0;;;;;;;;;;;;;;;;;13118:80;;;;;;;:::i;8416:26::-;;;;;;;;;;-1:-1:-1;8416:26:0;;;;-1:-1:-1;;;;;8416:26:0;;;19045:149;;;;;;;;;;-1:-1:-1;19045:149:0;;;;;:::i;:::-;;:::i;13809:159::-;;;;;;;;;;-1:-1:-1;13809:159:0;;;;;:::i;:::-;;:::i;:::-;;;4228:14:1;;4221:22;4203:41;;4191:2;4176:18;13809:159:0;4063:187:1;21995:112:0;;;;;;;;;;;;;:::i;16121:1519::-;;;;;;;;;;-1:-1:-1;16121:1519:0;;;;;:::i;:::-;;:::i;12821:115::-;;;;;;;;;;;;;:::i;28571:397::-;;;;;;;;;;-1:-1:-1;28571:397:0;;;;;:::i;:::-;;:::i;14474:306::-;;;;;;;;;;-1:-1:-1;14474:306:0;;;;;:::i;:::-;;:::i;21045:267::-;;;;;;;;;;-1:-1:-1;21045:267:0;;;;;:::i;:::-;;:::i;27708:373::-;;;;;;;;;;-1:-1:-1;27708:373:0;;;;;:::i;:::-;;:::i;18842:195::-;;;;;;;;;;-1:-1:-1;18842:195:0;;;;;:::i;:::-;;:::i;15844:141::-;;;;;;;;;;;;;:::i;8213:42::-;;;;;;;;;;;;8251:4;8213:42;;28346:217;;;;;;;;;;-1:-1:-1;28346:217:0;;;;;:::i;:::-;;:::i;17648:250::-;;;;;;;;;;-1:-1:-1;17648:250:0;;;;;:::i;:::-;;:::i;8975:49::-;;;;;;;;;;;;;;;;12942:80;;;;;;;;;;-1:-1:-1;12942:80:0;;7131:2;7293:36:1;;7281:2;7266:18;12942:80:0;7151:184:1;18726:108:0;;;;;;;;;;-1:-1:-1;18726:108:0;;;;;:::i;:::-;;:::i;22115:338::-;;;;;;;;;;-1:-1:-1;22115:338:0;;;;;:::i;:::-;;:::i;21320:140::-;;;;;;;;;;-1:-1:-1;21320:140:0;;;;;:::i;:::-;;:::i;20768:269::-;;;;;;;;;;-1:-1:-1;20768:269:0;;;;;:::i;:::-;;:::i;8449:21::-;;;;;;;;;;-1:-1:-1;8449:21:0;;;;-1:-1:-1;;;;;8449:21:0;;;9157:34;;;;;;;;;;-1:-1:-1;9157:34:0;;;;;;;;11679:588;;;;;;;;;;-1:-1:-1;11679:588:0;;;;;:::i;:::-;;:::i;21606:125::-;;;;;;;;;;-1:-1:-1;21606:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21695:28:0;21671:4;21695:28;;;:19;:28;;;;;;;;;21606:125;9198:36;;;;;;;;;;-1:-1:-1;9198:36:0;;;;;;;;;;;21739:134;;;;;;;;;;-1:-1:-1;21739:134:0;;;;;:::i;:::-;;:::i;17906:220::-;;;;;;;;;;-1:-1:-1;17906:220:0;;;;;:::i;:::-;;:::i;21468:130::-;;;;;;;;;;-1:-1:-1;21468:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;21560:30:0;21536:4;21560:30;;;:21;:30;;;;;;;;;21468:130;21881:106;;;;;;;;;;;;;:::i;13430:198::-;;;;;;;;;;-1:-1:-1;13430:198:0;;;;;:::i;:::-;;:::i;12275:193::-;;;;;;;;;;;;;:::i;7584:159::-;;;;;;;;;;-1:-1:-1;7584:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8310:6:1;8343:15;;;8325:34;;8395:15;;;8390:2;8375:18;;8368:43;8447:15;;;8427:18;;;8420:43;;;;8499:15;;8494:2;8479:18;;8472:43;8552:15;;;8546:3;8531:19;;8524:44;8287:3;8272:19;7584:159:0;8051:523:1;15336:500:0;;;;;;;;;;-1:-1:-1;15336:500:0;;;;;:::i;:::-;;:::i;15993:120::-;;;;;;;;;;-1:-1:-1;15993:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;16085:20:0;16061:4;16085:20;;;:11;:20;;;;;;;;;15993:120;13204:79;;;;;;;;;;-1:-1:-1;13256:7:0;13274:6;-1:-1:-1;;;;;13274:6:0;13204:79;;14293:173;;;;;;;;;;;;;:::i;27081:429::-;;;;;;;;;;;;;:::i;13028:84::-;;;;;;;;;;-1:-1:-1;13102:7:0;;;;;;;;;;;;;;;;;13028:84;;10495:595;;;;;;;;;;;;;:::i;13636:165::-;;;;;;;;;;-1:-1:-1;13636:165:0;;;;;:::i;:::-;;:::i;20084:458::-;;;;;;;;;;-1:-1:-1;20084:458:0;;;;;:::i;:::-;;:::i;19206:428::-;;;;;;;;;;-1:-1:-1;19206:428:0;;;;;:::i;:::-;;:::i;20550:210::-;;;;;;;;;;-1:-1:-1;20550:210:0;;;;;:::i;:::-;;:::i;19642:434::-;;;;;;;;;;-1:-1:-1;19642:434:0;;;;;:::i;:::-;;:::i;7923:164::-;;;;;;;;;;-1:-1:-1;7923:164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7752:162;;;;;;;;;;-1:-1:-1;7752:162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18467:118;;;;;;;;;;-1:-1:-1;18467:118:0;;;;;:::i;:::-;;:::i;22596:164::-;;;;;;;;;;-1:-1:-1;22596:164:0;;;;;:::i;:::-;;:::i;8096:108::-;;;;;;;;;;-1:-1:-1;8096:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;9862:6:1;9895:15;;;9877:34;;9947:15;;;9942:2;9927:18;;9920:43;9999:15;;9979:18;;;9972:43;;;;9840:2;9825:18;8096:108:0;9656:365:1;13289:133:0;;;;;;;;;;-1:-1:-1;13289:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;13391:19:0;;;13373:7;13391:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13289:133;8834:44;;;;;;;;;;;;;;;;14788:540;;;;;;;;;;-1:-1:-1;14788:540:0;;;;;:::i;:::-;;:::i;22461:127::-;;;;;;;;;;-1:-1:-1;22461:127:0;;;;;:::i;:::-;;:::i;27518:182::-;;;;;;;;;;;;;:::i;18134:145::-;;;;;;;;;;-1:-1:-1;18134:145:0;;;;;:::i;:::-;;:::i;8629:128::-;;;;;;;;;;-1:-1:-1;8629:128:0;;;;-1:-1:-1;;;;;8629:128:0;;;8788:39;;;;;;;;;;-1:-1:-1;8788:39:0;;;;;;;;;;;18593:125;;;;;;;;;;-1:-1:-1;18593:125:0;;;;;:::i;:::-;;:::i;18287:172::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;;;;;;;;;18395:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;18395:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;18433:8;;18443:7;;18395:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18287:172:::0;;:::o;19045:149::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;19129:2:::1;19122:3;:9;;19114:30;;;::::0;-1:-1:-1;;;19114:30:0;;12310:2:1;19114:30:0::1;::::0;::::1;12292:21:1::0;12349:1;12329:18;;;12322:29;12387:10;12367:18;;;12360:38;12415:18;;19114:30:0::1;12108:331:1::0;19114:30:0::1;19155:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;19155:9:0;;;::::1;-1:-1:-1::0;;;;;19155:9:0::1;::::0;:26:::1;::::0;364:18:1;;19155:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19045:149:::0;:::o;13809:159::-;13884:4;13901:37;13910:10;13922:7;13931:6;13901:8;:37::i;:::-;-1:-1:-1;13956:4:0;13809:159;;;;;:::o;21995:112::-;22040:7;22085:13;7131:2;22085;:13;:::i;:::-;22067:14;;:32;;;;:::i;:::-;22060:39;;21995:112;:::o;16121:1519::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;16215:7:::1;16211:1422;;;-1:-1:-1::0;;;;;16248:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;16247:21;16239:62;;;::::0;-1:-1:-1;;;16239:62:0;;14617:2:1;16239:62:0::1;::::0;::::1;14599:21:1::0;14656:2;14636:18;;;14629:30;14695;14675:18;;;14668:58;14743:18;;16239:62:0::1;14415:352:1::0;16239:62:0::1;-1:-1:-1::0;;;;;16319:16:0;::::1;16338:1;16319:16:::0;;;:7:::1;:16;::::0;;;;;:20;16316:116:::1;;-1:-1:-1::0;;;;;16399:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;16379:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;16360:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;16316:116:::1;-1:-1:-1::0;;;;;16446:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;16446:27:0::1;16469:4;16446:27;::::0;;16502:6:::1;::::0;;;::::1;16491:17;16488:79;;16528:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;16528:23:0;;;;;::::1;::::0;;-1:-1:-1;;16528:23:0::1;-1:-1:-1::0;;;;;16528:23:0;::::1;;::::0;;16488:79:::1;16121:1519:::0;;:::o;16211:1422::-:1;16589:7;16584:1049;;-1:-1:-1::0;;;;;16621:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;16613:61;;;::::0;-1:-1:-1;;;16613:61:0;;14974:2:1;16613:61:0::1;::::0;::::1;14956:21:1::0;15013:2;14993:18;;;14986:30;15052;15032:18;;;15025:58;15100:18;;16613:61:0::1;14772:352:1::0;16613:61:0::1;16704:6;::::0;-1:-1:-1;;;;;16693:17:0;;::::1;16704:6:::0;::::1;16693:17;16689:933;;;16769:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;16750:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;16731:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;16798:7:::1;:16:::0;;;;;:20;;;16837:11:::1;:20:::0;;;:28;;-1:-1:-1;;16837:28:0::1;::::0;;16121:1519;;:::o;16689:933::-:1;16890:9;:16:::0;16910:1:::1;16890:21;16887:735;;;16970:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;16951:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;16932:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;16999:7:::1;:16:::0;;;;;:20;;;17038:11:::1;:20:::0;;;:28;;-1:-1:-1;;17038:28:0::1;::::0;;17085:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17085:15:0;;;;;-1:-1:-1;;17085:15:0::1;::::0;;;;;16121:1519;;:::o;16887:735::-:1;17146:9;17141:466;17165:9;:16:::0;17161:20;::::1;17141:466;;;17231:7;-1:-1:-1::0;;;;;17215:23:0::1;:9;17225:1;17215:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17215:12:0::1;:23;17211:377;;;17282:9;17292:16:::0;;:20:::1;::::0;17311:1:::1;::::0;17292:20:::1;:::i;:::-;17282:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;17267:9:::1;:12:::0;;-1:-1:-1;;;;;17282:31:0;;::::1;::::0;17277:1;;17267:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;17267:46:0::1;-1:-1:-1::0;;;;;17267:46:0;;::::1;;::::0;;17340:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;17425:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;17406:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;17387:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;17462:11:::1;:20:::0;;;:28;;-1:-1:-1;;17462:28:0::1;::::0;;17517:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17517:15:0;;;;;-1:-1:-1;;17517:15:0::1;::::0;;;;;17141:466:::1;16121:1519:::0;;:::o;17211:377::-:1;17183:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17141:466;;;;16121:1519:::0;;:::o;12821:115::-;12876:7;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;:::-;12887:31;;12907:8;;;12887:31;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;28571:397::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;28720:7:::1;:14;28701:8;:15;:33;28693:67;;;::::0;-1:-1:-1;;;28693:67:0;;16272:2:1;28693:67:0::1;::::0;::::1;16254:21:1::0;16311:2;16291:18;;;16284:30;16350:23;16330:18;;;16323:51;16391:18;;28693:67:0::1;16070:345:1::0;28693:67:0::1;28776:7;28771:190;28793:8;:15;28789:1;:19;;;28771:190;;;28874:13;7131:2;28874;:13;:::i;:::-;28863:7;28871:1;28863:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28838:21;28848:10;28838:9;:21::i;:::-;:49;;28830:58;;;::::0;::::1;;28903:46;28925:8;28934:1;28925:11;;;;;;;;;;:::i;:::-;;;;;;;28938:7;28946:1;28938:10;;;;;;;;;;:::i;:::-;;;;;;;28903:21;:46::i;:::-;28810:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28771:190;;14474:306:::0;-1:-1:-1;;;;;14595:19:0;;14574:4;14595:19;;;:11;:19;;;;;;;;14615:10;14595:31;;;;;;;;-1:-1:-1;;14595:52:0;14591:126;;-1:-1:-1;;;;;14664:19:0;;;;;;:11;:19;;;;;;;;14684:10;14664:31;;;;;;;:41;;14699:6;;14664:19;:41;;14699:6;;14664:41;:::i;:::-;;;;-1:-1:-1;;14591:126:0;14736:36;14746:6;14754:9;14765:6;14736:9;:36::i;:::-;14729:43;14474:306;-1:-1:-1;;;;14474:306:0:o;21045:267::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;21187:4:::1;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;21177:14;;;;:::i;:::-;21165:7:::0;21154;7194:13:::1;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;21144:17;;;;:::i;:::-;21143:29;;;;:::i;:::-;:49;;21135:112;;;::::0;-1:-1:-1;;;21135:112:0;;16802:2:1;21135:112:0::1;::::0;::::1;16784:21:1::0;16841:2;16821:18;;;16814:30;16880:34;16860:18;;;16853:62;16951:20;16931:18;;;16924:48;16989:19;;21135:112:0::1;16600:414:1::0;21135:112:0::1;21297:7:::0;21286;7194:13:::1;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;21276:17;;;;:::i;:::-;21275:29;;;;:::i;:::-;21258:14;:46:::0;-1:-1:-1;;21045:267:0:o;27708:373::-;27833:7;:14;27814:8;:15;:33;27806:67;;;;-1:-1:-1;;;27806:67:0;;16272:2:1;27806:67:0;;;16254:21:1;16311:2;16291:18;;;16284:30;16350:23;16330:18;;;16323:51;16391:18;;27806:67:0;16070:345:1;27806:67:0;27889:7;27884:190;27906:8;:15;27902:1;:19;;;27884:190;;;27976:7;27984:1;27976:10;;;;;;;;;;:::i;:::-;;;;;;;27951:21;27961:10;27951:9;:21::i;:::-;:35;;27943:44;;;;;;28002:60;28012:10;28024:8;28033:1;28024:11;;;;;;;;;;:::i;:::-;;;;;;;7131:2;28048;:13;;;;:::i;:::-;28037:7;28045:1;28037:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28002:9;:60::i;:::-;-1:-1:-1;27923:3:0;;;;:::i;:::-;;;;27884:190;;18842:195;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;18964:9:::1;::::0;:65:::1;::::0;;;;17251:14:1;;17244:22;18964:65:0::1;::::0;::::1;17226:41:1::0;17310:14;;17303:22;17283:18;;;17276:50;17369:14;;17362:22;17342:18;;;17335:50;17428:14;;17421:22;17401:18;;;17394:50;18964:9:0;;;::::1;-1:-1:-1::0;;;;;18964:9:0::1;::::0;:24:::1;::::0;17198:19:1;;18964:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18842:195:::0;;;;:::o;15844:141::-;15897:7;15954:21;15972:1;15954:9;:21::i;:::-;15936:15;8508:42;15936:9;:15::i;:::-;:39;;;;:::i;:::-;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;:::-;15925:51;;;;:::i;28346:217::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;28442:13:::1;::::0;;;::::1;;;28441:14;28433:23;;;::::0;::::1;;28483:13;7131:2;28483;:13;:::i;:::-;28476:20;::::0;:6;:20:::1;:::i;:::-;28467:29;;28507:48;28525:10;28537:2;28541:6;28549:5;28507:17;:48::i;17648:250::-:0;17714:7;17753;;17742;:18;;17734:73;;;;-1:-1:-1;;;17734:73:0;;17790:2:1;17734:73:0;;;17772:21:1;17829:2;17809:18;;;17802:30;17868:34;17848:18;;;17841:62;17939:12;17919:18;;;17912:40;17969:19;;17734:73:0;17588:406:1;17734:73:0;17818:19;17841:10;:8;:10::i;:::-;17818:33;-1:-1:-1;17869:21:0;17818:33;17869:7;:21;:::i;:::-;17862:28;17648:250;-1:-1:-1;;;17648:250:0:o;18726:108::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;18795:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;18795:31:0::1;::::0;::::1;160:74:1::0;18795:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;18795:31:0::1;14:226:1::0;22115:338:0;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;22329:16;22309;7194:13:::1;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;22299:26;;;;:::i;:::-;22298:47;;;;:::i;:::-;22282:13;:63:::0;22397:13;22380;7194::::1;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;22370:23;;;;:::i;:::-;22369:41;;;;:::i;:::-;22356:10;:54:::0;22421:17:::1;:24:::0;-1:-1:-1;;;;22115:338:0:o;21320:140::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;-1:-1:-1;;;;;21412:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;21412:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21320:140::o;20768:269::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;20909:4:::1;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;20899:14;;;;:::i;:::-;20887:7:::0;20876;7194:13:::1;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;20866:17;;;;:::i;:::-;20865:29;;;;:::i;:::-;:49;;20857:117;;;::::0;-1:-1:-1;;;20857:117:0;;18201:2:1;20857:117:0::1;::::0;::::1;18183:21:1::0;18240:2;18220:18;;;18213:30;18279:34;18259:18;;;18252:62;18350:25;18330:18;;;18323:53;18393:19;;20857:117:0::1;17999:419:1::0;20857:117:0::1;21022:7:::0;21011;7194:13:::1;7131:2;7194;:13;:::i;:::-;7177:30;::::0;6975:14:::1;7177:30;:::i;:::-;21001:17;;;;:::i;:::-;21000:29;;;;:::i;:::-;20985:12;:44:::0;-1:-1:-1;;20768:269:0:o;11679:588::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;-1:-1:-1;;;;;11758:22:0;::::1;11750:96;;;::::0;-1:-1:-1;;;11750:96:0;;18625:2:1;11750:96:0::1;::::0;::::1;18607:21:1::0;18664:2;18644:18;;;18637:30;18703:34;18683:18;;;18676:62;18774:31;18754:18;;;18747:59;18823:19;;11750:96:0::1;18423:425:1::0;11750:96:0::1;-1:-1:-1::0;;;;;11865:16:0;::::1;8508:42;11865:16;;11857:90;;;::::0;-1:-1:-1;;;11857:90:0;;18625:2:1;11857:90:0::1;::::0;::::1;18607:21:1::0;18664:2;18644:18;;;18637:30;18703:34;18683:18;;;18676:62;18774:31;18754:18;;;18747:59;18823:19;;11857:90:0::1;18423:425:1::0;11857:90:0::1;11978:6;::::0;;11958:34:::1;::::0;-1:-1:-1;;;;;11978:6:0;;::::1;::::0;11958:19:::1;:34::i;:::-;12003:35;12023:8;12033:4;12003:19;:35::i;:::-;12082:1;12072:6:::0;;12062:17:::1;::::0;-1:-1:-1;;;;;12072:6:0::1;12062:9;:17::i;:::-;:21;12059:99;;;12110:6;::::0;12100:46:::1;::::0;-1:-1:-1;;;;;12110:6:0::1;12118:8:::0;12128:17:::1;12110:6:::0;12128:9:::1;:17::i;12100:46::-;;12059:99;12178:6;:17:::0;;-1:-1:-1;;12178:17:0::1;-1:-1:-1::0;;;;;12178:17:0;::::1;::::0;;::::1;::::0;;12211:38:::1;::::0;12178:17;;;;12211:38:::1;::::0;12178:6;12211:38:::1;11679:588:::0;:::o;21739:134::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;-1:-1:-1;;;;;21827:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;21827:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21739:134::o;17906:220::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;17990:16:::1;::::0;::::1;::::0;::::1;;;17989:17;17981:26;;;::::0;::::1;;-1:-1:-1::0;;;;;18026:28:0;::::1;18049:4;18026:28;;18018:55;;;::::0;-1:-1:-1;;;18018:55:0;;19055:2:1;18018:55:0::1;::::0;::::1;19037:21:1::0;19094:2;19074:18;;;19067:30;19133:16;19113:18;;;19106:44;19167:18;;18018:55:0::1;18853:338:1::0;18018:55:0::1;18084:9;:34:::0;;-1:-1:-1;;;;;18084:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17906:220::o;21881:106::-;21922:7;21965:13;7131:2;21965;:13;:::i;:::-;21949:12;;:30;;;;:::i;13430:198::-;-1:-1:-1;;;;;13520:20:0;;13496:7;13520:20;;;:11;:20;;;;;;;;13516:49;;;-1:-1:-1;;;;;;13549:16:0;;;;;:7;:16;;;;;;;13430:198::o;13516:49::-;-1:-1:-1;;;;;13603:16:0;;;;;;:7;:16;;;;;;13583:37;;:19;:37::i;12275:193::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;12360:6:::1;::::0;;12340:34:::1;::::0;-1:-1:-1;;;;;12360:6:0;;::::1;::::0;12340:19:::1;:34::i;:::-;12402:1;12385:19:::0;;-1:-1:-1;;12385:19:0::1;::::0;;12420:40:::1;::::0;12402:1;;12420:40:::1;::::0;12402:1;;12420:40:::1;12275:193::o:0;15336:500::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;15417:16;15413:416:::1;;-1:-1:-1::0;;;;;15450:13:0;;::::1;15466:5;15450:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;15450:21:0::1;::::0;;15486:9:::1;::::0;:32;;;;;::::1;::::0;::::1;19364:74:1::0;;;;19454:18;;;19447:50;;;;15486:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19337:18:1;;15486:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;15413:416;15555:17;::::0;:22;15551:136:::1;;15644:6;15624:17;;15606:15;:35;;;;:::i;:::-;:44;15598:73;;;::::0;-1:-1:-1;;;15598:73:0;;19710:2:1;15598:73:0::1;::::0;::::1;19692:21:1::0;19749:2;19729:18;;;19722:30;19788:18;19768;;;19761:46;19824:18;;15598:73:0::1;19508:340:1::0;15598:73:0::1;-1:-1:-1::0;;;;;15701:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;15701:20:0::1;15717:4;15701:20:::0;;::::1;::::0;;;15756:15:::1;15736:17;:35:::0;;;15786:9:::1;::::0;:31;;;;;;;::::1;19364:74:1::0;;;;19454:18;;;19447:50;15786:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19337:18:1;;15786:31:0::1;19196:307:1::0;14293:173:0;14357:4;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;14406:9:::1;::::0;14374:62:::1;::::0;14391:4:::1;::::0;-1:-1:-1;;;;;14406:9:0::1;-1:-1:-1::0;;14374:8:0::1;:62::i;:::-;-1:-1:-1::0;14454:4:0::1;14293:173:::0;:::o;27081:429::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;27143:14:::1;::::0;::::1;;27142:15;27134:52;;;::::0;-1:-1:-1;;;27134:52:0;;20055:2:1;27134:52:0::1;::::0;::::1;20037:21:1::0;20094:2;20074:18;;;20067:30;20133:26;20113:18;;;20106:54;20177:18;;27134:52:0::1;19853:348:1::0;27134:52:0::1;27205:16;::::0;::::1;::::0;::::1;;;27197:53;;;::::0;-1:-1:-1;;;27197:53:0;;20408:2:1;27197:53:0::1;::::0;::::1;20390:21:1::0;20447:2;20427:18;;;20420:30;20486:26;20466:18;;;20459:54;20530:18;;27197:53:0::1;20206:348:1::0;27197:53:0::1;27272:9;::::0;;;::::1;-1:-1:-1::0;;;;;27272:9:0::1;27261:99;;27312:9;:36:::0;;;::::1;27342:4;27312:36:::0;::::1;;::::0;;27261:99:::1;27374:9;::::0;27394:6:::1;::::0;27374:85:::1;::::0;;;;-1:-1:-1;;;;;27394:6:0;;::::1;27374:85;::::0;::::1;20782:74:1::0;20904:10;27409:12:0::1;20892:23:1::0;20872:18;;;20865:51;20964:18;27431:15:0::1;20952:31:1::0;20932:18;;;20925:59;7131:2:0::1;21000:18:1::0;;;20993:45;27374:9:0;;;::::1;;::::0;:19:::1;::::0;20754::1;;27374:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27370:101:::0;27481:14:::1;:21:::0;;-1:-1:-1;;27481:21:0::1;27498:4;27481:21;::::0;;27081:429::o;10495:595::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;10556:13:::1;::::0;;;::::1;;;10555:14;10547:46;;;::::0;-1:-1:-1;;;10547:46:0;;21251:2:1;10547:46:0::1;::::0;::::1;21233:21:1::0;21290:2;21270:18;;;21263:30;21329:21;21309:18;;;21302:49;21368:18;;10547:46:0::1;21049:343:1::0;10547:46:0::1;10626:9;;;;;;;;;-1:-1:-1::0;;;;;10626:9:0::1;-1:-1:-1::0;;;;;10626:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10615:42:0::1;;10658:9;;;;;;;;;-1:-1:-1::0;;;;;10658:9:0::1;-1:-1:-1::0;;;;;10658:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10615:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21906:15:1;;;10615:75:0::1;::::0;::::1;21888:34:1::0;10684:4:0::1;21938:18:1::0;;;21931:43;21800:18;;10615:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10606:6;:84:::0;;-1:-1:-1;;10606:84:0::1;-1:-1:-1::0;;;;;10606:84:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;10701:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;10701:22:0::1;-1:-1:-1::0;10701:22:0::1;::::0;;10745:6;10761:9:::1;::::0;10736:55:::1;::::0;10745:6;;::::1;::::0;10761:9:::1;-1:-1:-1::0;;10736:8:0::1;:55::i;:::-;10834:9;::::0;10802:62:::1;::::0;10819:4:::1;::::0;-1:-1:-1;;;;;10834:9:0::1;-1:-1:-1::0;;10802:8:0::1;:62::i;:::-;10877:27;10897:6:::0;;-1:-1:-1;;;;;10897:6:0;;::::1;10877:27:::0;;:19:::1;:27;::::0;;;;;;;:34;;-1:-1:-1;;10877:34:0;;::::1;10907:4;10877:34:::0;;::::1;::::0;;;10950:4:::1;10922:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;10974:25;:32;;;::::1;::::0;::::1;::::0;;11035:6;;;;::::1;11017:25:::0;;:17:::1;:25:::0;;;;;;:32;;;;::::1;::::0;;::::1;::::0;;11062:13:::1;:20:::0;;;::::1;::::0;::::1;::::0;;10495:595::o;13636:165::-;13714:4;13731:40;13741:10;13753:9;13764:6;13731:9;:40::i;:::-;-1:-1:-1;13789:4:0;;13636:165;-1:-1:-1;;;13636:165:0:o;20084:458::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;20205:12:::1;20254:4:::0;20242:9;20220:19:::1;20230:9:::0;20220:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;20205:53;;8251:4;20277:5;:20;;;;20269:29;;;::::0;::::1;;20309:14;:32:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;20352:26:0;;;;;;;;;;::::1;;;20436:36:::0;;20389;;;::::1;;20436::::0;;;;;;::::1;::::0;;;::::1;;::::0;;20519:14:::1;20352:26:::0;20309:32;20519:14:::1;:::i;:::-;20510:24;::::0;:5;:24:::1;:::i;:::-;20483:14;:51:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;20084:458:0:o;19206:428::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;19322:12:::1;19371:4:::0;19359:9;19337:19:::1;19347:9:::0;19337:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;19322:53;;8251:4;19394:5;:20;;;;19386:29;;;::::0;::::1;;19426:9;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;19464:21:0;;;;;;;;;;::::1;;;19538:31:::0;;19496;;;::::1;;19538::::0;;;;;;::::1;::::0;;;::::1;;::::0;;19611:14:::1;19464:21:::0;19426:27;19611:14:::1;:::i;:::-;19602:24;::::0;:5;:24:::1;:::i;:::-;19580:9;:46:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;19206:428:0:o;20550:210::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;20635:7:::1;:29:::0;;::::1;20675::::0;;::::1;::::0;::::1;-1:-1:-1::0;;20675:29:0;;;20635;;::::1;20675::::0;::::1;::::0;;20731:21:::1;20695:9:::0;20655;20731:21:::1;:::i;:::-;20715:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;20550:210:0:o;19642:434::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;19759:12:::1;19808:4:::0;19796:9;19774:19:::1;19784:9:::0;19774:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;19759:53;;8251:4;19831:5;:20;;;;19823:29;;;::::0;::::1;;19863:10;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;19902:22:0;;;;;;;;;;::::1;;;19978:32:::0;;19935;;;::::1;;19978::::0;;;;;;::::1;::::0;;;::::1;;::::0;;20053:14:::1;19902:22:::0;19863:28;20053:14:::1;:::i;:::-;20044:24;::::0;:5;:24:::1;:::i;:::-;20021:10;:47:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;19642:434:0:o;18467:118::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;18541:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;18541:36:0::1;::::0;::::1;160:74:1::0;18541:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;18541:36:0::1;14:226:1::0;22596:164:0;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;22672:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;22672:29:0;;::::1;;::::0;;22717:35:::1;::::0;::::1;::::0;::::1;::::0;22694:7;4228:14:1;4221:22;4203:41;;4191:2;4176:18;;4063:187;22717:35:0::1;;;;;;;;22596:164:::0;:::o;14788:540::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;14857:20:::1;14890:9;14857:43;;14911:16;14941:10;-1:-1:-1::0;;;;;14941:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14930:40:0::1;;14979:4;14986:10;-1:-1:-1::0;;;;;14986:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14930:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21906:15:1;;;14930:74:0::1;::::0;::::1;21888:34:1::0;21958:15;;21938:18;;;21931:43;21800:18;;14930:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14911:93:::0;-1:-1:-1;;;;;;15019:22:0;::::1;15015:200;;15078:10;-1:-1:-1::0;;;;;15078:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15067:43:0::1;;15119:4;15126:10;-1:-1:-1::0;;;;;15126:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15067:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;21906:15:1;;;15067:77:0::1;::::0;::::1;21888:34:1::0;21958:15;;21938:18;;;21931:43;21800:18;;15067:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15058:6;:86:::0;;-1:-1:-1;;15058:86:0::1;-1:-1:-1::0;;;;;15058:86:0;;;::::1;::::0;;;::::1;::::0;;15015:200:::1;;;15186:6;:17:::0;;-1:-1:-1;;15186:17:0::1;-1:-1:-1::0;;;;;15186:17:0;::::1;;::::0;;15015:200:::1;15225:9;:22:::0;;-1:-1:-1;;15225:22:0::1;-1:-1:-1::0;;;;;15225:22:0;::::1;::::0;;::::1;::::0;;;15258:62:::1;::::0;15275:4:::1;::::0;-1:-1:-1;;15258:8:0::1;:62::i;22461:127::-:0;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;22538:11:::1;:42:::0;;-1:-1:-1;;22538:42:0::1;-1:-1:-1::0;;;;;22538:42:0;;;::::1;::::0;;;::::1;::::0;;22461:127::o;27518:182::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;27585:16:::1;::::0;::::1;::::0;::::1;;;27584:17;27576:58;;;::::0;-1:-1:-1;;;27576:58:0;;22638:2:1;27576:58:0::1;::::0;::::1;22620:21:1::0;22677:2;22657:18;;;22650:30;22716;22696:18;;;22689:58;22764:18;;27576:58:0::1;22436:352:1::0;27576:58:0::1;27653:6;::::0;;27645:47:::1;::::0;-1:-1:-1;;;;;27653:6:0;;::::1;::::0;27670:21:::1;27645:47:::0;::::1;;;::::0;27670:21;;27645:47;27653:6;27645:47;27670:21;27653:6;27645:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27518:182::o:0;18134:145::-;9661:6;;-1:-1:-1;;;;;9661:6:0;9671:10;9661:20;9653:50;;;;-1:-1:-1;;;9653:50:0;;11128:2:1;9653:50:0;;;11110:21:1;11167:2;11147:18;;;11140:30;-1:-1:-1;;;11186:18:1;;;11179:47;11243:18;;9653:50:0;10926:341:1;9653:50:0;18224:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;19382:55:1;;;18224:47:0::1;::::0;::::1;19364:74:1::0;19481:14;;19474:22;19454:18;;;19447:50;18224:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19337:18:1;;18224:47:0::1;19196:307:1::0;18593:125:0;18678:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;18678:32:0;;;160:74:1;18654:4:0;;18678:9;;;;;:23;;133:18:1;;18678:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13976:309::-;-1:-1:-1;;;;;14070:20:0;;14062:52;;;;-1:-1:-1;;;14062:52:0;;23245:2:1;14062:52:0;;;23227:21:1;23284:2;23264:18;;;23257:30;23323:21;23303:18;;;23296:49;23362:18;;14062:52:0;23043:343:1;14062:52:0;-1:-1:-1;;;;;14133:21:0;;14125:53;;;;-1:-1:-1;;;14125:53:0;;23245:2:1;14125:53:0;;;23227:21:1;23284:2;23264:18;;;23257:30;23323:21;23303:18;;;23296:49;23362:18;;14125:53:0;23043:343:1;14125:53:0;-1:-1:-1;;;;;14191:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14244:33;;391:25:1;;;14244:33:0;;364:18:1;14244:33:0;;;;;;;13976:309;;;:::o;32564:818::-;32644:7;;32606;;;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;:::-;32713:6;;-1:-1:-1;;;;;32713:6:0;32701:19;;;;:11;:19;;;;;;32662:25;;-1:-1:-1;32701:19:0;;32698:217;;;32749:6;;-1:-1:-1;;;;;32749:6:0;32741:15;;;;:7;:15;;;;;;:25;-1:-1:-1;32741:25:0;:54;;-1:-1:-1;32778:6:0;;-1:-1:-1;;;;;32778:6:0;32770:15;;;;:7;:15;;;;;;:25;-1:-1:-1;32741:54:0;32737:84;;;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;:::-;32804:7;;:17;;;;:::i;:::-;32797:24;;;;32564:818;:::o;32737:84::-;32855:6;;-1:-1:-1;;;;;32855:6:0;32847:15;;;;:7;:15;;;;;;32836:26;;;;:::i;:::-;32896:6;;-1:-1:-1;;;;;32896:6:0;32888:15;;;;:7;:15;;;;;;32836:26;;-1:-1:-1;32877:26:0;;;;:::i;:::-;;;32698:217;32928:9;:16;:20;32925:347;;32970:7;32965:296;32987:9;:16;32983:20;;;;32965:296;;;33057:7;33033;:21;33041:9;33051:1;33041:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33041:12:0;33033:21;;;;;;;;;;;;;:31;;:66;;;33092:7;33068;:21;33076:9;33086:1;33076:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33076:12:0;33068:21;;;;;;;;;;;;;:31;33033:66;33029:96;;;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;:::-;33108:7;;:17;;;;:::i;:::-;33101:24;;;;;32564:818;:::o;33029:96::-;33164:7;:21;33172:9;33182:1;33172:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33172:12:0;33164:21;;;;;;;;;;;;;33154:31;;:7;:31;:::i;:::-;33144:41;;33224:7;:21;33232:9;33242:1;33232:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33232:12:0;33224:21;;;;;;;;;;;;;33214:31;;:7;:31;:::i;:::-;33204:41;-1:-1:-1;33005:3:0;;;;:::i;:::-;;;;32965:296;;;;32925:347;7194:13;7131:2;7194;:13;:::i;:::-;7177:30;;6975:14;7177:30;:::i;:::-;33296:7;;:17;;;;:::i;:::-;33286:7;:27;33282:57;;;7194:13;7131:2;7194;:13;:::i;33282:57::-;33357:17;33367:7;33357;:17;:::i;23133:1853::-;23212:4;-1:-1:-1;;;;;23237:18:0;;23229:68;;;;-1:-1:-1;;;23229:68:0;;23593:2:1;23229:68:0;;;23575:21:1;23632:2;23612:18;;;23605:30;23671:34;23651:18;;;23644:62;23742:7;23722:18;;;23715:35;23767:19;;23229:68:0;23391:401:1;23229:68:0;-1:-1:-1;;;;;23316:16:0;;23308:64;;;;-1:-1:-1;;;23308:64:0;;23999:2:1;23308:64:0;;;23981:21:1;24038:2;24018:18;;;24011:30;24077:34;24057:18;;;24050:62;24148:5;24128:18;;;24121:33;24171:19;;23308:64:0;23797:399:1;23308:64:0;23400:1;23391:6;:10;23383:64;;;;-1:-1:-1;;;23383:64:0;;24403:2:1;23383:64:0;;;24385:21:1;24442:2;24422:18;;;24415:30;24481:34;24461:18;;;24454:62;24552:11;24532:18;;;24525:39;24581:19;;23383:64:0;24201:405:1;23383:64:0;23466:13;;;;;;;23458:22;;;;;;23496:20;23507:4;23513:2;23496:10;:20::i;:::-;23493:665;;;23537:14;;;;23533:89;;23572:34;;-1:-1:-1;;;23572:34:0;;24813:2:1;23572:34:0;;;24795:21:1;24852:2;24832:18;;;24825:30;24891:26;24871:18;;;24864:54;24935:18;;23572:34:0;24611:348:1;23533:89:0;-1:-1:-1;;;;;23639:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;23656:11:0;;;;;;:7;:11;;;;;;;;23639:28;23636:248;;;-1:-1:-1;;;;;23692:27:0;;;;;;:21;:27;;;;;;;;23691:28;:58;;;;-1:-1:-1;;;;;;23724:25:0;;;;;;:21;:25;;;;;;;;23723:26;23691:58;23687:182;;;23792:12;;23782:6;:22;;23774:75;;;;-1:-1:-1;;;23774:75:0;;25166:2:1;23774:75:0;;;25148:21:1;25205:2;25185:18;;;25178:30;25244:34;25224:18;;;25217:62;25315:10;25295:18;;;25288:38;25343:19;;23774:75:0;24964:404:1;23774:75:0;23915:9;;-1:-1:-1;;;;;23901:24:0;;;23915:9;;23901:24;;;;:40;;-1:-1:-1;;;;;;23930:11:0;;;;;;:7;:11;;;;;;;;23929:12;23901:40;23898:249;;;-1:-1:-1;;;;;23967:25:0;;;;;;:21;:25;;;;;;;;23962:170;;24051:14;;24041:6;24025:13;24035:2;24025:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24017:95;;;;-1:-1:-1;;;24017:95:0;;25575:2:1;24017:95:0;;;25557:21:1;25614:2;25594:18;;;25587:30;25653:34;25633:18;;;25626:62;25724:12;25704:18;;;25697:40;25754:19;;24017:95:0;25373:406:1;24017:95:0;-1:-1:-1;;;;;24203:25:0;;24170:12;24203:25;;;:19;:25;;;;;;24185:4;;24203:25;;;:52;;-1:-1:-1;;;;;;24232:23:0;;;;;;:19;:23;;;;;;;;24203:52;24200:98;;;-1:-1:-1;24281:5:0;24200:98;-1:-1:-1;;;;;24314:11:0;;;;;;:7;:11;;;;;;;;24310:606;;;24347:6;;;;24346:7;:47;;;;-1:-1:-1;24374:19:0;;;;;;;24346:47;24342:557;;;24463:15;24443:17;;24432:8;;:28;;;;:::i;:::-;:46;24428:456;;;24503:28;24534:24;24552:4;24534:9;:24::i;:::-;24503:55;;24609:13;;24585:20;:37;24581:284;;24678:10;;24654:20;:34;24651:77;;-1:-1:-1;24715:10:0;;24651:77;24754:34;24767:20;24754:12;:34::i;:::-;24826:15;24815:8;:26;24581:284;24480:404;24428:456;24934:44;24952:4;24958:2;24962:6;24970:7;24934:17;:44::i;:::-;24927:51;23133:1853;-1:-1:-1;;;;;23133:1853:0:o;28976:939::-;29099:16;;29077:4;;29099:16;;;;;29094:221;;29132:28;29151:4;29157:2;29132:18;:28::i;:::-;29180:16;;;;;;;29179:17;:41;;;;;29200:20;29211:4;29217:2;29200:10;:20::i;:::-;29175:129;;;29241:47;;-1:-1:-1;;;29241:47:0;;25986:2:1;29241:47:0;;;25968:21:1;26025:2;26005:18;;;25998:30;26064:34;26044:18;;;26037:62;26135:7;26115:18;;;26108:35;26160:19;;29241:47:0;25784:401:1;29175:129:0;29327:25;29355:38;29366:4;29372:2;29376:7;29385;29355:10;:38::i;:::-;29438:14;;;;-1:-1:-1;;;;;29422:13:0;;;;;;:7;:13;;;;;;29327:66;;-1:-1:-1;29422:30:0;;;:::i;:::-;-1:-1:-1;;;;;29406:13:0;;;;;;;:7;:13;;;;;;:46;;;;29491:22;;;;29477:11;;;;;;;;;;:36;;29491:22;29477:36;:::i;:::-;-1:-1:-1;;;;;29463:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;29530:17;;;;;:11;:17;;;;;;;29526:89;;;-1:-1:-1;;;;;29580:13:0;;;;;;:7;:13;;;;;;:23;;29596:7;;29580:23;:::i;:::-;-1:-1:-1;;;;;29564:13:0;;;;;;:7;:13;;;;;:39;29526:89;-1:-1:-1;;;;;29629:15:0;;;;;;:11;:15;;;;;;;;29625:100;;;29689:22;;-1:-1:-1;;;;;29675:11:0;;29689:22;29675:11;;;:7;:11;;;;;;:36;;29689:22;29675:36;:::i;:::-;-1:-1:-1;;;;;29661:11:0;;;;;;:7;:11;;;;;:50;29625:100;29755:1;29741:6;:11;;;:15;:34;;;;29774:1;29760:6;:11;;;:15;29741:34;29737:89;;;29803:6;:11;;;29792:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;29737:89:0;29858:2;-1:-1:-1;;;;;29843:42:0;29852:4;-1:-1:-1;;;;;29843:42:0;;29862:6;:22;;;29843:42;;;;391:25:1;;379:2;364:18;;245:177;29843:42:0;;;;;;;;-1:-1:-1;29903:4:0;;28976:939;-1:-1:-1;;;;;28976:939:0:o;22768:357::-;22836:4;22868:6;;-1:-1:-1;;;;;22860:14:0;;;22868:6;;22860:14;;;;:43;;-1:-1:-1;22897:6:0;;-1:-1:-1;;;;;22891:12:0;;;22897:6;;22891:12;;22860:43;:79;;;;-1:-1:-1;22933:6:0;;-1:-1:-1;;;;;22933:6:0;22920:9;:19;;22860:79;:118;;;;-1:-1:-1;;;;;;22957:21:0;;;;;;:17;:21;;;;;;;;22956:22;22860:118;:159;;;;-1:-1:-1;;;;;;22996:23:0;;;;;;:17;:23;;;;;;;;22995:24;22860:159;:186;;;;-1:-1:-1;;;;;;23036:10:0;;8508:42;23036:10;;22860:186;:219;;;;-1:-1:-1;;;;;;23063:16:0;;;;22860:219;:257;;;;-1:-1:-1;;;;;;23096:21:0;;23112:4;23096:21;;22853:264;22768:357;-1:-1:-1;;;22768:357:0:o;24994:1563::-;9555:6;:13;;-1:-1:-1;;9555:13:0;9564:4;9555:13;;;25077:30:::1;::::0;;::::1;::::0;::::1;::::0;;25100:7:::1;25077:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;25118:56:::1;;25156:7;;;25118:56;25209:4;25189:26;::::0;;;:11:::1;:26;::::0;;;;;;;25224:9:::1;::::0;-1:-1:-1;;;;;25224:9:0::1;25189:46:::0;;;;;;;;-1:-1:-1;;25189:67:0::1;25186:165;;25293:4;25273:26;::::0;;;:11:::1;:26;::::0;;;;;;;25308:9:::1;::::0;-1:-1:-1;;;;;25308:9:0::1;25273:46:::0;;;;;;;-1:-1:-1;;25273:66:0;;25186:165:::1;25363:17;25444:1;25428:6;:12;;;25384:56;;25408:6;:16;;;25385:39;;:20;:39;;;;:::i;:::-;25384:56;;;;:::i;:::-;25383:62;;;;:::i;:::-;25363:82:::0;-1:-1:-1;25456:15:0::1;25474:32;25363:82:::0;25474:20;:32:::1;:::i;:::-;25551:16;::::0;;25565:1:::1;25551:16:::0;;;;;::::1;::::0;;25456:50;;-1:-1:-1;25527:21:0::1;::::0;25551:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25551:16:0::1;25527:40;;25596:4;25578;25583:1;25578:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25578:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25622:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;25578:7;;25622:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25612:4;25617:1;25612:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25612:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;25651:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;25726:7;;25651:9:::1;::::0;25764:4;;25791::::1;::::0;25811:15:::1;::::0;25651:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25871:21:0::1;::::0;-1:-1:-1;25850:18:0::1;::::0;-1:-1:-1;25957:7:0;;-1:-1:-1;25931:22:0::1;25944:9:::0;25871:21;25931:22:::1;:::i;:::-;25930:34;;;;:::i;:::-;25903:61:::0;-1:-1:-1;25981:13:0;;25977:328:::1;;26011:9;::::0;:222:::1;::::0;;;;26088:4:::1;26011:222;::::0;::::1;27164:34:1::0;27214:18;;;27207:34;;;26011:9:0::1;27257:18:1::0;;;27250:34;;;27300:18;;;27293:34;8508:42:0::1;27343:19:1::0;;;27336:44;26203:15:0::1;27396:19:1::0;;;27389:35;-1:-1:-1;;;;;26011:9:0;;::::1;::::0;:25:::1;::::0;26044:16;;27075:19:1;;26011:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26253:40:0::1;::::0;;27920:25:1;;;27976:2;27961:18;;27954:34;;;26253:40:0::1;::::0;-1:-1:-1;27893:18:1;26253:40:0::1;;;;;;;25977:328;26317:30;26331:16:::0;26317:30;::::1;:::i;:::-;;;26374:6;:16;;;26358:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;26453:16:::1;::::0;::::1;::::0;26428:10;;-1:-1:-1;26453:20:0::1;::::0;26449:101:::1;;26490:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;26490:21:0;;::::1;::::0;:48;::::1;;;::::0;26521:16;;26490:21:::1;:48:::0;:21;:48;26521:16;26490:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26449:101;25066:1491;;;;;;;9579:1;-1:-1:-1::0;9591:6:0;:14;;-1:-1:-1;;9591:14:0;;;24994:1563::o;26565:508::-;26647:16;;;;;;;26646:17;26638:65;;;;-1:-1:-1;;;26638:65:0;;28201:2:1;26638:65:0;;;28183:21:1;28240:2;28220:18;;;28213:30;28279:34;28259:18;;;28252:62;28350:5;28330:18;;;28323:33;28373:19;;26638:65:0;27999:399:1;26638:65:0;26719:20;26730:4;26736:2;26719:10;:20::i;:::-;26718:21;:37;;;;-1:-1:-1;26749:6:0;;-1:-1:-1;;;;;26743:12:0;;;26749:6;;26743:12;26718:37;26714:352;;;-1:-1:-1;;;;;26772:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;26772:30:0;26798:4;26772:30;;;26817:16;:23;;-1:-1:-1;;26817:23:0;26772:30;26817:23;;;;;26866:9;;;;26855:107;;26910:9;:36;;;;26940:4;26910:36;;;;;26855:107;26976:19;:26;;-1:-1:-1;;26976:26:0;;;;;27022:32;;-1:-1:-1;4203:41:1;;27022:32:0;;4191:2:1;4176:18;27022:32:0;;;;;;;26565:508;;:::o;29923:2633::-;30017:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30017:18:0;30048:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30048:25:0;30105:10;:8;:10::i;:::-;30084:18;;;:31;;;30145:28;;:7;:28;:::i;:::-;30128:14;;;:45;30190:20;30201:4;30207:2;30190:10;:20::i;:::-;30186:315;;;30258:9;;:38;;;;;-1:-1:-1;;;;;28684:15:1;;;30258:38:0;;;28666:34:1;28736:15;;;28716:18;;;28709:43;28768:18;;;28761:34;;;30227:12:0;;30258:9;;;;;:19;;28578:18:1;;30258:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;30258:38:0;;;;;;;;-1:-1:-1;;30258:38:0;;;;;;;;;;;;:::i;:::-;;;30254:164;;30394:8;;;30254:164;30347:5;-1:-1:-1;30438:7:0;30434:56;;30466:8;;;30434:56;30212:289;30186:315;30516:7;30513:1302;;;-1:-1:-1;;;;;30700:11:0;;30540:22;30700:11;;;:7;:11;;;;;;30540:22;;;;8402:5;;30700:11;;30696:570;;;30749:10;:18;;;;;;-1:-1:-1;30848:20:0;;;;;;-1:-1:-1;30800:15:0;;;;;;-1:-1:-1;30696:570:0;;;-1:-1:-1;;;;;30894:13:0;;;;;;:7;:13;;;;;;;;30890:376;;;30945:9;:17;;;;;;-1:-1:-1;31042:19:0;;;;;;-1:-1:-1;30995:14:0;;;;;;-1:-1:-1;30890:376:0;;;31119:14;:22;;;;;;-1:-1:-1;31226:24:0;;;;;;-1:-1:-1;31174:19:0;;;;;;-1:-1:-1;30890:376:0;31325:7;31297:24;31307:14;31297:7;:24;:::i;:::-;31296:36;;;;:::i;:::-;31282:11;;;:50;31388:7;31363:21;31373:11;31363:7;:21;:::i;:::-;31362:33;;;;:::i;:::-;31347:12;;;:48;31451:7;31426:21;31436:11;31426:7;:21;:::i;:::-;31425:33;;;;:::i;:::-;31410:12;;;:48;;;31523:12;;;;31509:11;;;;:26;;31523:12;31509:26;:::i;:::-;:41;;;;:::i;:::-;31498:53;;:7;:53;:::i;:::-;31473:78;;31596:18;;;;31582:11;;;;:32;;31596:18;31582:32;:::i;:::-;31568:11;;;:46;-1:-1:-1;30513:1302:0;;-1:-1:-1;;;30513:1302:0;;31661:1;31647:11;;;:15;;;31677:12;;;:16;;;31708:12;;;:16;;;31739:32;;;31788:11;;;:15;30513:1302;31831:12;;;;:16;31827:289;;31905:6;:18;;;31890:6;:12;;;:33;;;;:::i;:::-;31880:4;31864:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;31961:4:0;31941:26;;;;:11;:26;;;;;;;;31938:104;;;32014:12;;;;;32004:4;31988:22;;;;:7;:22;;;;;:38;;32014:12;;31988:22;;:38;;32014:12;;31988:38;:::i;:::-;;;;-1:-1:-1;;31938:104:0;32084:4;-1:-1:-1;;;;;32061:43:0;32070:4;-1:-1:-1;;;;;32061:43:0;;32091:6;:12;;;32061:43;;;;391:25:1;;379:2;364:18;;245:177;32061:43:0;;;;;;;;31827:289;32132:12;;;;:16;32128:253;;32197:6;:18;;;32182:6;:12;;;:33;;;;:::i;:::-;8508:42;32165:13;;;;:7;:13;;;:50;;:13;;;:50;;;;;:::i;:::-;;;;-1:-1:-1;;8508:42:0;32233:17;;:11;:17;;;;;;32230:86;;;32288:12;;;;8508:42;32271:13;;;;:7;:13;;;:29;;:13;;;:29;;32288:12;;32271:29;:::i;:::-;;;;-1:-1:-1;;32230:86:0;8508:42;-1:-1:-1;;;;;32335:34:0;32344:4;-1:-1:-1;;;;;32335:34:0;;32356:6;:12;;;32335:34;;;;391:25:1;;379:2;364:18;;245:177;32335:34:0;;;;;;;;32128:253;32504:6;:18;;;32489:6;:12;;;:33;;;;:::i;:::-;32466:6;:18;;;32451:6;:12;;;:33;;;;:::i;:::-;32436:6;:11;;;:49;;;;:::i;:::-;:87;;;;:::i;:::-;32418:6;:14;;;:106;;;;:::i;:::-;32393:22;;;:131;:22;29923:2633;-1:-1:-1;;;;;29923:2633:0:o;427:184:1:-;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;2649:656::-;2761:4;2790:2;2819;2808:9;2801:21;2851:6;2845:13;2894:6;2889:2;2878:9;2874:18;2867:34;2919:1;2929:140;2943:6;2940:1;2937:13;2929:140;;;3038:14;;;3034:23;;3028:30;3004:17;;;3023:2;3000:26;2993:66;2958:10;;2929:140;;;3087:6;3084:1;3081:13;3078:91;;;3157:1;3152:2;3143:6;3132:9;3128:22;3124:31;3117:42;3078:91;-1:-1:-1;3221:2:1;3209:15;-1:-1:-1;;3205:88:1;3190:104;;;;3296:2;3186:113;;2649:656;-1:-1:-1;;;2649:656:1:o;3558:180::-;3617:6;3670:2;3658:9;3649:7;3645:23;3641:32;3638:52;;;3686:1;3683;3676:12;3638:52;-1:-1:-1;3709:23:1;;3558:180;-1:-1:-1;3558:180:1:o;3743:315::-;3811:6;3819;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;3927:9;3914:23;3946:31;3971:5;3946:31;:::i;:::-;3996:5;4048:2;4033:18;;;;4020:32;;-1:-1:-1;;;3743:315:1:o;4255:382::-;4320:6;4328;4381:2;4369:9;4360:7;4356:23;4352:32;4349:52;;;4397:1;4394;4387:12;4349:52;4436:9;4423:23;4455:31;4480:5;4455:31;:::i;:::-;4505:5;-1:-1:-1;4562:2:1;4547:18;;4534:32;4575:30;4534:32;4575:30;:::i;4642:1138::-;4760:6;4768;4821:2;4809:9;4800:7;4796:23;4792:32;4789:52;;;4837:1;4834;4827:12;4789:52;4877:9;4864:23;4906:18;4947:2;4939:6;4936:14;4933:34;;;4963:1;4960;4953:12;4933:34;4986:61;5039:7;5030:6;5019:9;5015:22;4986:61;:::i;:::-;4976:71;;5066:2;5056:12;;5121:2;5110:9;5106:18;5093:32;5150:2;5140:8;5137:16;5134:36;;;5166:1;5163;5156:12;5134:36;5189:24;;;-1:-1:-1;5244:4:1;5236:13;;5232:27;-1:-1:-1;5222:55:1;;5273:1;5270;5263:12;5222:55;5309:2;5296:16;5332:60;5348:43;5388:2;5348:43;:::i;5332:60::-;5426:15;;;5508:1;5504:10;;;;5496:19;;5492:28;;;5457:12;;;;5532:19;;;5529:39;;;5564:1;5561;5554:12;5529:39;5588:11;;;;5608:142;5624:6;5619:3;5616:15;5608:142;;;5690:17;;5678:30;;5641:12;;;;5728;;;;5608:142;;;5769:5;5759:15;;;;;;;4642:1138;;;;;:::o;5785:456::-;5862:6;5870;5878;5931:2;5919:9;5910:7;5906:23;5902:32;5899:52;;;5947:1;5944;5937:12;5899:52;5986:9;5973:23;6005:31;6030:5;6005:31;:::i;:::-;6055:5;-1:-1:-1;6112:2:1;6097:18;;6084:32;6125:33;6084:32;6125:33;:::i;:::-;5785:456;;6177:7;;-1:-1:-1;;;6231:2:1;6216:18;;;;6203:32;;5785:456::o;6246:248::-;6314:6;6322;6375:2;6363:9;6354:7;6350:23;6346:32;6343:52;;;6391:1;6388;6381:12;6343:52;-1:-1:-1;;6414:23:1;;;6484:2;6469:18;;;6456:32;;-1:-1:-1;6246:248:1:o;6499:647::-;6573:6;6581;6589;6597;6650:3;6638:9;6629:7;6625:23;6621:33;6618:53;;;6667:1;6664;6657:12;6618:53;6706:9;6693:23;6725:28;6747:5;6725:28;:::i;:::-;6772:5;-1:-1:-1;6829:2:1;6814:18;;6801:32;6842:30;6801:32;6842:30;:::i;:::-;6891:7;-1:-1:-1;6950:2:1;6935:18;;6922:32;6963:30;6922:32;6963:30;:::i;:::-;7012:7;-1:-1:-1;7071:2:1;7056:18;;7043:32;7084:30;7043:32;7084:30;:::i;:::-;6499:647;;;;-1:-1:-1;6499:647:1;;-1:-1:-1;;6499:647:1:o;7340:247::-;7399:6;7452:2;7440:9;7431:7;7427:23;7423:32;7420:52;;;7468:1;7465;7458:12;7420:52;7507:9;7494:23;7526:31;7551:5;7526:31;:::i;7592:454::-;7687:6;7695;7703;7711;7719;7772:3;7760:9;7751:7;7747:23;7743:33;7740:53;;;7789:1;7786;7779:12;7740:53;-1:-1:-1;;7812:23:1;;;7882:2;7867:18;;7854:32;;-1:-1:-1;7933:2:1;7918:18;;7905:32;;7984:2;7969:18;;7956:32;;-1:-1:-1;8035:3:1;8020:19;8007:33;;-1:-1:-1;7592:454:1;-1:-1:-1;7592:454:1:o;8579:159::-;8646:20;;8706:6;8695:18;;8685:29;;8675:57;;8728:1;8725;8718:12;8675:57;8579:159;;;:::o;8743:401::-;8825:6;8833;8841;8849;8902:3;8890:9;8881:7;8877:23;8873:33;8870:53;;;8919:1;8916;8909:12;8870:53;8942:28;8960:9;8942:28;:::i;:::-;8932:38;;8989:37;9022:2;9011:9;9007:18;8989:37;:::i;:::-;8979:47;;9045:37;9078:2;9067:9;9063:18;9045:37;:::i;:::-;9035:47;;9101:37;9134:2;9123:9;9119:18;9101:37;:::i;:::-;9091:47;;8743:401;;;;;;;:::o;9149:256::-;9215:6;9223;9276:2;9264:9;9255:7;9251:23;9247:32;9244:52;;;9292:1;9289;9282:12;9244:52;9315:28;9333:9;9315:28;:::i;:::-;9305:38;;9362:37;9395:2;9384:9;9380:18;9362:37;:::i;:::-;9352:47;;9149:256;;;;;:::o;9410:241::-;9466:6;9519:2;9507:9;9498:7;9494:23;9490:32;9487:52;;;9535:1;9532;9525:12;9487:52;9574:9;9561:23;9593:28;9615:5;9593:28;:::i;10026:388::-;10094:6;10102;10155:2;10143:9;10134:7;10130:23;10126:32;10123:52;;;10171:1;10168;10161:12;10123:52;10210:9;10197:23;10229:31;10254:5;10229:31;:::i;:::-;10279:5;-1:-1:-1;10336:2:1;10321:18;;10308:32;10349:33;10308:32;10349:33;:::i;11272:484::-;11325:3;11363:5;11357:12;11390:6;11385:3;11378:19;11416:4;11445:2;11440:3;11436:12;11429:19;;11482:2;11475:5;11471:14;11503:1;11513:218;11527:6;11524:1;11521:13;11513:218;;;11592:13;;-1:-1:-1;;;;;11588:62:1;11576:75;;11671:12;;;;11706:15;;;;11549:1;11542:9;11513:218;;;-1:-1:-1;11747:3:1;;11272:484;-1:-1:-1;;;;;11272:484:1:o;11761:342::-;11962:2;11951:9;11944:21;11925:4;11982:56;12034:2;12023:9;12019:18;12011:6;11982:56;:::i;:::-;11974:64;;12088:6;12081:14;12074:22;12069:2;12058:9;12054:18;12047:50;11761:342;;;;;:::o;12444:184::-;12496:77;12493:1;12486:88;12593:4;12590:1;12583:15;12617:4;12614:1;12607:15;12633:482;12722:1;12765:5;12722:1;12779:330;12800:7;12790:8;12787:21;12779:330;;;12919:4;-1:-1:-1;;12847:77:1;12841:4;12838:87;12835:113;;;12928:18;;:::i;:::-;12978:7;12968:8;12964:22;12961:55;;;12998:16;;;;12961:55;13077:22;;;;13037:15;;;;12779:330;;;12783:3;12633:482;;;;;:::o;13120:866::-;13169:5;13199:8;13189:80;;-1:-1:-1;13240:1:1;13254:5;;13189:80;13288:4;13278:76;;-1:-1:-1;13325:1:1;13339:5;;13278:76;13370:4;13388:1;13383:59;;;;13456:1;13451:130;;;;13363:218;;13383:59;13413:1;13404:10;;13427:5;;;13451:130;13488:3;13478:8;13475:17;13472:43;;;13495:18;;:::i;:::-;-1:-1:-1;;13551:1:1;13537:16;;13566:5;;13363:218;;13665:2;13655:8;13652:16;13646:3;13640:4;13637:13;13633:36;13627:2;13617:8;13614:16;13609:2;13603:4;13600:12;13596:35;13593:77;13590:159;;;-1:-1:-1;13702:19:1;;;13734:5;;13590:159;13781:34;13806:8;13800:4;13781:34;:::i;:::-;13911:6;-1:-1:-1;;13839:79:1;13830:7;13827:92;13824:118;;;13922:18;;:::i;:::-;13960:20;;13120:866;-1:-1:-1;;;13120:866:1:o;13991:140::-;14049:5;14078:47;14119:4;14109:8;14105:19;14099:4;14078:47;:::i;14136:274::-;14176:1;14202;14192:189;;14237:77;14234:1;14227:88;14338:4;14335:1;14328:15;14366:4;14363:1;14356:15;14192:189;-1:-1:-1;14395:9:1;;14136:274::o;15129:228::-;15169:7;15295:1;-1:-1:-1;;15223:74:1;15220:1;15217:81;15212:1;15205:9;15198:17;15194:105;15191:131;;;15302:18;;:::i;:::-;-1:-1:-1;15342:9:1;;15129:228::o;15362:184::-;15414:77;15411:1;15404:88;15511:4;15508:1;15501:15;15535:4;15532:1;15525:15;15551:184;15603:77;15600:1;15593:88;15700:4;15697:1;15690:15;15724:4;15721:1;15714:15;15740:125;15780:4;15808:1;15805;15802:8;15799:34;;;15813:18;;:::i;:::-;-1:-1:-1;15850:9:1;;15740:125::o;15870:195::-;15909:3;-1:-1:-1;;15933:5:1;15930:77;15927:103;;;16010:18;;:::i;:::-;-1:-1:-1;16057:1:1;16046:13;;15870:195::o;16420:175::-;16457:3;16501:4;16494:5;16490:16;16530:4;16521:7;16518:17;16515:43;;;16538:18;;:::i;:::-;16587:1;16574:15;;16420:175;-1:-1:-1;;16420:175:1:o;17455:128::-;17495:3;17526:1;17522:6;17519:1;17516:13;17513:39;;;17532:18;;:::i;:::-;-1:-1:-1;17568:9:1;;17455:128::o;21397:251::-;21467:6;21520:2;21508:9;21499:7;21495:23;21491:32;21488:52;;;21536:1;21533;21526:12;21488:52;21568:9;21562:16;21587:31;21612:5;21587:31;:::i;21985:224::-;22024:3;22052:6;22085:2;22082:1;22078:10;22115:2;22112:1;22108:10;22146:3;22142:2;22138:12;22133:3;22130:21;22127:47;;;22154:18;;:::i;:::-;22190:13;;21985:224;-1:-1:-1;;;;21985:224:1:o;22214:217::-;22253:4;22282:6;22338:10;;;;22308;;22360:12;;;22357:38;;;22375:18;;:::i;:::-;22412:13;;22214:217;-1:-1:-1;;;22214:217:1:o;22793:245::-;22860:6;22913:2;22901:9;22892:7;22888:23;22884:32;22881:52;;;22929:1;22926;22919:12;22881:52;22961:9;22955:16;22980:28;23002:5;22980:28;:::i;26190:605::-;26489:6;26478:9;26471:25;26532:6;26527:2;26516:9;26512:18;26505:34;26575:3;26570:2;26559:9;26555:18;26548:31;26452:4;26596:57;26648:3;26637:9;26633:19;26625:6;26596:57;:::i;:::-;-1:-1:-1;;;;;26689:55:1;;;;26684:2;26669:18;;26662:83;-1:-1:-1;26776:3:1;26761:19;26754:35;26588:65;26190:605;-1:-1:-1;;;26190:605:1:o;27435:306::-;27523:6;27531;27539;27592:2;27580:9;27571:7;27567:23;27563:32;27560:52;;;27608:1;27605;27598:12;27560:52;27637:9;27631:16;27621:26;;27687:2;27676:9;27672:18;27666:25;27656:35;;27731:2;27720:9;27716:18;27710:25;27700:35;;27435:306;;;;;:::o

Swarm Source

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