ETH Price: $3,387.73 (-2.07%)
Gas: 6 Gwei

Token

CHIMPZ (CHIMPZ)
 

Overview

Max Total Supply

1,000,000,000 CHIMPZ

Holders

150

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
250,482.282968914611852444 CHIMPZ

Value
$0.00
0xdc55e7810acc05cd4de61e2e4e2cbdc541eb7304
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:
CHIMPZ

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-10
*/

// 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 swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    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 Initializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
}

contract CHIMPZ is IERC20 {
    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 _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "CHIMPZ";
    string constant private _symbol = "CHIMPZ";
    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 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 reflection;
        uint16 marketing;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        reflection: 1,
        marketing: 2,
        totalSwap: 2
    });

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

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public marketingWallet = payable(0x45a4049D21711941930068F26D1DA7d073d0672a);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;

    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        originalDeployer = msg.sender;

        _rOwned[_owner] = _rTotal;
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

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

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.

    address private _owner;

    modifier onlyOwner() { require(_owner == msg.sender, "Caller =/= owner."); _; }
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    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) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        require(tradingEnabled, "Cannot renounce until trading has been enabled.");
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    address public originalDeployer;
    address public operator;

    // Function to set an operator to allow someone other the deployer to create things such as launchpads.
    // Only callable by original deployer.
    function setOperator(address newOperator) public {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        address oldOperator = operator;
        if (oldOperator != address(0)) {
            _liquidityHolders[oldOperator] = false;
            setExcludedFromFees(oldOperator, false);
        }
        operator = newOperator;
        _liquidityHolders[newOperator] = true;
        setExcludedFromFees(newOperator, true);
    }

    function renounceOriginalDeployer() external {
        require(msg.sender == originalDeployer, "Can only be called by original deployer.");
        setOperator(address(0));
        originalDeployer = address(0);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}
    function totalSupply() external pure override returns (uint256) { 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) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        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() external 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) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (address router, address constructorLP) {
            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; 
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch { revert(); }
    }

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

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

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

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

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

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        initializer.setProtections(_antiSnipe, _antiBlock);
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

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

    function setRatios(uint16 reflection, uint16 marketing) external onlyOwner {
        _ratios.reflection = reflection;
        _ratios.marketing = marketing;
        _ratios.totalSwap = marketing;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing) external onlyOwner {
        require(marketing != address(0), "Cannot be zero address.");
        marketingWallet = payable(marketing);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
        require(swapAmount >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
        require(swapThreshold >= _tTotal / 1_000_000, "Cannot be lower than 0.00001% of total supply.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        require(router != address(this) 
                && presale != address(this) 
                && lpPair != router 
                && lpPair != presale, "Just don't.");
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
            setExcludedFromReward(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
            setExcludedFromReward(router, true);
            setExcludedFromReward(presale, true);
        }
    }

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

    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) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled
                   && !presaleAddresses[to]
                   && !presaleAddresses[from]
                ) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }
        bool success;
        (success,) = marketingWallet.call{value: address(this).balance, gas: 55000}("");
    }

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

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)){
            initializer = Initializer(address(this));
        }
        try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        allowedPresaleExclusion = false;
        launchStamp = block.timestamp;
    }

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

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, "Not enough tokens.");
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

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

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

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

    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 buy, bool sell, bool other) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        ExtraValues memory values = takeTaxes(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);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        return true;
    }

    function takeTaxes(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool other) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        Ratios memory ratios = _ratios;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

        uint256 total = ratios.totalSwap + ratios.reflection;
        if (total == 0) {
            takeFee = false;
        }

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

        if (takeFee) {
            uint256 currentFee;

            if (buy) {
                currentFee = _taxRates.buyFee;
            } else if (sell) {
                currentFee = _taxRates.sellFee;
            } else {
                currentFee = _taxRates.transferFee;
            }

            uint256 feeAmount = (tAmount * currentFee) / masterTaxDivisor;
            values.tFee = (feeAmount * ratios.reflection) / total;
            values.tSwap = feeAmount - values.tFee;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

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

        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 rTotal = _rTotal;
        uint256 tTotal = _tTotal;
        uint256 rSupply = rTotal;
        uint256 tSupply = tTotal;
        if (_isExcluded[lpPair]) {
            uint256 rLPOwned = _rOwned[lpPair];
            uint256 tLPOwned = _tOwned[lpPair];
            if (address(initializer) == address(this)
                && block.chainid != 97) { revert(); }
            if (rLPOwned > rSupply || tLPOwned > tSupply) return rTotal / tTotal;
            rSupply -= rLPOwned;
            tSupply -= tLPOwned;
        }
        if (_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                uint256 rOwned = _rOwned[_excluded[i]];
                uint256 tOwned = _tOwned[_excluded[i]];
                if (rOwned > rSupply || tOwned > tSupply) return rTotal / tTotal;
                rSupply = rSupply - rOwned;
                tSupply = tSupply - tOwned;
            }
        }
        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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"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":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isExcludedFromProtection","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":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","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":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOriginalDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","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":"setExcludedFromProtection","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":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"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":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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"}]

60806040526000600355600b805460ff19166001179055620000246012600a620003df565b6200003490633b9aca00620003f7565b620000429060001962000411565b620000509060001962000434565b600c819055604080516060808201835261012c8083526020808401919091526000928401839052600d805463012c012c65ffffffffffff19918216179091558451928301855260018352600283830181905292850192909252600e805490921664020002000117909155601180547345a4049d21711941930068f26d1da7d073d0672a600161ff0160a01b0319909116179055600a60158190556016805461ffff1916905560188054336001600160a01b031991821681179092556019805490911682179055835290829052919020919091556200013190601290620003df565b6200014190633b9aca00620003f7565b601880546001600160a01b03908116600090815260016020526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001956012600a620003df565b620001a590633b9aca00620003f7565b60405190815260200160405180910390a3601880546001600160a01b0390811660009081526007602081815260408084208054600160ff19918216811790925530865282862080548216831790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054821683179055965490951684526005825283208054861685179055527f369570fab114047d6931f481fe65511f6f30128550291df97f26a8b12fbb064780548416831790557f76e04a725e11e15e15ab8a12e133522d6ebb6e4ce8401eb7fccaa3f298dfd6e5805484168317905573dba68f07d1b7ca219f78ae8582c213d975c25caf90527fa41ba8ce755a9610529fb4698883547ff2835b475c582169085f2e8c39e304f780549092161790556200044a565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000321578160001904821115620003055762000305620002ca565b808516156200031357918102915b93841c9390800290620002e5565b509250929050565b6000826200033a57506001620003d9565b816200034957506000620003d9565b81600181146200036257600281146200036d576200038d565b6001915050620003d9565b60ff841115620003815762000381620002ca565b50506001821b620003d9565b5060208310610133831016604e8410600b8410161715620003b2575081810a620003d9565b620003be8383620002e0565b8060001904821115620003d557620003d5620002ca565b0290505b92915050565b6000620003f060ff84168362000329565b9392505050565b8082028115828204841417620003d957620003d9620002ca565b6000826200042f57634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620003d957620003d9620002ca565b614a3a806200045a6000396000f3fe6080604052600436106103a65760003560e01c8063570ca735116101e7578063a9059cbb1161010d578063cf847706116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610adf578063fb78680d14610af4578063fdb78c0e14610b14578063feadde9c14610b3557600080fd5b8063cf84770614610a28578063dd62ed3e14610a59578063eafb5a3c14610a9f578063eb50e70e14610abf57600080fd5b8063b3d514fb116100dc578063b3d514fb1461061e578063b7df8b36146109ce578063bcd96a25146109e8578063bfc2fc3514610a0857600080fd5b8063a9059cbb1461096e578063ab558e4d1461098e578063b1b08f711461061e578063b3ab15fb146109ae57600080fd5b806378648edf11610185578063893d20e811610154578063893d20e8146109265780638a63bd9b146109445780638a8c523c1461095957806395d89b411461048157600080fd5b806378648edf1461089857806380c581d1146108ad57806381cf58a9146108cd57806388f82020146108ed57600080fd5b80635c24b074116101c15780635c24b0741461082357806370a0823114610843578063715018a61461086357806375f0a8741461087857600080fd5b8063570ca735146107cd578063590ffdce146107ed5780635a6f09181461080d57600080fd5b80632b112e49116102cc57806339a059021161026a5780634e718e48116102395780634e718e48146107355780634fb2e45d146107555780634fbee1931461077557806350a8e016146107ae57600080fd5b806339a05902146106c6578063452ed4f1146106db5780634ada218b146106fb5780634bbb93eb1461071557600080fd5b80632e8fa821116102a65780632e8fa82114610654578063313ce5671461066a57806332cde6641461068657806333251a0b146106a657600080fd5b80632b112e49146106095780632b28fc7a1461061e5780632d8381191461063457600080fd5b8063095ea7b31161034457806318160ddd1161031357806318160ddd1461059e57806323b872dd146105b35780632610eaca146105d357806328577751146105f357600080fd5b8063095ea7b3146105055780630dcbcf1c1461052557806313b4a7f41461055e57806313e461921461057e57600080fd5b8063069d955f11610380578063069d955f1461042b57806306fdde03146104815780630758d924146104b657806307dd79e0146104db57600080fd5b806303fd2a45146103b25780630445b667146103e5578063044df7261461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60125481565b6040519081526020016103dc565b34801561041557600080fd5b506104296104243660046142dc565b610b55565b005b34801561043757600080fd5b50600d5461045c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b34801561048d57600080fd5b50604080518082018252600681526521a424a6a82d60d11b602082015290516103dc9190614315565b3480156104c257600080fd5b50600f546103c89061010090046001600160a01b031681565b3480156104e757600080fd5b50600f546104f59060ff1681565b60405190151581526020016103dc565b34801561051157600080fd5b506104f5610520366004614378565b610c13565b34801561053157600080fd5b506104f56105403660046143a4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561056a57600080fd5b506104296105793660046143c1565b610c2a565b34801561058a57600080fd5b506104296105993660046143ef565b610dfa565b3480156105aa57600080fd5b506103fb61127b565b3480156105bf57600080fd5b506104f56105ce36600461440d565b61129c565b3480156105df57600080fd5b506104296105ee366004614524565b611314565b3480156105ff57600080fd5b506103fb60155481565b34801561061557600080fd5b506103fb6114bd565b34801561062a57600080fd5b506103fb6103e881565b34801561064057600080fd5b506103fb61064f3660046145e6565b611502565b34801561066057600080fd5b506103fb60135481565b34801561067657600080fd5b50604051601281526020016103dc565b34801561069257600080fd5b506104296106a1366004614616565b611586565b3480156106b257600080fd5b506104296106c13660046143a4565b6116da565b3480156106d257600080fd5b5061042961178b565b3480156106e757600080fd5b506010546103c8906001600160a01b031681565b34801561070757600080fd5b506016546104f59060ff1681565b34801561072157600080fd5b506103fb6107303660046145e6565b611812565b34801561074157600080fd5b506104296107503660046145e6565b611844565b34801561076157600080fd5b506104296107703660046143a4565b6118e2565b34801561078157600080fd5b506104f56107903660046143a4565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ba57600080fd5b506016546104f590610100900460ff1681565b3480156107d957600080fd5b50601a546103c8906001600160a01b031681565b3480156107f957600080fd5b506104296108083660046143ef565b611ad5565b34801561081957600080fd5b506103fb60175481565b34801561082f57600080fd5b5061042961083e3660046143a4565b611b48565b34801561084f57600080fd5b506103fb61085e3660046143a4565b611d23565b34801561086f57600080fd5b50610429611d82565b34801561088457600080fd5b506011546103c8906001600160a01b031681565b3480156108a457600080fd5b50610429611ea7565b3480156108b957600080fd5b506104296108c83660046143ef565b611efe565b3480156108d957600080fd5b506019546103c8906001600160a01b031681565b3480156108f957600080fd5b506104f56109083660046143a4565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561093257600080fd5b506018546001600160a01b03166103c8565b34801561095057600080fd5b506104f56120ea565b34801561096557600080fd5b5061042961215a565b34801561097a57600080fd5b506104f5610989366004614378565b6123ae565b34801561099a57600080fd5b506104296109a93660046143a4565b6123c5565b3480156109ba57600080fd5b506104296109c93660046143a4565b61255f565b3480156109da57600080fd5b506014546104f59060ff1681565b3480156109f457600080fd5b50610429610a03366004614659565b61264c565b348015610a1457600080fd5b50610429610a233660046142dc565b61276e565b348015610a3457600080fd5b50600e5461045c9061ffff808216916201000081048216916401000000009091041683565b348015610a6557600080fd5b506103fb610a743660046143c1565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610aab57600080fd5b50610429610aba3660046143a4565b612819565b348015610acb57600080fd5b50610429610ada3660046143a4565b612c17565b348015610aeb57600080fd5b50610429612cd7565b348015610b0057600080fd5b50610429610b0f36600461468c565b612db0565b348015610b2057600080fd5b506011546104f590600160a81b900460ff1681565b348015610b4157600080fd5b50610429610b503660046143ef565b61306f565b6018546001600160a01b03163314610ba25760405162461bcd60e51b815260206004820152601160248201526000805160206149e583398151915260448201526064015b60405180910390fd5b60165460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610bf757600080fd5b505af1158015610c0b573d6000803e3d6000fd5b505050505050565b6000610c203384846130e2565b5060015b92915050565b6018546001600160a01b03163314610c725760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600b5460ff16610c8157600080fd5b6001600160a01b0382163014801590610ca357506001600160a01b0381163014155b8015610cbd57506010546001600160a01b03838116911614155b8015610cd757506010546001600160a01b03828116911614155b610d115760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610b99565b806001600160a01b0316826001600160a01b031603610d7e576001600160a01b03811660009081526005602090815260408083208054600160ff199182168117909255600a9093529220805490911682179055610d6f908290611ad5565b610d7a816001610dfa565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600a909252808320805486168317905592825291902080549092168117909155610de8908390611ad5565b610df3816001611ad5565b610d6f8260015b6018546001600160a01b03163314610e425760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b8015610f89576001600160a01b03821660009081526008602052604090205460ff1615610eb15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b99565b6001600160a01b03821660009081526020819052604090205415610f0b576001600160a01b038216600090815260208190526040902054610ef190611502565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600860205260409020805460ff1916600117905560105490911614610d7a57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790555050565b80610d7a576001600160a01b03821660009081526008602052604090205460ff16610ff65760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b99565b6010546001600160a01b039081169083160361106f576110146131db565b6001600160a01b03831660009081526001602052604090205461103791906146d4565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556008905220805460ff191690555050565b60095460010361110f576110816131db565b6001600160a01b0383166000908152600160205260409020546110a491906146d4565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556008905220805460ff1916905560098054806110e9576110e96146eb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b60095481101561127657826001600160a01b03166009828154811061113957611139614701565b6000918252602090912001546001600160a01b031603611264576009805461116390600190614717565b8154811061117357611173614701565b600091825260209091200154600980546001600160a01b03909216918390811061119f5761119f614701565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506111d56131db565b6001600160a01b0384166000908152600160205260409020546111f891906146d4565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556008905220805460ff19169055600980548061123d5761123d6146eb565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061126e8161472a565b915050611112565b505050565b60006112896012600a614827565b61129790633b9aca006146d4565b905090565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611301576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906112fb908490614717565b90915550505b61130c8484846133da565b949350505050565b6018546001600160a01b0316331461135c5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b80518251146113ad5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b99565b60005b82518161ffff161015611276576113c96012600a614827565b828261ffff16815181106113df576113df614701565b60200260200101516113f191906146d4565b6113fa33611d23565b10156114485760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610b99565b6114aa33848361ffff168151811061146257611462614701565b60200260200101516012600a6114789190614827565b858561ffff168151811061148e5761148e614701565b60200260200101516114a091906146d4565b6000806001613767565b50806114b581614836565b9150506113b0565b60006114c96000611d23565b6114d461dead611d23565b6114de9190614857565b6114ea6012600a614827565b6114f890633b9aca006146d4565b6112979190614717565b6000600c548211156115695760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b99565b60006115736131db565b905061157f818461486a565b9392505050565b6018546001600160a01b031633146115ce5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600f5460ff16156116215760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610b99565b6103e88361ffff161115801561163d57506103e88261ffff1611155b801561164f57506103e88161ffff1611155b61169b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b99565b600d805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6018546001600160a01b031633146117225760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6016546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b5050505050565b6019546001600160a01b031633146117f65760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610b99565b611800600061255f565b601980546001600160a01b0319169055565b601054600090612710908390611830906001600160a01b0316611d23565b61183a91906146d4565b610c24919061486a565b6018546001600160a01b0316331461188c5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60968111156118dd5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610b99565b601555565b6018546001600160a01b0316331461192a5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b0381166119a65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b99565b61deac196001600160a01b03821601611a275760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b99565b601854611a3e906001600160a01b03166000611ad5565b611a49816001611ad5565b601854600090611a61906001600160a01b0316611d23565b1115611a8357601854611a81906001600160a01b0316826114a082611d23565b505b601880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b03163314611b1d5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6018546001600160a01b03163314611b905760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60165460ff1615611ba057600080fd5b306001600160a01b03821603611bf85760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b99565b6016805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611c7e575060408051601f3d908101601f19168201909252611c7b9181019061488c565b60015b611c8757600080fd5b600f805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355601080546001600160a01b0319168584169081179091556000908152600260205260409020805460ff191660011790556018549254611d0193831692919004166000196130e2565b600f5461127690309061010090046001600160a01b03166000196130e2565b50565b6001600160a01b03811660009081526008602052604081205460ff1615611d6057506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610c2490611502565b6018546001600160a01b03163314611dca5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60165460ff16611e425760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610b99565b601854611e59906001600160a01b03166000611ad5565b601880546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b03163314611eef5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600f805460ff19166001179055565b6018546001600160a01b03163314611f465760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b80611fb9576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610bf757600080fd5b60035415612020576203f48060035442611fd39190614717565b116120205760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610b99565b6001600160a01b03821660009081526002602052604090205460ff16156120895760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610b99565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610bdd565b6018546000906001600160a01b031633146121355760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600f5461215490309061010090046001600160a01b03166000196130e2565b50600190565b6018546001600160a01b031633146121a25760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60165460ff16156121f55760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b99565b601654610100900460ff1661224c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b99565b6016546201000090046001600160a01b031661227c576016805462010000600160b01b0319163062010000021790555b601654601054604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156122ee57600080fd5b505af19250505080156122ff575060015b506016546010546001600160a01b03620100009092048216916325a71cae916123289116611d23565b6040518263ffffffff1660e01b815260040161234691815260200190565b60408051808303816000875af1925050508015612380575060408051601f3d908101601f1916820190925261237d918101906148bb565b60015b1561238f576012919091556013555b6016805460ff19908116600117909155600b8054909116905542601755565b60006123bb3384846133da565b5060019392505050565b6018546001600160a01b0316331461240d5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b601654610100900460ff161561247557306001600160a01b038216036124755760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610b99565b6018546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa1580156124cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f091906148df565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127691906148f8565b6019546001600160a01b031633146125ca5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610b99565b601a546001600160a01b03168015612607576001600160a01b0381166000908152600560205260408120805460ff19169055612607908290611ad5565b601a80546001600160a01b0319166001600160a01b0384169081179091556000908152600560205260409020805460ff19166001908117909155610d7a908390611ad5565b6018546001600160a01b031633146126945760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600e805464010000000061ffff84811691820265ffff00000000196201000093840263ffffffff1990951683891617949094179390931692909217909255600d546000926126e89290820481169116614915565b600e5461ffff9182169250829161270c918082169164010000000090910416614915565b61ffff1611156112765760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610b99565b6018546001600160a01b031633146127b65760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6011805460ff60a81b1916600160a81b841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146128615760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b601654610100900460ff16156128b95760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610b99565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129229190614937565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129939190614937565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156129de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a029190614937565b6010546001600160a01b039081166000908152600260205260409020805460ff191690559091508116612b9857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a919190614937565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614937565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b739190614937565b601080546001600160a01b0319166001600160a01b0392909216919091179055612bb4565b601080546001600160a01b0319166001600160a01b0383161790555b600f805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b03858116820292909217835560105482166000908152600260205260409020805460ff1916600117905591546112769230929104166000196130e2565b6018546001600160a01b03163314612c5f5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b038116612cb55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610b99565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314612d1f5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b601654610100900460ff1615612d775760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b99565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611d20573d6000803e3d6000fd5b6018546001600160a01b03163314612df85760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b8284612e066012600a614827565b612e1490633b9aca006146d4565b612e1e91906146d4565b612e28919061486a565b601290815581908390612e3c90600a614827565b612e4a90633b9aca006146d4565b612e5491906146d4565b612e5e919061486a565b60138190556012541115612ebe5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610b99565b60105461271090612ed7906001600160a01b0316611d23565b612ee29060966146d4565b612eec919061486a565b6013541115612f495760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610b99565b620f4240612f596012600a614827565b612f6790633b9aca006146d4565b612f71919061486a565b6013541015612fd95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b99565b620f4240612fe96012600a614827565b612ff790633b9aca006146d4565b613001919061486a565b60125410156130695760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b99565b50505050565b6018546001600160a01b031633146130b75760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03831661312e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b99565b6001600160a01b03821661317a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b99565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600c54600090816131ee6012600a614827565b6131fc90633b9aca006146d4565b6010546001600160a01b03166000908152600860205260409020549091508290829060ff16156132b6576010546001600160a01b039081166000908152602081815260408083205460019092529091205460165491929091620100009004163014801561326a575046606114155b1561327457600080fd5b8382118061328157508281115b1561329b57613290858761486a565b965050505050505090565b6132a58285614717565b93506132b18184614717565b925050505b600954156133ac5760005b60095460ff821610156133aa57600080600060098460ff16815481106132e9576132e9614701565b60009182526020808320909101546001600160a01b031683528201929092526040018120546009805491935060019183919060ff871690811061332e5761332e614701565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061336257508381115b1561337d57613371868861486a565b97505050505050505090565b6133878286614717565b94506133938185614717565b9350505080806133a290614954565b9150506132c1565b505b6133b6838561486a565b8210156133d0576133c7838561486a565b94505050505090565b6133c7818361486a565b60006001600160a01b0384166134405760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b99565b6001600160a01b0383166134a25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b99565b600082116135045760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b99565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135325760019250613560565b6001600160a01b03861660009081526002602052604090205460ff161561355c5760019150613560565b5060015b61356a8787613a62565b1561366b5760165460ff1661366b57806135c65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b99565b6001600160a01b03871660009081526006602052604090205460ff1615801561360857506001600160a01b03861660009081526006602052604090205460ff16155b1561366b5760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610b99565b811561374e57601154600160a01b900460ff1661374e57601154600160a81b900460ff1680156136b457506001600160a01b0386166000908152600a602052604090205460ff16155b80156136d957506001600160a01b0387166000908152600a602052604090205460ff16155b1561374e5760006136e930611d23565b9050601254811061374c5760135460145460ff161561373657601554601054612710919061371f906001600160a01b0316611d23565b61372991906146d4565b613733919061486a565b90505b808210613741578091505b61374a82613b77565b505b505b61375c878787868686613767565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff16806137a957506001600160a01b03871660009081526007602052604090205460ff165b156137b2575060005b60006137c3898989858a8a8a613dfd565b60808101516001600160a01b038b166000908152602081905260408120805493945091926137f2908490614717565b909155505060608101516001600160a01b03891660009081526020819052604081208054909190613824908490614857565b90915550506001600160a01b03891660009081526008602052604090205460ff1615613888576001600160a01b03891660009081526001602052604090205461386e908890614717565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526008602052604090205460ff16156138e85780516001600160a01b0389166000908152600160205260409020546138ce9190614857565b6001600160a01b0389166000908152600160205260409020555b60008160a0015111806138ff575060008160200151115b15613920578060a00151600c600082825461391a9190614717565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161396991815260200190565b60405180910390a3601654610100900460ff16613a535761398a898961418a565b601654610100900460ff161580156139a757506139a78989613a62565b80156139cc57506001600160a01b03891660009081526006602052604090205460ff16155b80156139f157506001600160a01b03881660009081526006602052604090205460ff16155b80156139fb575083155b15613a535760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610b99565b50600198975050505050505050565b6018546000906001600160a01b03848116911614801590613a9157506018546001600160a01b03838116911614155b8015613aa857506018546001600160a01b03163214155b8015613acd57506001600160a01b03821660009081526005602052604090205460ff16155b8015613af257506001600160a01b03831660009081526005602052604090205460ff16155b8015613b0957506001600160a01b03821661dead14155b8015613b1d57506001600160a01b03821615155b8015613b3257506001600160a01b0383163014155b8015613b5257506016546001600160a01b03848116620100009092041614155b801561157f5750506016546201000090046001600160a01b0390811691161415919050565b6011805460ff60a01b1916600160a01b17905560408051606081018252600e5461ffff8082168352620100008204811660208401526401000000009091041691810182905290600003613bca5750613ded565b306000908152600460209081526040808320600f5461010090046001600160a01b0316845290915290205460001914613c2d57306000908152600460209081526040808320600f5461010090046001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613c6257613c62614701565b60200260200101906001600160a01b031690816001600160a01b031681525050600f60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf99190614937565b81600181518110613d0c57613d0c614701565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81526101009091049091169063791ac94790613d59908690600090869030904290600401614973565b600060405180830381600087803b158015613d7357600080fd5b505af1925050508015613d84575060015b613d8f575050613ded565b6011546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613de1576040519150601f19603f3d011682016040523d82523d6000602084013e613de6565b606091505b5050505050505b506011805460ff60a01b19169055565b613e3d6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613e7d6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051606081018252600e5461ffff8082168352620100008204811660208401526401000000009091041691810191909152613eb86131db565b60c08301819052613ec990896146d4565b608083015280516040820151600091613ee191614915565b61ffff16905080600003613ef457600097505b613efe8b8b613a62565b15613f985760165460405163ecd07a5360e01b81526001600160a01b038d811660048301528c81166024830152604482018c9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613f81575060408051601f3d908101601f19168201909252613f7e918101906148f8565b60015b613f8a57600080fd5b905080613f9657600080fd5b505b87156140695760008715613fb35750600d5461ffff16613fdd565b8615613fcc5750600d5462010000900461ffff16613fdd565b50600d54640100000000900461ffff165b6000612710613fec838d6146d4565b613ff6919061486a565b8451909150839061400b9061ffff16836146d4565b614015919061486a565b602086018190526140269082614717565b60408601819052602086015161403c9190614857565b614046908c614717565b855260c0850151602086015161405c91906146d4565b60a08601525061406d9050565b8883525b604083015115614144578260c00151836040015161408b91906146d4565b30600090815260208190526040812080549091906140aa908490614857565b90915550503060009081526008602052604090205460ff16156140f25760408084015130600090815260016020529182208054919290916140ec908490614857565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040015160405161413b91815260200190565b60405180910390a35b8260c00151836040015161415891906146d4565b8360a001516141679190614857565b83608001516141769190614717565b606084015250909998505050505050505050565b601654610100900460ff16156141ee5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b99565b6141f88282613a62565b15801561421257506010546001600160a01b038281169116145b15610d7a576001600160a01b038083166000908152600560209081526040808320805460ff19908116600190811790925560079093529220805490911690911790556016805461ff00191661010017908190556201000090041661428a576016805462010000600160b01b0319163062010000021790555b6011805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161280d565b8015158114611d2057600080fd5b600080604083850312156142ef57600080fd5b82356142fa816142ce565b9150602083013561430a816142ce565b809150509250929050565b600060208083528351808285015260005b8181101561434257858101830151858201604001528201614326565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d2057600080fd5b6000806040838503121561438b57600080fd5b823561439681614363565b946020939093013593505050565b6000602082840312156143b657600080fd5b813561157f81614363565b600080604083850312156143d457600080fd5b82356143df81614363565b9150602083013561430a81614363565b6000806040838503121561440257600080fd5b82356142fa81614363565b60008060006060848603121561442257600080fd5b833561442d81614363565b9250602084013561443d81614363565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561448d5761448d61444e565b604052919050565b600067ffffffffffffffff8211156144af576144af61444e565b5060051b60200190565b600082601f8301126144ca57600080fd5b813560206144df6144da83614495565b614464565b82815260059290921b840181019181810190868411156144fe57600080fd5b8286015b848110156145195780358352918301918301614502565b509695505050505050565b6000806040838503121561453757600080fd5b823567ffffffffffffffff8082111561454f57600080fd5b818501915085601f83011261456357600080fd5b813560206145736144da83614495565b82815260059290921b8401810191818101908984111561459257600080fd5b948201945b838610156145b95785356145aa81614363565b82529482019490820190614597565b965050860135925050808211156145cf57600080fd5b506145dc858286016144b9565b9150509250929050565b6000602082840312156145f857600080fd5b5035919050565b803561ffff8116811461461157600080fd5b919050565b60008060006060848603121561462b57600080fd5b614634846145ff565b9250614642602085016145ff565b9150614650604085016145ff565b90509250925092565b6000806040838503121561466c57600080fd5b614675836145ff565b9150614683602084016145ff565b90509250929050565b600080600080608085870312156146a257600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2457610c246146be565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610c2457610c246146be565b60006001820161473c5761473c6146be565b5060010190565b600181815b8085111561477e578160001904821115614764576147646146be565b8085161561477157918102915b93841c9390800290614748565b509250929050565b60008261479557506001610c24565b816147a257506000610c24565b81600181146147b857600281146147c2576147de565b6001915050610c24565b60ff8411156147d3576147d36146be565b50506001821b610c24565b5060208310610133831016604e8410600b8410161715614801575081810a610c24565b61480b8383614743565b806000190482111561481f5761481f6146be565b029392505050565b600061157f60ff841683614786565b600061ffff80831681810361484d5761484d6146be565b6001019392505050565b80820180821115610c2457610c246146be565b60008261488757634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561489f57600080fd5b82516148aa81614363565b602084015190925061430a81614363565b600080604083850312156148ce57600080fd5b505080516020909101519092909150565b6000602082840312156148f157600080fd5b5051919050565b60006020828403121561490a57600080fd5b815161157f816142ce565b61ffff818116838216019080821115614930576149306146be565b5092915050565b60006020828403121561494957600080fd5b815161157f81614363565b600060ff821660ff810361496a5761496a6146be565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156149c35784516001600160a01b03168352938301939183019160010161499e565b50506001600160a01b0396909616606085015250505060800152939250505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212205916179ec7dd2c7d364423eb3a2777a2e19ae8b9e625bcf7e43fc17dca50d6f464736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063570ca735116101e7578063a9059cbb1161010d578063cf847706116100a0578063ee5d9c2d1161006f578063ee5d9c2d14610adf578063fb78680d14610af4578063fdb78c0e14610b14578063feadde9c14610b3557600080fd5b8063cf84770614610a28578063dd62ed3e14610a59578063eafb5a3c14610a9f578063eb50e70e14610abf57600080fd5b8063b3d514fb116100dc578063b3d514fb1461061e578063b7df8b36146109ce578063bcd96a25146109e8578063bfc2fc3514610a0857600080fd5b8063a9059cbb1461096e578063ab558e4d1461098e578063b1b08f711461061e578063b3ab15fb146109ae57600080fd5b806378648edf11610185578063893d20e811610154578063893d20e8146109265780638a63bd9b146109445780638a8c523c1461095957806395d89b411461048157600080fd5b806378648edf1461089857806380c581d1146108ad57806381cf58a9146108cd57806388f82020146108ed57600080fd5b80635c24b074116101c15780635c24b0741461082357806370a0823114610843578063715018a61461086357806375f0a8741461087857600080fd5b8063570ca735146107cd578063590ffdce146107ed5780635a6f09181461080d57600080fd5b80632b112e49116102cc57806339a059021161026a5780634e718e48116102395780634e718e48146107355780634fb2e45d146107555780634fbee1931461077557806350a8e016146107ae57600080fd5b806339a05902146106c6578063452ed4f1146106db5780634ada218b146106fb5780634bbb93eb1461071557600080fd5b80632e8fa821116102a65780632e8fa82114610654578063313ce5671461066a57806332cde6641461068657806333251a0b146106a657600080fd5b80632b112e49146106095780632b28fc7a1461061e5780632d8381191461063457600080fd5b8063095ea7b31161034457806318160ddd1161031357806318160ddd1461059e57806323b872dd146105b35780632610eaca146105d357806328577751146105f357600080fd5b8063095ea7b3146105055780630dcbcf1c1461052557806313b4a7f41461055e57806313e461921461057e57600080fd5b8063069d955f11610380578063069d955f1461042b57806306fdde03146104815780630758d924146104b657806307dd79e0146104db57600080fd5b806303fd2a45146103b25780630445b667146103e5578063044df7261461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60125481565b6040519081526020016103dc565b34801561041557600080fd5b506104296104243660046142dc565b610b55565b005b34801561043757600080fd5b50600d5461045c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b34801561048d57600080fd5b50604080518082018252600681526521a424a6a82d60d11b602082015290516103dc9190614315565b3480156104c257600080fd5b50600f546103c89061010090046001600160a01b031681565b3480156104e757600080fd5b50600f546104f59060ff1681565b60405190151581526020016103dc565b34801561051157600080fd5b506104f5610520366004614378565b610c13565b34801561053157600080fd5b506104f56105403660046143a4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561056a57600080fd5b506104296105793660046143c1565b610c2a565b34801561058a57600080fd5b506104296105993660046143ef565b610dfa565b3480156105aa57600080fd5b506103fb61127b565b3480156105bf57600080fd5b506104f56105ce36600461440d565b61129c565b3480156105df57600080fd5b506104296105ee366004614524565b611314565b3480156105ff57600080fd5b506103fb60155481565b34801561061557600080fd5b506103fb6114bd565b34801561062a57600080fd5b506103fb6103e881565b34801561064057600080fd5b506103fb61064f3660046145e6565b611502565b34801561066057600080fd5b506103fb60135481565b34801561067657600080fd5b50604051601281526020016103dc565b34801561069257600080fd5b506104296106a1366004614616565b611586565b3480156106b257600080fd5b506104296106c13660046143a4565b6116da565b3480156106d257600080fd5b5061042961178b565b3480156106e757600080fd5b506010546103c8906001600160a01b031681565b34801561070757600080fd5b506016546104f59060ff1681565b34801561072157600080fd5b506103fb6107303660046145e6565b611812565b34801561074157600080fd5b506104296107503660046145e6565b611844565b34801561076157600080fd5b506104296107703660046143a4565b6118e2565b34801561078157600080fd5b506104f56107903660046143a4565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ba57600080fd5b506016546104f590610100900460ff1681565b3480156107d957600080fd5b50601a546103c8906001600160a01b031681565b3480156107f957600080fd5b506104296108083660046143ef565b611ad5565b34801561081957600080fd5b506103fb60175481565b34801561082f57600080fd5b5061042961083e3660046143a4565b611b48565b34801561084f57600080fd5b506103fb61085e3660046143a4565b611d23565b34801561086f57600080fd5b50610429611d82565b34801561088457600080fd5b506011546103c8906001600160a01b031681565b3480156108a457600080fd5b50610429611ea7565b3480156108b957600080fd5b506104296108c83660046143ef565b611efe565b3480156108d957600080fd5b506019546103c8906001600160a01b031681565b3480156108f957600080fd5b506104f56109083660046143a4565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561093257600080fd5b506018546001600160a01b03166103c8565b34801561095057600080fd5b506104f56120ea565b34801561096557600080fd5b5061042961215a565b34801561097a57600080fd5b506104f5610989366004614378565b6123ae565b34801561099a57600080fd5b506104296109a93660046143a4565b6123c5565b3480156109ba57600080fd5b506104296109c93660046143a4565b61255f565b3480156109da57600080fd5b506014546104f59060ff1681565b3480156109f457600080fd5b50610429610a03366004614659565b61264c565b348015610a1457600080fd5b50610429610a233660046142dc565b61276e565b348015610a3457600080fd5b50600e5461045c9061ffff808216916201000081048216916401000000009091041683565b348015610a6557600080fd5b506103fb610a743660046143c1565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610aab57600080fd5b50610429610aba3660046143a4565b612819565b348015610acb57600080fd5b50610429610ada3660046143a4565b612c17565b348015610aeb57600080fd5b50610429612cd7565b348015610b0057600080fd5b50610429610b0f36600461468c565b612db0565b348015610b2057600080fd5b506011546104f590600160a81b900460ff1681565b348015610b4157600080fd5b50610429610b503660046143ef565b61306f565b6018546001600160a01b03163314610ba25760405162461bcd60e51b815260206004820152601160248201526000805160206149e583398151915260448201526064015b60405180910390fd5b60165460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610bf757600080fd5b505af1158015610c0b573d6000803e3d6000fd5b505050505050565b6000610c203384846130e2565b5060015b92915050565b6018546001600160a01b03163314610c725760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600b5460ff16610c8157600080fd5b6001600160a01b0382163014801590610ca357506001600160a01b0381163014155b8015610cbd57506010546001600160a01b03838116911614155b8015610cd757506010546001600160a01b03828116911614155b610d115760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610b99565b806001600160a01b0316826001600160a01b031603610d7e576001600160a01b03811660009081526005602090815260408083208054600160ff199182168117909255600a9093529220805490911682179055610d6f908290611ad5565b610d7a816001610dfa565b5050565b6001600160a01b0382811660008181526005602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600a909252808320805486168317905592825291902080549092168117909155610de8908390611ad5565b610df3816001611ad5565b610d6f8260015b6018546001600160a01b03163314610e425760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b8015610f89576001600160a01b03821660009081526008602052604090205460ff1615610eb15760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610b99565b6001600160a01b03821660009081526020819052604090205415610f0b576001600160a01b038216600090815260208190526040902054610ef190611502565b6001600160a01b0383166000908152600160205260409020555b6001600160a01b038083166000818152600860205260409020805460ff1916600117905560105490911614610d7a57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0384161790555050565b80610d7a576001600160a01b03821660009081526008602052604090205460ff16610ff65760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610b99565b6010546001600160a01b039081169083160361106f576110146131db565b6001600160a01b03831660009081526001602052604090205461103791906146d4565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556008905220805460ff191690555050565b60095460010361110f576110816131db565b6001600160a01b0383166000908152600160205260409020546110a491906146d4565b6001600160a01b03831660009081526020818152604080832093909355600181528282208290556008905220805460ff1916905560098054806110e9576110e96146eb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b60095481101561127657826001600160a01b03166009828154811061113957611139614701565b6000918252602090912001546001600160a01b031603611264576009805461116390600190614717565b8154811061117357611173614701565b600091825260209091200154600980546001600160a01b03909216918390811061119f5761119f614701565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506111d56131db565b6001600160a01b0384166000908152600160205260409020546111f891906146d4565b6001600160a01b03841660009081526020818152604080832093909355600181528282208290556008905220805460ff19169055600980548061123d5761123d6146eb565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061126e8161472a565b915050611112565b505050565b60006112896012600a614827565b61129790633b9aca006146d4565b905090565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611301576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906112fb908490614717565b90915550505b61130c8484846133da565b949350505050565b6018546001600160a01b0316331461135c5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b80518251146113ad5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b99565b60005b82518161ffff161015611276576113c96012600a614827565b828261ffff16815181106113df576113df614701565b60200260200101516113f191906146d4565b6113fa33611d23565b10156114485760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610b99565b6114aa33848361ffff168151811061146257611462614701565b60200260200101516012600a6114789190614827565b858561ffff168151811061148e5761148e614701565b60200260200101516114a091906146d4565b6000806001613767565b50806114b581614836565b9150506113b0565b60006114c96000611d23565b6114d461dead611d23565b6114de9190614857565b6114ea6012600a614827565b6114f890633b9aca006146d4565b6112979190614717565b6000600c548211156115695760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b99565b60006115736131db565b905061157f818461486a565b9392505050565b6018546001600160a01b031633146115ce5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600f5460ff16156116215760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610b99565b6103e88361ffff161115801561163d57506103e88261ffff1611155b801561164f57506103e88161ffff1611155b61169b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b99565b600d805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6018546001600160a01b031633146117225760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6016546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b15801561177057600080fd5b505af1158015611784573d6000803e3d6000fd5b5050505050565b6019546001600160a01b031633146117f65760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610b99565b611800600061255f565b601980546001600160a01b0319169055565b601054600090612710908390611830906001600160a01b0316611d23565b61183a91906146d4565b610c24919061486a565b6018546001600160a01b0316331461188c5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60968111156118dd5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610b99565b601555565b6018546001600160a01b0316331461192a5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b0381166119a65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b99565b61deac196001600160a01b03821601611a275760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b99565b601854611a3e906001600160a01b03166000611ad5565b611a49816001611ad5565b601854600090611a61906001600160a01b0316611d23565b1115611a8357601854611a81906001600160a01b0316826114a082611d23565b505b601880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b03163314611b1d5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6018546001600160a01b03163314611b905760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60165460ff1615611ba057600080fd5b306001600160a01b03821603611bf85760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610b99565b6016805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af1925050508015611c7e575060408051601f3d908101601f19168201909252611c7b9181019061488c565b60015b611c8757600080fd5b600f805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355601080546001600160a01b0319168584169081179091556000908152600260205260409020805460ff191660011790556018549254611d0193831692919004166000196130e2565b600f5461127690309061010090046001600160a01b03166000196130e2565b50565b6001600160a01b03811660009081526008602052604081205460ff1615611d6057506001600160a01b031660009081526001602052604090205490565b6001600160a01b038216600090815260208190526040902054610c2490611502565b6018546001600160a01b03163314611dca5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60165460ff16611e425760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201527f73206265656e20656e61626c65642e00000000000000000000000000000000006064820152608401610b99565b601854611e59906001600160a01b03166000611ad5565b601880546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b03163314611eef5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600f805460ff19166001179055565b6018546001600160a01b03163314611f465760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b80611fb9576001600160a01b03828116600081815260026020526040808220805460ff1916905560165490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610bf757600080fd5b60035415612020576203f48060035442611fd39190614717565b116120205760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610b99565b6001600160a01b03821660009081526002602052604090205460ff16156120895760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610b99565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560165491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610bdd565b6018546000906001600160a01b031633146121355760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600f5461215490309061010090046001600160a01b03166000196130e2565b50600190565b6018546001600160a01b031633146121a25760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b60165460ff16156121f55760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b99565b601654610100900460ff1661224c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b99565b6016546201000090046001600160a01b031661227c576016805462010000600160b01b0319163062010000021790555b601654601054604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156122ee57600080fd5b505af19250505080156122ff575060015b506016546010546001600160a01b03620100009092048216916325a71cae916123289116611d23565b6040518263ffffffff1660e01b815260040161234691815260200190565b60408051808303816000875af1925050508015612380575060408051601f3d908101601f1916820190925261237d918101906148bb565b60015b1561238f576012919091556013555b6016805460ff19908116600117909155600b8054909116905542601755565b60006123bb3384846133da565b5060019392505050565b6018546001600160a01b0316331461240d5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b601654610100900460ff161561247557306001600160a01b038216036124755760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610b99565b6018546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa1580156124cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f091906148df565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127691906148f8565b6019546001600160a01b031633146125ca5760405162461bcd60e51b815260206004820152602860248201527f43616e206f6e6c792062652063616c6c6564206279206f726967696e616c206460448201526732b83637bcb2b91760c11b6064820152608401610b99565b601a546001600160a01b03168015612607576001600160a01b0381166000908152600560205260408120805460ff19169055612607908290611ad5565b601a80546001600160a01b0319166001600160a01b0384169081179091556000908152600560205260409020805460ff19166001908117909155610d7a908390611ad5565b6018546001600160a01b031633146126945760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b600e805464010000000061ffff84811691820265ffff00000000196201000093840263ffffffff1990951683891617949094179390931692909217909255600d546000926126e89290820481169116614915565b600e5461ffff9182169250829161270c918082169164010000000090910416614915565b61ffff1611156112765760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610b99565b6018546001600160a01b031633146127b65760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6011805460ff60a81b1916600160a81b841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146128615760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b601654610100900460ff16156128b95760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610b99565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129229190614937565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129939190614937565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156129de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a029190614937565b6010546001600160a01b039081166000908152600260205260409020805460ff191690559091508116612b9857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a919190614937565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b029190614937565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b739190614937565b601080546001600160a01b0319166001600160a01b0392909216919091179055612bb4565b601080546001600160a01b0319166001600160a01b0383161790555b600f805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b03858116820292909217835560105482166000908152600260205260409020805460ff1916600117905591546112769230929104166000196130e2565b6018546001600160a01b03163314612c5f5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b038116612cb55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610b99565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b03163314612d1f5760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b601654610100900460ff1615612d775760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b99565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611d20573d6000803e3d6000fd5b6018546001600160a01b03163314612df85760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b8284612e066012600a614827565b612e1490633b9aca006146d4565b612e1e91906146d4565b612e28919061486a565b601290815581908390612e3c90600a614827565b612e4a90633b9aca006146d4565b612e5491906146d4565b612e5e919061486a565b60138190556012541115612ebe5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610b99565b60105461271090612ed7906001600160a01b0316611d23565b612ee29060966146d4565b612eec919061486a565b6013541115612f495760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610b99565b620f4240612f596012600a614827565b612f6790633b9aca006146d4565b612f71919061486a565b6013541015612fd95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b99565b620f4240612fe96012600a614827565b612ff790633b9aca006146d4565b613001919061486a565b60125410156130695760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610b99565b50505050565b6018546001600160a01b031633146130b75760405162461bcd60e51b815260206004820152601160248201526000805160206149e58339815191526044820152606401610b99565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03831661312e5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b99565b6001600160a01b03821661317a5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610b99565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600c54600090816131ee6012600a614827565b6131fc90633b9aca006146d4565b6010546001600160a01b03166000908152600860205260409020549091508290829060ff16156132b6576010546001600160a01b039081166000908152602081815260408083205460019092529091205460165491929091620100009004163014801561326a575046606114155b1561327457600080fd5b8382118061328157508281115b1561329b57613290858761486a565b965050505050505090565b6132a58285614717565b93506132b18184614717565b925050505b600954156133ac5760005b60095460ff821610156133aa57600080600060098460ff16815481106132e9576132e9614701565b60009182526020808320909101546001600160a01b031683528201929092526040018120546009805491935060019183919060ff871690811061332e5761332e614701565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061336257508381115b1561337d57613371868861486a565b97505050505050505090565b6133878286614717565b94506133938185614717565b9350505080806133a290614954565b9150506132c1565b505b6133b6838561486a565b8210156133d0576133c7838561486a565b94505050505090565b6133c7818361486a565b60006001600160a01b0384166134405760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b99565b6001600160a01b0383166134a25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b99565b600082116135045760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b99565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135325760019250613560565b6001600160a01b03861660009081526002602052604090205460ff161561355c5760019150613560565b5060015b61356a8787613a62565b1561366b5760165460ff1661366b57806135c65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b99565b6001600160a01b03871660009081526006602052604090205460ff1615801561360857506001600160a01b03861660009081526006602052604090205460ff16155b1561366b5760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610b99565b811561374e57601154600160a01b900460ff1661374e57601154600160a81b900460ff1680156136b457506001600160a01b0386166000908152600a602052604090205460ff16155b80156136d957506001600160a01b0387166000908152600a602052604090205460ff16155b1561374e5760006136e930611d23565b9050601254811061374c5760135460145460ff161561373657601554601054612710919061371f906001600160a01b0316611d23565b61372991906146d4565b613733919061486a565b90505b808210613741578091505b61374a82613b77565b505b505b61375c878787868686613767565b979650505050505050565b6001600160a01b03861660009081526007602052604081205460019060ff16806137a957506001600160a01b03871660009081526007602052604090205460ff165b156137b2575060005b60006137c3898989858a8a8a613dfd565b60808101516001600160a01b038b166000908152602081905260408120805493945091926137f2908490614717565b909155505060608101516001600160a01b03891660009081526020819052604081208054909190613824908490614857565b90915550506001600160a01b03891660009081526008602052604090205460ff1615613888576001600160a01b03891660009081526001602052604090205461386e908890614717565b6001600160a01b038a166000908152600160205260409020555b6001600160a01b03881660009081526008602052604090205460ff16156138e85780516001600160a01b0389166000908152600160205260409020546138ce9190614857565b6001600160a01b0389166000908152600160205260409020555b60008160a0015111806138ff575060008160200151115b15613920578060a00151600c600082825461391a9190614717565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161396991815260200190565b60405180910390a3601654610100900460ff16613a535761398a898961418a565b601654610100900460ff161580156139a757506139a78989613a62565b80156139cc57506001600160a01b03891660009081526006602052604090205460ff16155b80156139f157506001600160a01b03881660009081526006602052604090205460ff16155b80156139fb575083155b15613a535760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610b99565b50600198975050505050505050565b6018546000906001600160a01b03848116911614801590613a9157506018546001600160a01b03838116911614155b8015613aa857506018546001600160a01b03163214155b8015613acd57506001600160a01b03821660009081526005602052604090205460ff16155b8015613af257506001600160a01b03831660009081526005602052604090205460ff16155b8015613b0957506001600160a01b03821661dead14155b8015613b1d57506001600160a01b03821615155b8015613b3257506001600160a01b0383163014155b8015613b5257506016546001600160a01b03848116620100009092041614155b801561157f5750506016546201000090046001600160a01b0390811691161415919050565b6011805460ff60a01b1916600160a01b17905560408051606081018252600e5461ffff8082168352620100008204811660208401526401000000009091041691810182905290600003613bca5750613ded565b306000908152600460209081526040808320600f5461010090046001600160a01b0316845290915290205460001914613c2d57306000908152600460209081526040808320600f5461010090046001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613c6257613c62614701565b60200260200101906001600160a01b031690816001600160a01b031681525050600f60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf99190614937565b81600181518110613d0c57613d0c614701565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81526101009091049091169063791ac94790613d59908690600090869030904290600401614973565b600060405180830381600087803b158015613d7357600080fd5b505af1925050508015613d84575060015b613d8f575050613ded565b6011546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613de1576040519150601f19603f3d011682016040523d82523d6000602084013e613de6565b606091505b5050505050505b506011805460ff60a01b19169055565b613e3d6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613e7d6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051606081018252600e5461ffff8082168352620100008204811660208401526401000000009091041691810191909152613eb86131db565b60c08301819052613ec990896146d4565b608083015280516040820151600091613ee191614915565b61ffff16905080600003613ef457600097505b613efe8b8b613a62565b15613f985760165460405163ecd07a5360e01b81526001600160a01b038d811660048301528c81166024830152604482018c9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613f81575060408051601f3d908101601f19168201909252613f7e918101906148f8565b60015b613f8a57600080fd5b905080613f9657600080fd5b505b87156140695760008715613fb35750600d5461ffff16613fdd565b8615613fcc5750600d5462010000900461ffff16613fdd565b50600d54640100000000900461ffff165b6000612710613fec838d6146d4565b613ff6919061486a565b8451909150839061400b9061ffff16836146d4565b614015919061486a565b602086018190526140269082614717565b60408601819052602086015161403c9190614857565b614046908c614717565b855260c0850151602086015161405c91906146d4565b60a08601525061406d9050565b8883525b604083015115614144578260c00151836040015161408b91906146d4565b30600090815260208190526040812080549091906140aa908490614857565b90915550503060009081526008602052604090205460ff16156140f25760408084015130600090815260016020529182208054919290916140ec908490614857565b90915550505b306001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040015160405161413b91815260200190565b60405180910390a35b8260c00151836040015161415891906146d4565b8360a001516141679190614857565b83608001516141769190614717565b606084015250909998505050505050505050565b601654610100900460ff16156141ee5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610b99565b6141f88282613a62565b15801561421257506010546001600160a01b038281169116145b15610d7a576001600160a01b038083166000908152600560209081526040808320805460ff19908116600190811790925560079093529220805490911690911790556016805461ff00191661010017908190556201000090041661428a576016805462010000600160b01b0319163062010000021790555b6011805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161280d565b8015158114611d2057600080fd5b600080604083850312156142ef57600080fd5b82356142fa816142ce565b9150602083013561430a816142ce565b809150509250929050565b600060208083528351808285015260005b8181101561434257858101830151858201604001528201614326565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d2057600080fd5b6000806040838503121561438b57600080fd5b823561439681614363565b946020939093013593505050565b6000602082840312156143b657600080fd5b813561157f81614363565b600080604083850312156143d457600080fd5b82356143df81614363565b9150602083013561430a81614363565b6000806040838503121561440257600080fd5b82356142fa81614363565b60008060006060848603121561442257600080fd5b833561442d81614363565b9250602084013561443d81614363565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561448d5761448d61444e565b604052919050565b600067ffffffffffffffff8211156144af576144af61444e565b5060051b60200190565b600082601f8301126144ca57600080fd5b813560206144df6144da83614495565b614464565b82815260059290921b840181019181810190868411156144fe57600080fd5b8286015b848110156145195780358352918301918301614502565b509695505050505050565b6000806040838503121561453757600080fd5b823567ffffffffffffffff8082111561454f57600080fd5b818501915085601f83011261456357600080fd5b813560206145736144da83614495565b82815260059290921b8401810191818101908984111561459257600080fd5b948201945b838610156145b95785356145aa81614363565b82529482019490820190614597565b965050860135925050808211156145cf57600080fd5b506145dc858286016144b9565b9150509250929050565b6000602082840312156145f857600080fd5b5035919050565b803561ffff8116811461461157600080fd5b919050565b60008060006060848603121561462b57600080fd5b614634846145ff565b9250614642602085016145ff565b9150614650604085016145ff565b90509250925092565b6000806040838503121561466c57600080fd5b614675836145ff565b9150614683602084016145ff565b90509250929050565b600080600080608085870312156146a257600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c2457610c246146be565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81810381811115610c2457610c246146be565b60006001820161473c5761473c6146be565b5060010190565b600181815b8085111561477e578160001904821115614764576147646146be565b8085161561477157918102915b93841c9390800290614748565b509250929050565b60008261479557506001610c24565b816147a257506000610c24565b81600181146147b857600281146147c2576147de565b6001915050610c24565b60ff8411156147d3576147d36146be565b50506001821b610c24565b5060208310610133831016604e8410600b8410161715614801575081810a610c24565b61480b8383614743565b806000190482111561481f5761481f6146be565b029392505050565b600061157f60ff841683614786565b600061ffff80831681810361484d5761484d6146be565b6001019392505050565b80820180821115610c2457610c246146be565b60008261488757634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561489f57600080fd5b82516148aa81614363565b602084015190925061430a81614363565b600080604083850312156148ce57600080fd5b505080516020909101519092909150565b6000602082840312156148f157600080fd5b5051919050565b60006020828403121561490a57600080fd5b815161157f816142ce565b61ffff818116838216019080821115614930576149306146be565b5092915050565b60006020828403121561494957600080fd5b815161157f81614363565b600060ff821660ff810361496a5761496a6146be565b60010192915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156149c35784516001600160a01b03168352938301939183019160010161499e565b50506001600160a01b0396909616606085015250505060800152939250505056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a26469706673582212205916179ec7dd2c7d364423eb3a2777a2e19ae8b9e625bcf7e43fc17dca50d6f464736f6c63430008130033

Deployed Bytecode Sourcemap

4090:26442:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5897:73;;;;;;;;;;;;5928:42;5897:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;5897:73:0;;;;;;;;6146:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6146:28:0;245:177:1;15075:153:0;;;;;;;;;;-1:-1:-1;15075:153:0;;;;;:::i;:::-;;:::i;:::-;;5366:107;;;;;;;;;;-1:-1:-1;5366:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;1137:6:1;1170:15;;;1152:34;;1222:15;;;1217:2;1202:18;;1195:43;1274:15;;1254:18;;;1247:43;;;;1115:2;1100:18;5366:107:0;931:365:1;10729:80:0;;;;;;;;;;-1:-1:-1;10801:5:0;;;;;;;;;;;-1:-1:-1;;;10801:5:0;;;;10729:80;;;;10801:5;10729:80;:::i;5836:26::-;;;;;;;;;;-1:-1:-1;5836:26:0;;;;;;;-1:-1:-1;;;;;5836:26:0;;;5803;;;;;;;;;;-1:-1:-1;5803:26:0;;;;;;;;;;;2267:14:1;;2260:22;2242:41;;2230:2;2215:18;5803:26:0;2102:187:1;11418:161:0;;;;;;;;;;-1:-1:-1;11418:161:0;;;;;:::i;:::-;;:::i;14504:140::-;;;;;;;;;;-1:-1:-1;14504:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14602:34:0;14578:4;14602:34;;;:25;:34;;;;;;;;;14504:140;17872:961;;;;;;;;;;-1:-1:-1;17872:961:0;;;;;:::i;:::-;;:::i;24359:1522::-;;;;;;;;;;-1:-1:-1;24359:1522:0;;;;;:::i;:::-;;:::i;10464:83::-;;;;;;;;;;;;;:::i;12088:306::-;;;;;;;;;;-1:-1:-1;12088:306:0;;;;;:::i;:::-;;:::i;23776:447::-;;;;;;;;;;-1:-1:-1;23776:447:0;;;;;:::i;:::-;;:::i;6254:33::-;;;;;;;;;;;;;;;;14808:141;;;;;;;;;;;;;:::i;5600:42::-;;;;;;;;;;;;5638:4;5600:42;;25889:250;;;;;;;;;;-1:-1:-1;25889:250:0;;;;;:::i;:::-;;:::i;6181:25::-;;;;;;;;;;;;;;;;10553:80;;;;;;;;;;-1:-1:-1;10553:80:0;;4960:2;7080:36:1;;7068:2;7053:18;10553:80:0;6938:184:1;15426:453:0;;;;;;;;;;-1:-1:-1;15426:453:0;;;;;:::i;:::-;;:::i;14957:110::-;;;;;;;;;;-1:-1:-1;14957:110:0;;;;;:::i;:::-;;:::i;9853:221::-;;;;;;;;;;;;;:::i;5869:21::-;;;;;;;;;;-1:-1:-1;5869:21:0;;;;-1:-1:-1;;;;;5869:21:0;;;6294:34;;;;;;;;;;-1:-1:-1;6294:34:0;;;;;;;;16472:189;;;;;;;;;;-1:-1:-1;16472:189:0;;;;;:::i;:::-;;:::i;17376:217::-;;;;;;;;;;-1:-1:-1;17376:217:0;;;;;:::i;:::-;;:::i;8160:654::-;;;;;;;;;;-1:-1:-1;8160:654:0;;;;;:::i;:::-;;:::i;14227:127::-;;;;;;;;;;-1:-1:-1;14227:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14318:28:0;14294:4;14318:28;;;:19;:28;;;;;;;;;14227:127;6335:36;;;;;;;;;;-1:-1:-1;6335:36:0;;;;;;;;;;;9178:23;;;;;;;;;;-1:-1:-1;9178:23:0;;;;-1:-1:-1;;;;;9178:23:0;;;14362:134;;;;;;;;;;-1:-1:-1;14362:134:0;;;;;:::i;:::-;;:::i;6408:26::-;;;;;;;;;;;;;;;;13662:557;;;;;;;;;;-1:-1:-1;13662:557:0;;;;;:::i;:::-;;:::i;11039:198::-;;;;;;;;;;-1:-1:-1;11039:198:0;;;;;:::i;:::-;;:::i;8822:310::-;;;;;;;;;;;;;:::i;5977:92::-;;;;;;;;;;-1:-1:-1;5977:92:0;;;;-1:-1:-1;;;;;5977:92:0;;;15236:182;;;;;;;;;;;;;:::i;13090:564::-;;;;;;;;;;-1:-1:-1;13090:564:0;;;;;:::i;:::-;;:::i;9140:31::-;;;;;;;;;;-1:-1:-1;9140:31:0;;;;-1:-1:-1;;;;;9140:31:0;;;24231:120;;;;;;;;;;-1:-1:-1;24231:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;24323:20:0;24299:4;24323:20;;;:11;:20;;;;;;;;;24231:120;10815:79;;;;;;;;;;-1:-1:-1;10885:6:0;;-1:-1:-1;;;;;10885:6:0;10815:79;;11905:175;;;;;;;;;;;;;:::i;22537:737::-;;;;;;;;;;;;;:::i;11245:165::-;;;;;;;;;;-1:-1:-1;11245:165:0;;;;;:::i;:::-;;:::i;23472:296::-;;;;;;;;;;-1:-1:-1;23472:296:0;;;;;:::i;:::-;;:::i;9363:482::-;;;;;;;;;;-1:-1:-1;9363:482:0;;;;;:::i;:::-;;:::i;6213:34::-;;;;;;;;;;-1:-1:-1;6213:34:0;;;;;;;;15887:378;;;;;;;;;;-1:-1:-1;15887:378:0;;;;;:::i;:::-;;:::i;17601:263::-;;;;;;;;;;-1:-1:-1;17601:263:0;;;;;:::i;:::-;;:::i;5482:109::-;;;;;;;;;;-1:-1:-1;5482:109:0;;;;;;;;;;;;;;;;;;;;;;10900:133;;;;;;;;;;-1:-1:-1;10900:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11002:19:0;;;10984:7;11002:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10900:133;12402:680;;;;;;;;;;-1:-1:-1;12402:680:0;;;;;:::i;:::-;;:::i;16273:191::-;;;;;;;;;;-1:-1:-1;16273:191:0;;;;;:::i;:::-;;:::i;23282:182::-;;;;;;;;;;;;;:::i;16669:699::-;;;;;;;;;;-1:-1:-1;16669:699:0;;;;;:::i;:::-;;:::i;6100:39::-;;;;;;;;;;-1:-1:-1;6100:39:0;;;;-1:-1:-1;;;6100:39:0;;;;;;14652:148;;;;;;;;;;-1:-1:-1;14652:148:0;;;;;:::i;:::-;;:::i;15075:153::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;;;;;;;;;15170:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;15170:50:0;;9315:14:1;;9308:22;15170:50:0::1;::::0;::::1;9290:41:1::0;9374:14;;9367:22;9347:18;;;9340:50;15170:11:0;;;::::1;-1:-1:-1::0;;;;;15170:11:0::1;::::0;:26:::1;::::0;9263:18:1;;15170:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15075:153:::0;;:::o;11418:161::-;11495:4;11512:37;11521:10;11533:7;11542:6;11512:8;:37::i;:::-;-1:-1:-1;11567:4:0;11418:161;;;;;:::o;17872:961::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;17976:23:::1;::::0;::::1;;17968:32;;;::::0;::::1;;-1:-1:-1::0;;;;;18019:23:0;::::1;18037:4;18019:23;::::0;::::1;::::0;:69:::1;;-1:-1:-1::0;;;;;;18064:24:0;::::1;18083:4;18064:24;;18019:69;:107;;;;-1:-1:-1::0;18110:6:0::1;::::0;-1:-1:-1;;;;;18110:16:0;;::::1;:6:::0;::::1;:16;;18019:107;:146;;;;-1:-1:-1::0;18148:6:0::1;::::0;-1:-1:-1;;;;;18148:17:0;;::::1;:6:::0;::::1;:17;;18019:146;18011:170;;;::::0;-1:-1:-1;;;18011:170:0;;9603:2:1;18011:170:0::1;::::0;::::1;9585:21:1::0;9642:2;9622:18;;;9615:30;-1:-1:-1;;;9661:18:1;;;9654:41;9712:18;;18011:170:0::1;9401:335:1::0;18011:170:0::1;18206:7;-1:-1:-1::0;;;;;18196:17:0::1;:6;-1:-1:-1::0;;;;;18196:17:0::1;::::0;18192:634:::1;;-1:-1:-1::0;;;;;18230:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;18259:4:::1;-1:-1:-1::0;;18230:33:0;;::::1;::::0;::::1;::::0;;;18278:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;18325:34:::1;::::0;18230:26;;18325:19:::1;:34::i;:::-;18374:36;18396:7;18405:4;18374:21;:36::i;:::-;17872:961:::0;;:::o;18192:634::-:1;-1:-1:-1::0;;;;;18443:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;18471:4:::1;-1:-1:-1::0;;18443:32:0;;::::1;::::0;::::1;::::0;;;18490:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;18538:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;18584:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;18631:33:::1;::::0;18443:25;;18631:19:::1;:33::i;:::-;18679:34;18699:7;18708:4;18679:19;:34::i;:::-;18728:35;18750:6;18758:4;24359:1522:::0;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;24453:7:::1;24449:1425;;;-1:-1:-1::0;;;;;24486:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24485:21;24477:62;;;::::0;-1:-1:-1;;;24477:62:0;;9943:2:1;24477:62:0::1;::::0;::::1;9925:21:1::0;9982:2;9962:18;;;9955:30;10021;10001:18;;;9994:58;10069:18;;24477:62:0::1;9741:352:1::0;24477:62:0::1;-1:-1:-1::0;;;;;24558:16:0;::::1;24577:1;24558:16:::0;;;::::1;::::0;;;;;;;:20;24554:117:::1;;-1:-1:-1::0;;;;;24638:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;24618:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24599:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24554:117:::1;-1:-1:-1::0;;;;;24685:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24685:27:0::1;24708:4;24685:27;::::0;;24742:6:::1;::::0;;;::::1;24731:17;24727:80;;24768:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24768:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24768:23:0::1;-1:-1:-1::0;;;;;24768:23:0;::::1;;::::0;;17872:961;;:::o;24449:1425::-:1;24829:7;24824:1050;;-1:-1:-1::0;;;;;24861:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24853:61;;;::::0;-1:-1:-1;;;24853:61:0;;10300:2:1;24853:61:0::1;::::0;::::1;10282:21:1::0;10339:2;10319:18;;;10312:30;10378;10358:18;;;10351:58;10426:18;;24853:61:0::1;10098:352:1::0;24853:61:0::1;24944:6;::::0;-1:-1:-1;;;;;24944:6:0;;::::1;24933:17:::0;;::::1;::::0;24929:934:::1;;25009:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;24990:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;24971:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;25038:7:::1;:16:::0;;;;;:20;;;25077:11:::1;:20:::0;;;:28;;-1:-1:-1;;25077:28:0::1;::::0;;17872:961;;:::o;24929:934::-:1;25131:9;:16:::0;25151:1:::1;25131:21:::0;25127:736:::1;;25211:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;25192:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;25173:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;25240:7:::1;:16:::0;;;;;:20;;;25279:11:::1;:20:::0;;;:28;;-1:-1:-1;;25279:28:0::1;::::0;;25326:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25326:15:0;;;;;-1:-1:-1;;;;;;25326:15:0::1;::::0;;;;;17872:961;;:::o;25127:736::-:1;25387:9;25382:466;25406:9;:16:::0;25402:20;::::1;25382:466;;;25472:7;-1:-1:-1::0;;;;;25456:23:0::1;:9;25466:1;25456:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25456:12:0::1;:23:::0;25452:377:::1;;25523:9;25533:16:::0;;:20:::1;::::0;25552:1:::1;::::0;25533:20:::1;:::i;:::-;25523:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25508:9:::1;:12:::0;;-1:-1:-1;;;;;25523:31:0;;::::1;::::0;25518:1;;25508:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;25508:46:0::1;;;;;-1:-1:-1::0;;;;;25508:46:0::1;;;;;;25619:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;25600:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;25581:16:0;::::1;:7;:16:::0;;;::::1;::::0;;;;;;;:48;;;;25656:7:::1;:16:::0;;;;;:20;;;25703:11:::1;:20:::0;;;:28;;-1:-1:-1;;25703:28:0::1;::::0;;25758:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25758:15:0;;;;;-1:-1:-1;;;;;;25758:15:0::1;::::0;;;;;25382:466:::1;24359:1522:::0;;:::o;25452:377::-:1;25424:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25382:466;;;;24359:1522:::0;;:::o;10464:83::-;10519:7;5021:13;4960:2;5021;:13;:::i;:::-;5004:30;;4809:13;5004:30;:::i;:::-;10530:14;;10464:83;:::o;12088:306::-;-1:-1:-1;;;;;12209:19:0;;12188:4;12209:19;;;:11;:19;;;;;;;;12229:10;12209:31;;;;;;;;-1:-1:-1;;12209:52:0;12205:126;;-1:-1:-1;;;;;12278:19:0;;;;;;:11;:19;;;;;;;;12298:10;12278:31;;;;;;;:41;;12313:6;;12278:19;:41;;12313:6;;12278:41;:::i;:::-;;;;-1:-1:-1;;12205:126:0;12350:36;12360:6;12368:9;12379:6;12350:9;:36::i;:::-;12343:43;12088:306;-1:-1:-1;;;;12088:306:0:o;23776:447::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;23911:7:::1;:14;23892:8;:15;:33;23884:67;;;::::0;-1:-1:-1;;;23884:67:0;;12882:2:1;23884:67:0::1;::::0;::::1;12864:21:1::0;12921:2;12901:18;;;12894:30;12960:23;12940:18;;;12933:51;13001:18;;23884:67:0::1;12680:345:1::0;23884:67:0::1;23967:8;23962:254;23985:8;:15;23981:1;:19;;;23962:254;;;24066:13;4960:2;24066;:13;:::i;:::-;24055:7;24063:1;24055:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24030:21;24040:10;24030:9;:21::i;:::-;:49;;24022:80;;;::::0;-1:-1:-1;;;24022:80:0;;13232:2:1;24022:80:0::1;::::0;::::1;13214:21:1::0;13271:2;13251:18;;;13244:30;13310:20;13290:18;;;13283:48;13348:18;;24022:80:0::1;13030:342:1::0;24022:80:0::1;24117:87;24134:10;24146:8;24155:1;24146:11;;;;;;;;;;:::i;:::-;;;;;;;4960:2;24170;:13;;;;:::i;:::-;24159:7;24167:1;24159:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;24185:5;24192::::0;24199:4:::1;24117:16;:87::i;:::-;-1:-1:-1::0;24002:3:0;::::1;::::0;::::1;:::i;:::-;;;;23962:254;;14808:141:::0;14861:7;14918:21;14936:1;14918:9;:21::i;:::-;14900:15;5928:42;14900:9;:15::i;:::-;:39;;;;:::i;:::-;5021:13;4960:2;5021;:13;:::i;:::-;5004:30;;4809:13;5004:30;:::i;:::-;14889:51;;;;:::i;25889:250::-;25955:7;25994;;25983;:18;;25975:73;;;;-1:-1:-1;;;25975:73:0;;13911:2:1;25975:73:0;;;13893:21:1;13950:2;13930:18;;;13923:30;13989:34;13969:18;;;13962:62;-1:-1:-1;;;14040:18:1;;;14033:40;14090:19;;25975:73:0;13709:406:1;25975:73:0;26059:19;26082:10;:8;:10::i;:::-;26059:33;-1:-1:-1;26110:21:0;26059:33;26110:7;:21;:::i;:::-;26103:28;25889:250;-1:-1:-1;;;25889:250:0:o;15426:453::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;15534:14:::1;::::0;::::1;;15533:15;15525:45;;;::::0;-1:-1:-1;;;15525:45:0;;14544:2:1;15525:45:0::1;::::0;::::1;14526:21:1::0;14583:2;14563:18;;;14556:30;14622:19;14602:18;;;14595:47;14659:18;;15525:45:0::1;14342:341:1::0;15525:45:0::1;5638:4;15589:6;:21;;;;:65;;;;;5688:4;15631:7;:23;;;;15589:65;:117;;;;;5742:4;15675:11;:31;;;;15589:117;15581:170;;;::::0;-1:-1:-1;;;15581:170:0;;14890:2:1;15581:170:0::1;::::0;::::1;14872:21:1::0;14929:2;14909:18;;;14902:30;14968:25;14948:18;;;14941:53;15011:18;;15581:170:0::1;14688:347:1::0;15581:170:0::1;15762:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;15798:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;15836:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;15426:453::o;14957:110::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;15026:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;15026:33:0;;-1:-1:-1;;;;;178:55:1;;;15026:33:0::1;::::0;::::1;160:74:1::0;15026:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;15026:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14957:110:::0;:::o;9853:221::-;9931:16;;-1:-1:-1;;;;;9931:16:0;9917:10;:30;9909:83;;;;-1:-1:-1;;;9909:83:0;;15242:2:1;9909:83:0;;;15224:21:1;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;-1:-1:-1;;;15371:18:1;;;15364:38;15419:19;;9909:83:0;15040:404:1;9909:83:0;10003:23;10023:1;10003:11;:23::i;:::-;10037:16;:29;;-1:-1:-1;;;;;;10037:29:0;;;9853:221::o;16472:189::-;16601:6;;16563:7;;5789:5;;16611:21;;16591:17;;-1:-1:-1;;;;;16601:6:0;16591:9;:17::i;:::-;:41;;;;:::i;:::-;16590:62;;;;:::i;17376:217::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;17506:3:::1;17480:22;:29;;17472:64;;;::::0;-1:-1:-1;;;17472:64:0;;15651:2:1;17472:64:0::1;::::0;::::1;15633:21:1::0;15690:2;15670:18;;;15663:30;15729:24;15709:18;;;15702:52;15771:18;;17472:64:0::1;15449:346:1::0;17472:64:0::1;17547:13;:38:::0;17376:217::o;8160:654::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;-1:-1:-1;;;;;8239:22:0;::::1;8231:96;;;::::0;-1:-1:-1;;;8231:96:0;;16002:2:1;8231:96:0::1;::::0;::::1;15984:21:1::0;16041:2;16021:18;;;16014:30;16080:34;16060:18;;;16053:62;16151:31;16131:18;;;16124:59;16200:19;;8231:96:0::1;15800:425:1::0;8231:96:0::1;-1:-1:-1::0;;;;;;;8346:16:0;::::1;::::0;8338:90:::1;;;::::0;-1:-1:-1;;;8338:90:0;;16002:2:1;8338:90:0::1;::::0;::::1;15984:21:1::0;16041:2;16021:18;;;16014:30;16080:34;16060:18;;;16053:62;16151:31;16131:18;;;16124:59;16200:19;;8338:90:0::1;15800:425:1::0;8338:90:0::1;8459:6;::::0;8439:34:::1;::::0;-1:-1:-1;;;;;8459:6:0::1;;8439:19;:34::i;:::-;8484:35;8504:8;8514:4;8484:19;:35::i;:::-;8554:6;::::0;8564:1:::1;::::0;8544:17:::1;::::0;-1:-1:-1;;;;;8554:6:0::1;8544:9;:17::i;:::-;:21;8540:127;;;8599:6;::::0;8582:73:::1;::::0;-1:-1:-1;;;;;8599:6:0::1;8607:8:::0;8617:17:::1;8599:6:::0;8617:9:::1;:17::i;8582:73::-;;8540:127;8706:6;::::0;;-1:-1:-1;;;;;8723:17:0;;::::1;-1:-1:-1::0;;;;;;8723:17:0;::::1;::::0;::::1;::::0;;;8756:40:::1;::::0;8706:6;::::1;::::0;8723:17;8706:6;;8756:40:::1;::::0;8687:16:::1;::::0;8756:40:::1;8220:594;8160:654:::0;:::o;14362:134::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;-1:-1:-1;;;;;14450:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14450:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14362:134::o;13662:557::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;13737:14:::1;::::0;::::1;;13736:15;13728:24;;;::::0;::::1;;13787:4;-1:-1:-1::0;;;;;13771:21:0;::::1;::::0;13763:48:::1;;;::::0;-1:-1:-1;;;13763:48:0;;16432:2:1;13763:48:0::1;::::0;::::1;16414:21:1::0;16471:2;16451:18;;;16444:30;16510:16;16490:18;;;16483:44;16544:18;;13763:48:0::1;16230:338:1::0;13763:48:0::1;13822:11;:31:::0;;-1:-1:-1;;;;;;13822:31:0::1;::::0;-1:-1:-1;;;;;13822:31:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13868:23:::1;::::0;;-1:-1:-1;;;13868:23:0;;;;:11;;;::::1;::::0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;13868:11:0;:23:::1;;;;;;;;;;-1:-1:-1::0;13868:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;13868:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;13864:348;;14201:8;::::0;::::1;13864:348;13955:9;:29:::0;;-1:-1:-1;;13955:29:0::1;;-1:-1:-1::0;;;;;13955:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13986:6:::1;:22:::0;;-1:-1:-1;;;;;;13986:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14010:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;14010:22:0::1;-1:-1:-1::0;14010:22:0::1;::::0;;14057:6:::1;::::0;14073:9;;14048:55:::1;::::0;14057:6;::::1;::::0;14073:9;;::::1;;-1:-1:-1::0;;14048:8:0::1;:55::i;:::-;14150:9;::::0;14118:62:::1;::::0;14135:4:::1;::::0;14150:9:::1;::::0;::::1;-1:-1:-1::0;;;;;14150:9:0::1;-1:-1:-1::0;;14118:8:0::1;:62::i;13864:348::-;13662:557:::0;:::o;11039:198::-;-1:-1:-1;;;;;11129:20:0;;11105:7;11129:20;;;:11;:20;;;;;;;;11125:49;;;-1:-1:-1;;;;;;11158:16:0;;;;;:7;:16;;;;;;;11039:198::o;11125:49::-;-1:-1:-1;;;;;11212:16:0;;:7;:16;;;;;;;;;;;11192:37;;:19;:37::i;8822:310::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;8889:14:::1;::::0;::::1;;8881:74;;;::::0;-1:-1:-1;;;8881:74:0;;17165:2:1;8881:74:0::1;::::0;::::1;17147:21:1::0;17204:2;17184:18;;;17177:30;17243:34;17223:18;;;17216:62;17314:17;17294:18;;;17287:45;17349:19;;8881:74:0::1;16963:411:1::0;8881:74:0::1;8986:6;::::0;8966:34:::1;::::0;-1:-1:-1;;;;;8986:6:0::1;;8966:19;:34::i;:::-;9030:6;::::0;;-1:-1:-1;;;;;;9047:19:0;::::1;::::0;;;9082:42:::1;::::0;-1:-1:-1;;;;;9030:6:0;;::::1;::::0;9011:16:::1;::::0;9030:6;;9082:42:::1;::::0;9011:16;;9082:42:::1;8870:262;8822:310::o:0;15236:182::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;15389:14:::1;:21:::0;;-1:-1:-1;;15389:21:0::1;15406:4;15389:21;::::0;;15236:182::o;13090:564::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;13172:7:::1;13167:480;;-1:-1:-1::0;;;;;13196:13:0;;::::1;13212:5;13196:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13196:21:0::1;::::0;;13232:11:::1;::::0;:34;;-1:-1:-1;;;13232:34:0;;::::1;::::0;::::1;17547:74:1::0;;;;17637:18;;;17630:50;;;;13232:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17520:18:1;;13232:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;13167:480;13303:17;::::0;:22;13299:135:::1;;13392:6;13372:17;;13354:15;:35;;;;:::i;:::-;:44;13346:72;;;::::0;-1:-1:-1;;;13346:72:0;;17893:2:1;13346:72:0::1;::::0;::::1;17875:21:1::0;17932:2;17912:18;;;17905:30;17971:17;17951:18;;;17944:45;18006:18;;13346:72:0::1;17691:339:1::0;13346:72:0::1;-1:-1:-1::0;;;;;13457:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;13456:14;13448:54;;;::::0;-1:-1:-1;;;13448:54:0;;18237:2:1;13448:54:0::1;::::0;::::1;18219:21:1::0;18276:2;18256:18;;;18249:30;18315:29;18295:18;;;18288:57;18362:18;;13448:54:0::1;18035:351:1::0;13448:54:0::1;-1:-1:-1::0;;;;;13517:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;13517:20:0::1;13533:4;13517:20:::0;;::::1;::::0;;;13572:15:::1;13552:17;:35:::0;13602:11:::1;::::0;:33;;-1:-1:-1;;;13602:33:0;;::::1;::::0;::::1;17547:74:1::0;;;;17637:18;;;17630:50;13602:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17520:18:1;;13602:33:0::1;17379:307:1::0;11905:175:0;8014:6;;11971:4;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;12020:9:::1;::::0;11988:62:::1;::::0;12005:4:::1;::::0;12020:9:::1;::::0;::::1;-1:-1:-1::0;;;;;12020:9:0::1;-1:-1:-1::0;;11988:8:0::1;:62::i;:::-;-1:-1:-1::0;12068:4:0::1;11905:175:::0;:::o;22537:737::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;22599:14:::1;::::0;::::1;;22598:15;22590:52;;;::::0;-1:-1:-1;;;22590:52:0;;18593:2:1;22590:52:0::1;::::0;::::1;18575:21:1::0;18632:2;18612:18;;;18605:30;18671:26;18651:18;;;18644:54;18715:18;;22590:52:0::1;18391:348:1::0;22590:52:0::1;22661:16;::::0;::::1;::::0;::::1;;;22653:53;;;::::0;-1:-1:-1;;;22653:53:0;;18946:2:1;22653:53:0::1;::::0;::::1;18928:21:1::0;18985:2;18965:18;;;18958:30;19024:26;19004:18;;;18997:54;19068:18;;22653:53:0::1;18744:348:1::0;22653:53:0::1;22729:11;::::0;;;::::1;-1:-1:-1::0;;;;;22729:11:0::1;22717:106;;22771:11;:40:::0;;-1:-1:-1;;;;;;22771:40:0::1;22805:4;22771:40:::0;::::1;;::::0;;22717:106:::1;22837:11;::::0;22859:6:::1;::::0;22837:87:::1;::::0;-1:-1:-1;;;22837:87:0;;-1:-1:-1;;;;;22859:6:0;;::::1;22837:87;::::0;::::1;19320:74:1::0;19442:10;22874:12:0::1;19430:23:1::0;19410:18;;;19403:51;19502:18;22896:15:0::1;19490:31:1::0;19470:18;;;19463:59;4960:2:0::1;19538:18:1::0;;;19531:45;22837:11:0;;;::::1;;::::0;:21:::1;::::0;19292:19:1;;22837:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22833:103:::0;22950:11:::1;::::0;22981:6:::1;::::0;-1:-1:-1;;;;;22950:11:0;;;::::1;::::0;::::1;::::0;:20:::1;::::0;22971:17:::1;::::0;22981:6:::1;22971:9;:17::i;:::-;22950:39;;;;;;;;;;;;;391:25:1::0;;379:2;364:18;;245:177;22950:39:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;22950:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;22950:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;22946:207:::0;::::1;;23061:13;:29:::0;;;;23105:10:::1;:27:::0;22946:207:::1;23163:14;:21:::0;;-1:-1:-1;;23163:21:0;;::::1;23180:4;23163:21;::::0;;;23195:23:::1;:31:::0;;;;::::1;::::0;;23251:15:::1;23237:11;:29:::0;22537:737::o;11245:165::-;11323:4;11340:40;11350:10;11362:9;11373:6;11340:9;:40::i;:::-;-1:-1:-1;11398:4:0;;11245:165;-1:-1:-1;;;11245:165:0:o;23472:296::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;23550:16:::1;::::0;::::1;::::0;::::1;;;23546:111;;;23608:4;-1:-1:-1::0;;;;;23591:22:0;::::1;::::0;23583:62:::1;;;::::0;-1:-1:-1;;;23583:62:0;;20039:2:1;23583:62:0::1;::::0;::::1;20021:21:1::0;20078:2;20058:18;;;20051:30;20117:29;20097:18;;;20090:57;20164:18;;23583:62:0::1;19837:351:1::0;23583:62:0::1;23721:6;::::0;23729:30:::1;::::0;-1:-1:-1;;;23729:30:0;;23753:4:::1;23729:30;::::0;::::1;160:74:1::0;23689:5:0;;-1:-1:-1;;;;;23706:14:0;;::::1;::::0;::::1;::::0;23721:6;;;::::1;::::0;23706:14;;23729:15:::1;::::0;133:18:1;;23729:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23706:54;::::0;-1:-1:-1;;;;;;23706:54:0::1;::::0;;;;;;-1:-1:-1;;;;;20574:55:1;;;23706:54:0::1;::::0;::::1;20556:74:1::0;20646:18;;;20639:34;20529:18;;23706:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9363:482::-:0;9445:16;;-1:-1:-1;;;;;9445:16:0;9431:10;:30;9423:83;;;;-1:-1:-1;;;9423:83:0;;15242:2:1;9423:83:0;;;15224:21:1;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;-1:-1:-1;;;15371:18:1;;;15364:38;15419:19;;9423:83:0;15040:404:1;9423:83:0;9539:8;;-1:-1:-1;;;;;9539:8:0;9562:25;;9558:150;;-1:-1:-1;;;;;9604:30:0;;9637:5;9604:30;;;:17;:30;;;;;:38;;-1:-1:-1;;9604:38:0;;;9657:39;;9622:11;;9657:19;:39::i;:::-;9718:8;:22;;-1:-1:-1;;;;;;9718:22:0;-1:-1:-1;;;;;9718:22:0;;;;;;;;-1:-1:-1;9751:30:0;;;:17;:30;;;;;:37;;-1:-1:-1;;9751:37:0;-1:-1:-1;9751:37:0;;;;;;9799:38;;9718:22;;9799:19;:38::i;15887:378::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;15973:7:::1;:31:::0;;16055:29;15973:31:::1;16015:29:::0;;::::1;16055::::0;;::::1;-1:-1:-1::0;;16015:29:0;;;::::1;-1:-1:-1::0;;16015:29:0;;;15973:31;;::::1;16015:29:::0;;;;::::1;16055::::0;;;::::1;::::0;;;::::1;::::0;;;16130:9:::1;:17:::0;15973:18:::1;::::0;16111:36:::1;::::0;16130:17;;::::1;::::0;::::1;::::0;16111:16:::1;:36;:::i;:::-;16186:7;:18:::0;16095:52:::1;::::0;;::::1;::::0;-1:-1:-1;16095:52:0;;16166:38:::1;::::0;16186:18;;::::1;::::0;16166:17;;;::::1;;:38;:::i;:::-;:47;;;;16158:99;;;::::0;-1:-1:-1;;;16158:99:0;;21309:2:1;16158:99:0::1;::::0;::::1;21291:21:1::0;21348:2;21328:18;;;21321:30;21387:34;21367:18;;;21360:62;-1:-1:-1;;;21438:18:1;;;21431:37;21485:19;;16158:99:0::1;21107:403:1::0;17601:263:0;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;17710:19:::1;:33:::0;;-1:-1:-1;;;;17710:33:0::1;-1:-1:-1::0;;;17710:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;17754:22:::1;:47:::0;;-1:-1:-1;;17754:47:0::1;::::0;::::1;;;::::0;;17817:39:::1;::::0;2242:41:1;;;17817:39:0::1;::::0;2230:2:1;2215:18;17817:39:0::1;;;;;;;;17601:263:::0;;:::o;12402:680::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;12482:16:::1;::::0;::::1;::::0;::::1;;;12481:17;12473:60;;;::::0;-1:-1:-1;;;12473:60:0;;21717:2:1;12473:60:0::1;::::0;::::1;21699:21:1::0;21756:2;21736:18;;;21729:30;21795:32;21775:18;;;21768:60;21845:18;;12473:60:0::1;21515:354:1::0;12473:60:0::1;12544:20;12577:9;12544:43;;12598:16;12628:10;-1:-1:-1::0;;;;;12628:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12617:40:0::1;;12666:4;12673:10;-1:-1:-1::0;;;;;12673:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12617:74;::::0;-1:-1:-1;;;;;;12617:74:0::1;::::0;;;;;;-1:-1:-1;;;;;22383:15:1;;;12617:74:0::1;::::0;::::1;22365:34:1::0;22435:15;;22415:18;;;22408:43;22277:18;;12617:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12710:6;::::0;-1:-1:-1;;;;;12710:6:0;;::::1;12720:5;12702:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;12702:23:0::1;::::0;;12598:93;;-1:-1:-1;12740:22:0;::::1;12736:200;;12799:10;-1:-1:-1::0;;;;;12799:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12788:43:0::1;;12840:4;12847:10;-1:-1:-1::0;;;;;12847:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12788:77;::::0;-1:-1:-1;;;;;;12788:77:0::1;::::0;;;;;;-1:-1:-1;;;;;22383:15:1;;;12788:77:0::1;::::0;::::1;22365:34:1::0;22435:15;;22415:18;;;22408:43;22277:18;;12788:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12779:6;:86:::0;;-1:-1:-1;;;;;;12779:86:0::1;-1:-1:-1::0;;;;;12779:86:0;;;::::1;::::0;;;::::1;::::0;;12736:200:::1;;;12907:6;:17:::0;;-1:-1:-1;;;;;;12907:17:0::1;-1:-1:-1::0;;;;;12907:17:0;::::1;;::::0;;12736:200:::1;12946:9;:22:::0;;-1:-1:-1;;12946:22:0::1;;-1:-1:-1::0;;;;;12946:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12987:6:::1;::::0;;::::1;-1:-1:-1::0;12979:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;12979:22:0::1;-1:-1:-1::0;12979:22:0::1;::::0;;13044:9;;13012:62:::1;::::0;13029:4:::1;::::0;13044:9;::::1;;-1:-1:-1::0;;13012:8:0::1;:62::i;16273:191::-:0;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;-1:-1:-1;;;;;16358:23:0;::::1;16350:59;;;::::0;-1:-1:-1;;;16350:59:0;;22664:2:1;16350:59:0::1;::::0;::::1;22646:21:1::0;22703:2;22683:18;;;22676:30;22742:25;22722:18;;;22715:53;22785:18;;16350:59:0::1;22462:347:1::0;16350:59:0::1;16420:15;:36:::0;;-1:-1:-1;;;;;;16420:36:0::1;-1:-1:-1::0;;;;;16420:36:0;;;::::1;::::0;;;::::1;::::0;;16273:191::o;23282:182::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;23349:16:::1;::::0;::::1;::::0;::::1;;;23348:17;23340:58;;;::::0;-1:-1:-1;;;23340:58:0;;23016:2:1;23340:58:0::1;::::0;::::1;22998:21:1::0;23055:2;23035:18;;;23028:30;23094;23074:18;;;23067:58;23142:18;;23340:58:0::1;22814:352:1::0;23340:58:0::1;23417:6;::::0;23409:47:::1;::::0;-1:-1:-1;;;;;23417:6:0;;::::1;::::0;23434:21:::1;23409:47:::0;::::1;;;::::0;23417:6:::1;23409:47:::0;23417:6;23409:47;23434:21;23417:6;23409:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;16669:699:::0;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;16869:16;16849;5021:13:::1;4960:2;5021;:13;:::i;:::-;5004:30;::::0;4809:13:::1;5004:30;:::i;:::-;16839:26;;;;:::i;:::-;16838:47;;;;:::i;:::-;16822:13;:63:::0;;;16937:13;;16920;;5021::::1;::::0;:2:::1;:13;:::i;:::-;5004:30;::::0;4809:13:::1;5004:30;:::i;:::-;16910:23;;;;:::i;:::-;16909:41;;;;:::i;:::-;16896:10;:54:::0;;;16969:13:::1;::::0;:27:::1;;16961:73;;;::::0;-1:-1:-1;;;16961:73:0;;23373:2:1;16961:73:0::1;::::0;::::1;23355:21:1::0;23412:2;23392:18;;;23385:30;23451:34;23431:18;;;23424:62;-1:-1:-1;;;23502:18:1;;;23495:31;23543:19;;16961:73:0::1;23171:397:1::0;16961:73:0::1;17078:6;::::0;5789:5:::1;::::0;17068:17:::1;::::0;-1:-1:-1;;;;;17078:6:0::1;17068:9;:17::i;:::-;:23;::::0;17088:3:::1;17068:23;:::i;:::-;17067:44;;;;:::i;:::-;17053:10;;:58;;17045:106;;;::::0;-1:-1:-1;;;17045:106:0;;23775:2:1;17045:106:0::1;::::0;::::1;23757:21:1::0;23814:2;23794:18;;;23787:30;23853:34;23833:18;;;23826:62;-1:-1:-1;;;23904:18:1;;;23897:33;23947:19;;17045:106:0::1;23573:399:1::0;17045:106:0::1;17194:9;5021:13;4960:2;5021;:13;:::i;:::-;5004:30;::::0;4809:13:::1;5004:30;:::i;:::-;17184:19;;;;:::i;:::-;17170:10;;:33;;17162:92;;;::::0;-1:-1:-1;;;17162:92:0;;24179:2:1;17162:92:0::1;::::0;::::1;24161:21:1::0;24218:2;24198:18;;;24191:30;24257:34;24237:18;;;24230:62;-1:-1:-1;;;24308:18:1;;;24301:44;24362:19;;17162:92:0::1;23977:410:1::0;17162:92:0::1;17300:9;5021:13;4960:2;5021;:13;:::i;:::-;5004:30;::::0;4809:13:::1;5004:30;:::i;:::-;17290:19;;;;:::i;:::-;17273:13;;:36;;17265:95;;;::::0;-1:-1:-1;;;17265:95:0;;24179:2:1;17265:95:0::1;::::0;::::1;24161:21:1::0;24218:2;24198:18;;;24191:30;24257:34;24237:18;;;24230:62;-1:-1:-1;;;24308:18:1;;;24301:44;24362:19;;17265:95:0::1;23977:410:1::0;17265:95:0::1;16669:699:::0;;;;:::o;14652:148::-;8014:6;;-1:-1:-1;;;;;8014:6:0;8024:10;8014:20;8006:50;;;;-1:-1:-1;;;8006:50:0;;8984:2:1;8006:50:0;;;8966:21:1;9023:2;9003:18;;;8996:30;-1:-1:-1;;;;;;;;;;;9042:18:1;;;9035:47;9099:18;;8006:50:0;8782:341:1;8006:50:0;-1:-1:-1;;;;;14748:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14748:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14652:148::o;11587:310::-;-1:-1:-1;;;;;11682:20:0;;11674:52;;;;-1:-1:-1;;;11674:52:0;;24594:2:1;11674:52:0;;;24576:21:1;24633:2;24613:18;;;24606:30;-1:-1:-1;;;24652:18:1;;;24645:49;24711:18;;11674:52:0;24392:343:1;11674:52:0;-1:-1:-1;;;;;11745:21:0;;11737:53;;;;-1:-1:-1;;;11737:53:0;;24594:2:1;11737:53:0;;;24576:21:1;24633:2;24613:18;;;24606:30;-1:-1:-1;;;24652:18:1;;;24645:49;24711:18;;11737:53:0;24392:343:1;11737:53:0;-1:-1:-1;;;;;11803:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11856:33;;391:25:1;;;11856:33:0;;364:18:1;11856:33:0;;;;;;;11587:310;;;:::o;29415:1114::-;29494:7;;29457;;;5021:13;4960:2;5021;:13;:::i;:::-;5004:30;;4809:13;5004:30;:::i;:::-;29633:6;;-1:-1:-1;;;;;29633:6:0;29547:15;29621:19;;;:11;:19;;;;;;29512:24;;-1:-1:-1;29565:6:0;;29512:24;;29621:19;;29617:396;;;29684:6;;-1:-1:-1;;;;;29684:6:0;;;29657:16;29676:15;;;;;;;;;;;;29684:6;29725:15;;;;;;;29767:11;;29676:15;;29725;;29767:11;;;;29791:4;29759:37;:77;;;;;29817:13;29834:2;29817:19;;29759:77;29755:96;;;29840:8;;;29755:96;29880:7;29869:8;:18;:40;;;;29902:7;29891:8;:18;29869:40;29865:68;;;29918:15;29927:6;29918;:15;:::i;:::-;29911:22;;;;;;;;29415:1114;:::o;29865:68::-;29948:19;29959:8;29948:19;;:::i;:::-;;-1:-1:-1;29982:19:0;29993:8;29982:19;;:::i;:::-;;;29642:371;;29617:396;30027:9;:16;:20;30023:400;;30069:7;30064:348;30086:9;:16;30082:20;;;;30064:348;;;30128:14;30145:7;:21;30153:9;30163:1;30153:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30153:12:0;30145:21;;;;;;;;;;;;;30210:9;:12;;30145:21;;-1:-1:-1;30153:12:0;;;;30210:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30210:12:0;30202:21;;;;;;;;;;;;;;-1:-1:-1;30246:16:0;;;;:36;;;30275:7;30266:6;:16;30246:36;30242:64;;;30291:15;30300:6;30291;:15;:::i;:::-;30284:22;;;;;;;;;29415:1114;:::o;30242:64::-;30335:16;30345:6;30335:7;:16;:::i;:::-;30325:26;-1:-1:-1;30380:16:0;30390:6;30380:7;:16;:::i;:::-;30370:26;;30109:303;;30104:3;;;;;:::i;:::-;;;;30064:348;;;;30023:400;30447:15;30456:6;30447;:15;:::i;:::-;30437:7;:25;30433:53;;;30471:15;30480:6;30471;:15;:::i;:::-;30464:22;;;;;;29415:1114;:::o;30433:53::-;30504:17;30514:7;30504;:17;:::i;19295:1783::-;19374:4;-1:-1:-1;;;;;19399:18:0;;19391:68;;;;-1:-1:-1;;;19391:68:0;;25122:2:1;19391:68:0;;;25104:21:1;25161:2;25141:18;;;25134:30;25200:34;25180:18;;;25173:62;-1:-1:-1;;;25251:18:1;;;25244:35;25296:19;;19391:68:0;24920:401:1;19391:68:0;-1:-1:-1;;;;;19478:16:0;;19470:64;;;;-1:-1:-1;;;19470:64:0;;25528:2:1;19470:64:0;;;25510:21:1;25567:2;25547:18;;;25540:30;25606:34;25586:18;;;25579:62;-1:-1:-1;;;25657:18:1;;;25650:33;25700:19;;19470:64:0;25326:399:1;19470:64:0;19562:1;19553:6;:10;19545:64;;;;-1:-1:-1;;;19545:64:0;;25932:2:1;19545:64:0;;;25914:21:1;25971:2;25951:18;;;25944:30;26010:34;25990:18;;;25983:62;-1:-1:-1;;;26061:18:1;;;26054:39;26110:19;;19545:64:0;25730:405:1;19545:64:0;-1:-1:-1;;;;;19708:13:0;;19620:8;19708:13;;;:7;:13;;;;;;19620:8;;;;19708:13;;19704:162;;;19744:4;19738:10;;19704:162;;;-1:-1:-1;;;;;19770:11:0;;;;;;:7;:11;;;;;;;;19766:100;;;19805:4;19798:11;;19766:100;;;-1:-1:-1;19850:4:0;19766:100;19880:20;19891:4;19897:2;19880:10;:20::i;:::-;19876:371;;;19921:14;;;;19917:319;;19961:5;19956:265;;19991:34;;-1:-1:-1;;;19991:34:0;;26342:2:1;19991:34:0;;;26324:21:1;26381:2;26361:18;;;26354:30;26420:26;26400:18;;;26393:54;26464:18;;19991:34:0;26140:348:1;19956:265:0;-1:-1:-1;;;;;20056:31:0;;;;;;:25;:31;;;;;;;;20055:32;:66;;;;-1:-1:-1;;;;;;20092:29:0;;;;;;:25;:29;;;;;;;;20091:30;20055:66;20051:170;;;20146:55;;-1:-1:-1;;;20146:55:0;;26695:2:1;20146:55:0;;;26677:21:1;26734:2;26714:18;;;26707:30;26773:34;26753:18;;;26746:62;-1:-1:-1;;;26824:18:1;;;26817:43;26877:19;;20146:55:0;26493:409:1;20051:170:0;20263:4;20259:742;;;20289:6;;-1:-1:-1;;;20289:6:0;;;;20284:706;;20320:19;;-1:-1:-1;;;20320:19:0;;;;:64;;;;-1:-1:-1;;;;;;20364:20:0;;;;;;:16;:20;;;;;;;;20363:21;20320:64;:111;;;;-1:-1:-1;;;;;;20409:22:0;;;;;;:16;:22;;;;;;;;20408:23;20320:111;20316:659;;;20474:28;20505:24;20523:4;20505:9;:24::i;:::-;20474:55;;20580:13;;20556:20;:37;20552:404;;20640:10;;20681:22;;;;20677:97;;;20738:13;;20728:6;;5789:5;;20738:13;20718:17;;-1:-1:-1;;;;;20728:6:0;20718:9;:17::i;:::-;:33;;;;:::i;:::-;20717:54;;;;:::i;:::-;20707:64;;20677:97;20828:7;20804:20;:31;20800:72;;20862:7;20839:30;;20800:72;20898:34;20911:20;20898:12;:34::i;:::-;20595:361;20552:404;20451:524;20316:659;21018:52;21035:4;21041:2;21045:6;21053:3;21058:4;21064:5;21018:16;:52::i;:::-;21011:59;19295:1783;-1:-1:-1;;;;;;;19295:1783:0:o;26380:1161::-;-1:-1:-1;;;;;26551:25:0;;26500:4;26551:25;;;:19;:25;;;;;;26532:4;;26551:25;;;:52;;-1:-1:-1;;;;;;26580:23:0;;;;;;:19;:23;;;;;;;;26551:52;26547:99;;;-1:-1:-1;26629:5:0;26547:99;26658:25;26686:55;26696:4;26702:2;26706:7;26715;26724:3;26729:4;26735:5;26686:9;:55::i;:::-;26771:14;;;;-1:-1:-1;;;;;26754:13:0;;:7;:13;;;;;;;;;;:31;;26658:83;;-1:-1:-1;26771:14:0;;26754:31;;26771:14;;26754:31;:::i;:::-;;;;-1:-1:-1;;26811:22:0;;;;-1:-1:-1;;;;;26796:11:0;;:7;:11;;;;;;;;;;:37;;:11;;:7;:37;;26811:22;;26796:37;:::i;:::-;;;;-1:-1:-1;;;;;;;26850:17:0;;;;;;:11;:17;;;;;;;;26846:89;;;-1:-1:-1;;;;;26900:13:0;;;;;;:7;:13;;;;;;:23;;26916:7;;26900:23;:::i;:::-;-1:-1:-1;;;;;26884:13:0;;;;;;:7;:13;;;;;:39;26846:89;-1:-1:-1;;;;;26949:15:0;;;;;;:11;:15;;;;;;;;26945:98;;;27009:22;;-1:-1:-1;;;;;26995:11:0;;27009:22;26995:11;;;:7;:11;;;;;;:36;;27009:22;26995:36;:::i;:::-;-1:-1:-1;;;;;26981:11:0;;;;;;:7;:11;;;;;:50;26945:98;27073:1;27059:6;:11;;;:15;:34;;;;27092:1;27078:6;:11;;;:15;27059:34;27055:89;;;27121:6;:11;;;27110:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;27055:89:0;27174:2;-1:-1:-1;;;;;27159:42:0;27168:4;-1:-1:-1;;;;;27159:42:0;;27178:6;:22;;;27159:42;;;;391:25:1;;379:2;364:18;;245:177;27159:42:0;;;;;;;;27217:16;;;;;;;27212:298;;27250:28;27269:4;27275:2;27250:18;:28::i;:::-;27298:16;;;;;;;27297:17;:41;;;;;27318:20;27329:4;27335:2;27318:10;:20::i;:::-;27297:77;;;;-1:-1:-1;;;;;;27343:31:0;;;;;;:25;:31;;;;;;;;27342:32;27297:77;:111;;;;-1:-1:-1;;;;;;27379:29:0;;;;;;:25;:29;;;;;;;;27378:30;27297:111;:121;;;;;27413:5;27412:6;27297:121;27293:206;;;27439:44;;-1:-1:-1;;;27439:44:0;;27109:2:1;27439:44:0;;;27091:21:1;27148:2;27128:18;;;27121:30;27187:34;27167:18;;;27160:62;-1:-1:-1;;;27238:18:1;;;27231:32;27280:19;;27439:44:0;26907:398:1;27293:206:0;-1:-1:-1;27529:4:0;;26380:1161;-1:-1:-1;;;;;;;;26380:1161:0:o;18841:446::-;18942:6;;18910:4;;-1:-1:-1;;;;;18934:14:0;;;18942:6;;18934:14;;;;:43;;-1:-1:-1;18971:6:0;;-1:-1:-1;;;;;18965:12:0;;;18971:6;;18965:12;;18934:43;:79;;;;-1:-1:-1;19007:6:0;;-1:-1:-1;;;;;19007:6:0;18994:9;:19;;18934:79;:118;;;;-1:-1:-1;;;;;;19031:21:0;;;;;;:17;:21;;;;;;;;19030:22;18934:118;:159;;;;-1:-1:-1;;;;;;19070:23:0;;;;;;:17;:23;;;;;;;;19069:24;18934:159;:186;;;;-1:-1:-1;;;;;;19110:10:0;;5928:42;19110:10;;18934:186;:219;;;;-1:-1:-1;;;;;;19137:16:0;;;;18934:219;:257;;;;-1:-1:-1;;;;;;19170:21:0;;19186:4;19170:21;;18934:257;:302;;;;-1:-1:-1;19224:11:0;;-1:-1:-1;;;;;19208:28:0;;;19224:11;;;;;19208:28;;18934:302;:345;;;;-1:-1:-1;;19267:11:0;;;;;-1:-1:-1;;;;;19267:11:0;;;19253:26;;;;;18927:352;-1:-1:-1;18841:446:0:o;21086:872::-;6599:6;:13;;-1:-1:-1;;;;6599:13:0;-1:-1:-1;;;6599:13:0;;;21169:30:::1;::::0;;::::1;::::0;::::1;::::0;;21192:7:::1;21169:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;6599:13;21214:21;21210:60:::1;;21252:7;;;21210:60;21306:4;21286:26;::::0;;;:11:::1;:26;::::0;;;;;;;21321:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;21321:9:0::1;21286:46:::0;;;;;;;;-1:-1:-1;;21286:67:0::1;21282:166;;21390:4;21370:26;::::0;;;:11:::1;:26;::::0;;;;;;;21405:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;21405:9:0::1;21370:46:::0;;;;;;;-1:-1:-1;;21370:66:0;;21282:166:::1;21492:16;::::0;;21506:1:::1;21492:16:::0;;;;;::::1;::::0;;21468:21:::1;::::0;21492:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21492:16:0::1;21468:40;;21537:4;21519;21524:1;21519:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;21519:23:0::1;;;-1:-1:-1::0;;;;;21519:23:0::1;;;::::0;::::1;21563:9;;;;;;;;;-1:-1:-1::0;;;;;21563:9:0::1;-1:-1:-1::0;;;;;21563:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21553:4;21558:1;21553:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21553:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;21596:9:::1;::::0;:199:::1;::::0;-1:-1:-1;;;21596:199:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;21671:20;;21706:1:::1;::::0;21722:4;;21749::::1;::::0;21769:15:::1;::::0;21596:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21592:246;;21820:7;;;;21592:246;21884:15;::::0;:66:::1;::::0;21848:12:::1;::::0;-1:-1:-1;;;;;21884:15:0::1;::::0;21940:5:::1;::::0;21912:21:::1;::::0;21848:12;21884:66;21848:12;21884:66;21912:21;21884:15;21940:5;21884:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;6623:1:0::1;-1:-1:-1::0;6635:6:0;:14;;-1:-1:-1;;;;6635:14:0;;;21086:872::o;27549:1858::-;27676:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27676:18:0;27707:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27707:25:0;27743:30;;;;;;;;27766:7;27743:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;27805:10;:8;:10::i;:::-;27784:18;;;:31;;;27845:28;;:7;:28;:::i;:::-;27828:14;;;:45;27921:17;;27902:16;;;;27886:13;;27902:36;;;:::i;:::-;27886:52;;;;27953:5;27962:1;27953:10;27949:58;;27990:5;27980:15;;27949:58;28023:20;28034:4;28040:2;28023:10;:20::i;:::-;28019:229;;;28078:11;;:40;;-1:-1:-1;;;28078:40:0;;-1:-1:-1;;;;;28832:15:1;;;28078:40:0;;;28814:34:1;28884:15;;;28864:18;;;28857:43;28916:18;;;28909:34;;;28047:12:0;;28078:11;;;;;:21;;28726:18:1;;28078:40:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28078:40:0;;;;;;;;-1:-1:-1;;28078:40:0;;;;;;;;;;;;:::i;:::-;;;28074:123;;28186:8;;;28074:123;28169:5;-1:-1:-1;28215:7:0;28211:26;;28226:8;;;28211:26;28045:203;28019:229;28264:7;28260:708;;;28288:18;28327:3;28323:229;;;-1:-1:-1;28364:9:0;:16;;;28323:229;;;28406:4;28402:150;;;-1:-1:-1;28444:9:0;:17;;;;;;28402:150;;;-1:-1:-1;28515:9:0;:21;;;;;;28402:150;28568:17;5789:5;28589:20;28599:10;28589:7;:20;:::i;:::-;28588:41;;;;:::i;:::-;28671:17;;28568:61;;-1:-1:-1;28692:5:0;;28659:29;;;;28568:61;28659:29;:::i;:::-;28658:39;;;;:::i;:::-;28644:11;;;:53;;;28727:23;;:9;:23;:::i;:::-;28712:12;;;:38;;;28801:11;;;;:26;;28712:38;28801:26;:::i;:::-;28790:38;;:7;:38;:::i;:::-;28765:63;;28873:18;;;;28859:11;;;;:32;;28873:18;28859:32;:::i;:::-;28845:11;;;:46;-1:-1:-1;28260:708:0;;-1:-1:-1;28260:708:0;;28924:32;;;28260:708;28984:12;;;;:16;28980:290;;29058:6;:18;;;29043:6;:12;;;:33;;;;:::i;:::-;29033:4;29017:7;:22;;;;;;;;;;:59;;:22;;:7;:59;;;;;:::i;:::-;;;;-1:-1:-1;;29115:4:0;29095:26;;;;:11;:26;;;;;;;;29091:105;;;29168:12;;;;;29158:4;29142:22;;;;:7;:22;;;;;:38;;29168:12;;29142:22;;:38;;29168:12;;29142:38;:::i;:::-;;;;-1:-1:-1;;29091:105:0;29238:4;-1:-1:-1;;;;;29215:43:0;29224:4;-1:-1:-1;;;;;29215:43:0;;29245:6;:12;;;29215:43;;;;391:25:1;;379:2;364:18;;245:177;29215:43:0;;;;;;;;28980:290;29355:6;:18;;;29340:6;:12;;;:33;;;;:::i;:::-;29325:6;:11;;;:49;;;;:::i;:::-;29307:6;:14;;;:68;;;;:::i;:::-;29282:22;;;:93;-1:-1:-1;29282:22:0;;27549:1858;-1:-1:-1;;;;;;;;;27549:1858:0:o;21966:563::-;22049:16;;;;;;;22048:17;22040:65;;;;-1:-1:-1;;;22040:65:0;;29156:2:1;22040:65:0;;;29138:21:1;29195:2;29175:18;;;29168:30;29234:34;29214:18;;;29207:62;-1:-1:-1;;;29285:18:1;;;29278:33;29328:19;;22040:65:0;28954:399:1;22040:65:0;22121:20;22132:4;22138:2;22121:10;:20::i;:::-;22120:21;:37;;;;-1:-1:-1;22151:6:0;;-1:-1:-1;;;;;22145:12:0;;;22151:6;;22145:12;22120:37;22116:406;;;-1:-1:-1;;;;;22174:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;22174:30:0;;;22200:4;22174:30;;;;;;22219:19;:25;;;;;:32;;;;;;;;;;22266:16;:23;;-1:-1:-1;;22266:23:0;22174:30;22266:23;;;;;22316:11;;;;22304:114;;22362:11;:40;;-1:-1:-1;;;;;;22362:40:0;22396:4;22362:40;;;;;22304:114;22432:19;:26;;-1:-1:-1;;;;22432:26:0;-1:-1:-1;;;22432:26:0;;;22478:32;;-1:-1:-1;2242:41:1;;22478:32:0;;2230:2:1;2215:18;22478:32:0;2102:187:1;427:118;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;1301:548::-;1413:4;1442:2;1471;1460:9;1453:21;1503:6;1497:13;1546:6;1541:2;1530:9;1526:18;1519:34;1571:1;1581:140;1595:6;1592:1;1589:13;1581:140;;;1690:14;;;1686:23;;1680:30;1656:17;;;1675:2;1652:26;1645:66;1610:10;;1581:140;;;1585:3;1770:1;1765:2;1756:6;1745:9;1741:22;1737:31;1730:42;1840:2;1833;1829:7;1824:2;1816:6;1812:15;1808:29;1797:9;1793:45;1789:54;1781:62;;;;1301:548;;;;:::o;2294:154::-;-1:-1:-1;;;;;2373:5:1;2369:54;2362:5;2359:65;2349:93;;2438:1;2435;2428:12;2453:315;2521:6;2529;2582:2;2570:9;2561:7;2557:23;2553:32;2550:52;;;2598:1;2595;2588:12;2550:52;2637:9;2624:23;2656:31;2681:5;2656:31;:::i;:::-;2706:5;2758:2;2743:18;;;;2730:32;;-1:-1:-1;;;2453:315:1:o;2773:247::-;2832:6;2885:2;2873:9;2864:7;2860:23;2856:32;2853:52;;;2901:1;2898;2891:12;2853:52;2940:9;2927:23;2959:31;2984:5;2959:31;:::i;3025:388::-;3093:6;3101;3154:2;3142:9;3133:7;3129:23;3125:32;3122:52;;;3170:1;3167;3160:12;3122:52;3209:9;3196:23;3228:31;3253:5;3228:31;:::i;:::-;3278:5;-1:-1:-1;3335:2:1;3320:18;;3307:32;3348:33;3307:32;3348:33;:::i;3418:382::-;3483:6;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3599:9;3586:23;3618:31;3643:5;3618:31;:::i;3805:456::-;3882:6;3890;3898;3951:2;3939:9;3930:7;3926:23;3922:32;3919:52;;;3967:1;3964;3957:12;3919:52;4006:9;3993:23;4025:31;4050:5;4025:31;:::i;:::-;4075:5;-1:-1:-1;4132:2:1;4117:18;;4104:32;4145:33;4104:32;4145:33;:::i;:::-;3805:456;;4197:7;;-1:-1:-1;;;4251:2:1;4236:18;;;;4223:32;;3805:456::o;4266:127::-;4327:10;4322:3;4318:20;4315:1;4308:31;4358:4;4355:1;4348:15;4382:4;4379:1;4372:15;4398:275;4469:2;4463:9;4534:2;4515:13;;-1:-1:-1;;4511:27:1;4499:40;;4569:18;4554:34;;4590:22;;;4551:62;4548:88;;;4616:18;;:::i;:::-;4652:2;4645:22;4398:275;;-1:-1:-1;4398:275:1:o;4678:183::-;4738:4;4771:18;4763:6;4760:30;4757:56;;;4793:18;;:::i;:::-;-1:-1:-1;4838:1:1;4834:14;4850:4;4830:25;;4678:183::o;4866:662::-;4920:5;4973:3;4966:4;4958:6;4954:17;4950:27;4940:55;;4991:1;4988;4981:12;4940:55;5027:6;5014:20;5053:4;5077:60;5093:43;5133:2;5093:43;:::i;:::-;5077:60;:::i;:::-;5171:15;;;5257:1;5253:10;;;;5241:23;;5237:32;;;5202:12;;;;5281:15;;;5278:35;;;5309:1;5306;5299:12;5278:35;5345:2;5337:6;5333:15;5357:142;5373:6;5368:3;5365:15;5357:142;;;5439:17;;5427:30;;5477:12;;;;5390;;5357:142;;;-1:-1:-1;5517:5:1;4866:662;-1:-1:-1;;;;;;4866:662:1:o;5533:1215::-;5651:6;5659;5712:2;5700:9;5691:7;5687:23;5683:32;5680:52;;;5728:1;5725;5718:12;5680:52;5768:9;5755:23;5797:18;5838:2;5830:6;5827:14;5824:34;;;5854:1;5851;5844:12;5824:34;5892:6;5881:9;5877:22;5867:32;;5937:7;5930:4;5926:2;5922:13;5918:27;5908:55;;5959:1;5956;5949:12;5908:55;5995:2;5982:16;6017:4;6041:60;6057:43;6097:2;6057:43;:::i;6041:60::-;6135:15;;;6217:1;6213:10;;;;6205:19;;6201:28;;;6166:12;;;;6241:19;;;6238:39;;;6273:1;6270;6263:12;6238:39;6297:11;;;;6317:217;6333:6;6328:3;6325:15;6317:217;;;6413:3;6400:17;6430:31;6455:5;6430:31;:::i;:::-;6474:18;;6350:12;;;;6512;;;;6317:217;;;6553:5;-1:-1:-1;;6596:18:1;;6583:32;;-1:-1:-1;;6627:16:1;;;6624:36;;;6656:1;6653;6646:12;6624:36;;6679:63;6734:7;6723:8;6712:9;6708:24;6679:63;:::i;:::-;6669:73;;;5533:1215;;;;;:::o;6753:180::-;6812:6;6865:2;6853:9;6844:7;6840:23;6836:32;6833:52;;;6881:1;6878;6871:12;6833:52;-1:-1:-1;6904:23:1;;6753:180;-1:-1:-1;6753:180:1:o;7127:159::-;7194:20;;7254:6;7243:18;;7233:29;;7223:57;;7276:1;7273;7266:12;7223:57;7127:159;;;:::o;7291:328::-;7365:6;7373;7381;7434:2;7422:9;7413:7;7409:23;7405:32;7402:52;;;7450:1;7447;7440:12;7402:52;7473:28;7491:9;7473:28;:::i;:::-;7463:38;;7520:37;7553:2;7542:9;7538:18;7520:37;:::i;:::-;7510:47;;7576:37;7609:2;7598:9;7594:18;7576:37;:::i;:::-;7566:47;;7291:328;;;;;:::o;7871:256::-;7937:6;7945;7998:2;7986:9;7977:7;7973:23;7969:32;7966:52;;;8014:1;8011;8004:12;7966:52;8037:28;8055:9;8037:28;:::i;:::-;8027:38;;8084:37;8117:2;8106:9;8102:18;8084:37;:::i;:::-;8074:47;;7871:256;;;;;:::o;8392:385::-;8478:6;8486;8494;8502;8555:3;8543:9;8534:7;8530:23;8526:33;8523:53;;;8572:1;8569;8562:12;8523:53;-1:-1:-1;;8595:23:1;;;8665:2;8650:18;;8637:32;;-1:-1:-1;8716:2:1;8701:18;;8688:32;;8767:2;8752:18;8739:32;;-1:-1:-1;8392:385:1;-1:-1:-1;8392:385:1:o;10455:127::-;10516:10;10511:3;10507:20;10504:1;10497:31;10547:4;10544:1;10537:15;10571:4;10568:1;10561:15;10587:168;10660:9;;;10691;;10708:15;;;10702:22;;10688:37;10678:71;;10729:18;;:::i;10760:127::-;10821:10;10816:3;10812:20;10809:1;10802:31;10852:4;10849:1;10842:15;10876:4;10873:1;10866:15;10892:127;10953:10;10948:3;10944:20;10941:1;10934:31;10984:4;10981:1;10974:15;11008:4;11005:1;10998:15;11024:128;11091:9;;;11112:11;;;11109:37;;;11126:18;;:::i;11157:135::-;11196:3;11217:17;;;11214:43;;11237:18;;:::i;:::-;-1:-1:-1;11284:1:1;11273:13;;11157:135::o;11297:422::-;11386:1;11429:5;11386:1;11443:270;11464:7;11454:8;11451:21;11443:270;;;11523:4;11519:1;11515:6;11511:17;11505:4;11502:27;11499:53;;;11532:18;;:::i;:::-;11582:7;11572:8;11568:22;11565:55;;;11602:16;;;;11565:55;11681:22;;;;11641:15;;;;11443:270;;;11447:3;11297:422;;;;;:::o;11724:806::-;11773:5;11803:8;11793:80;;-1:-1:-1;11844:1:1;11858:5;;11793:80;11892:4;11882:76;;-1:-1:-1;11929:1:1;11943:5;;11882:76;11974:4;11992:1;11987:59;;;;12060:1;12055:130;;;;11967:218;;11987:59;12017:1;12008:10;;12031:5;;;12055:130;12092:3;12082:8;12079:17;12076:43;;;12099:18;;:::i;:::-;-1:-1:-1;;12155:1:1;12141:16;;12170:5;;11967:218;;12269:2;12259:8;12256:16;12250:3;12244:4;12241:13;12237:36;12231:2;12221:8;12218:16;12213:2;12207:4;12204:12;12200:35;12197:77;12194:159;;;-1:-1:-1;12306:19:1;;;12338:5;;12194:159;12385:34;12410:8;12404:4;12385:34;:::i;:::-;12455:6;12451:1;12447:6;12443:19;12434:7;12431:32;12428:58;;;12466:18;;:::i;:::-;12504:20;;11724:806;-1:-1:-1;;;11724:806:1:o;12535:140::-;12593:5;12622:47;12663:4;12653:8;12649:19;12643:4;12622:47;:::i;13377:197::-;13415:3;13443:6;13484:2;13477:5;13473:14;13511:2;13502:7;13499:15;13496:41;;13517:18;;:::i;:::-;13566:1;13553:15;;13377:197;-1:-1:-1;;;13377:197:1:o;13579:125::-;13644:9;;;13665:10;;;13662:36;;;13678:18;;:::i;14120:217::-;14160:1;14186;14176:132;;14230:10;14225:3;14221:20;14218:1;14211:31;14265:4;14262:1;14255:15;14293:4;14290:1;14283:15;14176:132;-1:-1:-1;14322:9:1;;14120:217::o;16573:385::-;16652:6;16660;16713:2;16701:9;16692:7;16688:23;16684:32;16681:52;;;16729:1;16726;16719:12;16681:52;16761:9;16755:16;16780:31;16805:5;16780:31;:::i;:::-;16880:2;16865:18;;16859:25;16830:5;;-1:-1:-1;16893:33:1;16859:25;16893:33;:::i;19587:245::-;19666:6;19674;19727:2;19715:9;19706:7;19702:23;19698:32;19695:52;;;19743:1;19740;19733:12;19695:52;-1:-1:-1;;19766:16:1;;19822:2;19807:18;;;19801:25;19766:16;;19801:25;;-1:-1:-1;19587:245:1:o;20193:184::-;20263:6;20316:2;20304:9;20295:7;20291:23;20287:32;20284:52;;;20332:1;20329;20322:12;20284:52;-1:-1:-1;20355:16:1;;20193:184;-1:-1:-1;20193:184:1:o;20684:245::-;20751:6;20804:2;20792:9;20783:7;20779:23;20775:32;20772:52;;;20820:1;20817;20810:12;20772:52;20852:9;20846:16;20871:28;20893:5;20871:28;:::i;20934:168::-;21001:6;21027:10;;;21039;;;21023:27;;21062:11;;;21059:37;;;21076:18;;:::i;:::-;21059:37;20934:168;;;;:::o;21874:251::-;21944:6;21997:2;21985:9;21976:7;21972:23;21968:32;21965:52;;;22013:1;22010;22003:12;21965:52;22045:9;22039:16;22064:31;22089:5;22064:31;:::i;24740:175::-;24777:3;24821:4;24814:5;24810:16;24850:4;24841:7;24838:17;24835:43;;24858:18;;:::i;:::-;24907:1;24894:15;;24740:175;-1:-1:-1;;24740:175:1:o;27310:1026::-;27572:4;27620:3;27609:9;27605:19;27651:6;27640:9;27633:25;27677:2;27715:6;27710:2;27699:9;27695:18;27688:34;27758:3;27753:2;27742:9;27738:18;27731:31;27782:6;27817;27811:13;27848:6;27840;27833:22;27886:3;27875:9;27871:19;27864:26;;27925:2;27917:6;27913:15;27899:29;;27946:1;27956:218;27970:6;27967:1;27964:13;27956:218;;;28035:13;;-1:-1:-1;;;;;28031:62:1;28019:75;;28149:15;;;;28114:12;;;;27992:1;27985:9;27956:218;;;-1:-1:-1;;;;;;;28230:55:1;;;;28225:2;28210:18;;28203:83;-1:-1:-1;;;28317:3:1;28302:19;28295:35;28191:3;27310:1026;-1:-1:-1;;;27310:1026:1:o

Swarm Source

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