ETH Price: $2,380.49 (-0.12%)

Token

SHIBIONIC INU ($SHBNC)
 

Overview

Max Total Supply

100,000,000 $SHBNC

Holders

151

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
200,785.303927666988172822 $SHBNC

Value
$0.00
0x903d4a8165c11bc4ec22a2a2c1f00dfce205c18e
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:
ShibionicInu

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-07
*/

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

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address _owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private _liquidityHolders;

    uint256 constant private startingSupply = 100_000_000;
    string constant private _name = "SHIBIONIC INU";
    string constant private _symbol = "$SHBNC";
    uint8 constant private _decimals = 18;

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

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

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

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

    Fees public _sellTaxes = Fees({
        reflect: 100,
        liquidity: 200,
        marketing: 2000,
        totalSwap: 2200
        });

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

    Ratios public _ratios = Ratios({
        liquidity: 3,
        marketing: 25,
        total: 7
        });

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

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

    struct TaxWallets {
        address payable marketing;
    }

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

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

    bool lpInitialized = false;

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

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

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

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

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

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

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

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

        lpInitialized = true;
    }

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

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

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

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

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

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

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

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

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

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

        values.rAmount = tAmount * values.currentRate;

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

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

        if(takeFee) {
            uint256 currentReflect;
            uint256 currentSwap;
            uint256 divisor = masterTaxDivisor;

            if (sell) {
                currentReflect = _sellTaxes.reflect;
                currentSwap = _sellTaxes.totalSwap;
            } else if (buy) {
                currentReflect = _buyTaxes.reflect;
                currentSwap = _buyTaxes.totalSwap;
            } else {
                currentReflect = _transferTaxes.reflect;
                currentSwap = _transferTaxes.totalSwap;
            }

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

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

            values.rFee = 0;
        }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTaxes","outputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preInitializeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"preInitializeTransferMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflect","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600455620000176012600a620004a4565b62000027906305f5e100620004bc565b6200003590600019620004f4565b62000043906000196200050b565b600b556040805160808082018352606480835260208084018290526101f48486018190526102586060958601819052600c80546001600160401b031990811667025801f40064006490811790925588518088018a5286815260c8818701526107d0818b015261089890890152600d8054821667089807d000c8006417905588519687018952858752868501959095528588019290925293850193909352600e805490921690921790558251918201835260038252601982820152600791830191909152600f805465ffffffffffff1916640700190003179055815190810190915273c452040b75b108a1c5ce44aac829d53cd0ca236890819052601280546001600160a01b03191690911781556013805461ff001916905560006014556103e8906200017190600a620004a4565b62000181906305f5e100620004bc565b6200018e906005620004bc565b6200019a919062000525565b6018556064620001ad6012600a620004a4565b620001bd906305f5e100620004bc565b620001ca906002620004bc565b620001d6919062000525565b601955601a805461ffff60ff60b01b0119169055600b5433600081815260016020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002306012600a620004a4565b62000240906305f5e100620004bc565b60405190815260200160405180910390a3600080546001600160a01b0319163317905560384614156200029957601080546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790556200053c565b4660611415620002cf57601080546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c31790556200053c565b4660011480620002df5750466004145b80620002eb5750466003145b156200031d57601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200053c565b4661a86a14156200035457601080546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d41790556200053c565b4660fa14156200038a57601080546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790556200053c565b600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003e6578160001904821115620003ca57620003ca6200038f565b80851615620003d857918102915b93841c9390800290620003aa565b509250929050565b600082620003ff575060016200049e565b816200040e575060006200049e565b8160018114620004275760028114620004325762000452565b60019150506200049e565b60ff8411156200044657620004466200038f565b50506001821b6200049e565b5060208310610133831016604e8410600b841016171562000477575081810a6200049e565b620004838383620003a5565b80600019048211156200049a576200049a6200038f565b0290505b92915050565b6000620004b560ff841683620003ee565b9392505050565b6000816000190483118215151615620004d957620004d96200038f565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620005065762000506620004de565b500690565b6000828210156200052057620005206200038f565b500390565b600082620005375762000537620004de565b500490565b6151c9806200054c6000396000f3fe6080604052600436106103c75760003560e01c8063590ffdce116101f2578063b1b08f711161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610c2f578063f94aa1b414610c4f578063fdb78c0e14610c6f578063fe575a8714610c8e57600080fd5b8063e4fcfd1814610bc4578063eafb5a3c14610bda578063eb50e70e14610bfa578063ee5d9c2d14610c1a57600080fd5b8063c6831cd8116100dc578063c6831cd814610acb578063cab5ebea14610b08578063cf84770614610b28578063dd62ed3e14610b7e57600080fd5b8063b1b08f711461062a578063b3d514fb1461062a578063bcd96a2514610a6e578063c2fa418f14610a8e57600080fd5b806388f82020116101855780638a8c523c116101545780638a8c523c146109de57806395d89b41146109f3578063a6690cf914610a39578063a9059cbb14610a4e57600080fd5b806388f8202014610952578063893d20e81461098b5780638965b55d146109a95780638a63bd9b146109c957600080fd5b806370a08231116101c157806370a0823114610892578063715018a6146108b25780637b45d431146108c757806380c581d11461093257600080fd5b8063590ffdce146108045780635c24b074146108245780635cce86cd146108445780636ebd00781461087d57600080fd5b80632b112e49116102e257806336fddb04116102755780634fb2e45d116102445780634fb2e45d1461076c5780634fbee1931461078c57806350a8e016146107c557806355d8ece6146107e457600080fd5b806336fddb04146106f25780633f3cf56c14610712578063452ed4f1146107325780634ada218b1461075257600080fd5b80632e8fa821116102b15780632e8fa82114610680578063313ce5671461069657806333251a0b146106b257806334cd8260146106d257600080fd5b80632b112e49146106155780632b28fc7a1461062a5780632cee7602146106405780632d8381191461066057600080fd5b806313e461921161035a57806323b872dd1161032957806323b872dd1461059557806326003957146105b55780632610eaca146105d557806329dd8798146105f557600080fd5b806313e461921461052057806318160ddd146105405780631cc43f07146105555780631e90afe31461057557600080fd5b80630758d924116103965780630758d9241461049b57806309231602146104bb578063095ea7b3146104db5780630fa604e41461050b57600080fd5b806303fd2a45146103d35780630445b6671461040657806305bbedb61461042a57806306fdde031461044c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c60165481565b6040519081526020016103fd565b34801561043657600080fd5b5061044a610445366004614a36565b610cae565b005b34801561045857600080fd5b5060408051808201909152600d81527f53484942494f4e494320494e550000000000000000000000000000000000000060208201525b6040516103fd9190614a88565b3480156104a757600080fd5b506010546103e9906001600160a01b031681565b3480156104c757600080fd5b5061044a6104d6366004614add565b610d87565b3480156104e757600080fd5b506104fb6104f6366004614af6565b610ea7565b60405190151581526020016103fd565b34801561051757600080fd5b5061041c610ebe565b34801561052c57600080fd5b5061044a61053b366004614b22565b610ede565b34801561054c57600080fd5b5061041c6113a1565b34801561056157600080fd5b5061044a610570366004614b50565b6113e0565b34801561058157600080fd5b5061044a610590366004614c22565b611529565b3480156105a157600080fd5b506104fb6105b0366004614c65565b61162a565b3480156105c157600080fd5b5061044a6105d0366004614ca6565b6116a2565b3480156105e157600080fd5b5061044a6105f0366004614b50565b6117f2565b34801561060157600080fd5b5061044a610610366004614cc8565b6118f1565b34801561062157600080fd5b5061041c6119da565b34801561063657600080fd5b5061041c6107d081565b34801561064c57600080fd5b5061044a61065b366004614af6565b611a1f565b34801561066c57600080fd5b5061041c61067b366004614add565b611ac1565b34801561068c57600080fd5b5061041c60175481565b3480156106a257600080fd5b50604051601281526020016103fd565b3480156106be57600080fd5b5061044a6106cd366004614d24565b611b58565b3480156106de57600080fd5b5061044a6106ed366004614d41565b611bf8565b3480156106fe57600080fd5b5061044a61070d366004614b22565b611cb5565b34801561071e57600080fd5b5061044a61072d366004614ca6565b611d2e565b34801561073e57600080fd5b506011546103e9906001600160a01b031681565b34801561075e57600080fd5b50601a546104fb9060ff1681565b34801561077857600080fd5b5061044a610787366004614d24565b611e7e565b34801561079857600080fd5b506104fb6107a7366004614d24565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d157600080fd5b50601a546104fb90610100900460ff1681565b3480156107f057600080fd5b5061044a6107ff366004614c22565b61207d565b34801561081057600080fd5b5061044a61081f366004614b22565b61217e565b34801561083057600080fd5b5061044a61083f366004614d24565b6121f7565b34801561085057600080fd5b506104fb61085f366004614d24565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088957600080fd5b5061041c6122f3565b34801561089e57600080fd5b5061041c6108ad366004614d24565b61230e565b3480156108be57600080fd5b5061044a61236d565b3480156108d357600080fd5b50600c546109049061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b34801561093e57600080fd5b5061044a61094d366004614b22565b61241d565b34801561095e57600080fd5b506104fb61096d366004614d24565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561099757600080fd5b506000546001600160a01b03166103e9565b3480156109b557600080fd5b5061044a6109c4366004614c22565b6125d9565b3480156109d557600080fd5b506104fb6126da565b3480156109ea57600080fd5b5061044a612749565b3480156109ff57600080fd5b5060408051808201909152600681527f245348424e430000000000000000000000000000000000000000000000000000602082015261048e565b348015610a4557600080fd5b5061044a61298a565b348015610a5a57600080fd5b506104fb610a69366004614af6565b612cfd565b348015610a7a57600080fd5b5061044a610a89366004614d7c565b612d14565b348015610a9a57600080fd5b50600e546109049061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ad757600080fd5b50600d546109049061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b1457600080fd5b5061044a610b23366004614daf565b612db2565b348015610b3457600080fd5b50600f54610b599061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b348015610b8a57600080fd5b5061041c610b99366004614dcc565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610bd057600080fd5b5061041c60145481565b348015610be657600080fd5b5061044a610bf5366004614d24565b612e54565b348015610c0657600080fd5b5061044a610c15366004614d24565b613203565b348015610c2657600080fd5b5061044a613280565b348015610c3b57600080fd5b5061044a610c4a366004614b22565b613363565b348015610c5b57600080fd5b506012546103e9906001600160a01b031681565b348015610c7b57600080fd5b506013546104fb90610100900460ff1681565b348015610c9a57600080fd5b506104fb610ca9366004614d24565b61340b565b6000546001600160a01b03163314610d015760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d519085908590600401614e3e565b600060405180830381600087803b158015610d6b57600080fd5b505af1158015610d7f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b61012c811015610e275760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610cf8565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b5050505050565b6000610eb4338484613499565b5060015b92915050565b6000610ecc6012600a614f75565b601954610ed99190614f84565b905090565b6000546001600160a01b03163314610f2c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b8015611081576001600160a01b03821660009081526008602052604090205460ff1615610f9b5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cf8565b6001600160a01b03821660009081526001602052604090205415610ff5576001600160a01b038216600090815260016020526040902054610fdb90611ac1565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556011549091161461107d57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061107d576001600160a01b03821660009081526008602052604090205460ff166110ee5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cf8565b6011546001600160a01b03838116911614156111695761110c6135a6565b6001600160a01b03831660009081526002602052604090205461112f9190614fbf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156112195761117c6135a6565b6001600160a01b03831660009081526002602052604090205461119f9190614fbf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806111e6576111e6614fde565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561139c57826001600160a01b0316600982815481106112435761124361500d565b6000918252602090912001546001600160a01b0316141561138a576009805461126e9060019061503c565b8154811061127e5761127e61500d565b600091825260209091200154600980546001600160a01b0390921691839081106112aa576112aa61500d565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556112f66135a6565b6001600160a01b0384166000908152600260205260409020546113199190614fbf565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff19169055600980548061135657611356614fde565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061139481615053565b91505061121c565b505050565b60006113af6012600a614f75565b6113bd906305f5e100614fbf565b6113c657600080fd5b6113d26012600a614f75565b610ed9906305f5e100614fbf565b6000546001600160a01b0316331461142e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b805182511461147f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cf8565b60005b82518160ff16101561139c5761149a6012600a614f75565b828260ff16815181106114af576114af61500d565b60200260200101516114c19190614fbf565b6114ca3361230e565b10156114d557600080fd5b611517838260ff16815181106114ed576114ed61500d565b6020026020010151838360ff168151811061150a5761150a61500d565b6020026020010151611a1f565b806115218161506e565b915050611482565b6000546001600160a01b031633146115775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600081611584848661508e565b61158e919061508e565b90506107d08161ffff1611156115a357600080fd5b600e805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff199094169289169290921792909217161790556115e684826150b4565b600e805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461168f576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061168990849061503c565b90915550505b61169a848484613874565b949350505050565b6000546001600160a01b031633146116f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6103e86116ff6012600a614f75565b61170d906305f5e100614fbf565b6117179190614f84565b81836117256012600a614f75565b611733906305f5e100614fbf565b61173d9190614fbf565b6117479190614f84565b10156117bb5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cf8565b80826117c96012600a614f75565b6117d7906305f5e100614fbf565b6117e19190614fbf565b6117eb9190614f84565b6019555050565b80518251146118435760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cf8565b60005b82518160ff16101561139c57818160ff16815181106118675761186761500d565b60200260200101516118783361230e565b101561188357600080fd5b6118de33848360ff168151811061189c5761189c61500d565b60200260200101516012600a6118b29190614f75565b858560ff16815181106118c7576118c761500d565b60200260200101516118d99190614fbf565b613874565b50806118e98161506e565b915050611846565b6000546001600160a01b0316331461193f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156119bc57600080fd5b505af11580156119d0573d6000803e3d6000fd5b5050505050505050565b60006119e6600061230e565b6119f161dead61230e565b6119fb91906150d7565b611a076012600a614f75565b611a15906305f5e100614fbf565b610ed9919061503c565b6000546001600160a01b03163314611a6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54760100000000000000000000000000000000000000000000900460ff1615611a9757600080fd5b611aa36012600a614f75565b611aad9082614fbf565b905061139c33838360008060006001613d10565b6000600b54821115611b3b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cf8565b6000611b456135a6565b9050611b518184614f84565b9392505050565b6000546001600160a01b03163314611ba65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610e72565b6000546001600160a01b03163314611c465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b8385611c546012600a614f75565b611c62906305f5e100614fbf565b611c6c9190614fbf565b611c769190614f84565b6016558183611c876012600a614f75565b611c95906305f5e100614fbf565b611c9f9190614fbf565b611ca99190614f84565b60175560145550505050565b6000546001600160a01b03163314611d035760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d7c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6103e8611d8b6012600a614f75565b611d99906305f5e100614fbf565b611da39190614f84565b8183611db16012600a614f75565b611dbf906305f5e100614fbf565b611dc99190614fbf565b611dd39190614f84565b1015611e475760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cf8565b8082611e556012600a614f75565b611e63906305f5e100614fbf565b611e6d9190614fbf565b611e779190614f84565b6018555050565b6000546001600160a01b03163314611ecc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6001600160a01b038116611f485760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf8565b6001600160a01b03811661dead1415611fc95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf8565b60008054611fe2916001600160a01b039091169061217e565b611fed81600161217e565b60008054612003906001600160a01b031661230e565b111561202557600054612023906001600160a01b0316826118d98261230e565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146120cb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6000816120d8848661508e565b6120e2919061508e565b90506107d08161ffff1611156120f757600080fd5b600c805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff1990941692891692909217929092171617905561213a84826150b4565b600c805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000546001600160a01b031633146121cc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122455760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54610100900460ff161561225a57600080fd5b6001600160a01b0381163014156122b35760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cf8565b601a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006123016012600a614f75565b601854610ed99190614f84565b6001600160a01b03811660009081526008602052604081205460ff161561234b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610eb890611ac1565b6000546001600160a01b031633146123bb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600080546123d4916001600160a01b039091169061217e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461246b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b806124f7576001600160a01b03828116600081815260036020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d6b57600080fd5b6004541561255e576203f48060045442612511919061503c565b1161255e5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cf8565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601a5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d51565b6000546001600160a01b031633146126275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600081612634848661508e565b61263e919061508e565b90506107d08161ffff16111561265357600080fd5b600d805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff1990941692891692909217929092171617905561269684826150b4565b600d805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b031633146127295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6010546127439030906001600160a01b0316600019613499565b50600190565b6000546001600160a01b031633146127975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a5460ff16156127ea5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cf8565b601a54610100900460ff166128415760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cf8565b601a546201000090046001600160a01b031661288757601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a546011546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561291257600080fd5b505af1925050508015612923575060015b50601a805460ff191660011790556011546127109061294a906001600160a01b031661230e565b6129549190614f84565b60165560115461271090612970906001600160a01b031661230e565b61297b90600f614fbf565b6129859190614f84565b601755565b6000546001600160a01b031633146129d85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54760100000000000000000000000000000000000000000000900460ff1615612a455760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610cf8565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abc91906150ef565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906150ef565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc991906150ef565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554601054612c23929182169116600019613499565b601054612c3d9030906001600160a01b0316600019613499565b600080546001600160a01b039081168252600660209081526040808420805460ff19908116600190811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a90925290922080549091169091179055601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b6000612d0a338484613874565b5060019392505050565b6000546001600160a01b03163314612d625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600f805461ffff838116620100000263ffffffff1990921690851617179055612d8b818361508e565b600f805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b03163314612e005760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612e4990831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612ea25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b91906150ef565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7c91906150ef565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300391906150ef565b90506001600160a01b0381166131a157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613051573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307591906150ef565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e691906150ef565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561314b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316f91906150ef565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556131ca565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561139c903090600019613499565b6000546001600160a01b031633146132515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146132ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54610100900460ff16156133265760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cf8565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613360573d6000803e3d6000fd5b50565b6000546001600160a01b031633146133b15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d51565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb8919061510c565b6001600160a01b0383166134ef5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf8565b6001600160a01b0382166135455760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600b54600090816135b96012600a614f75565b6135c7906305f5e100614fbf565b6011546001600160a01b031660009081526008602052604090205490915060ff16156136b1576011546001600160a01b031660009081526001602052604090205482108061362e57506011546001600160a01b031660009081526002602052604090205481105b156136615761363f6012600a614f75565b61364d906305f5e100614fbf565b600b5461365a9190614f84565b9250505090565b6011546001600160a01b0316600090815260016020526040902054613686908361503c565b6011546001600160a01b03166000908152600260205260409020549092506136ae908261503c565b90505b600954156138305760005b60095460ff8216101561382e57826001600060098460ff16815481106136e4576136e461500d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137525750816002600060098460ff168154811061372b5761372b61500d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613786576137636012600a614f75565b613771906305f5e100614fbf565b600b5461377e9190614f84565b935050505090565b6001600060098360ff16815481106137a0576137a061500d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137cf908461503c565b92506002600060098360ff16815481106137eb576137eb61500d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461381a908361503c565b9150806138268161506e565b9150506136bc565b505b61383c6012600a614f75565b61384a906305f5e100614fbf565b600b546138579190614f84565b82101561386a5761363f6012600a614f75565b61365a8183614f84565b60006001600160a01b0384166138f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf8565b6001600160a01b03831661396e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf8565b600082116139e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cf8565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613a125760019250613a40565b6001600160a01b03861660009081526003602052604090205460ff1615613a3c5760019150613a40565b5060015b613a4a8787613f8a565b15613c3a57601a5460ff16613aa15760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cf8565b8280613aaa5750815b15613b6e576001600160a01b03871660009081526007602052604090205460ff16158015613af157506001600160a01b03861660009081526007602052604090205460ff16155b15613b6e57601854851115613b6e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cf8565b6010546001600160a01b03878116911614801590613b8a575081155b15613c3a576001600160a01b03861660009081526007602052604090205460ff16613c3a5760195485613bbc8861230e565b613bc691906150d7565b1115613c3a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cf8565b6001600160a01b03871660009081526006602052604090205460019060ff1680613c7c57506001600160a01b03871660009081526006602052604090205460ff165b15613c85575060005b8215613cf55760135460ff16158015613ca55750601354610100900460ff165b15613cf55742601454601554613cbb91906150d7565b1015613cf5576000613ccc3061230e565b90506016548110613cf3576017548110613ce557506017545b613cee8161405e565b426015555b505b613d0488888884888888613d10565b98975050505050505050565b601a54600090610100900460ff16613dbc57613d2c888861444e565b601a54610100900460ff16158015613d495750613d498888613f8a565b15613dbc5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cf8565b6000613dcd898989898989896145ac565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613dfc90849061503c565b909155505060608101516001600160a01b03891660009081526001602052604081208054909190613e2e9084906150d7565b90915550506001600160a01b03891660009081526008602052604090205460ff1615613e92576001600160a01b038916600090815260026020526040902054613e7890889061503c565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff1615613ef25780516001600160a01b038916600090815260026020526040902054613ed891906150d7565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613f09575060008160200151115b15613f2a578060a00151600b6000828254613f24919061503c565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613f7391815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590613fb757506000546001600160a01b03838116911614155b8015613fce57506000546001600160a01b03163214155b8015613ff357506001600160a01b0382166000908152600a602052604090205460ff16155b801561401857506001600160a01b0383166000908152600a602052604090205460ff16155b801561402f57506001600160a01b03821661dead14155b801561404357506001600160a01b03821615155b8015611b5157506001600160a01b0383163014159392505050565b6013805460ff1916600117905560408051606081018252600f5461ffff80821683526201000082048116602084015264010000000090910416918101829052906140a85750614441565b3060009081526005602090815260408083206010546001600160a01b0316845290915290205460001914614101573060009081526005602090815260408083206010546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856141229190614fbf565b61412c9190614f84565b6141369190614f84565b90506000614144828561503c565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061417e5761417e61500d565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156141f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421491906150ef565b816001815181106142275761422761500d565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614286908590600090869030904290600401615129565b600060405180830381600087803b1580156142a057600080fd5b505af11580156142b4573d6000803e3d6000fd5b50479250600091508490506142c98684614fbf565b6142d39190614f84565b905084156143c4576010546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614362573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143879190615165565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6143ce818361503c565b91508560000151866040018181516143e691906150b4565b61ffff90811690915260208801518492501615614439576012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614437573d6000803e3d6000fd5b505b505050505050505b506013805460ff19169055565b601a54610100900460ff16156144cc5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cf8565b6144d68282613f8a565b1580156144f057506011546001600160a01b038281169116145b1561107d576001600160a01b038083166000908152600a60205260409020805460ff19166001179055601a805461ff00191661010017908190556201000090041661456557601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6145ec6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61462c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6146346135a6565b60c082018190526146459088614fbf565b60808201526146548989613f8a565b1561470757601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156146f0575060408051601f3d908101601f191682019092526146ed9181019061510c565b60015b6146f957600080fd5b90508061470557600080fd5b505b85156147e857600080612710861561473757600d5461ffff80821694506601000000000000909104169150614775565b871561475b57600c5461ffff80821694506601000000000000909104169150614775565b600e5461ffff808216945066010000000000009091041691505b80614780848c614fbf565b61478a9190614f84565b60208501528061479a838c614fbf565b6147a49190614f84565b6040850181905260208501516147ba91906150d7565b6147c4908b61503c565b845260c084015160208501516147da9190614fbf565b60a085015250614801915050565b6000602082018190526040820181905287825260a08201525b6040810151156148d8578060c00151816040015161481f9190614fbf565b306000908152600160205260408120805490919061483e9084906150d7565b90915550503060009081526008602052604090205460ff16156148865760408082015130600090815260026020529182208054919290916148809084906150d7565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516148cf91815260200190565b60405180910390a35b8060c0015181604001516148ec9190614fbf565b8160a001516148fb91906150d7565b816080015161490a919061503c565b606082015298975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156149735761497361491b565b604052919050565b600067ffffffffffffffff8211156149955761499561491b565b5060051b60200190565b6001600160a01b038116811461336057600080fd5b600082601f8301126149c557600080fd5b813560206149da6149d58361497b565b61494a565b82815260059290921b840181019181810190868411156149f957600080fd5b8286015b84811015614a1d578035614a108161499f565b83529183019183016149fd565b509695505050505050565b801515811461336057600080fd5b60008060408385031215614a4957600080fd5b823567ffffffffffffffff811115614a6057600080fd5b614a6c858286016149b4565b9250506020830135614a7d81614a28565b809150509250929050565b600060208083528351808285015260005b81811015614ab557858101830151858201604001528201614a99565b81811115614ac7576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614aef57600080fd5b5035919050565b60008060408385031215614b0957600080fd5b8235614b148161499f565b946020939093013593505050565b60008060408385031215614b3557600080fd5b8235614b408161499f565b91506020830135614a7d81614a28565b60008060408385031215614b6357600080fd5b823567ffffffffffffffff80821115614b7b57600080fd5b614b87868387016149b4565b9350602091508185013581811115614b9e57600080fd5b85019050601f81018613614bb157600080fd5b8035614bbf6149d58261497b565b81815260059190911b82018301908381019088831115614bde57600080fd5b928401925b82841015614bfc57833582529284019290840190614be3565b80955050505050509250929050565b803561ffff81168114614c1d57600080fd5b919050565b600080600060608486031215614c3757600080fd5b614c4084614c0b565b9250614c4e60208501614c0b565b9150614c5c60408501614c0b565b90509250925092565b600080600060608486031215614c7a57600080fd5b8335614c858161499f565b92506020840135614c958161499f565b929592945050506040919091013590565b60008060408385031215614cb957600080fd5b50508035926020909101359150565b60008060008060808587031215614cde57600080fd5b8435614ce981614a28565b93506020850135614cf981614a28565b92506040850135614d0981614a28565b91506060850135614d1981614a28565b939692955090935050565b600060208284031215614d3657600080fd5b8135611b518161499f565b600080600080600060a08688031215614d5957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215614d8f57600080fd5b614d9883614c0b565b9150614da660208401614c0b565b90509250929050565b600060208284031215614dc157600080fd5b8135611b5181614a28565b60008060408385031215614ddf57600080fd5b8235614dea8161499f565b91506020830135614a7d8161499f565b600081518084526020808501945080840160005b83811015614e335781516001600160a01b031687529582019590820190600101614e0e565b509495945050505050565b604081526000614e516040830185614dfa565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614ecc578160001904821115614eb257614eb2614e62565b80851615614ebf57918102915b93841c9390800290614e96565b509250929050565b600082614ee357506001610eb8565b81614ef057506000610eb8565b8160018114614f065760028114614f1057614f2c565b6001915050610eb8565b60ff841115614f2157614f21614e62565b50506001821b610eb8565b5060208310610133831016604e8410600b8410161715614f4f575081810a610eb8565b614f598383614e91565b8060001904821115614f6d57614f6d614e62565b029392505050565b6000611b5160ff841683614ed4565b600082614fba577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614fd957614fd9614e62565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561504e5761504e614e62565b500390565b600060001982141561506757615067614e62565b5060010190565b600060ff821660ff81141561508557615085614e62565b60010192915050565b600061ffff8083168185168083038211156150ab576150ab614e62565b01949350505050565b600061ffff838116908316818110156150cf576150cf614e62565b039392505050565b600082198211156150ea576150ea614e62565b500190565b60006020828403121561510157600080fd5b8151611b518161499f565b60006020828403121561511e57600080fd5b8151611b5181614a28565b85815284602082015260a06040820152600061514860a0830186614dfa565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561517a57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122027d89aed5f0238f26ef94b781cea825eae2769aa522a29d7f3ace845d04f608e64736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063590ffdce116101f2578063b1b08f711161010d578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610c2f578063f94aa1b414610c4f578063fdb78c0e14610c6f578063fe575a8714610c8e57600080fd5b8063e4fcfd1814610bc4578063eafb5a3c14610bda578063eb50e70e14610bfa578063ee5d9c2d14610c1a57600080fd5b8063c6831cd8116100dc578063c6831cd814610acb578063cab5ebea14610b08578063cf84770614610b28578063dd62ed3e14610b7e57600080fd5b8063b1b08f711461062a578063b3d514fb1461062a578063bcd96a2514610a6e578063c2fa418f14610a8e57600080fd5b806388f82020116101855780638a8c523c116101545780638a8c523c146109de57806395d89b41146109f3578063a6690cf914610a39578063a9059cbb14610a4e57600080fd5b806388f8202014610952578063893d20e81461098b5780638965b55d146109a95780638a63bd9b146109c957600080fd5b806370a08231116101c157806370a0823114610892578063715018a6146108b25780637b45d431146108c757806380c581d11461093257600080fd5b8063590ffdce146108045780635c24b074146108245780635cce86cd146108445780636ebd00781461087d57600080fd5b80632b112e49116102e257806336fddb04116102755780634fb2e45d116102445780634fb2e45d1461076c5780634fbee1931461078c57806350a8e016146107c557806355d8ece6146107e457600080fd5b806336fddb04146106f25780633f3cf56c14610712578063452ed4f1146107325780634ada218b1461075257600080fd5b80632e8fa821116102b15780632e8fa82114610680578063313ce5671461069657806333251a0b146106b257806334cd8260146106d257600080fd5b80632b112e49146106155780632b28fc7a1461062a5780632cee7602146106405780632d8381191461066057600080fd5b806313e461921161035a57806323b872dd1161032957806323b872dd1461059557806326003957146105b55780632610eaca146105d557806329dd8798146105f557600080fd5b806313e461921461052057806318160ddd146105405780631cc43f07146105555780631e90afe31461057557600080fd5b80630758d924116103965780630758d9241461049b57806309231602146104bb578063095ea7b3146104db5780630fa604e41461050b57600080fd5b806303fd2a45146103d35780630445b6671461040657806305bbedb61461042a57806306fdde031461044c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c60165481565b6040519081526020016103fd565b34801561043657600080fd5b5061044a610445366004614a36565b610cae565b005b34801561045857600080fd5b5060408051808201909152600d81527f53484942494f4e494320494e550000000000000000000000000000000000000060208201525b6040516103fd9190614a88565b3480156104a757600080fd5b506010546103e9906001600160a01b031681565b3480156104c757600080fd5b5061044a6104d6366004614add565b610d87565b3480156104e757600080fd5b506104fb6104f6366004614af6565b610ea7565b60405190151581526020016103fd565b34801561051757600080fd5b5061041c610ebe565b34801561052c57600080fd5b5061044a61053b366004614b22565b610ede565b34801561054c57600080fd5b5061041c6113a1565b34801561056157600080fd5b5061044a610570366004614b50565b6113e0565b34801561058157600080fd5b5061044a610590366004614c22565b611529565b3480156105a157600080fd5b506104fb6105b0366004614c65565b61162a565b3480156105c157600080fd5b5061044a6105d0366004614ca6565b6116a2565b3480156105e157600080fd5b5061044a6105f0366004614b50565b6117f2565b34801561060157600080fd5b5061044a610610366004614cc8565b6118f1565b34801561062157600080fd5b5061041c6119da565b34801561063657600080fd5b5061041c6107d081565b34801561064c57600080fd5b5061044a61065b366004614af6565b611a1f565b34801561066c57600080fd5b5061041c61067b366004614add565b611ac1565b34801561068c57600080fd5b5061041c60175481565b3480156106a257600080fd5b50604051601281526020016103fd565b3480156106be57600080fd5b5061044a6106cd366004614d24565b611b58565b3480156106de57600080fd5b5061044a6106ed366004614d41565b611bf8565b3480156106fe57600080fd5b5061044a61070d366004614b22565b611cb5565b34801561071e57600080fd5b5061044a61072d366004614ca6565b611d2e565b34801561073e57600080fd5b506011546103e9906001600160a01b031681565b34801561075e57600080fd5b50601a546104fb9060ff1681565b34801561077857600080fd5b5061044a610787366004614d24565b611e7e565b34801561079857600080fd5b506104fb6107a7366004614d24565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d157600080fd5b50601a546104fb90610100900460ff1681565b3480156107f057600080fd5b5061044a6107ff366004614c22565b61207d565b34801561081057600080fd5b5061044a61081f366004614b22565b61217e565b34801561083057600080fd5b5061044a61083f366004614d24565b6121f7565b34801561085057600080fd5b506104fb61085f366004614d24565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561088957600080fd5b5061041c6122f3565b34801561089e57600080fd5b5061041c6108ad366004614d24565b61230e565b3480156108be57600080fd5b5061044a61236d565b3480156108d357600080fd5b50600c546109049061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b34801561093e57600080fd5b5061044a61094d366004614b22565b61241d565b34801561095e57600080fd5b506104fb61096d366004614d24565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561099757600080fd5b506000546001600160a01b03166103e9565b3480156109b557600080fd5b5061044a6109c4366004614c22565b6125d9565b3480156109d557600080fd5b506104fb6126da565b3480156109ea57600080fd5b5061044a612749565b3480156109ff57600080fd5b5060408051808201909152600681527f245348424e430000000000000000000000000000000000000000000000000000602082015261048e565b348015610a4557600080fd5b5061044a61298a565b348015610a5a57600080fd5b506104fb610a69366004614af6565b612cfd565b348015610a7a57600080fd5b5061044a610a89366004614d7c565b612d14565b348015610a9a57600080fd5b50600e546109049061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610ad757600080fd5b50600d546109049061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b348015610b1457600080fd5b5061044a610b23366004614daf565b612db2565b348015610b3457600080fd5b50600f54610b599061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b348015610b8a57600080fd5b5061041c610b99366004614dcc565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610bd057600080fd5b5061041c60145481565b348015610be657600080fd5b5061044a610bf5366004614d24565b612e54565b348015610c0657600080fd5b5061044a610c15366004614d24565b613203565b348015610c2657600080fd5b5061044a613280565b348015610c3b57600080fd5b5061044a610c4a366004614b22565b613363565b348015610c5b57600080fd5b506012546103e9906001600160a01b031681565b348015610c7b57600080fd5b506013546104fb90610100900460ff1681565b348015610c9a57600080fd5b506104fb610ca9366004614d24565b61340b565b6000546001600160a01b03163314610d015760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d519085908590600401614e3e565b600060405180830381600087803b158015610d6b57600080fd5b505af1158015610d7f573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610dd55760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b61012c811015610e275760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610cf8565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610e8c57600080fd5b505af1158015610ea0573d6000803e3d6000fd5b5050505050565b6000610eb4338484613499565b5060015b92915050565b6000610ecc6012600a614f75565b601954610ed99190614f84565b905090565b6000546001600160a01b03163314610f2c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b8015611081576001600160a01b03821660009081526008602052604090205460ff1615610f9b5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cf8565b6001600160a01b03821660009081526001602052604090205415610ff5576001600160a01b038216600090815260016020526040902054610fdb90611ac1565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600860205260409020805460ff191660011790556011549091161461107d57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af01805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b8061107d576001600160a01b03821660009081526008602052604090205460ff166110ee5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cf8565b6011546001600160a01b03838116911614156111695761110c6135a6565b6001600160a01b03831660009081526002602052604090205461112f9190614fbf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff191690555050565b600954600114156112195761117c6135a6565b6001600160a01b03831660009081526002602052604090205461119f9190614fbf565b6001600160a01b038316600090815260016020908152604080832093909355600281528282208290556008905220805460ff1916905560098054806111e6576111e6614fde565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b60095481101561139c57826001600160a01b0316600982815481106112435761124361500d565b6000918252602090912001546001600160a01b0316141561138a576009805461126e9060019061503c565b8154811061127e5761127e61500d565b600091825260209091200154600980546001600160a01b0390921691839081106112aa576112aa61500d565b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559185168152600290915260408120556112f66135a6565b6001600160a01b0384166000908152600260205260409020546113199190614fbf565b6001600160a01b0384166000908152600160209081526040808320939093556008905220805460ff19169055600980548061135657611356614fde565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b8061139481615053565b91505061121c565b505050565b60006113af6012600a614f75565b6113bd906305f5e100614fbf565b6113c657600080fd5b6113d26012600a614f75565b610ed9906305f5e100614fbf565b6000546001600160a01b0316331461142e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b805182511461147f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cf8565b60005b82518160ff16101561139c5761149a6012600a614f75565b828260ff16815181106114af576114af61500d565b60200260200101516114c19190614fbf565b6114ca3361230e565b10156114d557600080fd5b611517838260ff16815181106114ed576114ed61500d565b6020026020010151838360ff168151811061150a5761150a61500d565b6020026020010151611a1f565b806115218161506e565b915050611482565b6000546001600160a01b031633146115775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600081611584848661508e565b61158e919061508e565b90506107d08161ffff1611156115a357600080fd5b600e805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff199094169289169290921792909217161790556115e684826150b4565b600e805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461168f576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061168990849061503c565b90915550505b61169a848484613874565b949350505050565b6000546001600160a01b031633146116f05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6103e86116ff6012600a614f75565b61170d906305f5e100614fbf565b6117179190614f84565b81836117256012600a614f75565b611733906305f5e100614fbf565b61173d9190614fbf565b6117479190614f84565b10156117bb5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610cf8565b80826117c96012600a614f75565b6117d7906305f5e100614fbf565b6117e19190614fbf565b6117eb9190614f84565b6019555050565b80518251146118435760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cf8565b60005b82518160ff16101561139c57818160ff16815181106118675761186761500d565b60200260200101516118783361230e565b101561188357600080fd5b6118de33848360ff168151811061189c5761189c61500d565b60200260200101516012600a6118b29190614f75565b858560ff16815181106118c7576118c761500d565b60200260200101516118d99190614fbf565b613874565b50806118e98161506e565b915050611846565b6000546001600160a01b0316331461193f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156119bc57600080fd5b505af11580156119d0573d6000803e3d6000fd5b5050505050505050565b60006119e6600061230e565b6119f161dead61230e565b6119fb91906150d7565b611a076012600a614f75565b611a15906305f5e100614fbf565b610ed9919061503c565b6000546001600160a01b03163314611a6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54760100000000000000000000000000000000000000000000900460ff1615611a9757600080fd5b611aa36012600a614f75565b611aad9082614fbf565b905061139c33838360008060006001613d10565b6000600b54821115611b3b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cf8565b6000611b456135a6565b9050611b518184614f84565b9392505050565b6000546001600160a01b03163314611ba65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610e72565b6000546001600160a01b03163314611c465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b8385611c546012600a614f75565b611c62906305f5e100614fbf565b611c6c9190614fbf565b611c769190614f84565b6016558183611c876012600a614f75565b611c95906305f5e100614fbf565b611c9f9190614fbf565b611ca99190614f84565b60175560145550505050565b6000546001600160a01b03163314611d035760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d7c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6103e8611d8b6012600a614f75565b611d99906305f5e100614fbf565b611da39190614f84565b8183611db16012600a614f75565b611dbf906305f5e100614fbf565b611dc99190614fbf565b611dd39190614f84565b1015611e475760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cf8565b8082611e556012600a614f75565b611e63906305f5e100614fbf565b611e6d9190614fbf565b611e779190614f84565b6018555050565b6000546001600160a01b03163314611ecc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6001600160a01b038116611f485760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf8565b6001600160a01b03811661dead1415611fc95760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cf8565b60008054611fe2916001600160a01b039091169061217e565b611fed81600161217e565b60008054612003906001600160a01b031661230e565b111561202557600054612023906001600160a01b0316826118d98261230e565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146120cb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6000816120d8848661508e565b6120e2919061508e565b90506107d08161ffff1611156120f757600080fd5b600c805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff1990941692891692909217929092171617905561213a84826150b4565b600c805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b6000546001600160a01b031633146121cc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146122455760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54610100900460ff161561225a57600080fd5b6001600160a01b0381163014156122b35760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cf8565b601a80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006123016012600a614f75565b601854610ed99190614f84565b6001600160a01b03811660009081526008602052604081205460ff161561234b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610eb890611ac1565b6000546001600160a01b031633146123bb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600080546123d4916001600160a01b039091169061217e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461246b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b806124f7576001600160a01b03828116600081815260036020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d6b57600080fd5b6004541561255e576203f48060045442612511919061503c565b1161255e5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cf8565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601a5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d51565b6000546001600160a01b031633146126275760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600081612634848661508e565b61263e919061508e565b90506107d08161ffff16111561265357600080fd5b600d805461ffff8481166401000000000265ffff0000000019878316620100000263ffffffff1990941692891692909217929092171617905561269684826150b4565b600d805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff90921691909117905550505050565b600080546001600160a01b031633146127295760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6010546127439030906001600160a01b0316600019613499565b50600190565b6000546001600160a01b031633146127975760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a5460ff16156127ea5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cf8565b601a54610100900460ff166128415760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cf8565b601a546201000090046001600160a01b031661288757601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a546011546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561291257600080fd5b505af1925050508015612923575060015b50601a805460ff191660011790556011546127109061294a906001600160a01b031661230e565b6129549190614f84565b60165560115461271090612970906001600160a01b031661230e565b61297b90600f614fbf565b6129859190614f84565b601755565b6000546001600160a01b031633146129d85760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54760100000000000000000000000000000000000000000000900460ff1615612a455760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a6564000000000000000000000000006044820152606401610cf8565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abc91906150ef565b6001600160a01b031663c9c65396601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4191906150ef565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc991906150ef565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554601054612c23929182169116600019613499565b601054612c3d9030906001600160a01b0316600019613499565b600080546001600160a01b039081168252600660209081526040808420805460ff19908116600190811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905585549094168552600a90925290922080549091169091179055601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055565b6000612d0a338484613874565b5060019392505050565b6000546001600160a01b03163314612d625760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b600f805461ffff838116620100000263ffffffff1990921690851617179055612d8b818361508e565b600f805461ffff929092166401000000000265ffff00000000199092169190911790555050565b6000546001600160a01b03163314612e005760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790612e4990831515815260200190565b60405180910390a150565b6000546001600160a01b03163314612ea25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b91906150ef565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7c91906150ef565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300391906150ef565b90506001600160a01b0381166131a157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613051573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307591906150ef565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e691906150ef565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561314b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316f91906150ef565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790556131ca565b6011805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915561139c903090600019613499565b6000546001600160a01b031633146132515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146132ce5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a54610100900460ff16156133265760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cf8565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015613360573d6000803e3d6000fd5b50565b6000546001600160a01b031633146133b15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cf8565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d51565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb8919061510c565b6001600160a01b0383166134ef5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf8565b6001600160a01b0382166135455760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cf8565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600b54600090816135b96012600a614f75565b6135c7906305f5e100614fbf565b6011546001600160a01b031660009081526008602052604090205490915060ff16156136b1576011546001600160a01b031660009081526001602052604090205482108061362e57506011546001600160a01b031660009081526002602052604090205481105b156136615761363f6012600a614f75565b61364d906305f5e100614fbf565b600b5461365a9190614f84565b9250505090565b6011546001600160a01b0316600090815260016020526040902054613686908361503c565b6011546001600160a01b03166000908152600260205260409020549092506136ae908261503c565b90505b600954156138305760005b60095460ff8216101561382e57826001600060098460ff16815481106136e4576136e461500d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137525750816002600060098460ff168154811061372b5761372b61500d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613786576137636012600a614f75565b613771906305f5e100614fbf565b600b5461377e9190614f84565b935050505090565b6001600060098360ff16815481106137a0576137a061500d565b60009182526020808320909101546001600160a01b031683528201929092526040019020546137cf908461503c565b92506002600060098360ff16815481106137eb576137eb61500d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461381a908361503c565b9150806138268161506e565b9150506136bc565b505b61383c6012600a614f75565b61384a906305f5e100614fbf565b600b546138579190614f84565b82101561386a5761363f6012600a614f75565b61365a8183614f84565b60006001600160a01b0384166138f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cf8565b6001600160a01b03831661396e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cf8565b600082116139e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cf8565b6001600160a01b0384166000908152600360205260408120548190819060ff1615613a125760019250613a40565b6001600160a01b03861660009081526003602052604090205460ff1615613a3c5760019150613a40565b5060015b613a4a8787613f8a565b15613c3a57601a5460ff16613aa15760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cf8565b8280613aaa5750815b15613b6e576001600160a01b03871660009081526007602052604090205460ff16158015613af157506001600160a01b03861660009081526007602052604090205460ff16155b15613b6e57601854851115613b6e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cf8565b6010546001600160a01b03878116911614801590613b8a575081155b15613c3a576001600160a01b03861660009081526007602052604090205460ff16613c3a5760195485613bbc8861230e565b613bc691906150d7565b1115613c3a5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cf8565b6001600160a01b03871660009081526006602052604090205460019060ff1680613c7c57506001600160a01b03871660009081526006602052604090205460ff165b15613c85575060005b8215613cf55760135460ff16158015613ca55750601354610100900460ff165b15613cf55742601454601554613cbb91906150d7565b1015613cf5576000613ccc3061230e565b90506016548110613cf3576017548110613ce557506017545b613cee8161405e565b426015555b505b613d0488888884888888613d10565b98975050505050505050565b601a54600090610100900460ff16613dbc57613d2c888861444e565b601a54610100900460ff16158015613d495750613d498888613f8a565b15613dbc5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610cf8565b6000613dcd898989898989896145ac565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613dfc90849061503c565b909155505060608101516001600160a01b03891660009081526001602052604081208054909190613e2e9084906150d7565b90915550506001600160a01b03891660009081526008602052604090205460ff1615613e92576001600160a01b038916600090815260026020526040902054613e7890889061503c565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b03881660009081526008602052604090205460ff1615613ef25780516001600160a01b038916600090815260026020526040902054613ed891906150d7565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613f09575060008160200151115b15613f2a578060a00151600b6000828254613f24919061503c565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613f7391815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590613fb757506000546001600160a01b03838116911614155b8015613fce57506000546001600160a01b03163214155b8015613ff357506001600160a01b0382166000908152600a602052604090205460ff16155b801561401857506001600160a01b0383166000908152600a602052604090205460ff16155b801561402f57506001600160a01b03821661dead14155b801561404357506001600160a01b03821615155b8015611b5157506001600160a01b0383163014159392505050565b6013805460ff1916600117905560408051606081018252600f5461ffff80821683526201000082048116602084015264010000000090910416918101829052906140a85750614441565b3060009081526005602090815260408083206010546001600160a01b0316845290915290205460001914614101573060009081526005602090815260408083206010546001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff16856141229190614fbf565b61412c9190614f84565b6141369190614f84565b90506000614144828561503c565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061417e5761417e61500d565b6001600160a01b03928316602091820292909201810191909152601054604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156141f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421491906150ef565b816001815181106142275761422761500d565b6001600160a01b0392831660209182029290920101526010546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614286908590600090869030904290600401615129565b600060405180830381600087803b1580156142a057600080fd5b505af11580156142b4573d6000803e3d6000fd5b50479250600091508490506142c98684614fbf565b6142d39190614f84565b905084156143c4576010546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614362573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143879190615165565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6143ce818361503c565b91508560000151866040018181516143e691906150b4565b61ffff90811690915260208801518492501615614439576012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614437573d6000803e3d6000fd5b505b505050505050505b506013805460ff19169055565b601a54610100900460ff16156144cc5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cf8565b6144d68282613f8a565b1580156144f057506011546001600160a01b038281169116145b1561107d576001600160a01b038083166000908152600a60205260409020805460ff19166001179055601a805461ff00191661010017908190556201000090041661456557601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6145ec6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61462c6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6146346135a6565b60c082018190526146459088614fbf565b60808201526146548989613f8a565b1561470757601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301528a81166024830152604482018a9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156146f0575060408051601f3d908101601f191682019092526146ed9181019061510c565b60015b6146f957600080fd5b90508061470557600080fd5b505b85156147e857600080612710861561473757600d5461ffff80821694506601000000000000909104169150614775565b871561475b57600c5461ffff80821694506601000000000000909104169150614775565b600e5461ffff808216945066010000000000009091041691505b80614780848c614fbf565b61478a9190614f84565b60208501528061479a838c614fbf565b6147a49190614f84565b6040850181905260208501516147ba91906150d7565b6147c4908b61503c565b845260c084015160208501516147da9190614fbf565b60a085015250614801915050565b6000602082018190526040820181905287825260a08201525b6040810151156148d8578060c00151816040015161481f9190614fbf565b306000908152600160205260408120805490919061483e9084906150d7565b90915550503060009081526008602052604090205460ff16156148865760408082015130600090815260026020529182208054919290916148809084906150d7565b90915550505b306001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604001516040516148cf91815260200190565b60405180910390a35b8060c0015181604001516148ec9190614fbf565b8160a001516148fb91906150d7565b816080015161490a919061503c565b606082015298975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156149735761497361491b565b604052919050565b600067ffffffffffffffff8211156149955761499561491b565b5060051b60200190565b6001600160a01b038116811461336057600080fd5b600082601f8301126149c557600080fd5b813560206149da6149d58361497b565b61494a565b82815260059290921b840181019181810190868411156149f957600080fd5b8286015b84811015614a1d578035614a108161499f565b83529183019183016149fd565b509695505050505050565b801515811461336057600080fd5b60008060408385031215614a4957600080fd5b823567ffffffffffffffff811115614a6057600080fd5b614a6c858286016149b4565b9250506020830135614a7d81614a28565b809150509250929050565b600060208083528351808285015260005b81811015614ab557858101830151858201604001528201614a99565b81811115614ac7576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215614aef57600080fd5b5035919050565b60008060408385031215614b0957600080fd5b8235614b148161499f565b946020939093013593505050565b60008060408385031215614b3557600080fd5b8235614b408161499f565b91506020830135614a7d81614a28565b60008060408385031215614b6357600080fd5b823567ffffffffffffffff80821115614b7b57600080fd5b614b87868387016149b4565b9350602091508185013581811115614b9e57600080fd5b85019050601f81018613614bb157600080fd5b8035614bbf6149d58261497b565b81815260059190911b82018301908381019088831115614bde57600080fd5b928401925b82841015614bfc57833582529284019290840190614be3565b80955050505050509250929050565b803561ffff81168114614c1d57600080fd5b919050565b600080600060608486031215614c3757600080fd5b614c4084614c0b565b9250614c4e60208501614c0b565b9150614c5c60408501614c0b565b90509250925092565b600080600060608486031215614c7a57600080fd5b8335614c858161499f565b92506020840135614c958161499f565b929592945050506040919091013590565b60008060408385031215614cb957600080fd5b50508035926020909101359150565b60008060008060808587031215614cde57600080fd5b8435614ce981614a28565b93506020850135614cf981614a28565b92506040850135614d0981614a28565b91506060850135614d1981614a28565b939692955090935050565b600060208284031215614d3657600080fd5b8135611b518161499f565b600080600080600060a08688031215614d5957600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215614d8f57600080fd5b614d9883614c0b565b9150614da660208401614c0b565b90509250929050565b600060208284031215614dc157600080fd5b8135611b5181614a28565b60008060408385031215614ddf57600080fd5b8235614dea8161499f565b91506020830135614a7d8161499f565b600081518084526020808501945080840160005b83811015614e335781516001600160a01b031687529582019590820190600101614e0e565b509495945050505050565b604081526000614e516040830185614dfa565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614ecc578160001904821115614eb257614eb2614e62565b80851615614ebf57918102915b93841c9390800290614e96565b509250929050565b600082614ee357506001610eb8565b81614ef057506000610eb8565b8160018114614f065760028114614f1057614f2c565b6001915050610eb8565b60ff841115614f2157614f21614e62565b50506001821b610eb8565b5060208310610133831016604e8410600b8410161715614f4f575081810a610eb8565b614f598383614e91565b8060001904821115614f6d57614f6d614e62565b029392505050565b6000611b5160ff841683614ed4565b600082614fba577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614fd957614fd9614e62565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008282101561504e5761504e614e62565b500390565b600060001982141561506757615067614e62565b5060010190565b600060ff821660ff81141561508557615085614e62565b60010192915050565b600061ffff8083168185168083038211156150ab576150ab614e62565b01949350505050565b600061ffff838116908316818110156150cf576150cf614e62565b039392505050565b600082198211156150ea576150ea614e62565b500190565b60006020828403121561510157600080fd5b8151611b518161499f565b60006020828403121561511e57600080fd5b8151611b5181614a28565b85815284602082015260a06040820152600061514860a0830186614dfa565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561517a57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122027d89aed5f0238f26ef94b781cea825eae2769aa522a29d7f3ace845d04f608e64736f6c634300080c0033

Deployed Bytecode Sourcemap

4110:26576:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6235:73;;;;;;;;;;;;6266:42;6235:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6235:73:0;;;;;;;;6674:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6674:28:0;245:177:1;16790:172:0;;;;;;;;;;-1:-1:-1;16790:172:0;;;;;:::i;:::-;;:::i;:::-;;11621:80;;;;;;;;;;-1:-1:-1;11693:5:0;;;;;;;;;;;;;;;;;11621:80;;;;;;;:::i;6174:26::-;;;;;;;;;;-1:-1:-1;6174:26:0;;;;-1:-1:-1;;;;;6174:26:0;;;17422:150;;;;;;;;;;-1:-1:-1;17422:150:0;;;;;:::i;:::-;;:::i;12312:159::-;;;;;;;;;;-1:-1:-1;12312:159:0;;;;;:::i;:::-;;:::i;:::-;;;4228:14:1;;4221:22;4203:41;;4191:2;4176:18;12312:159:0;4063:187:1;20190:112:0;;;;;;;;;;;;;:::i;14624:1519::-;;;;;;;;;;-1:-1:-1;14624:1519:0;;;;;:::i;:::-;;:::i;11324:115::-;;;;;;;;;;;;;:::i;9196:397::-;;;;;;;;;;-1:-1:-1;9196:397:0;;;;;:::i;:::-;;:::i;18340:::-;;;;;;;;;;-1:-1:-1;18340:397:0;;;;;:::i;:::-;;:::i;12977:306::-;;;;;;;;;;-1:-1:-1;12977:306:0;;;;;:::i;:::-;;:::i;19240:267::-;;;;;;;;;;-1:-1:-1;19240:267:0;;;;;:::i;:::-;;:::i;26219:373::-;;;;;;;;;;-1:-1:-1;26219:373:0;;;;;:::i;:::-;;:::i;17219:195::-;;;;;;;;;;-1:-1:-1;17219:195:0;;;;;:::i;:::-;;:::i;14347:141::-;;;;;;;;;;;;;:::i;5971:42::-;;;;;;;;;;;;6009:4;5971:42;;8951:237;;;;;;;;;;-1:-1:-1;8951:237:0;;;;;:::i;:::-;;:::i;16151:250::-;;;;;;;;;;-1:-1:-1;16151:250:0;;;;;:::i;:::-;;:::i;6709:25::-;;;;;;;;;;;;;;;;11445:80;;;;;;;;;;-1:-1:-1;11445:80:0;;4970:2;7790:36:1;;7778:2;7763:18;11445:80:0;7648:184:1;17103:108:0;;;;;;;;;;-1:-1:-1;17103:108:0;;;;;:::i;:::-;;:::i;20310:338::-;;;;;;;;;;-1:-1:-1;20310:338:0;;;;;:::i;:::-;;:::i;19515:140::-;;;;;;;;;;-1:-1:-1;19515:140:0;;;;;:::i;:::-;;:::i;18963:269::-;;;;;;;;;;-1:-1:-1;18963:269:0;;;;;:::i;:::-;;:::i;6207:21::-;;;;;;;;;;-1:-1:-1;6207:21:0;;;;-1:-1:-1;;;;;6207:21:0;;;6866:34;;;;;;;;;;-1:-1:-1;6866:34:0;;;;;;;;10182:588;;;;;;;;;;-1:-1:-1;10182:588:0;;;;;:::i;:::-;;:::i;19801:125::-;;;;;;;;;;-1:-1:-1;19801:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19890:28:0;19866:4;19890:28;;;:19;:28;;;;;;;;;19801:125;6907:36;;;;;;;;;;-1:-1:-1;6907:36:0;;;;;;;;;;;17584:367;;;;;;;;;;-1:-1:-1;17584:367:0;;;;;:::i;:::-;;:::i;19934:134::-;;;;;;;;;;-1:-1:-1;19934:134:0;;;;;:::i;:::-;;:::i;16409:220::-;;;;;;;;;;-1:-1:-1;16409:220:0;;;;;:::i;:::-;;:::i;19663:130::-;;;;;;;;;;-1:-1:-1;19663:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;19755:30:0;19731:4;19755:30;;;:21;:30;;;;;;;;;19663:130;20076:106;;;;;;;;;;;;;:::i;11933:198::-;;;;;;;;;;-1:-1:-1;11933:198:0;;;;;:::i;:::-;;:::i;10778:193::-;;;;;;;;;;;;;:::i;5401:139::-;;;;;;;;;;-1:-1:-1;5401:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8781:6:1;8814:15;;;8796:34;;8866:15;;;8861:2;8846:18;;8839:43;8918:15;;;8898:18;;;8891:43;;;;8970:15;;;8965:2;8950:18;;8943:43;8758:3;8743:19;5401:139:0;8548:444:1;13839:500:0;;;;;;;;;;-1:-1:-1;13839:500:0;;;;;:::i;:::-;;:::i;14496:120::-;;;;;;;;;;-1:-1:-1;14496:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;14588:20:0;14564:4;14588:20;;;:11;:20;;;;;;;;;14496:120;11707:79;;;;;;;;;;-1:-1:-1;11759:7:0;11777:6;-1:-1:-1;;;;;11777:6:0;11707:79;;17959:373;;;;;;;;;;-1:-1:-1;17959:373:0;;;;;:::i;:::-;;:::i;12796:173::-;;;;;;;;;;;;;:::i;25484:537::-;;;;;;;;;;;;;:::i;11531:84::-;;;;;;;;;;-1:-1:-1;11605:7:0;;;;;;;;;;;;;;;;;11531:84;;8348:595;;;;;;;;;;;;;:::i;12139:165::-;;;;;;;;;;-1:-1:-1;12139:165:0;;;;;:::i;:::-;;:::i;18745:210::-;;;;;;;;;;-1:-1:-1;18745:210:0;;;;;:::i;:::-;;:::i;5700:144::-;;;;;;;;;;-1:-1:-1;5700:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5549:142;;;;;;;;;;-1:-1:-1;5549:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20791:164;;;;;;;;;;-1:-1:-1;20791:164:0;;;;;:::i;:::-;;:::i;5853:109::-;;;;;;;;;;-1:-1:-1;5853:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;9710:6:1;9743:15;;;9725:34;;9795:15;;;9790:2;9775:18;;9768:43;9847:15;;9827:18;;;9820:43;;;;9688:2;9673:18;5853:109:0;9504:365:1;11792:133:0;;;;;;;;;;-1:-1:-1;11792:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11894:19:0;;;11876:7;11894:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11792:133;6592:44;;;;;;;;;;;;;;;;13291:540;;;;;;;;;;-1:-1:-1;13291:540:0;;;;;:::i;:::-;;:::i;20656:127::-;;;;;;;;;;-1:-1:-1;20656:127:0;;;;;:::i;:::-;;:::i;26029:182::-;;;;;;;;;;;;;:::i;16637:145::-;;;;;;;;;;-1:-1:-1;16637:145:0;;;;;:::i;:::-;;:::i;6387:128::-;;;;;;;;;;-1:-1:-1;6387:128:0;;;;-1:-1:-1;;;;;6387:128:0;;;6546:39;;;;;;;;;;-1:-1:-1;6546:39:0;;;;;;;;;;;16970:125;;;;;;;;;;-1:-1:-1;16970:125:0;;;;;:::i;:::-;;:::i;16790:172::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;;;;;;;;;16898:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16898:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16936:8;;16946:7;;16898:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16790:172:::0;;:::o;17422:150::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;17506:3:::1;17499;:10;;17491:31;;;::::0;-1:-1:-1;;;17491:31:0;;12158:2:1;17491:31:0::1;::::0;::::1;12140:21:1::0;12197:1;12177:18;;;12170:29;12235:10;12215:18;;;12208:38;12263:18;;17491:31:0::1;11956:331:1::0;17491:31:0::1;17533:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;17533:9:0;;;::::1;-1:-1:-1::0;;;;;17533:9:0::1;::::0;:26:::1;::::0;364:18:1;;17533:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17422:150:::0;:::o;12312:159::-;12387:4;12404:37;12413:10;12425:7;12434:6;12404:8;:37::i;:::-;-1:-1:-1;12459:4:0;12312:159;;;;;:::o;20190:112::-;20235:7;20280:13;4970:2;20280;:13;:::i;:::-;20262:14;;:32;;;;:::i;:::-;20255:39;;20190:112;:::o;14624:1519::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;14718:7:::1;14714:1422;;;-1:-1:-1::0;;;;;14751:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;14750:21;14742:62;;;::::0;-1:-1:-1;;;14742:62:0;;14465:2:1;14742:62:0::1;::::0;::::1;14447:21:1::0;14504:2;14484:18;;;14477:30;14543;14523:18;;;14516:58;14591:18;;14742:62:0::1;14263:352:1::0;14742:62:0::1;-1:-1:-1::0;;;;;14822:16:0;::::1;14841:1;14822:16:::0;;;:7:::1;:16;::::0;;;;;:20;14819:116:::1;;-1:-1:-1::0;;;;;14902:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;14882:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;14863:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;14819:116:::1;-1:-1:-1::0;;;;;14949:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;14949:27:0::1;14972:4;14949:27;::::0;;15005:6:::1;::::0;;;::::1;14994:17;14991:79;;15031:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;15031:23:0;;;;;::::1;::::0;;-1:-1:-1;;15031:23:0::1;-1:-1:-1::0;;;;;15031:23:0;::::1;;::::0;;14991:79:::1;14624:1519:::0;;:::o;14714:1422::-:1;15092:7;15087:1049;;-1:-1:-1::0;;;;;15124:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;15116:61;;;::::0;-1:-1:-1;;;15116:61:0;;14822:2:1;15116:61:0::1;::::0;::::1;14804:21:1::0;14861:2;14841:18;;;14834:30;14900;14880:18;;;14873:58;14948:18;;15116:61:0::1;14620:352:1::0;15116:61:0::1;15207:6;::::0;-1:-1:-1;;;;;15196:17:0;;::::1;15207:6:::0;::::1;15196:17;15192:933;;;15272:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;15253:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;15234:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;15301:7:::1;:16:::0;;;;;:20;;;15340:11:::1;:20:::0;;;:28;;-1:-1:-1;;15340:28:0::1;::::0;;14624:1519;;:::o;15192:933::-:1;15393:9;:16:::0;15413:1:::1;15393:21;15390:735;;;15473:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;15454:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;15435:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;15502:7:::1;:16:::0;;;;;:20;;;15541:11:::1;:20:::0;;;:28;;-1:-1:-1;;15541:28:0::1;::::0;;15588:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;15588:15:0;;;;;-1:-1:-1;;15588:15:0::1;::::0;;;;;14624:1519;;:::o;15390:735::-:1;15649:9;15644:466;15668:9;:16:::0;15664:20;::::1;15644:466;;;15734:7;-1:-1:-1::0;;;;;15718:23:0::1;:9;15728:1;15718:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;15718:12:0::1;:23;15714:377;;;15785:9;15795:16:::0;;:20:::1;::::0;15814:1:::1;::::0;15795:20:::1;:::i;:::-;15785:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;15770:9:::1;:12:::0;;-1:-1:-1;;;;;15785:31:0;;::::1;::::0;15780:1;;15770:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;15770:46:0::1;-1:-1:-1::0;;;;;15770:46:0;;::::1;;::::0;;15843:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;15928:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;15909:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;15890:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;15965:11:::1;:20:::0;;;:28;;-1:-1:-1;;15965:28:0::1;::::0;;16020:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;16020:15:0;;;;;-1:-1:-1;;16020:15:0::1;::::0;;;;;15644:466:::1;14624:1519:::0;;:::o;15714:377::-:1;15686:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15644:466;;;;14624:1519:::0;;:::o;11324:115::-;11379:7;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;:::-;11390:31;;11410:8;;;11390:31;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;9196:397::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;9345:7:::1;:14;9326:8;:15;:33;9318:67;;;::::0;-1:-1:-1;;;9318:67:0;;16120:2:1;9318:67:0::1;::::0;::::1;16102:21:1::0;16159:2;16139:18;;;16132:30;16198:23;16178:18;;;16171:51;16239:18;;9318:67:0::1;15918:345:1::0;9318:67:0::1;9401:7;9396:190;9418:8;:15;9414:1;:19;;;9396:190;;;9499:13;4970:2;9499;:13;:::i;:::-;9488:7;9496:1;9488:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;9463:21;9473:10;9463:9;:21::i;:::-;:49;;9455:58;;;::::0;::::1;;9528:46;9550:8;9559:1;9550:11;;;;;;;;;;:::i;:::-;;;;;;;9563:7;9571:1;9563:10;;;;;;;;;;:::i;:::-;;;;;;;9528:21;:46::i;:::-;9435:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9396:190;;18340:397:::0;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;18448:12:::1;18485:9:::0;18463:19:::1;18473:9:::0;18463:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;18448:46;;6113:4;18513:5;:25;;;;18505:34;;;::::0;::::1;;18550:14;:32:::0;;::::1;18640:36:::0;;::::1;::::0;::::1;-1:-1:-1::0;;18593:36:0;;::::1;::::0;::::1;-1:-1:-1::0;;18593:36:0;;;18550:32;;::::1;18593:36:::0;;;;;;;::::1;18640;;::::0;;18714:15:::1;18575:7:::0;18714:5;:15:::1;:::i;:::-;18687:14;:42:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;18340:397:0:o;12977:306::-;-1:-1:-1;;;;;13098:19:0;;13077:4;13098:19;;;:11;:19;;;;;;;;13118:10;13098:31;;;;;;;;-1:-1:-1;;13098:52:0;13094:126;;-1:-1:-1;;;;;13167:19:0;;;;;;:11;:19;;;;;;;;13187:10;13167:31;;;;;;;:41;;13202:6;;13167:19;:41;;13202:6;;13167:41;:::i;:::-;;;;-1:-1:-1;;13094:126:0;13239:36;13249:6;13257:9;13268:6;13239:9;:36::i;:::-;13232:43;12977:306;-1:-1:-1;;;;12977:306:0:o;19240:267::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;19382:4:::1;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;19372:14;;;;:::i;:::-;19360:7:::0;19349;5033:13:::1;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;19339:17;;;;:::i;:::-;19338:29;;;;:::i;:::-;:49;;19330:112;;;::::0;-1:-1:-1;;;19330:112:0;;17101:2:1;19330:112:0::1;::::0;::::1;17083:21:1::0;17140:2;17120:18;;;17113:30;17179:34;17159:18;;;17152:62;17250:20;17230:18;;;17223:48;17288:19;;19330:112:0::1;16899:414:1::0;19330:112:0::1;19492:7:::0;19481;5033:13:::1;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;19471:17;;;;:::i;:::-;19470:29;;;;:::i;:::-;19453:14;:46:::0;-1:-1:-1;;19240:267:0:o;26219:373::-;26344:7;:14;26325:8;:15;:33;26317:67;;;;-1:-1:-1;;;26317:67:0;;16120:2:1;26317:67:0;;;16102:21:1;16159:2;16139:18;;;16132:30;16198:23;16178:18;;;16171:51;16239:18;;26317:67:0;15918:345:1;26317:67:0;26400:7;26395:190;26417:8;:15;26413:1;:19;;;26395:190;;;26487:7;26495:1;26487:10;;;;;;;;;;:::i;:::-;;;;;;;26462:21;26472:10;26462:9;:21::i;:::-;:35;;26454:44;;;;;;26513:60;26523:10;26535:8;26544:1;26535:11;;;;;;;;;;:::i;:::-;;;;;;;4970:2;26559;:13;;;;:::i;:::-;26548:7;26556:1;26548:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26513:9;:60::i;:::-;-1:-1:-1;26434:3:0;;;;:::i;:::-;;;;26395:190;;17219:195;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;17341:9:::1;::::0;:65:::1;::::0;;;;17550:14:1;;17543:22;17341:65:0::1;::::0;::::1;17525:41:1::0;17609:14;;17602:22;17582:18;;;17575:50;17668:14;;17661:22;17641:18;;;17634:50;17727:14;;17720:22;17700:18;;;17693:50;17341:9:0;;;::::1;-1:-1:-1::0;;;;;17341:9:0::1;::::0;:24:::1;::::0;17497:19:1;;17341:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17219:195:::0;;;;:::o;14347:141::-;14400:7;14457:21;14475:1;14457:9;:21::i;:::-;14439:15;6266:42;14439:9;:15::i;:::-;:39;;;;:::i;:::-;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;:::-;14428:51;;;;:::i;8951:237::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;9047:13:::1;::::0;;;::::1;;;9046:14;9038:23;;;::::0;::::1;;9088:13;4970:2;9088;:13;:::i;:::-;9081:20;::::0;:6;:20:::1;:::i;:::-;9072:29;;9112:68;9130:10;9142:2;9146:6;9154:5;9161::::0;9168::::1;9175:4;9112:17;:68::i;16151:250::-:0;16217:7;16256;;16245;:18;;16237:73;;;;-1:-1:-1;;;16237:73:0;;18089:2:1;16237:73:0;;;18071:21:1;18128:2;18108:18;;;18101:30;18167:34;18147:18;;;18140:62;18238:12;18218:18;;;18211:40;18268:19;;16237:73:0;17887:406:1;16237:73:0;16321:19;16344:10;:8;:10::i;:::-;16321:33;-1:-1:-1;16372:21:0;16321:33;16372:7;:21;:::i;:::-;16365:28;16151:250;-1:-1:-1;;;16151:250:0:o;17103:108::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;17172:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17172:31:0::1;::::0;::::1;160:74:1::0;17172:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17172:31:0::1;14:226:1::0;20310:338:0;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;20524:16;20504;5033:13:::1;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;20494:26;;;;:::i;:::-;20493:47;;;;:::i;:::-;20477:13;:63:::0;20592:13;20575;5033::::1;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;20565:23;;;;:::i;:::-;20564:41;;;;:::i;:::-;20551:10;:54:::0;20616:17:::1;:24:::0;-1:-1:-1;;;;20310:338:0:o;19515:140::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;-1:-1:-1;;;;;19607:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19607:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19515:140::o;18963:269::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;19104:4:::1;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;19094:14;;;;:::i;:::-;19082:7:::0;19071;5033:13:::1;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;19061:17;;;;:::i;:::-;19060:29;;;;:::i;:::-;:49;;19052:117;;;::::0;-1:-1:-1;;;19052:117:0;;18500:2:1;19052:117:0::1;::::0;::::1;18482:21:1::0;18539:2;18519:18;;;18512:30;18578:34;18558:18;;;18551:62;18649:25;18629:18;;;18622:53;18692:19;;19052:117:0::1;18298:419:1::0;19052:117:0::1;19217:7:::0;19206;5033:13:::1;4970:2;5033;:13;:::i;:::-;5016:30;::::0;4814:11:::1;5016:30;:::i;:::-;19196:17;;;;:::i;:::-;19195:29;;;;:::i;:::-;19180:12;:44:::0;-1:-1:-1;;18963:269:0:o;10182:588::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;-1:-1:-1;;;;;10261:22:0;::::1;10253:96;;;::::0;-1:-1:-1;;;10253:96:0;;18924:2:1;10253:96:0::1;::::0;::::1;18906:21:1::0;18963:2;18943:18;;;18936:30;19002:34;18982:18;;;18975:62;19073:31;19053:18;;;19046:59;19122:19;;10253:96:0::1;18722:425:1::0;10253:96:0::1;-1:-1:-1::0;;;;;10368:16:0;::::1;6266:42;10368:16;;10360:90;;;::::0;-1:-1:-1;;;10360:90:0;;18924:2:1;10360:90:0::1;::::0;::::1;18906:21:1::0;18963:2;18943:18;;;18936:30;19002:34;18982:18;;;18975:62;19073:31;19053:18;;;19046:59;19122:19;;10360:90:0::1;18722:425:1::0;10360:90:0::1;10481:6;::::0;;10461:34:::1;::::0;-1:-1:-1;;;;;10481:6:0;;::::1;::::0;10461:19:::1;:34::i;:::-;10506:35;10526:8;10536:4;10506:19;:35::i;:::-;10585:1;10575:6:::0;;10565:17:::1;::::0;-1:-1:-1;;;;;10575:6:0::1;10565:9;:17::i;:::-;:21;10562:99;;;10613:6;::::0;10603:46:::1;::::0;-1:-1:-1;;;;;10613:6:0::1;10621:8:::0;10631:17:::1;10613:6:::0;10631:9:::1;:17::i;10603:46::-;;10562:99;10681:6;:17:::0;;-1:-1:-1;;10681:17:0::1;-1:-1:-1::0;;;;;10681:17:0;::::1;::::0;;::::1;::::0;;10714:38:::1;::::0;10681:17;;;;10714:38:::1;::::0;10681:6;10714:38:::1;10182:588:::0;:::o;17584:367::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;17687:12:::1;17724:9:::0;17702:19:::1;17712:9:::0;17702:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;17687:46;;6009:4;17752:5;:20;;;;17744:29;;;::::0;::::1;;17784:9;:27:::0;;::::1;17864:31:::0;;::::1;::::0;::::1;-1:-1:-1::0;;17822:31:0;;::::1;::::0;::::1;-1:-1:-1::0;;17822:31:0;;;17784:27;;::::1;17822:31:::0;;;;;;;::::1;17864;;::::0;;17928:15:::1;17804:7:::0;17928:5;:15:::1;:::i;:::-;17906:9;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;17584:367:0:o;19934:134::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;-1:-1:-1;;;;;20022:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;20022:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19934:134::o;16409:220::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;16493:16:::1;::::0;::::1;::::0;::::1;;;16492:17;16484:26;;;::::0;::::1;;-1:-1:-1::0;;;;;16529:28:0;::::1;16552:4;16529:28;;16521:55;;;::::0;-1:-1:-1;;;16521:55:0;;19354:2:1;16521:55:0::1;::::0;::::1;19336:21:1::0;19393:2;19373:18;;;19366:30;19432:16;19412:18;;;19405:44;19466:18;;16521:55:0::1;19152:338:1::0;16521:55:0::1;16587:9;:34:::0;;-1:-1:-1;;;;;16587:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;16409:220::o;20076:106::-;20117:7;20160:13;4970:2;20160;:13;:::i;:::-;20144:12;;:30;;;;:::i;11933:198::-;-1:-1:-1;;;;;12023:20:0;;11999:7;12023:20;;;:11;:20;;;;;;;;12019:49;;;-1:-1:-1;;;;;;12052:16:0;;;;;:7;:16;;;;;;;11933:198::o;12019:49::-;-1:-1:-1;;;;;12106:16:0;;;;;;:7;:16;;;;;;12086:37;;:19;:37::i;10778:193::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;10863:6:::1;::::0;;10843:34:::1;::::0;-1:-1:-1;;;;;10863:6:0;;::::1;::::0;10843:19:::1;:34::i;:::-;10905:1;10888:19:::0;;-1:-1:-1;;10888:19:0::1;::::0;;10923:40:::1;::::0;10905:1;;10923:40:::1;::::0;10905:1;;10923:40:::1;10778:193::o:0;13839:500::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;13920:16;13916:416:::1;;-1:-1:-1::0;;;;;13953:13:0;;::::1;13969:5;13953:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13953:21:0::1;::::0;;13989:9:::1;::::0;:32;;;;;::::1;::::0;::::1;19663:74:1::0;;;;19753:18;;;19746:50;;;;13989:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19636:18:1;;13989:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;13916:416;14058:17;::::0;:22;14054:136:::1;;14147:6;14127:17;;14109:15;:35;;;;:::i;:::-;:44;14101:73;;;::::0;-1:-1:-1;;;14101:73:0;;20009:2:1;14101:73:0::1;::::0;::::1;19991:21:1::0;20048:2;20028:18;;;20021:30;20087:18;20067;;;20060:46;20123:18;;14101:73:0::1;19807:340:1::0;14101:73:0::1;-1:-1:-1::0;;;;;14204:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14204:20:0::1;14220:4;14204:20:::0;;::::1;::::0;;;14259:15:::1;14239:17;:35:::0;;;14289:9:::1;::::0;:31;;;;;;;::::1;19663:74:1::0;;;;19753:18;;;19746:50;14289:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19636:18:1;;14289:31:0::1;19495:307:1::0;17959:373:0;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;18063:12:::1;18100:9:::0;18078:19:::1;18088:9:::0;18078:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;18063:46;;6059:4;18128:5;:21;;;;18120:30;;;::::0;::::1;;18161:10;:28:::0;;::::1;18243:32:::0;;::::1;::::0;::::1;-1:-1:-1::0;;18200:32:0;;::::1;::::0;::::1;-1:-1:-1::0;;18200:32:0;;;18161:28;;::::1;18200:32:::0;;;;;;;::::1;18243;;::::0;;18309:15:::1;18182:7:::0;18309:5;:15:::1;:::i;:::-;18286:10;:38:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;17959:373:0:o;12796:173::-;12860:4;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;12909:9:::1;::::0;12877:62:::1;::::0;12894:4:::1;::::0;-1:-1:-1;;;;;12909:9:0::1;-1:-1:-1::0;;12877:8:0::1;:62::i;:::-;-1:-1:-1::0;12957:4:0::1;12796:173:::0;:::o;25484:537::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;25546:14:::1;::::0;::::1;;25545:15;25537:52;;;::::0;-1:-1:-1;;;25537:52:0;;20354:2:1;25537:52:0::1;::::0;::::1;20336:21:1::0;20393:2;20373:18;;;20366:30;20432:26;20412:18;;;20405:54;20476:18;;25537:52:0::1;20152:348:1::0;25537:52:0::1;25608:16;::::0;::::1;::::0;::::1;;;25600:53;;;::::0;-1:-1:-1;;;25600:53:0;;20707:2:1;25600:53:0::1;::::0;::::1;20689:21:1::0;20746:2;20726:18;;;20719:30;20785:26;20765:18;;;20758:54;20829:18;;25600:53:0::1;20505:348:1::0;25600:53:0::1;25675:9;::::0;;;::::1;-1:-1:-1::0;;;;;25675:9:0::1;25664:99;;25715:9;:36:::0;;;::::1;25745:4;25715:36:::0;::::1;;::::0;;25664:99:::1;25777:9;::::0;25797:6:::1;::::0;25777:85:::1;::::0;;;;-1:-1:-1;;;;;25797:6:0;;::::1;25777:85;::::0;::::1;21081:74:1::0;21203:10;25812:12:0::1;21191:23:1::0;21171:18;;;21164:51;21263:18;25834:15:0::1;21251:31:1::0;21231:18;;;21224:59;4970:2:0::1;21299:18:1::0;;;21292:45;25777:9:0;;;::::1;;::::0;:19:::1;::::0;21053::1;;25777:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;25773:101:::0;25884:14:::1;:21:::0;;-1:-1:-1;;25884:21:0::1;25901:4;25884:21;::::0;;25942:6:::1;::::0;25952:5:::1;::::0;25932:17:::1;::::0;-1:-1:-1;;;;;25942:6:0::1;25932:9;:17::i;:::-;:25;;;;:::i;:::-;25916:13;:41:::0;25992:6:::1;::::0;26008:5:::1;::::0;25982:17:::1;::::0;-1:-1:-1;;;;;25992:6:0::1;25982:9;:17::i;:::-;:22;::::0;26002:2:::1;25982:22;:::i;:::-;25981:32;;;;:::i;:::-;25968:10;:45:::0;25484:537::o;8348:595::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;8409:13:::1;::::0;;;::::1;;;8408:14;8400:46;;;::::0;-1:-1:-1;;;8400:46:0;;21550:2:1;8400:46:0::1;::::0;::::1;21532:21:1::0;21589:2;21569:18;;;21562:30;21628:21;21608:18;;;21601:49;21667:18;;8400:46:0::1;21348:343:1::0;8400:46:0::1;8479:9;;;;;;;;;-1:-1:-1::0;;;;;8479:9:0::1;-1:-1:-1::0;;;;;8479:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8468:42:0::1;;8511:9;;;;;;;;;-1:-1:-1::0;;;;;8511:9:0::1;-1:-1:-1::0;;;;;8511:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8468:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22205:15:1;;;8468:75:0::1;::::0;::::1;22187:34:1::0;8537:4:0::1;22237:18:1::0;;;22230:43;22099:18;;8468:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8459:6;:84:::0;;-1:-1:-1;;8459:84:0::1;-1:-1:-1::0;;;;;8459:84:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;8554:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;8554:22:0::1;-1:-1:-1::0;8554:22:0::1;::::0;;8598:6;8614:9:::1;::::0;8589:55:::1;::::0;8598:6;;::::1;::::0;8614:9:::1;-1:-1:-1::0;;8589:8:0::1;:55::i;:::-;8687:9;::::0;8655:62:::1;::::0;8672:4:::1;::::0;-1:-1:-1;;;;;8687:9:0::1;-1:-1:-1::0;;8655:8:0::1;:62::i;:::-;8730:27;8750:6:::0;;-1:-1:-1;;;;;8750:6:0;;::::1;8730:27:::0;;:19:::1;:27;::::0;;;;;;;:34;;-1:-1:-1;;8730:34:0;;::::1;8760:4;8730:34:::0;;::::1;::::0;;;8803:4:::1;8775:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;8827:25;:32;;;::::1;::::0;::::1;::::0;;8888:6;;;;::::1;8870:25:::0;;:17:::1;:25:::0;;;;;;:32;;;;::::1;::::0;;::::1;::::0;;8915:13:::1;:20:::0;;;::::1;::::0;::::1;::::0;;8348:595::o;12139:165::-;12217:4;12234:40;12244:10;12256:9;12267:6;12234:9;:40::i;:::-;-1:-1:-1;12292:4:0;;12139:165;-1:-1:-1;;;12139:165:0:o;18745:210::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;18830:7:::1;:29:::0;;::::1;18870::::0;;::::1;::::0;::::1;-1:-1:-1::0;;18870:29:0;;;18830;;::::1;18870::::0;::::1;::::0;;18926:21:::1;18890:9:::0;18850;18926:21:::1;:::i;:::-;18910:7;:37:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18910:37:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;18745:210:0:o;20791:164::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;20867:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;20867:29:0;;::::1;;::::0;;20912:35:::1;::::0;::::1;::::0;::::1;::::0;20889:7;4228:14:1;4221:22;4203:41;;4191:2;4176:18;;4063:187;20912:35:0::1;;;;;;;;20791:164:::0;:::o;13291:540::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;13360:20:::1;13393:9;13360:43;;13414:16;13444:10;-1:-1:-1::0;;;;;13444:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13433:40:0::1;;13482:4;13489:10;-1:-1:-1::0;;;;;13489:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13433:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22205:15:1;;;13433:74:0::1;::::0;::::1;22187:34:1::0;22257:15;;22237:18;;;22230:43;22099:18;;13433:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13414:93:::0;-1:-1:-1;;;;;;13522:22:0;::::1;13518:200;;13581:10;-1:-1:-1::0;;;;;13581:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13570:43:0::1;;13622:4;13629:10;-1:-1:-1::0;;;;;13629:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13570:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22205:15:1;;;13570:77:0::1;::::0;::::1;22187:34:1::0;22257:15;;22237:18;;;22230:43;22099:18;;13570:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13561:6;:86:::0;;-1:-1:-1;;13561:86:0::1;-1:-1:-1::0;;;;;13561:86:0;;;::::1;::::0;;;::::1;::::0;;13518:200:::1;;;13689:6;:17:::0;;-1:-1:-1;;13689:17:0::1;-1:-1:-1::0;;;;;13689:17:0;::::1;;::::0;;13518:200:::1;13728:9;:22:::0;;-1:-1:-1;;13728:22:0::1;-1:-1:-1::0;;;;;13728:22:0;::::1;::::0;;::::1;::::0;;;13761:62:::1;::::0;13778:4:::1;::::0;-1:-1:-1;;13761:8:0::1;:62::i;20656:127::-:0;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;20733:11:::1;:42:::0;;-1:-1:-1;;20733:42:0::1;-1:-1:-1::0;;;;;20733:42:0;;;::::1;::::0;;;::::1;::::0;;20656:127::o;26029:182::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;26096:16:::1;::::0;::::1;::::0;::::1;;;26095:17;26087:58;;;::::0;-1:-1:-1;;;26087:58:0;;22486:2:1;26087:58:0::1;::::0;::::1;22468:21:1::0;22525:2;22505:18;;;22498:30;22564;22544:18;;;22537:58;22612:18;;26087:58:0::1;22284:352:1::0;26087:58:0::1;26164:6;::::0;;26156:47:::1;::::0;-1:-1:-1;;;;;26164:6:0;;::::1;::::0;26181:21:::1;26156:47:::0;::::1;;;::::0;26181:21;;26156:47;26164:6;26156:47;26181:21;26164:6;26156:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26029:182::o:0;16637:145::-;7370:6;;-1:-1:-1;;;;;7370:6:0;7380:10;7370:20;7362:50;;;;-1:-1:-1;;;7362:50:0;;10976:2:1;7362:50:0;;;10958:21:1;11015:2;10995:18;;;10988:30;-1:-1:-1;;;11034:18:1;;;11027:47;11091:18;;7362:50:0;10774:341:1;7362:50:0;16727:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;19681:55:1;;;16727:47:0::1;::::0;::::1;19663:74:1::0;19780:14;;19773:22;19753:18;;;19746:50;16727:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19636:18:1;;16727:47:0::1;19495:307:1::0;16970:125:0;17055:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17055:32:0;;;160:74:1;17031:4:0;;17055:9;;;;;:23;;133:18:1;;17055:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12479:309::-;-1:-1:-1;;;;;12573:20:0;;12565:52;;;;-1:-1:-1;;;12565:52:0;;23093:2:1;12565:52:0;;;23075:21:1;23132:2;23112:18;;;23105:30;23171:21;23151:18;;;23144:49;23210:18;;12565:52:0;22891:343:1;12565:52:0;-1:-1:-1;;;;;12636:21:0;;12628:53;;;;-1:-1:-1;;;12628:53:0;;23093:2:1;12628:53:0;;;23075:21:1;23132:2;23112:18;;;23105:30;23171:21;23151:18;;;23144:49;23210:18;;12628:53:0;22891:343:1;12628:53:0;-1:-1:-1;;;;;12694:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12747:33;;391:25:1;;;12747:33:0;;364:18:1;12747:33:0;;;;;;;12479:309;;;:::o;29865:818::-;29945:7;;29907;;;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;:::-;30014:6;;-1:-1:-1;;;;;30014:6:0;30002:19;;;;:11;:19;;;;;;29963:25;;-1:-1:-1;30002:19:0;;29999:217;;;30050:6;;-1:-1:-1;;;;;30050:6:0;30042:15;;;;:7;:15;;;;;;:25;-1:-1:-1;30042:25:0;:54;;-1:-1:-1;30079:6:0;;-1:-1:-1;;;;;30079:6:0;30071:15;;;;:7;:15;;;;;;:25;-1:-1:-1;30042:54:0;30038:84;;;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;:::-;30105:7;;:17;;;;:::i;:::-;30098:24;;;;29865:818;:::o;30038:84::-;30156:6;;-1:-1:-1;;;;;30156:6:0;30148:15;;;;:7;:15;;;;;;30137:26;;;;:::i;:::-;30197:6;;-1:-1:-1;;;;;30197:6:0;30189:15;;;;:7;:15;;;;;;30137:26;;-1:-1:-1;30178:26:0;;;;:::i;:::-;;;29999:217;30229:9;:16;:20;30226:347;;30271:7;30266:296;30288:9;:16;30284:20;;;;30266:296;;;30358:7;30334;:21;30342:9;30352:1;30342:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30342:12:0;30334:21;;;;;;;;;;;;;:31;;:66;;;30393:7;30369;:21;30377:9;30387:1;30377:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30377:12:0;30369:21;;;;;;;;;;;;;:31;30334:66;30330:96;;;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;:::-;30409:7;;:17;;;;:::i;:::-;30402:24;;;;;29865:818;:::o;30330:96::-;30465:7;:21;30473:9;30483:1;30473:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30473:12:0;30465:21;;;;;;;;;;;;;30455:31;;:7;:31;:::i;:::-;30445:41;;30525:7;:21;30533:9;30543:1;30533:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30533:12:0;30525:21;;;;;;;;;;;;;30515:31;;:7;:31;:::i;:::-;30505:41;-1:-1:-1;30306:3:0;;;;:::i;:::-;;;;30266:296;;;;30226:347;5033:13;4970:2;5033;:13;:::i;:::-;5016:30;;4814:11;5016:30;:::i;:::-;30597:7;;:17;;;;:::i;:::-;30587:7;:27;30583:57;;;5033:13;4970:2;5033;:13;:::i;30583:57::-;30658:17;30668:7;30658;:17;:::i;21328:2061::-;21407:4;-1:-1:-1;;;;;21432:18:0;;21424:68;;;;-1:-1:-1;;;21424:68:0;;23441:2:1;21424:68:0;;;23423:21:1;23480:2;23460:18;;;23453:30;23519:34;23499:18;;;23492:62;23590:7;23570:18;;;23563:35;23615:19;;21424:68:0;23239:401:1;21424:68:0;-1:-1:-1;;;;;21511:16:0;;21503:64;;;;-1:-1:-1;;;21503:64:0;;23847:2:1;21503:64:0;;;23829:21:1;23886:2;23866:18;;;23859:30;23925:34;23905:18;;;23898:62;23996:5;23976:18;;;23969:33;24019:19;;21503:64:0;23645:399:1;21503:64:0;21595:1;21586:6;:10;21578:64;;;;-1:-1:-1;;;21578:64:0;;24251:2:1;21578:64:0;;;24233:21:1;24290:2;24270:18;;;24263:30;24329:34;24309:18;;;24302:62;24400:11;24380:18;;;24373:39;24429:19;;21578:64:0;24049:405:1;21578:64:0;-1:-1:-1;;;;;21741:13:0;;21653:8;21741:13;;;:7;:13;;;;;;21653:8;;;;21741:13;;21737:162;;;21777:4;21771:10;;21737:162;;;-1:-1:-1;;;;;21803:11:0;;;;;;:7;:11;;;;;;;;21799:100;;;21838:4;21831:11;;21799:100;;;-1:-1:-1;21883:4:0;21799:100;21912:20;21923:4;21929:2;21912:10;:20::i;:::-;21909:641;;;21953:14;;;;21949:89;;21988:34;;-1:-1:-1;;;21988:34:0;;24661:2:1;21988:34:0;;;24643:21:1;24700:2;24680:18;;;24673:30;24739:26;24719:18;;;24712:54;24783:18;;21988:34:0;24459:348:1;21949:89:0;22055:3;:11;;;;22062:4;22055:11;22052:231;;;-1:-1:-1;;;;;22091:27:0;;;;;;:21;:27;;;;;;;;22090:28;:58;;;;-1:-1:-1;;;;;;22123:25:0;;;;;;:21;:25;;;;;;;;22122:26;22090:58;22086:182;;;22191:12;;22181:6;:22;;22173:75;;;;-1:-1:-1;;;22173:75:0;;25014:2:1;22173:75:0;;;24996:21:1;25053:2;25033:18;;;25026:30;25092:34;25072:18;;;25065:62;25163:10;25143:18;;;25136:38;25191:19;;22173:75:0;24812:404:1;22173:75:0;22314:9;;-1:-1:-1;;;;;22300:24:0;;;22314:9;;22300:24;;;;:33;;;22329:4;22328:5;22300:33;22297:242;;;-1:-1:-1;;;;;22359:25:0;;;;;;:21;:25;;;;;;;;22354:170;;22443:14;;22433:6;22417:13;22427:2;22417:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;22409:95;;;;-1:-1:-1;;;22409:95:0;;25423:2:1;22409:95:0;;;25405:21:1;25462:2;25442:18;;;25435:30;25501:34;25481:18;;;25474:62;25572:12;25552:18;;;25545:40;25602:19;;22409:95:0;25221:406:1;22409:95:0;-1:-1:-1;;;;;22595:25:0;;22562:12;22595:25;;;:19;:25;;;;;;22577:4;;22595:25;;;:52;;-1:-1:-1;;;;;;22624:23:0;;;;;;:19;:23;;;;;;;;22595:52;22592:98;;;-1:-1:-1;22673:5:0;22592:98;22706:4;22702:599;;;22732:6;;;;22731:7;:47;;;;-1:-1:-1;22759:19:0;;;;;;;22731:47;22727:557;;;22848:15;22828:17;;22817:8;;:28;;;;:::i;:::-;:46;22813:456;;;22888:28;22919:24;22937:4;22919:9;:24::i;:::-;22888:55;;22994:13;;22970:20;:37;22966:284;;23063:10;;23039:20;:34;23036:77;;-1:-1:-1;23100:10:0;;23036:77;23139:34;23152:20;23139:12;:34::i;:::-;23211:15;23200:8;:26;22966:284;22865:404;22813:456;23319:62;23337:4;23343:2;23347:6;23355:7;23364:3;23369:4;23375:5;23319:17;:62::i;:::-;23312:69;21328:2061;-1:-1:-1;;;;;;;;21328:2061:0:o;26833:960::-;26989:16;;26967:4;;26989:16;;;;;26984:221;;27022:28;27041:4;27047:2;27022:18;:28::i;:::-;27070:16;;;;;;;27069:17;:41;;;;;27090:20;27101:4;27107:2;27090:10;:20::i;:::-;27065:129;;;27131:47;;-1:-1:-1;;;27131:47:0;;25834:2:1;27131:47:0;;;25816:21:1;25873:2;25853:18;;;25846:30;25912:34;25892:18;;;25885:62;25983:7;25963:18;;;25956:35;26008:19;;27131:47:0;25632:401:1;27065:129:0;27217:25;27245:56;27256:4;27262:2;27266:7;27275;27284:3;27289:4;27295:5;27245:10;:56::i;:::-;27331:14;;;;-1:-1:-1;;;;;27314:13:0;;;;;;:7;:13;;;;;:31;;27217:84;;-1:-1:-1;27331:14:0;;27314:31;;27331:14;;27314:31;:::i;:::-;;;;-1:-1:-1;;27371:22:0;;;;-1:-1:-1;;;;;27356:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;27371:22;;27356:37;:::i;:::-;;;;-1:-1:-1;;;;;;;27410:17:0;;;;;;:11;:17;;;;;;;;27406:89;;;-1:-1:-1;;;;;27460:13:0;;;;;;:7;:13;;;;;;:23;;27476:7;;27460:23;:::i;:::-;-1:-1:-1;;;;;27444:13:0;;;;;;:7;:13;;;;;:39;27406:89;-1:-1:-1;;;;;27509:15:0;;;;;;:11;:15;;;;;;;;27505:98;;;27569:22;;-1:-1:-1;;;;;27555:11:0;;27569:22;27555:11;;;:7;:11;;;;;;:36;;27569:22;27555:36;:::i;:::-;-1:-1:-1;;;;;27541:11:0;;;;;;:7;:11;;;;;:50;27505:98;27633:1;27619:6;:11;;;:15;:34;;;;27652:1;27638:6;:11;;;:15;27619:34;27615:89;;;27681:6;:11;;;27670:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;27615:89:0;27736:2;-1:-1:-1;;;;;27721:42:0;27730:4;-1:-1:-1;;;;;27721:42:0;;27740:6;:22;;;27721:42;;;;391:25:1;;379:2;364:18;;245:177;27721:42:0;;;;;;;;-1:-1:-1;27781:4:0;;26833:960;-1:-1:-1;;;;;;;;26833:960:0:o;20963:357::-;21031:4;21063:6;;-1:-1:-1;;;;;21055:14:0;;;21063:6;;21055:14;;;;:43;;-1:-1:-1;21092:6:0;;-1:-1:-1;;;;;21086:12:0;;;21092:6;;21086:12;;21055:43;:79;;;;-1:-1:-1;21128:6:0;;-1:-1:-1;;;;;21128:6:0;21115:9;:19;;21055:79;:118;;;;-1:-1:-1;;;;;;21152:21:0;;;;;;:17;:21;;;;;;;;21151:22;21055:118;:159;;;;-1:-1:-1;;;;;;21191:23:0;;;;;;:17;:23;;;;;;;;21190:24;21055:159;:186;;;;-1:-1:-1;;;;;;21231:10:0;;6266:42;21231:10;;21055:186;:219;;;;-1:-1:-1;;;;;;21258:16:0;;;;21055:219;:257;;;;-1:-1:-1;;;;;;21291:21:0;;21307:4;21291:21;;21048:264;20963:357;-1:-1:-1;;;20963:357:0:o;23397:1563::-;7264:6;:13;;-1:-1:-1;;7264:13:0;7273:4;7264:13;;;23480:30:::1;::::0;;::::1;::::0;::::1;::::0;;23503:7:::1;23480:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;23521:56:::1;;23559:7;;;23521:56;23612:4;23592:26;::::0;;;:11:::1;:26;::::0;;;;;;;23627:9:::1;::::0;-1:-1:-1;;;;;23627:9:0::1;23592:46:::0;;;;;;;;-1:-1:-1;;23592:67:0::1;23589:165;;23696:4;23676:26;::::0;;;:11:::1;:26;::::0;;;;;;;23711:9:::1;::::0;-1:-1:-1;;;;;23711:9:0::1;23676:46:::0;;;;;;;-1:-1:-1;;23676:66:0;;23589:165:::1;23766:17;23847:1;23831:6;:12;;;23787:56;;23811:6;:16;;;23788:39;;:20;:39;;;;:::i;:::-;23787:56;;;;:::i;:::-;23786:62;;;;:::i;:::-;23766:82:::0;-1:-1:-1;23859:15:0::1;23877:32;23766:82:::0;23877:20;:32:::1;:::i;:::-;23954:16;::::0;;23968:1:::1;23954:16:::0;;;;;::::1;::::0;;23859:50;;-1:-1:-1;23930:21:0::1;::::0;23954:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23954:16:0::1;23930:40;;23999:4;23981;23986:1;23981:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23981:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24025:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23981:7;;24025:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24015:4;24020:1;24015:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24015:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24054:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;24129:7;;24054:9:::1;::::0;24167:4;;24194::::1;::::0;24214:15:::1;::::0;24054:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24274:21:0::1;::::0;-1:-1:-1;24253:18:0::1;::::0;-1:-1:-1;24360:7:0;;-1:-1:-1;24334:22:0::1;24347:9:::0;24274:21;24334:22:::1;:::i;:::-;24333:34;;;;:::i;:::-;24306:61:::0;-1:-1:-1;24384:13:0;;24380:328:::1;;24414:9;::::0;:222:::1;::::0;;;;24491:4:::1;24414:222;::::0;::::1;27012:34:1::0;27062:18;;;27055:34;;;24414:9:0::1;27105:18:1::0;;;27098:34;;;27148:18;;;27141:34;6266:42:0::1;27191:19:1::0;;;27184:44;24606:15:0::1;27244:19:1::0;;;27237:35;-1:-1:-1;;;;;24414:9:0;;::::1;::::0;:25:::1;::::0;24447:16;;26923:19:1;;24414:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24656:40:0::1;::::0;;27768:25:1;;;27824:2;27809:18;;27802:34;;;24656:40:0::1;::::0;-1:-1:-1;27741:18:1;24656:40:0::1;;;;;;;24380:328;24720:30;24734:16:::0;24720:30;::::1;:::i;:::-;;;24777:6;:16;;;24761:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;24856:16:::1;::::0;::::1;::::0;24831:10;;-1:-1:-1;24856:20:0::1;::::0;24852:101:::1;;24893:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;24893:21:0;;::::1;::::0;:48;::::1;;;::::0;24924:16;;24893:21:::1;:48:::0;:21;:48;24924:16;24893:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24852:101;23469:1491;;;;;;;7288:1;-1:-1:-1::0;7300:6:0;:14;;-1:-1:-1;;7300:14:0;;;23397:1563::o;24968:508::-;25050:16;;;;;;;25049:17;25041:65;;;;-1:-1:-1;;;25041:65:0;;28049:2:1;25041:65:0;;;28031:21:1;28088:2;28068:18;;;28061:30;28127:34;28107:18;;;28100:62;28198:5;28178:18;;;28171:33;28221:19;;25041:65:0;27847:399:1;25041:65:0;25122:20;25133:4;25139:2;25122:10;:20::i;:::-;25121:21;:37;;;;-1:-1:-1;25152:6:0;;-1:-1:-1;;;;;25146:12:0;;;25152:6;;25146:12;25121:37;25117:352;;;-1:-1:-1;;;;;25175:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;25175:30:0;25201:4;25175:30;;;25220:16;:23;;-1:-1:-1;;25220:23:0;25175:30;25220:23;;;;;25269:9;;;;25258:107;;25313:9;:36;;;;25343:4;25313:36;;;;;25258:107;25379:19;:26;;-1:-1:-1;;25379:26:0;;;;;25425:32;;-1:-1:-1;4203:41:1;;25425:32:0;;4191:2:1;4176:18;25425:32:0;;;;;;;24968:508;;:::o;27801:2056::-;27928:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27928:18:0;27959:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27959:25:0;28016:10;:8;:10::i;:::-;27995:18;;;:31;;;28056:28;;:7;:28;:::i;:::-;28039:14;;;:45;28101:20;28112:4;28118:2;28101:10;:20::i;:::-;28097:315;;;28169:9;;:38;;;;;-1:-1:-1;;;;;28532:15:1;;;28169:38:0;;;28514:34:1;28584:15;;;28564:18;;;28557:43;28616:18;;;28609:34;;;28138:12:0;;28169:9;;;;;:19;;28426:18:1;;28169:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28169:38:0;;;;;;;;-1:-1:-1;;28169:38:0;;;;;;;;;;;;:::i;:::-;;;28165:164;;28305:8;;;28165:164;28258:5;-1:-1:-1;28349:7:0;28345:56;;28377:8;;;28345:56;28123:289;28097:315;28427:7;28424:995;;;28451:22;;6160:5;28573:406;;;;28619:10;:18;;;;;;-1:-1:-1;28670:20:0;;;;;;-1:-1:-1;28573:406:0;;;28716:3;28712:267;;;28757:9;:17;;;;;;-1:-1:-1;28807:19:0;;;;;;-1:-1:-1;28712:267:0;;;28884:14;:22;;;;;;-1:-1:-1;28939:24:0;;;;;;-1:-1:-1;28712:267:0;29038:7;29010:24;29020:14;29010:7;:24;:::i;:::-;29009:36;;;;:::i;:::-;28995:11;;;:50;29101:7;29076:21;29086:11;29076:7;:21;:::i;:::-;29075:33;;;;:::i;:::-;29060:12;;;:48;;;29159:11;;;;:26;;29060:48;29159:26;:::i;:::-;29148:38;;:7;:38;:::i;:::-;29123:63;;29231:18;;;;29217:11;;;;:32;;29231:18;29217:32;:::i;:::-;29203:11;;;:46;-1:-1:-1;28424:995:0;;-1:-1:-1;;28424:995:0;;29296:1;29282:11;;;:15;;;29312:12;;;:16;;;29343:32;;;29392:11;;;:15;28424:995;29435:12;;;;:16;29431:289;;29509:6;:18;;;29494:6;:12;;;:33;;;;:::i;:::-;29484:4;29468:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;29565:4:0;29545:26;;;;:11;:26;;;;;;;;29542:104;;;29618:12;;;;;29608:4;29592:22;;;;:7;:22;;;;;:38;;29618:12;;29592:22;;:38;;29618:12;;29592:38;:::i;:::-;;;;-1:-1:-1;;29542:104:0;29688:4;-1:-1:-1;;;;;29665:43:0;29674:4;-1:-1:-1;;;;;29665:43:0;;29695:6;:12;;;29665:43;;;;391:25:1;;379:2;364:18;;245:177;29665:43:0;;;;;;;;29431:289;29805:6;:18;;;29790:6;:12;;;:33;;;;:::i;:::-;29775:6;:11;;;:49;;;;:::i;:::-;29757:6;:14;;;:68;;;;:::i;:::-;29732:22;;;:93;:22;27801:2056;-1:-1:-1;;;;;;;;27801:2056:0:o;427:184:1:-;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;2649:656::-;2761:4;2790:2;2819;2808:9;2801:21;2851:6;2845:13;2894:6;2889:2;2878:9;2874:18;2867:34;2919:1;2929:140;2943:6;2940:1;2937:13;2929:140;;;3038:14;;;3034:23;;3028:30;3004:17;;;3023:2;3000:26;2993:66;2958:10;;2929:140;;;3087:6;3084:1;3081:13;3078:91;;;3157:1;3152:2;3143:6;3132:9;3128:22;3124:31;3117:42;3078:91;-1:-1:-1;3221:2:1;3209:15;-1:-1:-1;;3205:88:1;3190:104;;;;3296:2;3186:113;;2649:656;-1:-1:-1;;;2649:656:1:o;3558:180::-;3617:6;3670:2;3658:9;3649:7;3645:23;3641:32;3638:52;;;3686:1;3683;3676:12;3638:52;-1:-1:-1;3709:23:1;;3558:180;-1:-1:-1;3558:180:1:o;3743:315::-;3811:6;3819;3872:2;3860:9;3851:7;3847:23;3843:32;3840:52;;;3888:1;3885;3878:12;3840:52;3927:9;3914:23;3946:31;3971:5;3946:31;:::i;:::-;3996:5;4048:2;4033:18;;;;4020:32;;-1:-1:-1;;;3743:315:1:o;4255:382::-;4320:6;4328;4381:2;4369:9;4360:7;4356:23;4352:32;4349:52;;;4397:1;4394;4387:12;4349:52;4436:9;4423:23;4455:31;4480:5;4455:31;:::i;:::-;4505:5;-1:-1:-1;4562:2:1;4547:18;;4534:32;4575:30;4534:32;4575:30;:::i;4642:1138::-;4760:6;4768;4821:2;4809:9;4800:7;4796:23;4792:32;4789:52;;;4837:1;4834;4827:12;4789:52;4877:9;4864:23;4906:18;4947:2;4939:6;4936:14;4933:34;;;4963:1;4960;4953:12;4933:34;4986:61;5039:7;5030:6;5019:9;5015:22;4986:61;:::i;:::-;4976:71;;5066:2;5056:12;;5121:2;5110:9;5106:18;5093:32;5150:2;5140:8;5137:16;5134:36;;;5166:1;5163;5156:12;5134:36;5189:24;;;-1:-1:-1;5244:4:1;5236:13;;5232:27;-1:-1:-1;5222:55:1;;5273:1;5270;5263:12;5222:55;5309:2;5296:16;5332:60;5348:43;5388:2;5348:43;:::i;5332:60::-;5426:15;;;5508:1;5504:10;;;;5496:19;;5492:28;;;5457:12;;;;5532:19;;;5529:39;;;5564:1;5561;5554:12;5529:39;5588:11;;;;5608:142;5624:6;5619:3;5616:15;5608:142;;;5690:17;;5678:30;;5641:12;;;;5728;;;;5608:142;;;5769:5;5759:15;;;;;;;4642:1138;;;;;:::o;5785:159::-;5852:20;;5912:6;5901:18;;5891:29;;5881:57;;5934:1;5931;5924:12;5881:57;5785:159;;;:::o;5949:328::-;6023:6;6031;6039;6092:2;6080:9;6071:7;6067:23;6063:32;6060:52;;;6108:1;6105;6098:12;6060:52;6131:28;6149:9;6131:28;:::i;:::-;6121:38;;6178:37;6211:2;6200:9;6196:18;6178:37;:::i;:::-;6168:47;;6234:37;6267:2;6256:9;6252:18;6234:37;:::i;:::-;6224:47;;5949:328;;;;;:::o;6282:456::-;6359:6;6367;6375;6428:2;6416:9;6407:7;6403:23;6399:32;6396:52;;;6444:1;6441;6434:12;6396:52;6483:9;6470:23;6502:31;6527:5;6502:31;:::i;:::-;6552:5;-1:-1:-1;6609:2:1;6594:18;;6581:32;6622:33;6581:32;6622:33;:::i;:::-;6282:456;;6674:7;;-1:-1:-1;;;6728:2:1;6713:18;;;;6700:32;;6282:456::o;6743:248::-;6811:6;6819;6872:2;6860:9;6851:7;6847:23;6843:32;6840:52;;;6888:1;6885;6878:12;6840:52;-1:-1:-1;;6911:23:1;;;6981:2;6966:18;;;6953:32;;-1:-1:-1;6743:248:1:o;6996:647::-;7070:6;7078;7086;7094;7147:3;7135:9;7126:7;7122:23;7118:33;7115:53;;;7164:1;7161;7154:12;7115:53;7203:9;7190:23;7222:28;7244:5;7222:28;:::i;:::-;7269:5;-1:-1:-1;7326:2:1;7311:18;;7298:32;7339:30;7298:32;7339:30;:::i;:::-;7388:7;-1:-1:-1;7447:2:1;7432:18;;7419:32;7460:30;7419:32;7460:30;:::i;:::-;7509:7;-1:-1:-1;7568:2:1;7553:18;;7540:32;7581:30;7540:32;7581:30;:::i;:::-;6996:647;;;;-1:-1:-1;6996:647:1;;-1:-1:-1;;6996:647:1:o;7837:247::-;7896:6;7949:2;7937:9;7928:7;7924:23;7920:32;7917:52;;;7965:1;7962;7955:12;7917:52;8004:9;7991:23;8023:31;8048:5;8023:31;:::i;8089:454::-;8184:6;8192;8200;8208;8216;8269:3;8257:9;8248:7;8244:23;8240:33;8237:53;;;8286:1;8283;8276:12;8237:53;-1:-1:-1;;8309:23:1;;;8379:2;8364:18;;8351:32;;-1:-1:-1;8430:2:1;8415:18;;8402:32;;8481:2;8466:18;;8453:32;;-1:-1:-1;8532:3:1;8517:19;8504:33;;-1:-1:-1;8089:454:1;-1:-1:-1;8089:454:1:o;8997:256::-;9063:6;9071;9124:2;9112:9;9103:7;9099:23;9095:32;9092:52;;;9140:1;9137;9130:12;9092:52;9163:28;9181:9;9163:28;:::i;:::-;9153:38;;9210:37;9243:2;9232:9;9228:18;9210:37;:::i;:::-;9200:47;;8997:256;;;;;:::o;9258:241::-;9314:6;9367:2;9355:9;9346:7;9342:23;9338:32;9335:52;;;9383:1;9380;9373:12;9335:52;9422:9;9409:23;9441:28;9463:5;9441:28;:::i;9874:388::-;9942:6;9950;10003:2;9991:9;9982:7;9978:23;9974:32;9971:52;;;10019:1;10016;10009:12;9971:52;10058:9;10045:23;10077:31;10102:5;10077:31;:::i;:::-;10127:5;-1:-1:-1;10184:2:1;10169:18;;10156:32;10197:33;10156:32;10197:33;:::i;11120:484::-;11173:3;11211:5;11205:12;11238:6;11233:3;11226:19;11264:4;11293:2;11288:3;11284:12;11277:19;;11330:2;11323:5;11319:14;11351:1;11361:218;11375:6;11372:1;11369:13;11361:218;;;11440:13;;-1:-1:-1;;;;;11436:62:1;11424:75;;11519:12;;;;11554:15;;;;11397:1;11390:9;11361:218;;;-1:-1:-1;11595:3:1;;11120:484;-1:-1:-1;;;;;11120:484:1:o;11609:342::-;11810:2;11799:9;11792:21;11773:4;11830:56;11882:2;11871:9;11867:18;11859:6;11830:56;:::i;:::-;11822:64;;11936:6;11929:14;11922:22;11917:2;11906:9;11902:18;11895:50;11609:342;;;;;:::o;12292:184::-;12344:77;12341:1;12334:88;12441:4;12438:1;12431:15;12465:4;12462:1;12455:15;12481:482;12570:1;12613:5;12570:1;12627:330;12648:7;12638:8;12635:21;12627:330;;;12767:4;-1:-1:-1;;12695:77:1;12689:4;12686:87;12683:113;;;12776:18;;:::i;:::-;12826:7;12816:8;12812:22;12809:55;;;12846:16;;;;12809:55;12925:22;;;;12885:15;;;;12627:330;;;12631:3;12481:482;;;;;:::o;12968:866::-;13017:5;13047:8;13037:80;;-1:-1:-1;13088:1:1;13102:5;;13037:80;13136:4;13126:76;;-1:-1:-1;13173:1:1;13187:5;;13126:76;13218:4;13236:1;13231:59;;;;13304:1;13299:130;;;;13211:218;;13231:59;13261:1;13252:10;;13275:5;;;13299:130;13336:3;13326:8;13323:17;13320:43;;;13343:18;;:::i;:::-;-1:-1:-1;;13399:1:1;13385:16;;13414:5;;13211:218;;13513:2;13503:8;13500:16;13494:3;13488:4;13485:13;13481:36;13475:2;13465:8;13462:16;13457:2;13451:4;13448:12;13444:35;13441:77;13438:159;;;-1:-1:-1;13550:19:1;;;13582:5;;13438:159;13629:34;13654:8;13648:4;13629:34;:::i;:::-;13759:6;-1:-1:-1;;13687:79:1;13678:7;13675:92;13672:118;;;13770:18;;:::i;:::-;13808:20;;12968:866;-1:-1:-1;;;12968:866:1:o;13839:140::-;13897:5;13926:47;13967:4;13957:8;13953:19;13947:4;13926:47;:::i;13984:274::-;14024:1;14050;14040:189;;14085:77;14082:1;14075:88;14186:4;14183:1;14176:15;14214:4;14211:1;14204:15;14040:189;-1:-1:-1;14243:9:1;;13984:274::o;14977:228::-;15017:7;15143:1;-1:-1:-1;;15071:74:1;15068:1;15065:81;15060:1;15053:9;15046:17;15042:105;15039:131;;;15150:18;;:::i;:::-;-1:-1:-1;15190:9:1;;14977:228::o;15210:184::-;15262:77;15259:1;15252:88;15359:4;15356:1;15349:15;15383:4;15380:1;15373:15;15399:184;15451:77;15448:1;15441:88;15548:4;15545:1;15538:15;15572:4;15569:1;15562:15;15588:125;15628:4;15656:1;15653;15650:8;15647:34;;;15661:18;;:::i;:::-;-1:-1:-1;15698:9:1;;15588:125::o;15718:195::-;15757:3;-1:-1:-1;;15781:5:1;15778:77;15775:103;;;15858:18;;:::i;:::-;-1:-1:-1;15905:1:1;15894:13;;15718:195::o;16268:175::-;16305:3;16349:4;16342:5;16338:16;16378:4;16369:7;16366:17;16363:43;;;16386:18;;:::i;:::-;16435:1;16422:15;;16268:175;-1:-1:-1;;16268:175:1:o;16448:224::-;16487:3;16515:6;16548:2;16545:1;16541:10;16578:2;16575:1;16571:10;16609:3;16605:2;16601:12;16596:3;16593:21;16590:47;;;16617:18;;:::i;:::-;16653:13;;16448:224;-1:-1:-1;;;;16448:224:1:o;16677:217::-;16716:4;16745:6;16801:10;;;;16771;;16823:12;;;16820:38;;;16838:18;;:::i;:::-;16875:13;;16677:217;-1:-1:-1;;;16677:217:1:o;17754:128::-;17794:3;17825:1;17821:6;17818:1;17815:13;17812:39;;;17831:18;;:::i;:::-;-1:-1:-1;17867:9:1;;17754:128::o;21696:251::-;21766:6;21819:2;21807:9;21798:7;21794:23;21790:32;21787:52;;;21835:1;21832;21825:12;21787:52;21867:9;21861:16;21886:31;21911:5;21886:31;:::i;22641:245::-;22708:6;22761:2;22749:9;22740:7;22736:23;22732:32;22729:52;;;22777:1;22774;22767:12;22729:52;22809:9;22803:16;22828:28;22850:5;22828:28;:::i;26038:605::-;26337:6;26326:9;26319:25;26380:6;26375:2;26364:9;26360:18;26353:34;26423:3;26418:2;26407:9;26403:18;26396:31;26300:4;26444:57;26496:3;26485:9;26481:19;26473:6;26444:57;:::i;:::-;-1:-1:-1;;;;;26537:55:1;;;;26532:2;26517:18;;26510:83;-1:-1:-1;26624:3:1;26609:19;26602:35;26436:65;26038:605;-1:-1:-1;;;26038:605:1:o;27283:306::-;27371:6;27379;27387;27440:2;27428:9;27419:7;27415:23;27411:32;27408:52;;;27456:1;27453;27446:12;27408:52;27485:9;27479:16;27469:26;;27535:2;27524:9;27520:18;27514:25;27504:35;;27579:2;27568:9;27564:18;27558:25;27548:35;;27283:306;;;;;:::o

Swarm Source

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