ETH Price: $3,144.19 (-8.51%)
Gas: 11 Gwei

Token

Kurisu (KSU)
 

Overview

Max Total Supply

1,000,000,000,000 KSU

Holders

149

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,421,072,713 KSU

Value
$0.00
0x81f88AAe9B36f26E8F3b127dBCDF4e18C46cFCca
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:
Kurisu

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 2021-12-22
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    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 IUniswapV2Pair {
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function skim(address to) external;
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

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

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;

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

    struct StaticValuesStruct {
        uint16 maxBuyTaxes;
        uint16 maxSellTaxes;
        uint16 maxTransferTaxes;
        uint16 masterTaxDivisor;
    }

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

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

    Ratios public _ratios = Ratios({
        liquidity: 2,
        marketing: 3,
        dev: 3,
        total: 8
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxBuyTaxes: 2000,
        maxSellTaxes: 2000,
        maxTransferTaxes: 2000,
        masterTaxDivisor: 10000
        });

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

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

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xa6EB092e5F54e4F816dC1a15Da16B23296756C68),
        dev: payable(0x70383081D8a3c421BFd7B07d81Ca39Fd175250Ed)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;

    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

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

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

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

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

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

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

        function intializeContract(address[] memory accounts, uint256[] memory amounts, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length < 200, "2");
        require(accounts.length == amounts.length, "3");
        startingSupply = 1_000_000_000_000;
        antiSnipe = AntiSnipe(_antiSnipe);
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.transfer(address(this)) {} catch {}
        if (startingSupply < 10000000000) {
            _decimals = 18;
        } else {
            _decimals = 9;
        }
        _tTotal = startingSupply * (10**_decimals);
        _name = "Kurisu";
        _symbol = "KSU";
        dexRouter = IUniswapV2Router02(currentRouter);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _maxTxAmount = (_tTotal * 5) / 1000;
        _maxWalletSize = (_tTotal * 15) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 10000;
        contractInitialized = true;     
        _tOwned[owner()] = _tTotal;
        emit Transfer(address(0), owner(), _tTotal);

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

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

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

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

        enableTrading();
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

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

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

    function changeRouterContingency(address router) external onlyOwner {
        require(!_hasLiqBeenAdded);
        currentRouter = router;
    }

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

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

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

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

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

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

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

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

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

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

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= staticVals.maxBuyTaxes
                && sellFee <=staticVals. maxSellTaxes
                && transferFee <= staticVals.maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

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

    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 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) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

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

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

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != currentRouter && !lpPairs[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
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

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

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

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

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

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

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

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        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 _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

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

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

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

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

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

        uint256 feeAmount = amount * currentFee / staticVals.masterTaxDivisor;

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

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_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":"dev","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"dev","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"changeRouterContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","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":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"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"},{"internalType":"uint16","name":"dev","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"dev","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxBuyTaxes","type":"uint16"},{"internalType":"uint16","name":"maxSellTaxes","type":"uint16"},{"internalType":"uint16","name":"maxTransferTaxes","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003818155610320608081905260a081905260c052600c805465ffffffffffff191665032003200320179055600260e05261010081905261012052600861014052600d80546001600160401b03199081166608000300030002179091556107d06101608190526101808190526101a0526127106101c052600e805490911667271007d007d007d0179055601280547310ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b03199182161790915560138054737a250d5630b4cf539739df2c5dacb4c659f2488d90831617905561022060405273a6eb092e5f54e4f816dc1a15da16b23296756c686101e08190527370383081d8a3c421bfd7b07d81ca39fd175250ed61020081905260148054841690921790915560158054831690911790556016805461ff0019169055601b805461ffff60ff60b01b0119169055815433911617905546603814806200015a5750466061145b156200018857601254601180546001600160a01b0319166001600160a01b03909216919091179055620001b5565b4660011415620001b557601354601180546001600160a01b0319166001600160a01b039092169190911790555b601154620001d19033906001600160a01b0316600019620002bc565b601154620001ed9030906001600160a01b0316600019620002bc565b600160056000620002066000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805490931681179092556006906200028e6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620003bd565b6001600160a01b0383166200030e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200035c5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000305565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6145af80620003cd6000396000f3fe60806040526004361061034d5760003560e01c806355dbc369116101bb578063a9059cbb116100f7578063de3a3b6911610095578063f94aa1b41161006f578063f94aa1b414610a20578063fb78680d14610a67578063fdb78c0e14610a87578063fe575a8714610aa657600080fd5b8063de3a3b69146109cb578063eafb5a3c146109eb578063ee5d9c2d14610a0b57600080fd5b8063cab5ebea116100d1578063cab5ebea14610908578063cf84770614610928578063d3f6a15714610965578063dd62ed3e1461098557600080fd5b8063a9059cbb146108a8578063aa22b172146108c8578063c6a276c2146108e857600080fd5b806380c581d1116101645780638a8c523c1161013e5780638a8c523c1461085e5780638da5cb5b1461082b57806395d89b4114610873578063a457c2d71461088857600080fd5b806380c581d11461080b578063893d20e81461082b5780638a63bd9b1461084957600080fd5b80636ebd0078116101955780636ebd0078146107ab57806370a08231146107c0578063715018a6146107f657600080fd5b806355dbc36914610756578063590ffdce1461076b5780635c24b0741461078b57600080fd5b806329dd87981161028a57806339509351116102335780634ada218b1161020d5780634ada218b146106c45780634fb2e45d146106de5780634fbee193146106fe57806350a8e0161461073757600080fd5b806339509351146106645780633f3cf56c14610684578063452ed4f1146106a457600080fd5b806332cde6641161026457806332cde6641461060457806333251a0b14610624578063384f36b61461064457600080fd5b806329dd8798146105ad5780632b112e49146105cd578063313ce567146105e257600080fd5b8063095ea7b3116102f757806318160ddd116102d157806318160ddd146104ed5780631b6afa2d1461050257806323b872dd1461056d578063260039571461058d57600080fd5b8063095ea7b31461048a5780630fa604e4146104aa578063122fea3b146104cd57600080fd5b806306fdde031161032857806306fdde03146104265780630758d92414610448578063092316021461046857600080fd5b8062b347471461035957806303fd2a45146103a2578063069d955f146103d057600080fd5b3661035457005b600080fd5b34801561036557600080fd5b50601b5461038d90760100000000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156103ae57600080fd5b506103b861dead81565b6040516001600160a01b039091168152602001610399565b3480156103dc57600080fd5b50600c546104019061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610399565b34801561043257600080fd5b5061043b610ac6565b6040516103999190613d89565b34801561045457600080fd5b50600f546103b8906001600160a01b031681565b34801561047457600080fd5b50610488610483366004613dde565b610b58565b005b34801561049657600080fd5b5061038d6104a5366004613e1c565b610c7c565b3480156104b657600080fd5b506104bf610c93565b604051908152602001610399565b3480156104d957600080fd5b506011546103b8906001600160a01b031681565b3480156104f957600080fd5b506104bf610cb9565b34801561050e57600080fd5b50600e5461053f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610399565b34801561057957600080fd5b5061038d610588366004613e48565b610cd2565b34801561059957600080fd5b506104886105a8366004613e89565b610d4a565b3480156105b957600080fd5b506104886105c8366004613eb9565b610e55565b3480156105d957600080fd5b506104bf610f3e565b3480156105ee57600080fd5b50600a5460405160ff9091168152602001610399565b34801561061057600080fd5b5061048861061f366004613f27565b610fa7565b34801561063057600080fd5b5061048861063f366004613f6a565b6110fc565b34801561065057600080fd5b5061048861065f366004613f6a565b61119c565b34801561067057600080fd5b5061038d61067f366004613e1c565b61122e565b34801561069057600080fd5b5061048861069f366004613e89565b61126a565b3480156106b057600080fd5b506010546103b8906001600160a01b031681565b3480156106d057600080fd5b50601b5461038d9060ff1681565b3480156106ea57600080fd5b506104886106f9366004613f6a565b611375565b34801561070a57600080fd5b5061038d610719366004613f6a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561074357600080fd5b50601b5461038d90610100900460ff1681565b34801561076257600080fd5b506104bf611588565b34801561077757600080fd5b50610488610786366004613f87565b611601565b34801561079757600080fd5b506104886107a6366004613f6a565b61167a565b3480156107b757600080fd5b506104bf6117b9565b3480156107cc57600080fd5b506104bf6107db366004613f6a565b6001600160a01b031660009081526001602052604090205490565b34801561080257600080fd5b506104886117da565b34801561081757600080fd5b50610488610826366004613f87565b61188a565b34801561083757600080fd5b506000546001600160a01b03166103b8565b34801561085557600080fd5b5061038d611a66565b34801561086a57600080fd5b50610488611ad5565b34801561087f57600080fd5b5061043b611cc5565b34801561089457600080fd5b5061038d6108a3366004613e1c565b611cd4565b3480156108b457600080fd5b5061038d6108c3366004613e1c565b611d0b565b3480156108d457600080fd5b506104886108e3366004613f27565b611d22565b3480156108f457600080fd5b50610488610903366004613f6a565b611e35565b34801561091457600080fd5b50610488610923366004613fc0565b611ed5565b34801561093457600080fd5b50600d5461053f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b34801561097157600080fd5b50610488610980366004613fdd565b611f77565b34801561099157600080fd5b506104bf6109a0366004613fdd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109d757600080fd5b506104886109e63660046140fa565b612000565b3480156109f757600080fd5b50610488610a06366004613f6a565b61284a565b348015610a1757600080fd5b50610488612bf9565b348015610a2c57600080fd5b50601454601554610a47916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610399565b348015610a7357600080fd5b50610488610a823660046141c3565b612cdc565b348015610a9357600080fd5b5060165461038d90610100900460ff1681565b348015610ab257600080fd5b5061038d610ac1366004613f6a565b612d69565b606060088054610ad5906141f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b01906141f5565b8015610b4e5780601f10610b2357610100808354040283529160200191610b4e565b820191906000526020600020905b815481529060010190602001808311610b3157829003601f168201915b5050505050905090565b6000546001600160a01b03163314610bab5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6096811015610bfc5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ba2565b601b546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c6157600080fd5b505af1158015610c75573d6000803e3d6000fd5b5050505050565b6000610c89338484612df7565b5060015b92915050565b600a8054600091610ca79160ff169061435c565b601854610cb4919061436b565b905090565b6000600b5460001415610ccb57600080fd5b50600b5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610d37576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610d319084906143a6565b90915550505b610d42848484612f04565b949350505050565b6000546001600160a01b03163314610d985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6103e8600b54610da8919061436b565b8183600b54610db791906143bd565b610dc1919061436b565b1015610e355760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ba2565b8082600b54610e4491906143bd565b610e4e919061436b565b6018555050565b6000546001600160a01b03163314610ea35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b158015610f2057600080fd5b505af1158015610f34573d6000803e3d6000fd5b5050505050505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091610f9a916143dc565b600b54610cb491906143a6565b6000546001600160a01b03163314610ff55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b600e5461ffff9081169084161180159061101f5750600e5461ffff62010000909104811690831611155b801561103d5750600e5461ffff640100000000909104811690821611155b6110895760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ba2565b600c805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b0316331461114a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c47565b6000546001600160a01b031633146111ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54610100900460ff16156111ff57600080fd5b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c899185906112659086906143dc565b612df7565b6000546001600160a01b031633146112b85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6103e8600b546112c8919061436b565b8183600b546112d791906143bd565b6112e1919061436b565b10156113555760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ba2565b8082600b5461136491906143bd565b61136e919061436b565b6017555050565b6000546001600160a01b031633146113c35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6001600160a01b03811661143f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ba2565b6001600160a01b03811661dead14156114c05760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ba2565b600080546114d9916001600160a01b0390911690611601565b6114e4816001611601565b600080546001600160a01b03168152600160205260409020541561153057600080546001600160a01b0316808252600160205260409091205461152e91908390612f04565b612f04565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601b60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb491906143f4565b6000546001600160a01b0316331461164f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116c85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54610100900460ff16156117205760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610ba2565b6001600160a01b0381163014156117795760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ba2565b601b80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600a80546000916117cd9160ff169061435c565b601754610cb4919061436b565b6000546001600160a01b031633146118285760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b60008054611841916001600160a01b0390911690611601565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146118d85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b80611981576001600160a01b03828116600081815260026020526040808220805460ff19169055601b5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561196557600080fd5b505af1158015611979573d6000803e3d6000fd5b505050505050565b600354156119e8576203f4806003544261199b91906143a6565b116119e85760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ba2565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601b5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d19060440161194b565b5050565b600080546001600160a01b03163314611ab55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b600f54611acf9030906001600160a01b0316600019612df7565b50600190565b6000546001600160a01b03163314611b235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b5460ff1615611b765760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ba2565b601b54610100900460ff16611bcd5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ba2565b601b546201000090046001600160a01b0316611c1357601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b54601054600a546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611ca457600080fd5b505af1925050508015611cb5575060015b50601b805460ff19166001179055565b606060098054610ad5906141f5565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c899185906112659086906143a6565b6000611d18338484612f04565b5060019392505050565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b600d805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580611de8838561440d565b611df2919061440d565b600d805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611e835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610c47565b6000546001600160a01b03163314611f235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601680548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611f6c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611fc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601480546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560158054929093169116179055565b6000546001600160a01b0316331461204e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54760100000000000000000000000000000000000000000000900460ff16156120bb5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610ba2565b60c883511061210c5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610ba2565b815183511461215d5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610ba2565b64e8d4a51000600755601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b0384811682029290921792839055909104166121dd57601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b15801561224057600080fd5b505af1925050508015612251575060015b506402540be400600754101561227357600a805460ff19166012179055612281565b600a805460ff191660091790555b600a80546122949160ff9091169061435c565b6007546122a191906143bd565b600b556040805180820190915260068082527f4b7572697375000000000000000000000000000000000000000000000000000060209092019182526122e891600891613cf0565b506040805180820190915260038082527f4b53550000000000000000000000000000000000000000000000000000000000602090920191825261232d91600991613cf0565b50601154600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa1580156123b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d49190614433565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124599190614433565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e19190614433565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600b546103e8906125389060056143bd565b612542919061436b565b601755600b546103e89061255790600f6143bd565b612561919061436b565b601855600b54612710906125769060056143bd565b612580919061436b565b601955600b54612710906125959060056143bd565b61259f919061436b565b601a55601b80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600b54600160006125fc6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556126286000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405161266f91815260200190565b60405180910390a3600f546126919030906001600160a01b0316600019612df7565b60005b835181101561272157600a80546000916126b19160ff169061435c565b8483815181106126c3576126c3614450565b60200260200101516126d591906143bd565b905061270c6126ec6000546001600160a01b031690565b8684815181106126fe576126fe614450565b602002602001015183612f04565b505080806127199061447f565b915050612694565b5061274d6127376000546001600160a01b031690565b306115296107db6000546001600160a01b031690565b50600f546001600160a01b031663f305d7194730612780816001600160a01b031660009081526001602052604090205490565b6000806127956000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612815573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061283a919061449a565b505050612845611ad5565b505050565b6000546001600160a01b031633146128985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129019190614433565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129729190614433565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156129d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f99190614433565b90506001600160a01b038116612b9757816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6b9190614433565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adc9190614433565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b659190614433565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612bc0565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155612845903090600019612df7565b6000546001600160a01b03163314612c475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54610100900460ff1615612c9f5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ba2565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612cd9573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612d2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b8284600b54612d3991906143bd565b612d43919061436b565b601955600b548190612d569084906143bd565b612d60919061436b565b601a5550505050565b601b546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d91906144c8565b6001600160a01b038316612e4d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ba2565b6001600160a01b038216612ea35760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ba2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612f825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ba2565b6001600160a01b038316612ffe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ba2565b600082116130745760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ba2565b61307e8484613340565b1561326e57601b5460ff166130d55760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ba2565b6001600160a01b03841660009081526002602052604090205460ff168061311457506001600160a01b03831660009081526002602052604090205460ff165b15613191576017548211156131915760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ba2565b6011546001600160a01b038481169116148015906131c857506001600160a01b03831660009081526002602052604090205460ff16155b1561326e57601854826131f0856001600160a01b031660009081526001602052604090205490565b6131fa91906143dc565b111561326e5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ba2565b6001600160a01b03841660009081526005602052604090205460019060ff16806132b057506001600160a01b03841660009081526005602052604090205460ff165b156132b9575060005b6001600160a01b03841660009081526002602052604090205460ff161561332b5760165460ff161580156132f45750601654610100900460ff165b1561332b5730600090815260016020526040902054601954811061332957601a5481106133205750601a545b613329816133fe565b505b6133378585858461384f565b95945050505050565b600080546001600160a01b0384811691161480159061336d57506000546001600160a01b03838116911614155b801561339257506001600160a01b03821660009081526006602052604090205460ff16155b80156133b757506001600160a01b03831660009081526006602052604090205460ff16155b80156133ce57506001600160a01b03821661dead14155b80156133e257506001600160a01b03821615155b80156133f757506001600160a01b0383163014155b9392505050565b6016805460ff19166001179055600d5461ffff66010000000000009091041661342657613842565b306000908152600460209081526040808320600f546001600160a01b031684529091529020546000191461347f57306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b600d5460009060029061ffff660100000000000082048116916134a39116856143bd565b6134ad919061436b565b6134b7919061436b565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106134f1576134f1614450565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135879190614433565b8160018151811061359a5761359a614450565b6001600160a01b039283166020918202929092010152600f541663791ac9476135c384866143a6565b60008430426040518663ffffffff1660e01b81526004016135e89594939291906144e5565b600060405180830381600087803b15801561360257600080fd5b505af1158015613616573d6000803e3d6000fd5b5050600d54600092506002915061ffff6601000000000000820481169161363e9116476143bd565b613648919061436b565b613652919061436b565b9050821561374b57600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156136e1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613706919061449a565b505060408051858152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b60004711801561377d5750600d546000906137779061ffff808216916601000000000000900416614556565b61ffff16115b1561383e57601554600d546001600160a01b03909116906108fc906137b39061ffff808216916601000000000000900416614556565b600d5461ffff918216916137d091640100000000900416476143bd565b6137da919061436b565b6040518115909202916000818181858888f19350505050158015613802573d6000803e3d6000fd5b506014546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561383c573d6000803e3d6000fd5b505b5050505b506016805460ff19169055565b601b54600090610100900460ff166138fb5761386b8585613a8b565b601b54610100900460ff1615801561388857506138888585613340565b156138fb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ba2565b6139058585613340565b156139b857601b546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156139a1575060408051601f3d908101601f1916820190925261399e918101906144c8565b60015b6139aa57600080fd5b9050806139b657600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906139e09084906143a6565b9091555060009050826139f357836139fe565b6139fe868686613be9565b6001600160a01b038616600090815260016020526040812080549293508392909190613a2b9084906143dc565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a7791815260200190565b60405180910390a350600195945050505050565b601b54610100900460ff1615613b095760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ba2565b613b138282613340565b158015613b2d57506010546001600160a01b038281169116145b15611a62576001600160a01b038083166000908152600660205260409020805460ff19166001179055601b805461ff001916610100179081905562010000900416613ba257601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6016805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60105460009081906001600160a01b0386811691161415613c115750600c5461ffff16613c4b565b6010546001600160a01b0385811691161415613c3a5750600c5462010000900461ffff16613c4b565b50600c54640100000000900461ffff165b600e546000906601000000000000900461ffff16613c6983866143bd565b613c73919061436b565b30600090815260016020526040812080549293508392909190613c979084906143dc565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613ce681856143a6565b9695505050505050565b828054613cfc906141f5565b90600052602060002090601f016020900481019282613d1e5760008555613d64565b82601f10613d3757805160ff1916838001178555613d64565b82800160010185558215613d64579182015b82811115613d64578251825591602001919060010190613d49565b50613d70929150613d74565b5090565b5b80821115613d705760008155600101613d75565b600060208083528351808285015260005b81811015613db657858101830151858201604001528201613d9a565b81811115613dc8576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613df057600080fd5b5035919050565b6001600160a01b0381168114612cd957600080fd5b8035613e1781613df7565b919050565b60008060408385031215613e2f57600080fd5b8235613e3a81613df7565b946020939093013593505050565b600080600060608486031215613e5d57600080fd5b8335613e6881613df7565b92506020840135613e7881613df7565b929592945050506040919091013590565b60008060408385031215613e9c57600080fd5b50508035926020909101359150565b8015158114612cd957600080fd5b60008060008060808587031215613ecf57600080fd5b8435613eda81613eab565b93506020850135613eea81613eab565b92506040850135613efa81613eab565b91506060850135613f0a81613eab565b939692955090935050565b803561ffff81168114613e1757600080fd5b600080600060608486031215613f3c57600080fd5b613f4584613f15565b9250613f5360208501613f15565b9150613f6160408501613f15565b90509250925092565b600060208284031215613f7c57600080fd5b81356133f781613df7565b60008060408385031215613f9a57600080fd5b8235613fa581613df7565b91506020830135613fb581613eab565b809150509250929050565b600060208284031215613fd257600080fd5b81356133f781613eab565b60008060408385031215613ff057600080fd5b8235613ffb81613df7565b91506020830135613fb581613df7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140635761406361400b565b604052919050565b600067ffffffffffffffff8211156140855761408561400b565b5060051b60200190565b600082601f8301126140a057600080fd5b813560206140b56140b08361406b565b61403a565b82815260059290921b840181019181810190868411156140d457600080fd5b8286015b848110156140ef57803583529183019183016140d8565b509695505050505050565b60008060006060848603121561410f57600080fd5b833567ffffffffffffffff8082111561412757600080fd5b818601915086601f83011261413b57600080fd5b8135602061414b6140b08361406b565b82815260059290921b8401810191818101908a84111561416a57600080fd5b948201945b8386101561419157853561418281613df7565b8252948201949082019061416f565b975050870135925050808211156141a757600080fd5b506141b48682870161408f565b925050613f6160408501613e0c565b600080600080608085870312156141d957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061420957607f821691505b60208210811415614243577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156142b357816000190482111561429957614299614249565b808516156142a657918102915b93841c939080029061427d565b509250929050565b6000826142ca57506001610c8d565b816142d757506000610c8d565b81600181146142ed57600281146142f757614313565b6001915050610c8d565b60ff84111561430857614308614249565b50506001821b610c8d565b5060208310610133831016604e8410600b8410161715614336575081810a610c8d565b6143408383614278565b806000190482111561435457614354614249565b029392505050565b60006133f760ff8416836142bb565b6000826143a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156143b8576143b8614249565b500390565b60008160001904831182151516156143d7576143d7614249565b500290565b600082198211156143ef576143ef614249565b500190565b60006020828403121561440657600080fd5b5051919050565b600061ffff80831681851680830382111561442a5761442a614249565b01949350505050565b60006020828403121561444557600080fd5b81516133f781613df7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060001982141561449357614493614249565b5060010190565b6000806000606084860312156144af57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156144da57600080fd5b81516133f781613eab565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145355784516001600160a01b031683529383019391830191600101614510565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff8381169083168181101561457157614571614249565b03939250505056fea2646970667358221220bba716e5a832759ca1e6ac3ffe215377762f0691f5ffc91079635da8a080be7a64736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061034d5760003560e01c806355dbc369116101bb578063a9059cbb116100f7578063de3a3b6911610095578063f94aa1b41161006f578063f94aa1b414610a20578063fb78680d14610a67578063fdb78c0e14610a87578063fe575a8714610aa657600080fd5b8063de3a3b69146109cb578063eafb5a3c146109eb578063ee5d9c2d14610a0b57600080fd5b8063cab5ebea116100d1578063cab5ebea14610908578063cf84770614610928578063d3f6a15714610965578063dd62ed3e1461098557600080fd5b8063a9059cbb146108a8578063aa22b172146108c8578063c6a276c2146108e857600080fd5b806380c581d1116101645780638a8c523c1161013e5780638a8c523c1461085e5780638da5cb5b1461082b57806395d89b4114610873578063a457c2d71461088857600080fd5b806380c581d11461080b578063893d20e81461082b5780638a63bd9b1461084957600080fd5b80636ebd0078116101955780636ebd0078146107ab57806370a08231146107c0578063715018a6146107f657600080fd5b806355dbc36914610756578063590ffdce1461076b5780635c24b0741461078b57600080fd5b806329dd87981161028a57806339509351116102335780634ada218b1161020d5780634ada218b146106c45780634fb2e45d146106de5780634fbee193146106fe57806350a8e0161461073757600080fd5b806339509351146106645780633f3cf56c14610684578063452ed4f1146106a457600080fd5b806332cde6641161026457806332cde6641461060457806333251a0b14610624578063384f36b61461064457600080fd5b806329dd8798146105ad5780632b112e49146105cd578063313ce567146105e257600080fd5b8063095ea7b3116102f757806318160ddd116102d157806318160ddd146104ed5780631b6afa2d1461050257806323b872dd1461056d578063260039571461058d57600080fd5b8063095ea7b31461048a5780630fa604e4146104aa578063122fea3b146104cd57600080fd5b806306fdde031161032857806306fdde03146104265780630758d92414610448578063092316021461046857600080fd5b8062b347471461035957806303fd2a45146103a2578063069d955f146103d057600080fd5b3661035457005b600080fd5b34801561036557600080fd5b50601b5461038d90760100000000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156103ae57600080fd5b506103b861dead81565b6040516001600160a01b039091168152602001610399565b3480156103dc57600080fd5b50600c546104019061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610399565b34801561043257600080fd5b5061043b610ac6565b6040516103999190613d89565b34801561045457600080fd5b50600f546103b8906001600160a01b031681565b34801561047457600080fd5b50610488610483366004613dde565b610b58565b005b34801561049657600080fd5b5061038d6104a5366004613e1c565b610c7c565b3480156104b657600080fd5b506104bf610c93565b604051908152602001610399565b3480156104d957600080fd5b506011546103b8906001600160a01b031681565b3480156104f957600080fd5b506104bf610cb9565b34801561050e57600080fd5b50600e5461053f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610399565b34801561057957600080fd5b5061038d610588366004613e48565b610cd2565b34801561059957600080fd5b506104886105a8366004613e89565b610d4a565b3480156105b957600080fd5b506104886105c8366004613eb9565b610e55565b3480156105d957600080fd5b506104bf610f3e565b3480156105ee57600080fd5b50600a5460405160ff9091168152602001610399565b34801561061057600080fd5b5061048861061f366004613f27565b610fa7565b34801561063057600080fd5b5061048861063f366004613f6a565b6110fc565b34801561065057600080fd5b5061048861065f366004613f6a565b61119c565b34801561067057600080fd5b5061038d61067f366004613e1c565b61122e565b34801561069057600080fd5b5061048861069f366004613e89565b61126a565b3480156106b057600080fd5b506010546103b8906001600160a01b031681565b3480156106d057600080fd5b50601b5461038d9060ff1681565b3480156106ea57600080fd5b506104886106f9366004613f6a565b611375565b34801561070a57600080fd5b5061038d610719366004613f6a565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561074357600080fd5b50601b5461038d90610100900460ff1681565b34801561076257600080fd5b506104bf611588565b34801561077757600080fd5b50610488610786366004613f87565b611601565b34801561079757600080fd5b506104886107a6366004613f6a565b61167a565b3480156107b757600080fd5b506104bf6117b9565b3480156107cc57600080fd5b506104bf6107db366004613f6a565b6001600160a01b031660009081526001602052604090205490565b34801561080257600080fd5b506104886117da565b34801561081757600080fd5b50610488610826366004613f87565b61188a565b34801561083757600080fd5b506000546001600160a01b03166103b8565b34801561085557600080fd5b5061038d611a66565b34801561086a57600080fd5b50610488611ad5565b34801561087f57600080fd5b5061043b611cc5565b34801561089457600080fd5b5061038d6108a3366004613e1c565b611cd4565b3480156108b457600080fd5b5061038d6108c3366004613e1c565b611d0b565b3480156108d457600080fd5b506104886108e3366004613f27565b611d22565b3480156108f457600080fd5b50610488610903366004613f6a565b611e35565b34801561091457600080fd5b50610488610923366004613fc0565b611ed5565b34801561093457600080fd5b50600d5461053f9061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b34801561097157600080fd5b50610488610980366004613fdd565b611f77565b34801561099157600080fd5b506104bf6109a0366004613fdd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109d757600080fd5b506104886109e63660046140fa565b612000565b3480156109f757600080fd5b50610488610a06366004613f6a565b61284a565b348015610a1757600080fd5b50610488612bf9565b348015610a2c57600080fd5b50601454601554610a47916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610399565b348015610a7357600080fd5b50610488610a823660046141c3565b612cdc565b348015610a9357600080fd5b5060165461038d90610100900460ff1681565b348015610ab257600080fd5b5061038d610ac1366004613f6a565b612d69565b606060088054610ad5906141f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b01906141f5565b8015610b4e5780601f10610b2357610100808354040283529160200191610b4e565b820191906000526020600020905b815481529060010190602001808311610b3157829003601f168201915b5050505050905090565b6000546001600160a01b03163314610bab5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6096811015610bfc5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ba2565b601b546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c6157600080fd5b505af1158015610c75573d6000803e3d6000fd5b5050505050565b6000610c89338484612df7565b5060015b92915050565b600a8054600091610ca79160ff169061435c565b601854610cb4919061436b565b905090565b6000600b5460001415610ccb57600080fd5b50600b5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610d37576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610d319084906143a6565b90915550505b610d42848484612f04565b949350505050565b6000546001600160a01b03163314610d985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6103e8600b54610da8919061436b565b8183600b54610db791906143bd565b610dc1919061436b565b1015610e355760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ba2565b8082600b54610e4491906143bd565b610e4e919061436b565b6018555050565b6000546001600160a01b03163314610ea35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b158015610f2057600080fd5b505af1158015610f34573d6000803e3d6000fd5b5050505050505050565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d549091610f9a916143dc565b600b54610cb491906143a6565b6000546001600160a01b03163314610ff55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b600e5461ffff9081169084161180159061101f5750600e5461ffff62010000909104811690831611155b801561103d5750600e5461ffff640100000000909104811690821611155b6110895760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ba2565b600c805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b0316331461114a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c47565b6000546001600160a01b031633146111ea5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54610100900460ff16156111ff57600080fd5b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c899185906112659086906143dc565b612df7565b6000546001600160a01b031633146112b85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6103e8600b546112c8919061436b565b8183600b546112d791906143bd565b6112e1919061436b565b10156113555760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ba2565b8082600b5461136491906143bd565b61136e919061436b565b6017555050565b6000546001600160a01b031633146113c35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6001600160a01b03811661143f5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ba2565b6001600160a01b03811661dead14156114c05760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ba2565b600080546114d9916001600160a01b0390911690611601565b6114e4816001611601565b600080546001600160a01b03168152600160205260409020541561153057600080546001600160a01b0316808252600160205260409091205461152e91908390612f04565b612f04565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601b60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb491906143f4565b6000546001600160a01b0316331461164f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116c85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54610100900460ff16156117205760405162461bcd60e51b815260206004820152601860248201527f4c697175696469747920697320616c726561647920696e2e00000000000000006044820152606401610ba2565b6001600160a01b0381163014156117795760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ba2565b601b80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b600a80546000916117cd9160ff169061435c565b601754610cb4919061436b565b6000546001600160a01b031633146118285760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b60008054611841916001600160a01b0390911690611601565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146118d85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b80611981576001600160a01b03828116600081815260026020526040808220805460ff19169055601b5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561196557600080fd5b505af1158015611979573d6000803e3d6000fd5b505050505050565b600354156119e8576203f4806003544261199b91906143a6565b116119e85760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ba2565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601b5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d19060440161194b565b5050565b600080546001600160a01b03163314611ab55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b600f54611acf9030906001600160a01b0316600019612df7565b50600190565b6000546001600160a01b03163314611b235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b5460ff1615611b765760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ba2565b601b54610100900460ff16611bcd5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ba2565b601b546201000090046001600160a01b0316611c1357601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b54601054600a546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611ca457600080fd5b505af1925050508015611cb5575060015b50601b805460ff19166001179055565b606060098054610ad5906141f5565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610c899185906112659086906143a6565b6000611d18338484612f04565b5060019392505050565b6000546001600160a01b03163314611d705760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b600d805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580611de8838561440d565b611df2919061440d565b600d805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611e835760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610c47565b6000546001600160a01b03163314611f235760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601680548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611f6c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611fc55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601480546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560158054929093169116179055565b6000546001600160a01b0316331461204e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54760100000000000000000000000000000000000000000000900460ff16156120bb5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610ba2565b60c883511061210c5760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610ba2565b815183511461215d5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610ba2565b64e8d4a51000600755601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b0384811682029290921792839055909104166121dd57601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b546040517f1a695230000000000000000000000000000000000000000000000000000000008152306004820152620100009091046001600160a01b031690631a69523090602401600060405180830381600087803b15801561224057600080fd5b505af1925050508015612251575060015b506402540be400600754101561227357600a805460ff19166012179055612281565b600a805460ff191660091790555b600a80546122949160ff9091169061435c565b6007546122a191906143bd565b600b556040805180820190915260068082527f4b7572697375000000000000000000000000000000000000000000000000000060209092019182526122e891600891613cf0565b506040805180820190915260038082527f4b53550000000000000000000000000000000000000000000000000000000000602090920191825261232d91600991613cf0565b50601154600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169182179055604080517fc45a0155000000000000000000000000000000000000000000000000000000008152905163c45a0155916004808201926020929091908290030181865afa1580156123b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d49190614433565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124599190614433565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156124bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e19190614433565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600b546103e8906125389060056143bd565b612542919061436b565b601755600b546103e89061255790600f6143bd565b612561919061436b565b601855600b54612710906125769060056143bd565b612580919061436b565b601955600b54612710906125959060056143bd565b61259f919061436b565b601a55601b80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600b54600160006125fc6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556126286000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405161266f91815260200190565b60405180910390a3600f546126919030906001600160a01b0316600019612df7565b60005b835181101561272157600a80546000916126b19160ff169061435c565b8483815181106126c3576126c3614450565b60200260200101516126d591906143bd565b905061270c6126ec6000546001600160a01b031690565b8684815181106126fe576126fe614450565b602002602001015183612f04565b505080806127199061447f565b915050612694565b5061274d6127376000546001600160a01b031690565b306115296107db6000546001600160a01b031690565b50600f546001600160a01b031663f305d7194730612780816001600160a01b031660009081526001602052604090205490565b6000806127956000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612815573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061283a919061449a565b505050612845611ad5565b505050565b6000546001600160a01b031633146128985760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129019190614433565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129729190614433565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156129d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f99190614433565b90506001600160a01b038116612b9757816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6b9190614433565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adc9190614433565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b659190614433565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612bc0565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155612845903090600019612df7565b6000546001600160a01b03163314612c475760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b601b54610100900460ff1615612c9f5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ba2565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612cd9573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612d2a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ba2565b8284600b54612d3991906143bd565b612d43919061436b565b601955600b548190612d569084906143bd565b612d60919061436b565b601a5550505050565b601b546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d91906144c8565b6001600160a01b038316612e4d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ba2565b6001600160a01b038216612ea35760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ba2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612f825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ba2565b6001600160a01b038316612ffe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ba2565b600082116130745760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ba2565b61307e8484613340565b1561326e57601b5460ff166130d55760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ba2565b6001600160a01b03841660009081526002602052604090205460ff168061311457506001600160a01b03831660009081526002602052604090205460ff165b15613191576017548211156131915760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ba2565b6011546001600160a01b038481169116148015906131c857506001600160a01b03831660009081526002602052604090205460ff16155b1561326e57601854826131f0856001600160a01b031660009081526001602052604090205490565b6131fa91906143dc565b111561326e5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ba2565b6001600160a01b03841660009081526005602052604090205460019060ff16806132b057506001600160a01b03841660009081526005602052604090205460ff165b156132b9575060005b6001600160a01b03841660009081526002602052604090205460ff161561332b5760165460ff161580156132f45750601654610100900460ff165b1561332b5730600090815260016020526040902054601954811061332957601a5481106133205750601a545b613329816133fe565b505b6133378585858461384f565b95945050505050565b600080546001600160a01b0384811691161480159061336d57506000546001600160a01b03838116911614155b801561339257506001600160a01b03821660009081526006602052604090205460ff16155b80156133b757506001600160a01b03831660009081526006602052604090205460ff16155b80156133ce57506001600160a01b03821661dead14155b80156133e257506001600160a01b03821615155b80156133f757506001600160a01b0383163014155b9392505050565b6016805460ff19166001179055600d5461ffff66010000000000009091041661342657613842565b306000908152600460209081526040808320600f546001600160a01b031684529091529020546000191461347f57306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b600d5460009060029061ffff660100000000000082048116916134a39116856143bd565b6134ad919061436b565b6134b7919061436b565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106134f1576134f1614450565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135879190614433565b8160018151811061359a5761359a614450565b6001600160a01b039283166020918202929092010152600f541663791ac9476135c384866143a6565b60008430426040518663ffffffff1660e01b81526004016135e89594939291906144e5565b600060405180830381600087803b15801561360257600080fd5b505af1158015613616573d6000803e3d6000fd5b5050600d54600092506002915061ffff6601000000000000820481169161363e9116476143bd565b613648919061436b565b613652919061436b565b9050821561374b57600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101859052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156136e1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613706919061449a565b505060408051858152602081018490529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b60004711801561377d5750600d546000906137779061ffff808216916601000000000000900416614556565b61ffff16115b1561383e57601554600d546001600160a01b03909116906108fc906137b39061ffff808216916601000000000000900416614556565b600d5461ffff918216916137d091640100000000900416476143bd565b6137da919061436b565b6040518115909202916000818181858888f19350505050158015613802573d6000803e3d6000fd5b506014546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561383c573d6000803e3d6000fd5b505b5050505b506016805460ff19169055565b601b54600090610100900460ff166138fb5761386b8585613a8b565b601b54610100900460ff1615801561388857506138888585613340565b156138fb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ba2565b6139058585613340565b156139b857601b546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156139a1575060408051601f3d908101601f1916820190925261399e918101906144c8565b60015b6139aa57600080fd5b9050806139b657600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906139e09084906143a6565b9091555060009050826139f357836139fe565b6139fe868686613be9565b6001600160a01b038616600090815260016020526040812080549293508392909190613a2b9084906143dc565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a7791815260200190565b60405180910390a350600195945050505050565b601b54610100900460ff1615613b095760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ba2565b613b138282613340565b158015613b2d57506010546001600160a01b038281169116145b15611a62576001600160a01b038083166000908152600660205260409020805460ff19166001179055601b805461ff001916610100179081905562010000900416613ba257601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6016805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60105460009081906001600160a01b0386811691161415613c115750600c5461ffff16613c4b565b6010546001600160a01b0385811691161415613c3a5750600c5462010000900461ffff16613c4b565b50600c54640100000000900461ffff165b600e546000906601000000000000900461ffff16613c6983866143bd565b613c73919061436b565b30600090815260016020526040812080549293508392909190613c979084906143dc565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613ce681856143a6565b9695505050505050565b828054613cfc906141f5565b90600052602060002090601f016020900481019282613d1e5760008555613d64565b82601f10613d3757805160ff1916838001178555613d64565b82800160010185558215613d64579182015b82811115613d64578251825591602001919060010190613d49565b50613d70929150613d74565b5090565b5b80821115613d705760008155600101613d75565b600060208083528351808285015260005b81811015613db657858101830151858201604001528201613d9a565b81811115613dc8576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613df057600080fd5b5035919050565b6001600160a01b0381168114612cd957600080fd5b8035613e1781613df7565b919050565b60008060408385031215613e2f57600080fd5b8235613e3a81613df7565b946020939093013593505050565b600080600060608486031215613e5d57600080fd5b8335613e6881613df7565b92506020840135613e7881613df7565b929592945050506040919091013590565b60008060408385031215613e9c57600080fd5b50508035926020909101359150565b8015158114612cd957600080fd5b60008060008060808587031215613ecf57600080fd5b8435613eda81613eab565b93506020850135613eea81613eab565b92506040850135613efa81613eab565b91506060850135613f0a81613eab565b939692955090935050565b803561ffff81168114613e1757600080fd5b600080600060608486031215613f3c57600080fd5b613f4584613f15565b9250613f5360208501613f15565b9150613f6160408501613f15565b90509250925092565b600060208284031215613f7c57600080fd5b81356133f781613df7565b60008060408385031215613f9a57600080fd5b8235613fa581613df7565b91506020830135613fb581613eab565b809150509250929050565b600060208284031215613fd257600080fd5b81356133f781613eab565b60008060408385031215613ff057600080fd5b8235613ffb81613df7565b91506020830135613fb581613df7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156140635761406361400b565b604052919050565b600067ffffffffffffffff8211156140855761408561400b565b5060051b60200190565b600082601f8301126140a057600080fd5b813560206140b56140b08361406b565b61403a565b82815260059290921b840181019181810190868411156140d457600080fd5b8286015b848110156140ef57803583529183019183016140d8565b509695505050505050565b60008060006060848603121561410f57600080fd5b833567ffffffffffffffff8082111561412757600080fd5b818601915086601f83011261413b57600080fd5b8135602061414b6140b08361406b565b82815260059290921b8401810191818101908a84111561416a57600080fd5b948201945b8386101561419157853561418281613df7565b8252948201949082019061416f565b975050870135925050808211156141a757600080fd5b506141b48682870161408f565b925050613f6160408501613e0c565b600080600080608085870312156141d957600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061420957607f821691505b60208210811415614243577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156142b357816000190482111561429957614299614249565b808516156142a657918102915b93841c939080029061427d565b509250929050565b6000826142ca57506001610c8d565b816142d757506000610c8d565b81600181146142ed57600281146142f757614313565b6001915050610c8d565b60ff84111561430857614308614249565b50506001821b610c8d565b5060208310610133831016604e8410600b8410161715614336575081810a610c8d565b6143408383614278565b806000190482111561435457614354614249565b029392505050565b60006133f760ff8416836142bb565b6000826143a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156143b8576143b8614249565b500390565b60008160001904831182151516156143d7576143d7614249565b500290565b600082198211156143ef576143ef614249565b500190565b60006020828403121561440657600080fd5b5051919050565b600061ffff80831681851680830382111561442a5761442a614249565b01949350505050565b60006020828403121561444557600080fd5b81516133f781613df7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060001982141561449357614493614249565b5060010190565b6000806000606084860312156144af57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156144da57600080fd5b81516133f781613eab565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145355784516001600160a01b031683529383019391830191600101614510565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff8381169083168181101561457157614571614249565b03939250505056fea2646970667358221220bba716e5a832759ca1e6ac3ffe215377762f0691f5ffc91079635da8a080be7a64736f6c634300080b0033

Deployed Bytecode Sourcemap

7685:20941:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10242:39;;;;;;;;;;-1:-1:-1;10242:39:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;10242:39:0;;;;;;;;9531:73;;;;;;;;;;;;9562:42;9531:73;;;;;-1:-1:-1;;;;;370:55:1;;;352:74;;340:2;325:18;9531:73:0;206:226:1;8763:113:0;;;;;;;;;;-1:-1:-1;8763:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;643:6:1;676:15;;;658:34;;728:15;;;723:2;708:18;;701:43;780:15;;760:18;;;753:43;;;;621:2;606:18;8763:113:0;437:365:1;15606:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9222:35::-;;;;;;;;;;-1:-1:-1;9222:35:0;;;;-1:-1:-1;;;;;9222:35:0;;;20270:150;;;;;;;;;;-1:-1:-1;20270:150:0;;;;;:::i;:::-;;:::i;:::-;;16219:161;;;;;;;;;;-1:-1:-1;16219:161:0;;;;;:::i;:::-;;:::i;21796:112::-;;;;;;;;;;;;;:::i;:::-;;;2674:25:1;;;2662:2;2647:18;21796:112:0;2528:177:1;9294:28:0;;;;;;;;;;-1:-1:-1;9294:28:0;;;;-1:-1:-1;;;;;9294:28:0;;;15263:161;;;;;;;;;;;;;:::i;9019:194::-;;;;;;;;;;-1:-1:-1;9019:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2943:6:1;2976:15;;;2958:34;;3028:15;;;3023:2;3008:18;;3001:43;3080:15;;;3060:18;;;3053:43;;;;3132:15;;;3127:2;3112:18;;3105:43;2920:3;2905:19;9019:194:0;2710:444:1;16886:306:0;;;;;;;;;;-1:-1:-1;16886:306:0;;;;;:::i;:::-;;:::i;21407:267::-;;;;;;;;;;-1:-1:-1;21407:267:0;;;;;:::i;:::-;;:::i;20067:195::-;;;;;;;;;;-1:-1:-1;20067:195:0;;;;;:::i;:::-;;:::i;18900:141::-;;;;;;;;;;;;;:::i;15430:80::-;;;;;;;;;;-1:-1:-1;15498:9:0;;15430:80;;15498:9;;;;4790:36:1;;4778:2;4763:18;15430:80:0;4648:184:1;20428:430:0;;;;;;;;;;-1:-1:-1;20428:430:0;;;;;:::i;:::-;;:::i;19951:108::-;;;;;;;;;;-1:-1:-1;19951:108:0;;;;;:::i;:::-;;:::i;18746:146::-;;;;;;;;;;-1:-1:-1;18746:146:0;;;;;:::i;:::-;;:::i;17200:215::-;;;;;;;;;;-1:-1:-1;17200:215:0;;;;;:::i;:::-;;:::i;21130:269::-;;;;;;;;;;-1:-1:-1;21130:269:0;;;;;:::i;:::-;;:::i;9264:21::-;;;;;;;;;;-1:-1:-1;9264:21:0;;;;-1:-1:-1;;;;;9264:21:0;;;10132:34;;;;;;;;;;-1:-1:-1;10132:34:0;;;;;;;;14117:590;;;;;;;;;;-1:-1:-1;14117:590:0;;;;;:::i;:::-;;:::i;19049:125::-;;;;;;;;;;-1:-1:-1;19049:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19138:28:0;19114:4;19138:28;;;:19;:28;;;;;;;;;19049:125;10173:36;;;;;;;;;;-1:-1:-1;10173:36:0;;;;;;;;;;;19839:104;;;;;;;;;;;;;:::i;19182:134::-;;;;;;;;;;-1:-1:-1;19182:134:0;;;;;:::i;:::-;;:::i;19324:248::-;;;;;;;;;;-1:-1:-1;19324:248:0;;;;;:::i;:::-;;:::i;21682:106::-;;;;;;;;;;;;;:::i;15919:117::-;;;;;;;;;;-1:-1:-1;15919:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;16012:16:0;15985:7;16012:16;;;:7;:16;;;;;;;15919:117;14715:195;;;;;;;;;;;;;:::i;18238:500::-;;;;;;;;;;-1:-1:-1;18238:500:0;;;;;:::i;:::-;;:::i;15692:80::-;;;;;;;;;;-1:-1:-1;15744:7:0;14095:6;-1:-1:-1;;;;;14095:6:0;15692:80;21796:112;16705:173;;;;;;;;;;;;;:::i;26499:429::-;;;;;;;;;;;;;:::i;15516:84::-;;;;;;;;;;;;;:::i;17423:225::-;;;;;;;;;;-1:-1:-1;17423:225:0;;;;;:::i;:::-;;:::i;16044:167::-;;;;;;;;;;-1:-1:-1;16044:167:0;;;;;:::i;:::-;;:::i;20866:256::-;;;;;;;;;;-1:-1:-1;20866:256:0;;;;;:::i;:::-;;:::i;19580:118::-;;;;;;;;;;-1:-1:-1;19580:118:0;;;;;:::i;:::-;;:::i;22410:165::-;;;;;;;;;;-1:-1:-1;22410:165:0;;;;;:::i;:::-;;:::i;8885:125::-;;;;;;;;;;-1:-1:-1;8885:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22213:189;;;;;;;;;;-1:-1:-1;22213:189:0;;;;;:::i;:::-;;:::i;15778:133::-;;;;;;;;;;-1:-1:-1;15778:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15880:19:0;;;15862:7;15880:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15778:133;11526:1915;;;;;;;;;;-1:-1:-1;11526:1915:0;;;;;:::i;:::-;;:::i;17656:574::-;;;;;;;;;;-1:-1:-1;17656:574:0;;;;;:::i;:::-;;:::i;26936:183::-;;;;;;;;;;;;;:::i;9713:195::-;;;;;;;;;;-1:-1:-1;9713:195:0;;;;;;-1:-1:-1;;;;;9713:195:0;;;;;;;;;;;-1:-1:-1;;;;;9983:15:1;;;9965:34;;10035:15;;;;10030:2;10015:18;;10008:43;9877:18;9713:195:0;9698:359:1;21916:289:0;;;;;;;;;;-1:-1:-1;21916:289:0;;;;;:::i;:::-;;:::i;9939:39::-;;;;;;;;;;-1:-1:-1;9939:39:0;;;;;;;;;;;19706:125;;;;;;;;;;-1:-1:-1;19706:125:0;;;;;:::i;:::-;;:::i;15606:80::-;15654:13;15678:5;15671:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15606:80;:::o;20270:150::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;;;;;;;;;20354:3:::1;20347;:10;;20339:31;;;::::0;-1:-1:-1;;;20339:31:0;;11442:2:1;20339:31:0::1;::::0;::::1;11424:21:1::0;11481:1;11461:18;;;11454:29;11519:10;11499:18;;;11492:38;11547:18;;20339:31:0::1;11240:331:1::0;20339:31:0::1;20381:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;2674:25:1::0;;;20381:9:0;;;::::1;-1:-1:-1::0;;;;;20381:9:0::1;::::0;:26:::1;::::0;2647:18:1;;20381:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20270:150:::0;:::o;16219:161::-;16294:4;16311:39;189:10;16334:7;16343:6;16311:8;:39::i;:::-;-1:-1:-1;16368:4:0;16219:161;;;;;:::o;21796:112::-;21890:9;;;21841:7;;21886:13;;21890:9;;;21886:13;:::i;:::-;21868:14;;:32;;;;:::i;:::-;21861:39;;21796:112;:::o;15263:161::-;15318:7;15342;;15353:1;15342:12;15338:53;;;15371:8;;;15338:53;-1:-1:-1;15408:7:0;;;15263:161::o;16886:306::-;-1:-1:-1;;;;;17007:19:0;;16986:4;17007:19;;;:11;:19;;;;;;;;17027:10;17007:31;;;;;;;;-1:-1:-1;;17007:52:0;17003:126;;-1:-1:-1;;;;;17076:19:0;;;;;;:11;:19;;;;;;;;17096:10;17076:31;;;;;;;:41;;17111:6;;17076:19;:41;;17111:6;;17076:41;:::i;:::-;;;;-1:-1:-1;;17003:126:0;17148:36;17158:6;17166:9;17177:6;17148:9;:36::i;:::-;17141:43;16886:306;-1:-1:-1;;;;16886:306:0:o;21407:267::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;21549:4:::1;21539:7;;:14;;;;:::i;:::-;21527:7;21516;21506;;:17;;;;:::i;:::-;21505:29;;;;:::i;:::-;:49;;21497:112;;;::::0;-1:-1:-1;;;21497:112:0;;14112:2:1;21497:112:0::1;::::0;::::1;14094:21:1::0;14151:2;14131:18;;;14124:30;14190:34;14170:18;;;14163:62;14261:20;14241:18;;;14234:48;14299:19;;21497:112:0::1;13910:414:1::0;21497:112:0::1;21659:7;21648;21638;;:17;;;;:::i;:::-;21637:29;;;;:::i;:::-;21620:14;:46:::0;-1:-1:-1;;21407:267:0:o;20067:195::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;20189:9:::1;::::0;:65:::1;::::0;;;;14561:14:1;;14554:22;20189:65:0::1;::::0;::::1;14536:41:1::0;14620:14;;14613:22;14593:18;;;14586:50;14679:14;;14672:22;14652:18;;;14645:50;14738:14;;14731:22;14711:18;;;14704:50;20189:9:0;;;::::1;-1:-1:-1::0;;;;;20189:9:0::1;::::0;:24:::1;::::0;14508:19:1;;20189:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20067:195:::0;;;;:::o;18900:141::-;16012:7;:16;;;;9562:42;18953:7;16012:16;;;;;18953:7;;18992:39;;;:::i;:::-;18981:7;;:51;;;;:::i;20428:430::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;20545:10:::1;:22:::0;::::1;::::0;;::::1;20535:32:::0;;::::1;;::::0;::::1;::::0;:87:::1;;-1:-1:-1::0;20598:10:0::1;:24:::0;::::1;::::0;;;::::1;::::0;::::1;20588:34:::0;;::::1;;;20535:87;:150;;;;-1:-1:-1::0;20658:10:0::1;:27:::0;::::1;::::0;;;::::1;::::0;::::1;20643:42:::0;;::::1;;;20535:150;20527:203;;;::::0;-1:-1:-1;;;20527:203:0;;15100:2:1;20527:203:0::1;::::0;::::1;15082:21:1::0;15139:2;15119:18;;;15112:30;15178:25;15158:18;;;15151:53;15221:18;;20527:203:0::1;14898:347:1::0;20527:203:0::1;20741:9;:25:::0;;::::1;::::0;;::::1;20777:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;20815:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;20428:430::o;19951:108::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;20020:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;370:55:1;;;20020:31:0::1;::::0;::::1;352:74:1::0;20020:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;325:18:1;;20020:31:0::1;206:226:1::0;18746:146:0;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;18834:16:::1;::::0;::::1;::::0;::::1;;;18833:17;18825:26;;;::::0;::::1;;18862:13;:22:::0;;-1:-1:-1;;18862:22:0::1;-1:-1:-1::0;;;;;18862:22:0;;;::::1;::::0;;;::::1;::::0;;18746:146::o;17200:215::-;189:10;17288:4;17337:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17337:34:0;;;;;;;;;;17288:4;;17305:80;;17328:7;;17337:47;;17374:10;;17337:47;:::i;:::-;17305:8;:80::i;21130:269::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;21271:4:::1;21261:7;;:14;;;;:::i;:::-;21249:7;21238;21228;;:17;;;;:::i;:::-;21227:29;;;;:::i;:::-;:49;;21219:117;;;::::0;-1:-1:-1;;;21219:117:0;;15452:2:1;21219:117:0::1;::::0;::::1;15434:21:1::0;15491:2;15471:18;;;15464:30;15530:34;15510:18;;;15503:62;15601:25;15581:18;;;15574:53;15644:19;;21219:117:0::1;15250:419:1::0;21219:117:0::1;21384:7;21373;21363;;:17;;;;:::i;:::-;21362:29;;;;:::i;:::-;21347:12;:44:::0;-1:-1:-1;;21130:269:0:o;14117:590::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;-1:-1:-1;;;;;14198:22:0;::::1;14190:96;;;::::0;-1:-1:-1;;;14190:96:0;;15876:2:1;14190:96:0::1;::::0;::::1;15858:21:1::0;15915:2;15895:18;;;15888:30;15954:34;15934:18;;;15927:62;16025:31;16005:18;;;15998:59;16074:19;;14190:96:0::1;15674:425:1::0;14190:96:0::1;-1:-1:-1::0;;;;;14305:16:0;::::1;9562:42;14305:16;;14297:90;;;::::0;-1:-1:-1;;;14297:90:0;;15876:2:1;14297:90:0::1;::::0;::::1;15858:21:1::0;15915:2;15895:18;;;15888:30;15954:34;15934:18;;;15927:62;16025:31;16005:18;;;15998:59;16074:19;;14297:90:0::1;15674:425:1::0;14297:90:0::1;14418:6;::::0;;14398:34:::1;::::0;-1:-1:-1;;;;;14418:6:0;;::::1;::::0;14398:19:::1;:34::i;:::-;14443:35;14463:8;14473:4;14443:19;:35::i;:::-;14522:1;14512:6:::0;;-1:-1:-1;;;;;14512:6:0::1;16012:16:::0;;:7;:16;;;;;;14502:21;14499:99:::1;;14550:6;::::0;;-1:-1:-1;;;;;14550:6:0::1;16012:16:::0;;;:7;:16;;;;;;;14540:46:::1;::::0;14550:6;14558:8;;14540:9:::1;:46::i;14568:17::-;14540:9;:46::i;:::-;;14499:99;14618:6;:17:::0;;-1:-1:-1;;14618:17:0::1;-1:-1:-1::0;;;;;14618:17:0;::::1;::::0;;::::1;::::0;;14651:38:::1;::::0;14618:17;;;;14651:38:::1;::::0;14618:6;14651:38:::1;14117:590:::0;:::o;19839:104::-;19884:7;19911:9;;;;;;;;;-1:-1:-1;;;;;19911:9:0;-1:-1:-1;;;;;19911:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19182:134::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;-1:-1:-1;;;;;19270:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19270:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19182:134::o;19324:248::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;19408:16:::1;::::0;::::1;::::0;::::1;;;19407:17;19399:54;;;::::0;-1:-1:-1;;;19399:54:0;;16495:2:1;19399:54:0::1;::::0;::::1;16477:21:1::0;16534:2;16514:18;;;16507:30;16573:26;16553:18;;;16546:54;16617:18;;19399:54:0::1;16293:348:1::0;19399:54:0::1;-1:-1:-1::0;;;;;19472:28:0;::::1;19495:4;19472:28;;19464:55;;;::::0;-1:-1:-1;;;19464:55:0;;16848:2:1;19464:55:0::1;::::0;::::1;16830:21:1::0;16887:2;16867:18;;;16860:30;16926:16;16906:18;;;16899:44;16960:18;;19464:55:0::1;16646:338:1::0;19464:55:0::1;19530:9;:34:::0;;-1:-1:-1;;;;;19530:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;19324:248::o;21682:106::-;21770:9;;;21723:7;;21766:13;;21770:9;;;21766:13;:::i;:::-;21750:12;;:30;;;;:::i;14715:195::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;14802:6:::1;::::0;;14782:34:::1;::::0;-1:-1:-1;;;;;14802:6:0;;::::1;::::0;14782:19:::1;:34::i;:::-;14844:1;14827:19:::0;;-1:-1:-1;;14827:19:0::1;::::0;;14862:40:::1;::::0;14844:1;;14862:40:::1;::::0;14844:1;;14862:40:::1;14715:195::o:0;18238:500::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;18319:16;18315:416:::1;;-1:-1:-1::0;;;;;18352:13:0;;::::1;18368:5;18352:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;18352:21:0::1;::::0;;18388:9:::1;::::0;:32;;;;;::::1;::::0;::::1;17157:74:1::0;;;;17247:18;;;17240:50;;;;18388:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;17130:18:1;;18388:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18238:500:::0;;:::o;18315:416::-:1;18457:17;::::0;:22;18453:136:::1;;18546:6;18526:17;;18508:15;:35;;;;:::i;:::-;:44;18500:73;;;::::0;-1:-1:-1;;;18500:73:0;;17503:2:1;18500:73:0::1;::::0;::::1;17485:21:1::0;17542:2;17522:18;;;17515:30;17581:18;17561;;;17554:46;17617:18;;18500:73:0::1;17301:340:1::0;18500:73:0::1;-1:-1:-1::0;;;;;18603:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18603:20:0::1;18619:4;18603:20:::0;;::::1;::::0;;;18658:15:::1;18638:17;:35:::0;18688:9:::1;::::0;:31;;;;;::::1;::::0;::::1;17157:74:1::0;;;;17247:18;;;17240:50;18688:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;17130:18:1;;18688:31:0::1;16989:307:1::0;18315:416:0::1;18238:500:::0;;:::o;16705:173::-;16769:4;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;16818:9:::1;::::0;16786:62:::1;::::0;16803:4:::1;::::0;-1:-1:-1;;;;;16818:9:0::1;-1:-1:-1::0;;16786:8:0::1;:62::i;:::-;-1:-1:-1::0;16866:4:0::1;16705:173:::0;:::o;26499:429::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;26561:14:::1;::::0;::::1;;26560:15;26552:52;;;::::0;-1:-1:-1;;;26552:52:0;;17848:2:1;26552:52:0::1;::::0;::::1;17830:21:1::0;17887:2;17867:18;;;17860:30;17926:26;17906:18;;;17899:54;17970:18;;26552:52:0::1;17646:348:1::0;26552:52:0::1;26623:16;::::0;::::1;::::0;::::1;;;26615:53;;;::::0;-1:-1:-1;;;26615:53:0;;18201:2:1;26615:53:0::1;::::0;::::1;18183:21:1::0;18240:2;18220:18;;;18213:30;18279:26;18259:18;;;18252:54;18323:18;;26615:53:0::1;17999:348:1::0;26615:53:0::1;26690:9;::::0;;;::::1;-1:-1:-1::0;;;;;26690:9:0::1;26679:99;;26730:9;:36:::0;;;::::1;26760:4;26730:36:::0;::::1;;::::0;;26679:99:::1;26792:9;::::0;26812:6:::1;::::0;26867:9:::1;::::0;26792:85:::1;::::0;;;;-1:-1:-1;;;;;26812:6:0;;::::1;26792:85;::::0;::::1;18575:74:1::0;18697:10;26827:12:0::1;18685:23:1::0;18665:18;;;18658:51;18757:18;26849:15:0::1;18745:31:1::0;18725:18;;;18718:59;26867:9:0::1;::::0;;::::1;18793:18:1::0;;;18786:45;26792:9:0;;;::::1;;::::0;:19:::1;::::0;18547::1;;26792:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;26788:101:::0;26899:14:::1;:21:::0;;-1:-1:-1;;26899:21:0::1;26916:4;26899:21;::::0;;26499:429::o;15516:84::-;15566:13;15590:7;15583:14;;;;;:::i;17423:225::-;189:10;17516:4;17565:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17565:34:0;;;;;;;;;;17516:4;;17533:85;;17556:7;;17565:52;;17602:15;;17565:52;:::i;16044:167::-;16122:4;16139:42;189:10;16163:9;16174:6;16139:9;:42::i;:::-;-1:-1:-1;16199:4:0;;16044:167;-1:-1:-1;;;16044:167:0:o;20866:256::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;20963:7:::1;:29:::0;;::::1;21043:17:::0;;::::1;::::0;::::1;::::0;21003:29;;::::1;::::0;::::1;::::0;;;;20963;;::::1;21003::::0;;;;;;;::::1;21043:17;;::::0;;21057:3;21087:21:::1;21023:9:::0;20983;21087:21:::1;:::i;:::-;:27;;;;:::i;:::-;21071:7;:43:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;20866:256:0:o;19580:118::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;19654:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;370:55:1;;;19654:36:0::1;::::0;::::1;352:74:1::0;19654:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;325:18:1;;19654:36:0::1;206:226:1::0;22410:165:0;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;22485:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;22485:30:0;;::::1;;::::0;;22531:36:::1;::::0;::::1;::::0;::::1;::::0;22507:8;179:14:1;172:22;154:41;;142:2;127:18;;14:187;22531:36:0::1;;;;;;;;22410:165:::0;:::o;22213:189::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;22311:11:::1;:42:::0;;-1:-1:-1;;;;;22311:42:0;;::::1;-1:-1:-1::0;;22311:42:0;;::::1;;::::0;;;22364:15;:30;;;;;::::1;::::0;::::1;;::::0;;22213:189::o;11526:1915::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;11665:19:::1;::::0;;;::::1;;;11664:20;11656:34;;;::::0;-1:-1:-1;;;11656:34:0;;19273:2:1;11656:34:0::1;::::0;::::1;19255:21:1::0;19312:1;19292:18;;;19285:29;19350:3;19330:18;;;19323:31;19371:18;;11656:34:0::1;19071:324:1::0;11656:34:0::1;11727:3;11709:8;:15;:21;11701:35;;;::::0;-1:-1:-1;;;11701:35:0;;19602:2:1;11701:35:0::1;::::0;::::1;19584:21:1::0;19641:1;19621:18;;;19614:29;19679:3;19659:18;;;19652:31;19700:18;;11701:35:0::1;19400:324:1::0;11701:35:0::1;11774:7;:14;11755:8;:15;:33;11747:47;;;::::0;-1:-1:-1;;;11747:47:0;;19931:2:1;11747:47:0::1;::::0;::::1;19913:21:1::0;19970:1;19950:18;;;19943:29;20008:3;19988:18;;;19981:31;20029:18;;11747:47:0::1;19729:324:1::0;11747:47:0::1;11822:17;11805:14;:34:::0;11850:9:::1;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;11850:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;11905:9;;::::1;;11894:99;;11945:9;:36:::0;;;::::1;11975:4;11945:36:::0;::::1;;::::0;;11894:99:::1;12007:9;::::0;:33:::1;::::0;;;;12034:4:::1;12007:33;::::0;::::1;352:74:1::0;12007:9:0;;;::::1;-1:-1:-1::0;;;;;12007:9:0::1;::::0;:18:::1;::::0;325::1;;12007:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12003:49:::0;12083:11:::1;12066:14;;:28;12062:121;;;12111:9;:14:::0;;-1:-1:-1;;12111:14:0::1;12123:2;12111:14;::::0;;12062:121:::1;;;12158:9;:13:::0;;-1:-1:-1;;12158:13:0::1;12170:1;12158:13;::::0;;12062:121:::1;12225:9;::::0;;12221:13:::1;::::0;12225:9:::1;::::0;;::::1;::::0;12221:13:::1;:::i;:::-;12203:14;;:32;;;;:::i;:::-;12193:7;:42:::0;12246:16:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:5:::1;::::0;:16:::1;:::i;:::-;-1:-1:-1::0;12273:15:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:15:::1;:::i;:::-;-1:-1:-1::0;12330:13:0::1;::::0;12299:9:::1;:45:::0;;-1:-1:-1;;12299:45:0::1;-1:-1:-1::0;;;;;12330:13:0;;::::1;12299:45:::0;;::::1;::::0;;12382:19:::1;::::0;;;;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;12330:13;12382:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12364:49:0::1;;12414:9;;;;;;;;;-1:-1:-1::0;;;;;12414:9:0::1;-1:-1:-1::0;;;;;12414:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12364:82;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9983:15:1;;;12364:82:0::1;::::0;::::1;9965:34:1::0;12440:4:0::1;10015:18:1::0;;;10008:43;9877:18;;12364:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12355:6;:91:::0;;-1:-1:-1;;12355:91:0::1;-1:-1:-1::0;;;;;12355:91:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;12457:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;12457:22:0::1;-1:-1:-1::0;12457:22:0::1;::::0;;12506:7:::1;::::0;12521:4:::1;::::0;12506:11:::1;::::0;12516:1:::1;12506:11;:::i;:::-;12505:20;;;;:::i;:::-;12490:12;:35:::0;12554:7:::1;::::0;12570:4:::1;::::0;12554:12:::1;::::0;12564:2:::1;12554:12;:::i;:::-;12553:21;;;;:::i;:::-;12536:14;:38:::0;12602:7:::1;::::0;12617:5:::1;::::0;12602:11:::1;::::0;12612:1:::1;12602:11;:::i;:::-;12601:21;;;;:::i;:::-;12585:13;:37:::0;12647:7:::1;::::0;12662:5:::1;::::0;12647:11:::1;::::0;12657:1:::1;12647:11;:::i;:::-;12646:21;;;;:::i;:::-;12633:10;:34:::0;12678:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;12739:7:::1;::::0;12700:4:::1;12678:26:::0;12728:7:::1;14068::::0;14095:6;-1:-1:-1;;;;;14095:6:0;;14030:79;12728:7:::1;-1:-1:-1::0;;;;;12720:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12720:16:0;:26;12783:7:::1;14068::::0;14095:6;-1:-1:-1;;;;;14095:6:0;;14030:79;12783:7:::1;-1:-1:-1::0;;;;;12762:38:0::1;12779:1;-1:-1:-1::0;;;;;12762:38:0::1;;12792:7;;12762:38;;;;2674:25:1::0;;2662:2;2647:18;;2528:177;12762:38:0::1;;;;;;;;12845:9;::::0;12813:62:::1;::::0;12830:4:::1;::::0;-1:-1:-1;;;;;12845:9:0::1;-1:-1:-1::0;;12813:8:0::1;:62::i;:::-;12892:9;12888:168;12911:8;:15;12907:1;:19;12888:168;;;12981:9;::::0;;12947:14:::1;::::0;12977:13:::1;::::0;12981:9:::1;;::::0;12977:13:::1;:::i;:::-;12964:7;12972:1;12964:10;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;12947:43;;13005:39;13015:7;14068::::0;14095:6;-1:-1:-1;;;;;14095:6:0;;14030:79;13015:7:::1;13024:8;13033:1;13024:11;;;;;;;;:::i;:::-;;;;;;;13037:6;13005:9;:39::i;:::-;;12932:124;12928:3;;;;;:::i;:::-;;;;12888:168;;;;13068:53;13078:7;14068::::0;14095:6;-1:-1:-1;;;;;14095:6:0;;14030:79;13078:7:::1;13095:4;13102:18;13112:7;14068::::0;14095:6;-1:-1:-1;;;;;14095:6:0;;14030:79;13068:53:::1;-1:-1:-1::0;13134:9:0::1;::::0;-1:-1:-1;;;;;13134:9:0::1;:25;13167:21;13212:4;13232:24;13212:4:::0;-1:-1:-1;;;;;16012:16:0;15985:7;16012:16;;;:7;:16;;;;;;;15919:117;13232:24:::1;13271:1;13314::::0;13357:7:::1;14068::::0;14095:6;-1:-1:-1;;;;;14095:6:0;;14030:79;13357:7:::1;13134:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;21417:15:1;;;13134:271:0::1;::::0;::::1;21399:34:1::0;21449:18;;;21442:34;;;;21492:18;;;21485:34;;;;21535:18;;;21528:34;21599:15;;;21578:19;;;21571:44;13379:15:0::1;21631:19:1::0;;;21624:35;21310:19;;13134:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13418:15;:13;:15::i;:::-;11526:1915:::0;;;:::o;17656:574::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;17727:29:::1;17778:9;17727:61;;17799:16;17836:10;-1:-1:-1::0;;;;;17836:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17818:47:0::1;;17874:4;17881:10;-1:-1:-1::0;;;;;17881:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17818:81;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9983:15:1;;;17818:81:0::1;::::0;::::1;9965:34:1::0;10035:15;;10015:18;;;10008:43;9877:18;;17818:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17799:100:::0;-1:-1:-1;;;;;;17914:22:0;::::1;17910:207;;17980:10;-1:-1:-1::0;;;;;17980:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17962:50:0::1;;18021:4;18028:10;-1:-1:-1::0;;;;;18028:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17962:84;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;9983:15:1;;;17962:84:0::1;::::0;::::1;9965:34:1::0;10035:15;;10015:18;;;10008:43;9877:18;;17962:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17953:6;:93:::0;;-1:-1:-1;;17953:93:0::1;-1:-1:-1::0;;;;;17953:93:0;;;::::1;::::0;;;::::1;::::0;;17910:207:::1;;;18088:6;:17:::0;;-1:-1:-1;;18088:17:0::1;-1:-1:-1::0;;;;;18088:17:0;::::1;;::::0;;17910:207:::1;18127:9;:22:::0;;-1:-1:-1;;18127:22:0::1;-1:-1:-1::0;;;;;18127:22:0;::::1;::::0;;::::1;::::0;;;18160:62:::1;::::0;18177:4:::1;::::0;-1:-1:-1;;18160:8:0::1;:62::i;26936:183::-:0;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;27003:16:::1;::::0;::::1;::::0;::::1;;;27002:17;26994:58;;;::::0;-1:-1:-1;;;26994:58:0;;22183:2:1;26994:58:0::1;::::0;::::1;22165:21:1::0;22222:2;22202:18;;;22195:30;22261;22241:18;;;22234:58;22309:18;;26994:58:0::1;21981:352:1::0;26994:58:0::1;14068:7:::0;14095:6;;27063:48:::1;::::0;-1:-1:-1;;;;;14095:6:0;;;;27089:21:::1;27063:48:::0;::::1;;;::::0;27089:21;;27063:48;14068:7;27063:48;27089:21;14095:6;27063:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26936:183::o:0;21916:289::-;10826:6;;-1:-1:-1;;;;;10826:6:0;189:10;10826:22;10818:52;;;;-1:-1:-1;;;10818:52:0;;11096:2:1;10818:52:0;;;11078:21:1;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:1;;;11147:47;11211:18;;10818:52:0;10894:341:1;10818:52:0;22116:16:::1;22096;22086:7;;:26;;;;:::i;:::-;22085:47;;;;:::i;:::-;22069:13;:63:::0;22157:7:::1;::::0;22184:13;;22157:23:::1;::::0;22167:13;;22157:23:::1;:::i;:::-;22156:41;;;;:::i;:::-;22143:10;:54:::0;-1:-1:-1;;;;21916:289:0:o;19706:125::-;19791:9;;:32;;;;;-1:-1:-1;;;;;370:55:1;;;19791:32:0;;;352:74:1;19767:4:0;;19791:9;;;;;:23;;325:18:1;;19791:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16388:309::-;-1:-1:-1;;;;;16482:20:0;;16474:52;;;;-1:-1:-1;;;16474:52:0;;22790:2:1;16474:52:0;;;22772:21:1;22829:2;22809:18;;;22802:30;22868:21;22848:18;;;22841:49;22907:18;;16474:52:0;22588:343:1;16474:52:0;-1:-1:-1;;;;;16545:21:0;;16537:53;;;;-1:-1:-1;;;16537:53:0;;22790:2:1;16537:53:0;;;22772:21:1;22829:2;22809:18;;;22802:30;22868:21;22848:18;;;22841:49;22907:18;;16537:53:0;22588:343:1;16537:53:0;-1:-1:-1;;;;;16603:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;16656:33;;2674:25:1;;;16656:33:0;;2647:18:1;16656:33:0;;;;;;;16388:309;;;:::o;22914:1470::-;22993:4;-1:-1:-1;;;;;23018:18:0;;23010:68;;;;-1:-1:-1;;;23010:68:0;;23138:2:1;23010:68:0;;;23120:21:1;23177:2;23157:18;;;23150:30;23216:34;23196:18;;;23189:62;23287:7;23267:18;;;23260:35;23312:19;;23010:68:0;22936:401:1;23010:68:0;-1:-1:-1;;;;;23097:16:0;;23089:64;;;;-1:-1:-1;;;23089:64:0;;23544:2:1;23089:64:0;;;23526:21:1;23583:2;23563:18;;;23556:30;23622:34;23602:18;;;23595:62;23693:5;23673:18;;;23666:33;23716:19;;23089:64:0;23342:399:1;23089:64:0;23181:1;23172:6;:10;23164:64;;;;-1:-1:-1;;;23164:64:0;;23948:2:1;23164:64:0;;;23930:21:1;23987:2;23967:18;;;23960:30;24026:34;24006:18;;;23999:62;24097:11;24077:18;;;24070:39;24126:19;;23164:64:0;23746:405:1;23164:64:0;23242:20;23253:4;23259:2;23242:10;:20::i;:::-;23239:480;;;23283:14;;;;23279:89;;23318:34;;-1:-1:-1;;;23318:34:0;;24358:2:1;23318:34:0;;;24340:21:1;24397:2;24377:18;;;24370:30;24436:26;24416:18;;;24409:54;24480:18;;23318:34:0;24156:348:1;23279:89:0;-1:-1:-1;;;;;23385:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;23402:11:0;;;;;;:7;:11;;;;;;;;23385:28;23382:142;;;23451:12;;23441:6;:22;;23433:75;;;;-1:-1:-1;;;23433:75:0;;24711:2:1;23433:75:0;;;24693:21:1;24750:2;24730:18;;;24723:30;24789:34;24769:18;;;24762:62;24860:10;24840:18;;;24833:38;24888:19;;23433:75:0;24509:404:1;23433:75:0;23547:13;;-1:-1:-1;;;;;23541:19:0;;;23547:13;;23541:19;;;;:35;;-1:-1:-1;;;;;;23565:11:0;;;;;;:7;:11;;;;;;;;23564:12;23541:35;23538:170;;;23631:14;;23621:6;23605:13;23615:2;-1:-1:-1;;;;;16012:16:0;15985:7;16012:16;;;:7;:16;;;;;;;15919:117;23605:13;:22;;;;:::i;:::-;:40;;23597:95;;;;-1:-1:-1;;;23597:95:0;;25120:2:1;23597:95:0;;;25102:21:1;25159:2;25139:18;;;25132:30;25198:34;25178:18;;;25171:62;25269:12;25249:18;;;25242:40;25299:19;;23597:95:0;24918:406:1;23597:95:0;-1:-1:-1;;;;;23764:25:0;;23731:12;23764:25;;;:19;:25;;;;;;23746:4;;23764:25;;;:52;;-1:-1:-1;;;;;;23793:23:0;;;;;;:19;:23;;;;;;;;23764:52;23761:98;;;-1:-1:-1;23842:5:0;23761:98;-1:-1:-1;;;;;23875:11:0;;;;;;:7;:11;;;;;;;;23871:443;;;23908:6;;;;23907:7;:47;;;;-1:-1:-1;23935:19:0;;;;;;;23907:47;23903:394;;;24038:4;23989:28;16012:16;;;:7;:16;;;;;;24091:13;;24067:37;;24063:219;;24156:10;;24132:20;:34;24129:77;;-1:-1:-1;24193:10:0;;24129:77;24228:34;24241:20;24228:12;:34::i;:::-;23970:327;23903:394;24332:44;24350:4;24356:2;24360:6;24368:7;24332:17;:44::i;:::-;24325:51;22914:1470;-1:-1:-1;;;;;22914:1470:0:o;22583:323::-;22651:4;14095:6;;-1:-1:-1;;;;;22675:15:0;;;14095:6;;22675:15;;;;:45;;-1:-1:-1;14068:7:0;14095:6;-1:-1:-1;;;;;22707:13:0;;;14095:6;;22707:13;;22675:45;:84;;;;-1:-1:-1;;;;;;22738:21:0;;;;;;:17;:21;;;;;;;;22737:22;22675:84;:125;;;;-1:-1:-1;;;;;;22777:23:0;;;;;;:17;:23;;;;;;;;22776:24;22675:125;:152;;;;-1:-1:-1;;;;;;22817:10:0;;9562:42;22817:10;;22675:152;:185;;;;-1:-1:-1;;;;;;22844:16:0;;;;22675:185;:223;;;;-1:-1:-1;;;;;;22877:21:0;;22893:4;22877:21;;22675:223;22668:230;22583:323;-1:-1:-1;;;22583:323:0:o;24392:1583::-;10720:6;:13;;-1:-1:-1;;10720:13:0;10729:4;10720:13;;;24479:7:::1;:13:::0;::::1;::::0;;;::::1;;24475:44;;24512:7;;24475:44;24554:4;24534:26;::::0;;;:11:::1;:26;::::0;;;;;;;24569:9:::1;::::0;-1:-1:-1;;;;;24569:9:0::1;24534:46:::0;;;;;;;;-1:-1:-1;;24534:67:0::1;24531:165;;24638:4;24618:26;::::0;;;:11:::1;:26;::::0;;;;;;;24653:9:::1;::::0;-1:-1:-1;;;;;24653:9:0::1;24618:46:::0;;;;;;;-1:-1:-1;;24618:66:0;;24531:165:::1;24774:7;:13:::0;24708:17:::1;::::0;24791:1:::1;::::0;24774:13:::1;::::0;;::::1;::::0;::::1;::::0;24730:40:::1;::::0;24753:17:::1;24730:20:::0;:40:::1;:::i;:::-;24729:58;;;;:::i;:::-;24728:64;;;;:::i;:::-;24837:16;::::0;;24851:1:::1;24837:16:::0;;;;;::::1;::::0;;24708:84;;-1:-1:-1;24813:21:0::1;::::0;24837:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24837:16:0::1;24813:40;;24882:4;24864;24869:1;24864:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24864:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24908:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;24864:7;;24908:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24898:4;24903:1;24898:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24898:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24937:9:::1;::::0;::::1;:60;25012:32;25035:9:::0;25012:20;:32:::1;:::i;:::-;25059:1;25103:4;25130;25150:15;24937:239;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25263:7:0::1;:13:::0;25189:24:::1;::::0;-1:-1:-1;25280:1:0::1;::::0;-1:-1:-1;25263:13:0::1;::::0;;::::1;::::0;::::1;::::0;25218:41:::1;::::0;25242:17:::1;25218:21;:41;:::i;:::-;25217:59;;;;:::i;:::-;25216:65;;;;:::i;:::-;25189:92:::0;-1:-1:-1;25298:13:0;;25294:396:::1;;25328:9;::::0;:276:::1;::::0;;;;25405:4:::1;25328:276;::::0;::::1;21399:34:1::0;21449:18;;;21442:34;;;25328:9:0::1;21492:18:1::0;;;21485:34;;;21535:18;;;21528:34;9562:42:0::1;21578:19:1::0;;;21571:44;25574:15:0::1;21631:19:1::0;;;21624:35;-1:-1:-1;;;;;25328:9:0;;::::1;::::0;:25:::1;::::0;25361:16;;21310:19:1;;25328:276:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25624:54:0::1;::::0;;26562:25:1;;;26618:2;26603:18;;26596:34;;;26646:18;;;26639:34;;;25624:54:0::1;::::0;-1:-1:-1;26550:2:1;26535:18;25624:54:0::1;;;;;;;25294:396;25728:1;25704:21;:25;:66;;;;-1:-1:-1::0;25749:7:0::1;:17:::0;25769:1:::1;::::0;25733:33:::1;::::0;25749:17:::1;::::0;;::::1;::::0;25733:13;;::::1;;:33;:::i;:::-;:37;;;25704:66;25700:268;;;25787:15:::0;;25869:7:::1;:17:::0;-1:-1:-1;;;;;25787:15:0;;::::1;::::0;:101:::1;::::0;25853:33:::1;::::0;25869:17:::1;::::0;;::::1;::::0;25853:13;;::::1;;:33;:::i;:::-;25837:7;:11:::0;25812:75:::1;::::0;;::::1;::::0;25813:35:::1;::::0;25837:11;;::::1;;25813:21;:35;:::i;:::-;25812:75;;;;:::i;:::-;25787:101;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25903:11:0::1;:21:::0;:53:::1;::::0;-1:-1:-1;;;;;25903:21:0;;::::1;::::0;25934::::1;25903:53:::0;::::1;;;::::0;:21:::1;:53:::0;:21;:53;25934:21;25903;:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25700:268;24464:1511;;;10744:1;-1:-1:-1::0;10756:6:0;:14;;-1:-1:-1;;10756:14:0;;;24392:1583::o;27127:905::-;27249:16;;27227:4;;27249:16;;;;;27244:221;;27282:28;27301:4;27307:2;27282:18;:28::i;:::-;27330:16;;;;;;;27329:17;:41;;;;;27350:20;27361:4;27367:2;27350:10;:20::i;:::-;27325:129;;;27391:47;;-1:-1:-1;;;27391:47:0;;27108:2:1;27391:47:0;;;27090:21:1;27147:2;27127:18;;;27120:30;27186:34;27166:18;;;27159:62;27257:7;27237:18;;;27230:35;27282:19;;27391:47:0;26906:401:1;27325:129:0;27481:20;27492:4;27498:2;27481:10;:20::i;:::-;27477:314;;;27549:9;;:37;;;;;-1:-1:-1;;;;;27593:15:1;;;27549:37:0;;;27575:34:1;27645:15;;;27625:18;;;27618:43;27677:18;;;27670:34;;;27518:12:0;;27549:9;;;;;:19;;27487:18:1;;27549:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27549:37:0;;;;;;;;-1:-1:-1;;27549:37:0;;;;;;;;;;;;:::i;:::-;;;27545:163;;27684:8;;;27545:163;27637:5;-1:-1:-1;27728:7:0;27724:56;;27756:8;;;27724:56;27503:288;27477:314;-1:-1:-1;;;;;27803:13:0;;;;;;:7;:13;;;;;:23;;27820:6;;27803:13;:23;;27820:6;;27803:23;:::i;:::-;;;;-1:-1:-1;27837:22:0;;-1:-1:-1;27863:7:0;27862:48;;27904:6;27862:48;;;27874:27;27884:4;27890:2;27894:6;27874:9;:27::i;:::-;-1:-1:-1;;;;;27921:11:0;;;;;;:7;:11;;;;;:29;;27837:73;;-1:-1:-1;27837:73:0;;27921:11;;;:29;;27837:73;;27921:29;:::i;:::-;;;;;;;;27983:2;-1:-1:-1;;;;;27968:34:0;27977:4;-1:-1:-1;;;;;27968:34:0;;27987:14;27968:34;;;;2674:25:1;;2662:2;2647:18;;2528:177;27968:34:0;;;;;;;;-1:-1:-1;28020:4:0;;27127:905;-1:-1:-1;;;;;27127:905:0:o;25983:508::-;26065:16;;;;;;;26064:17;26056:65;;;;-1:-1:-1;;;26056:65:0;;27917:2:1;26056:65:0;;;27899:21:1;27956:2;27936:18;;;27929:30;27995:34;27975:18;;;27968:62;28066:5;28046:18;;;28039:33;28089:19;;26056:65:0;27715:399:1;26056:65:0;26137:20;26148:4;26154:2;26137:10;:20::i;:::-;26136:21;:37;;;;-1:-1:-1;26167:6:0;;-1:-1:-1;;;;;26161:12:0;;;26167:6;;26161:12;26136:37;26132:352;;;-1:-1:-1;;;;;26190:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;26190:30:0;26216:4;26190:30;;;26235:16;:23;;-1:-1:-1;;26235:23:0;26190:30;26235:23;;;;;26284:9;;;;26273:107;;26328:9;:36;;;;26358:4;26328:36;;;;;26273:107;26394:19;:26;;-1:-1:-1;;26394:26:0;;;;;26440:32;;-1:-1:-1;154:41:1;;26440:32:0;;142:2:1;127:18;26440:32:0;;;;;;;25983:508;;:::o;28040:583::-;28180:6;;28119:7;;;;-1:-1:-1;;;;;28172:14:0;;;28180:6;;28172:14;28168:224;;;-1:-1:-1;28216:9:0;:16;;;28168:224;;;28260:6;;-1:-1:-1;;;;;28254:12:0;;;28260:6;;28254:12;28250:142;;;-1:-1:-1;28296:9:0;:17;;;;;;28250:142;;;-1:-1:-1;28359:9:0;:21;;;;;;28250:142;28446:10;:27;28404:17;;28446:27;;;;;28424:19;28433:10;28424:6;:19;:::i;:::-;:49;;;;:::i;:::-;28502:4;28486:22;;;;:7;:22;;;;;:35;;28404:69;;-1:-1:-1;28404:69:0;;28486:22;;;:35;;28404:69;;28486:35;:::i;:::-;;;;-1:-1:-1;;28537:40:0;;2674:25:1;;;28560:4:0;;-1:-1:-1;;;;;28537:40:0;;;;;2662:2:1;2647:18;28537:40:0;;;;;;;28597:18;28606:9;28597:6;:18;:::i;:::-;28590:25;28040:583;-1:-1:-1;;;;;;28040:583:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;807:656:1;919:4;948:2;977;966:9;959:21;1009:6;1003:13;1052:6;1047:2;1036:9;1032:18;1025:34;1077:1;1087:140;1101:6;1098:1;1095:13;1087:140;;;1196:14;;;1192:23;;1186:30;1162:17;;;1181:2;1158:26;1151:66;1116:10;;1087:140;;;1245:6;1242:1;1239:13;1236:91;;;1315:1;1310:2;1301:6;1290:9;1286:22;1282:31;1275:42;1236:91;-1:-1:-1;1379:2:1;1367:15;-1:-1:-1;;1363:88:1;1348:104;;;;1454:2;1344:113;;807:656;-1:-1:-1;;;807:656:1:o;1725:180::-;1784:6;1837:2;1825:9;1816:7;1812:23;1808:32;1805:52;;;1853:1;1850;1843:12;1805:52;-1:-1:-1;1876:23:1;;1725:180;-1:-1:-1;1725:180:1:o;1910:154::-;-1:-1:-1;;;;;1989:5:1;1985:54;1978:5;1975:65;1965:93;;2054:1;2051;2044:12;2069:134;2137:20;;2166:31;2137:20;2166:31;:::i;:::-;2069:134;;;:::o;2208:315::-;2276:6;2284;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;2392:9;2379:23;2411:31;2436:5;2411:31;:::i;:::-;2461:5;2513:2;2498:18;;;;2485:32;;-1:-1:-1;;;2208:315:1:o;3159:456::-;3236:6;3244;3252;3305:2;3293:9;3284:7;3280:23;3276:32;3273:52;;;3321:1;3318;3311:12;3273:52;3360:9;3347:23;3379:31;3404:5;3379:31;:::i;:::-;3429:5;-1:-1:-1;3486:2:1;3471:18;;3458:32;3499:33;3458:32;3499:33;:::i;:::-;3159:456;;3551:7;;-1:-1:-1;;;3605:2:1;3590:18;;;;3577:32;;3159:456::o;3620:248::-;3688:6;3696;3749:2;3737:9;3728:7;3724:23;3720:32;3717:52;;;3765:1;3762;3755:12;3717:52;-1:-1:-1;;3788:23:1;;;3858:2;3843:18;;;3830:32;;-1:-1:-1;3620:248:1:o;3873:118::-;3959:5;3952:13;3945:21;3938:5;3935:32;3925:60;;3981:1;3978;3971:12;3996:647;4070:6;4078;4086;4094;4147:3;4135:9;4126:7;4122:23;4118:33;4115:53;;;4164:1;4161;4154:12;4115:53;4203:9;4190:23;4222:28;4244:5;4222:28;:::i;:::-;4269:5;-1:-1:-1;4326:2:1;4311:18;;4298:32;4339:30;4298:32;4339:30;:::i;:::-;4388:7;-1:-1:-1;4447:2:1;4432:18;;4419:32;4460:30;4419:32;4460:30;:::i;:::-;4509:7;-1:-1:-1;4568:2:1;4553:18;;4540:32;4581:30;4540:32;4581:30;:::i;:::-;3996:647;;;;-1:-1:-1;3996:647:1;;-1:-1:-1;;3996:647:1:o;4837:159::-;4904:20;;4964:6;4953:18;;4943:29;;4933:57;;4986:1;4983;4976:12;5001:328;5075:6;5083;5091;5144:2;5132:9;5123:7;5119:23;5115:32;5112:52;;;5160:1;5157;5150:12;5112:52;5183:28;5201:9;5183:28;:::i;:::-;5173:38;;5230:37;5263:2;5252:9;5248:18;5230:37;:::i;:::-;5220:47;;5286:37;5319:2;5308:9;5304:18;5286:37;:::i;:::-;5276:47;;5001:328;;;;;:::o;5334:247::-;5393:6;5446:2;5434:9;5425:7;5421:23;5417:32;5414:52;;;5462:1;5459;5452:12;5414:52;5501:9;5488:23;5520:31;5545:5;5520:31;:::i;5586:382::-;5651:6;5659;5712:2;5700:9;5691:7;5687:23;5683:32;5680:52;;;5728:1;5725;5718:12;5680:52;5767:9;5754:23;5786:31;5811:5;5786:31;:::i;:::-;5836:5;-1:-1:-1;5893:2:1;5878:18;;5865:32;5906:30;5865:32;5906:30;:::i;:::-;5955:7;5945:17;;;5586:382;;;;;:::o;5973:241::-;6029:6;6082:2;6070:9;6061:7;6057:23;6053:32;6050:52;;;6098:1;6095;6088:12;6050:52;6137:9;6124:23;6156:28;6178:5;6156:28;:::i;6219:404::-;6303:6;6311;6364:2;6352:9;6343:7;6339:23;6335:32;6332:52;;;6380:1;6377;6370:12;6332:52;6419:9;6406:23;6438:31;6463:5;6438:31;:::i;:::-;6488:5;-1:-1:-1;6545:2:1;6530:18;;6517:32;6558:33;6517:32;6558:33;:::i;7021:184::-;7073:77;7070:1;7063:88;7170:4;7167:1;7160:15;7194:4;7191:1;7184:15;7210:334;7281:2;7275:9;7337:2;7327:13;;-1:-1:-1;;7323:86:1;7311:99;;7440:18;7425:34;;7461:22;;;7422:62;7419:88;;;7487:18;;:::i;:::-;7523:2;7516:22;7210:334;;-1:-1:-1;7210:334:1:o;7549:183::-;7609:4;7642:18;7634:6;7631:30;7628:56;;;7664:18;;:::i;:::-;-1:-1:-1;7709:1:1;7705:14;7721:4;7701:25;;7549:183::o;7737:662::-;7791:5;7844:3;7837:4;7829:6;7825:17;7821:27;7811:55;;7862:1;7859;7852:12;7811:55;7898:6;7885:20;7924:4;7948:60;7964:43;8004:2;7964:43;:::i;:::-;7948:60;:::i;:::-;8042:15;;;8128:1;8124:10;;;;8112:23;;8108:32;;;8073:12;;;;8152:15;;;8149:35;;;8180:1;8177;8170:12;8149:35;8216:2;8208:6;8204:15;8228:142;8244:6;8239:3;8236:15;8228:142;;;8310:17;;8298:30;;8348:12;;;;8261;;8228:142;;;-1:-1:-1;8388:5:1;7737:662;-1:-1:-1;;;;;;7737:662:1:o;8404:1289::-;8531:6;8539;8547;8600:2;8588:9;8579:7;8575:23;8571:32;8568:52;;;8616:1;8613;8606:12;8568:52;8656:9;8643:23;8685:18;8726:2;8718:6;8715:14;8712:34;;;8742:1;8739;8732:12;8712:34;8780:6;8769:9;8765:22;8755:32;;8825:7;8818:4;8814:2;8810:13;8806:27;8796:55;;8847:1;8844;8837:12;8796:55;8883:2;8870:16;8905:4;8929:60;8945:43;8985:2;8945:43;:::i;8929:60::-;9023:15;;;9105:1;9101:10;;;;9093:19;;9089:28;;;9054:12;;;;9129:19;;;9126:39;;;9161:1;9158;9151:12;9126:39;9185:11;;;;9205:217;9221:6;9216:3;9213:15;9205:217;;;9301:3;9288:17;9318:31;9343:5;9318:31;:::i;:::-;9362:18;;9238:12;;;;9400;;;;9205:217;;;9441:5;-1:-1:-1;;9484:18:1;;9471:32;;-1:-1:-1;;9515:16:1;;;9512:36;;;9544:1;9541;9534:12;9512:36;;9567:63;9622:7;9611:8;9600:9;9596:24;9567:63;:::i;:::-;9557:73;;;9649:38;9683:2;9672:9;9668:18;9649:38;:::i;10062:385::-;10148:6;10156;10164;10172;10225:3;10213:9;10204:7;10200:23;10196:33;10193:53;;;10242:1;10239;10232:12;10193:53;-1:-1:-1;;10265:23:1;;;10335:2;10320:18;;10307:32;;-1:-1:-1;10386:2:1;10371:18;;10358:32;;10437:2;10422:18;10409:32;;-1:-1:-1;10062:385:1;-1:-1:-1;10062:385:1:o;10452:437::-;10531:1;10527:12;;;;10574;;;10595:61;;10649:4;10641:6;10637:17;10627:27;;10595:61;10702:2;10694:6;10691:14;10671:18;10668:38;10665:218;;;10739:77;10736:1;10729:88;10840:4;10837:1;10830:15;10868:4;10865:1;10858:15;10665:218;;10452:437;;;:::o;11576:184::-;11628:77;11625:1;11618:88;11725:4;11722:1;11715:15;11749:4;11746:1;11739:15;11765:482;11854:1;11897:5;11854:1;11911:330;11932:7;11922:8;11919:21;11911:330;;;12051:4;-1:-1:-1;;11979:77:1;11973:4;11970:87;11967:113;;;12060:18;;:::i;:::-;12110:7;12100:8;12096:22;12093:55;;;12130:16;;;;12093:55;12209:22;;;;12169:15;;;;11911:330;;;11915:3;11765:482;;;;;:::o;12252:866::-;12301:5;12331:8;12321:80;;-1:-1:-1;12372:1:1;12386:5;;12321:80;12420:4;12410:76;;-1:-1:-1;12457:1:1;12471:5;;12410:76;12502:4;12520:1;12515:59;;;;12588:1;12583:130;;;;12495:218;;12515:59;12545:1;12536:10;;12559:5;;;12583:130;12620:3;12610:8;12607:17;12604:43;;;12627:18;;:::i;:::-;-1:-1:-1;;12683:1:1;12669:16;;12698:5;;12495:218;;12797:2;12787:8;12784:16;12778:3;12772:4;12769:13;12765:36;12759:2;12749:8;12746:16;12741:2;12735:4;12732:12;12728:35;12725:77;12722:159;;;-1:-1:-1;12834:19:1;;;12866:5;;12722:159;12913:34;12938:8;12932:4;12913:34;:::i;:::-;13043:6;-1:-1:-1;;12971:79:1;12962:7;12959:92;12956:118;;;13054:18;;:::i;:::-;13092:20;;12252:866;-1:-1:-1;;;12252:866:1:o;13123:140::-;13181:5;13210:47;13251:4;13241:8;13237:19;13231:4;13210:47;:::i;13268:274::-;13308:1;13334;13324:189;;13369:77;13366:1;13359:88;13470:4;13467:1;13460:15;13498:4;13495:1;13488:15;13324:189;-1:-1:-1;13527:9:1;;13268:274::o;13547:125::-;13587:4;13615:1;13612;13609:8;13606:34;;;13620:18;;:::i;:::-;-1:-1:-1;13657:9:1;;13547:125::o;13677:228::-;13717:7;13843:1;-1:-1:-1;;13771:74:1;13768:1;13765:81;13760:1;13753:9;13746:17;13742:105;13739:131;;;13850:18;;:::i;:::-;-1:-1:-1;13890:9:1;;13677:228::o;14765:128::-;14805:3;14836:1;14832:6;14829:1;14826:13;14823:39;;;14842:18;;:::i;:::-;-1:-1:-1;14878:9:1;;14765:128::o;16104:184::-;16174:6;16227:2;16215:9;16206:7;16202:23;16198:32;16195:52;;;16243:1;16240;16233:12;16195:52;-1:-1:-1;16266:16:1;;16104:184;-1:-1:-1;16104:184:1:o;18842:224::-;18881:3;18909:6;18942:2;18939:1;18935:10;18972:2;18969:1;18965:10;19003:3;18999:2;18995:12;18990:3;18987:21;18984:47;;;19011:18;;:::i;:::-;19047:13;;18842:224;-1:-1:-1;;;;18842:224:1:o;20058:251::-;20128:6;20181:2;20169:9;20160:7;20156:23;20152:32;20149:52;;;20197:1;20194;20187:12;20149:52;20229:9;20223:16;20248:31;20273:5;20248:31;:::i;20646:184::-;20698:77;20695:1;20688:88;20795:4;20792:1;20785:15;20819:4;20816:1;20809:15;20835:195;20874:3;-1:-1:-1;;20898:5:1;20895:77;20892:103;;;20975:18;;:::i;:::-;-1:-1:-1;21022:1:1;21011:13;;20835:195::o;21670:306::-;21758:6;21766;21774;21827:2;21815:9;21806:7;21802:23;21798:32;21795:52;;;21843:1;21840;21833:12;21795:52;21872:9;21866:16;21856:26;;21922:2;21911:9;21907:18;21901:25;21891:35;;21966:2;21955:9;21951:18;21945:25;21935:35;;21670:306;;;;;:::o;22338:245::-;22405:6;22458:2;22446:9;22437:7;22433:23;22429:32;22426:52;;;22474:1;22471;22464:12;22426:52;22506:9;22500:16;22525:28;22547:5;22525:28;:::i;25329:1026::-;25591:4;25639:3;25628:9;25624:19;25670:6;25659:9;25652:25;25696:2;25734:6;25729:2;25718:9;25714:18;25707:34;25777:3;25772:2;25761:9;25757:18;25750:31;25801:6;25836;25830:13;25867:6;25859;25852:22;25905:3;25894:9;25890:19;25883:26;;25944:2;25936:6;25932:15;25918:29;;25965:1;25975:218;25989:6;25986:1;25983:13;25975:218;;;26054:13;;-1:-1:-1;;;;;26050:62:1;26038:75;;26168:15;;;;26133:12;;;;26011:1;26004:9;25975:218;;;-1:-1:-1;;;;;;;26249:55:1;;;;26244:2;26229:18;;26222:83;-1:-1:-1;;;26336:3:1;26321:19;26314:35;26210:3;25329:1026;-1:-1:-1;;;25329:1026:1:o;26684:217::-;26723:4;26752:6;26808:10;;;;26778;;26830:12;;;26827:38;;;26845:18;;:::i;:::-;26882:13;;26684:217;-1:-1:-1;;;26684:217:1:o

Swarm Source

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