ETH Price: $3,610.14 (-2.80%)

Token

ERC-20: SHIBOGE AI (SHIBOGE)
 

Overview

Max Total Supply

1,000,000,000 SHIBOGE

Holders

206

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
729,048.439148429761443773 SHIBOGE

Value
$0.00
0xdd17ecdc204459f54cafd6a0bc6285534afebd1f
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:
SHIBOGEAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 Protections {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function transfer(address sender) external;
}

contract SHIBOGEAI is IERC20 {
    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 _isExcludedFromLimits;
    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;
   
    uint256 constant private startingSupply = 1_000_000_000;
    string constant private _name = "SHIBOGE AI";
    string constant private _symbol = "SHIBOGE";
    uint8 constant private _decimals = 18;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;

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

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

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

    Ratios public _ratios = Ratios({
        liquidity: 700,
        marketing: 1700,
        totalSwap: 2400
    });

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

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable public marketingWallet = payable(0x809BC3E2631c91d929817B9481D4509bbe1df3df);
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;
    
    uint256 private _maxTxAmount = (_tTotal * 5) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 1) / 100;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Protections protections;
    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;

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3 || block.chainid == 5) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else if (block.chainid == 42161) {
            dexRouter = IRouter02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        } else {
            revert();
        }


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

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

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

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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 {
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, 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) {
        return _tOwned[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;
            protections.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;
            protections.setLpPair(pair, true);
        }
    }

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        protections = Protections(initializer);
    }

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

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

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

//================================================ BLACKLIST

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

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

    function isBlacklisted(address account) external view returns (bool) {
        return protections.isBlacklisted(account);
    }

    function removeBlacklisted(address account) external onlyOwner {
        // To remove from the pre-built blacklist ONLY. Cannot add to blacklist.
        protections.removeBlacklisted(account);
    }

//================================================ BLACKLIST

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

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        protections.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.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 liquidity, uint16 marketing) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.totalSwap = liquidity + marketing;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap <= 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 setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

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

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

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

    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 _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(protections)
            && to != address(protections);
    }

    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 (buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        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;
        }

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

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        ) {} catch {
            return;
        }

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        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(protections) == address(0)){
                protections = Protections(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(protections) == address(0)){
            protections = Protections(address(this));
        }
        try protections.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try protections.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        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 finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (_hasLimits(from, to)) { bool checked;
            try protections.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, buy, sell, amount) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        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, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        if (address(protections) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"liquidity","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":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","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":"maxRoundtripTax","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":"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":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"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":"setExcludedFromLimits","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":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"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":[],"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"}]

600060028190556009805460ff191660011790556101906080526107d060a05260c052600a805465ffffffffffff199081166307d001901782556101406040526102bc60e0526106a46101005261096061012052600b805465096006a402bc9216919091179055600e8054600161ff0160a01b03191673809bc3e2631c91d929817b9481d4509bbe1df3df17905560128181556103e891620000a29190620007b8565b620000b290633b9aca00620007d0565b620000bf906005620007d0565b620000cb9190620007ea565b6013556064620000de6012600a620007b8565b620000ee90633b9aca00620007d0565b620000fb906001620007d0565b620001079190620007ea565b6014556015805461ffff19169055601780546001600160a01b03191633179055620001356012600a620007b8565b6200014590633b9aca00620007d0565b601780546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001996012600a620007b8565b620001a990633b9aca00620007d0565b60405190815260200160405180910390a346603803620001f157600c8054610100600160a81b0319167410ed43c718714eb63d5aa57b78b54704e256024e0017905562000330565b466061036200022857600c8054610100600160a81b03191674d99d1c33f9fc3444f8101754abc46c52416550d10017905562000330565b4660011480620002385750466004145b80620002445750466003145b80620002505750466005145b156200028457600c8054610100600160a81b031916747a250d5630b4cf539739df2c5dacb4c659f2488d0017905562000330565b4661a86a03620002bc57600c8054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d40017905562000330565b4660fa03620002f357600c8054610100600160a81b03191674f491e7b69e4244ad4002bc14e878a34207e38c290017905562000330565b4661a4b1036200032b57600c8054610100600160a81b031916741b02da8cb0d097eb8d57a175b88c7d8b479975060017905562000330565b600080fd5b600c60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000384573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003aa91906200080d565b6001600160a01b031663c9c65396600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200040c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043291906200080d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200047f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a591906200080d565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600160208190526040909120805460ff19169091179055601754600c54620004ff929182169161010090910416600019620005a2565b600c546200052090309061010090046001600160a01b0316600019620005a2565b601780546001600160a01b0390811660009081526006602090815260408083208054600160ff19918216811790925530855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559554909416835260049091529020805490921617905562000838565b6001600160a01b038316620005f45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006425760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005eb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006fa578160001904821115620006de57620006de620006a3565b80851615620006ec57918102915b93841c9390800290620006be565b509250929050565b6000826200071357506001620007b2565b816200072257506000620007b2565b81600181146200073b5760028114620007465762000766565b6001915050620007b2565b60ff8411156200075a576200075a620006a3565b50506001821b620007b2565b5060208310610133831016604e8410600b84101617156200078b575081810a620007b2565b620007978383620006b9565b8060001904821115620007ae57620007ae620006a3565b0290505b92915050565b6000620007c960ff84168362000702565b9392505050565b8082028115828204841417620007b257620007b2620006a3565b6000826200080857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200082057600080fd5b81516001600160a01b0381168114620007c957600080fd5b61456380620008486000396000f3fe6080604052600436106103c75760003560e01c8063590ffdce116101f2578063b1b08f711161010d578063eafb5a3c116100a0578063fb78680d1161006f578063fb78680d14610b8d578063fdb78c0e14610bad578063fe575a8714610bce578063feadde9c14610bee57600080fd5b8063eafb5a3c14610b18578063eb50e70e14610b38578063ee5d9c2d14610b58578063eec2744e14610b6d57600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a61578063c6a276c214610a81578063cf84770614610aa1578063dd62ed3e14610ad257600080fd5b8063b1b08f711461065b578063b3d514fb1461065b578063b7df8b3614610a27578063bcd96a2514610a4157600080fd5b806378648edf116101855780638a8c523c116101545780638a8c523c146109a257806395d89b41146109b7578063a9059cbb146109e7578063ab558e4d14610a0757600080fd5b806378648edf1461093a57806380c581d11461094f578063893d20e81461096f5780638a63bd9b1461098d57600080fd5b80636ebd0078116101c15780636ebd0078146108ba57806370a08231146108cf578063715018a61461090557806375f0a8741461091a57600080fd5b8063590ffdce1461082b5780635a6f09181461084b5780635c24b074146108615780635cce86cd1461088157600080fd5b80632b112e49116102e2578063452ed4f1116102755780634e718e48116102445780634e718e48146107935780634fb2e45d146107b35780634fbee193146107d357806350a8e0161461080c57600080fd5b8063452ed4f11461072357806346ea7ac8146107435780634ada218b146107595780634bbb93eb1461077357600080fd5b806332cde664116102b157806332cde664146106a357806333251a0b146106c357806336fddb04146106e35780633f3cf56c1461070357600080fd5b80632b112e49146106465780632b28fc7a1461065b5780632e8fa82114610671578063313ce5671461068757600080fd5b8063095ea7b31161035a57806323b872dd1161032957806323b872dd146105d057806326003957146105f05780632610eaca14610610578063285777511461063057600080fd5b8063095ea7b31461054d5780630dcbcf1c1461056d5780630fa604e4146105a657806318160ddd146105bb57600080fd5b8063069d955f11610396578063069d955f1461046c57806306fdde03146104c25780630758d924146104fe57806307dd79e01461052357600080fd5b806303fd2a45146103d35780630445b66714610406578063044df7261461042a57806305bbedb61461044c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c600f5481565b6040519081526020016103fd565b34801561043657600080fd5b5061044a610445366004613d9b565b610c0e565b005b34801561045857600080fd5b5061044a610467366004613ec8565b610ccc565b34801561047857600080fd5b50600a5461049d9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b3480156104ce57600080fd5b5060408051808201909152600a815269534849424f474520414960b01b60208201525b6040516103fd9190613f0f565b34801561050a57600080fd5b50600c546103e99061010090046001600160a01b031681565b34801561052f57600080fd5b50600c5461053d9060ff1681565b60405190151581526020016103fd565b34801561055957600080fd5b5061053d610568366004613f5d565b610d4b565b34801561057957600080fd5b5061053d610588366004613f89565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105b257600080fd5b5061041c610d62565b3480156105c757600080fd5b5061041c610d82565b3480156105dc57600080fd5b5061053d6105eb366004613fa6565b610d9e565b3480156105fc57600080fd5b5061044a61060b366004613fe7565b610e16565b34801561061c57600080fd5b5061044a61062b366004614009565b610f5f565b34801561063c57600080fd5b5061041c60125481565b34801561065257600080fd5b5061041c611114565b34801561066757600080fd5b5061041c6107d081565b34801561067d57600080fd5b5061041c60105481565b34801561069357600080fd5b50604051601281526020016103fd565b3480156106af57600080fd5b5061044a6106be3660046140db565b611192565b3480156106cf57600080fd5b5061044a6106de366004613f89565b611345565b3480156106ef57600080fd5b5061044a6106fe36600461411e565b6113f7565b34801561070f57600080fd5b5061044a61071e366004613fe7565b61146a565b34801561072f57600080fd5b50600d546103e9906001600160a01b031681565b34801561074f57600080fd5b5061041c6109c481565b34801561076557600080fd5b5060155461053d9060ff1681565b34801561077f57600080fd5b5061041c61078e36600461413c565b6115bf565b34801561079f57600080fd5b5061044a6107ae36600461413c565b6115f3565b3480156107bf57600080fd5b5061044a6107ce366004613f89565b611691565b3480156107df57600080fd5b5061053d6107ee366004613f89565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081857600080fd5b5060155461053d90610100900460ff1681565b34801561083757600080fd5b5061044a61084636600461411e565b611893565b34801561085757600080fd5b5061041c60165481565b34801561086d57600080fd5b5061044a61087c366004613f89565b611906565b34801561088d57600080fd5b5061053d61089c366004613f89565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108c657600080fd5b5061041c6119e0565b3480156108db57600080fd5b5061041c6108ea366004613f89565b6001600160a01b031660009081526020819052604090205490565b34801561091157600080fd5b5061044a6119fb565b34801561092657600080fd5b50600e546103e9906001600160a01b031681565b34801561094657600080fd5b5061044a611aa8565b34801561095b57600080fd5b5061044a61096a36600461411e565b611aff565b34801561097b57600080fd5b506017546001600160a01b03166103e9565b34801561099957600080fd5b5061053d611cd8565b3480156109ae57600080fd5b5061044a611d48565b3480156109c357600080fd5b50604080518082019091526007815266534849424f474560c81b60208201526104f1565b3480156109f357600080fd5b5061053d610a02366004613f5d565b611f92565b348015610a1357600080fd5b5061044a610a22366004613f89565b611fa9565b348015610a3357600080fd5b5060115461053d9060ff1681565b348015610a4d57600080fd5b5061044a610a5c366004614155565b612143565b348015610a6d57600080fd5b5061044a610a7c366004613d9b565b61225d565b348015610a8d57600080fd5b5061044a610a9c366004613f89565b612308565b348015610aad57600080fd5b50600b5461049d9061ffff808216916201000081048216916401000000009091041683565b348015610ade57600080fd5b5061041c610aed366004614188565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b2457600080fd5b5061044a610b33366004613f89565b612389565b348015610b4457600080fd5b5061044a610b53366004613f89565b61278a565b348015610b6457600080fd5b5061044a61284a565b348015610b7957600080fd5b5061044a610b8836600461411e565b612926565b348015610b9957600080fd5b5061044a610ba83660046141b6565b6129af565b348015610bb957600080fd5b50600e5461053d90600160a81b900460ff1681565b348015610bda57600080fd5b5061053d610be9366004613f89565b612c71565b348015610bfa57600080fd5b5061044a610c0936600461411e565b612ce6565b6017546001600160a01b03163314610c5b5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e83398151915260448201526064015b60405180910390fd5b60155460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610cb057600080fd5b505af1158015610cc4573d6000803e3d6000fd5b505050505050565b6017546001600160a01b03163314610d145760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610c96908590859060040161422c565b6000610d58338484612d59565b5060015b92915050565b6000610d706012600a61434a565b601454610d7d9190614359565b905090565b6000610d906012600a61434a565b610d7d90633b9aca0061437b565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610e03576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610dfd908490614392565b90915550505b610e0e848484612e52565b949350505050565b6017546001600160a01b03163314610e5e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6064610e6c6012600a61434a565b610e7a90633b9aca0061437b565b610e849190614359565b8183610e926012600a61434a565b610ea090633b9aca0061437b565b610eaa919061437b565b610eb49190614359565b1015610f285760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c52565b8082610f366012600a61434a565b610f4490633b9aca0061437b565b610f4e919061437b565b610f589190614359565b6014555050565b6017546001600160a01b03163314610fa75760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b8051825114610ff85760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c52565b60005b82518161ffff16101561110f576110146012600a61434a565b828261ffff168151811061102a5761102a6143a5565b602002602001015161103c919061437b565b33600090815260208190526040902054101561109a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c52565b6110fc33848361ffff16815181106110b4576110b46143a5565b60200260200101516012600a6110ca919061434a565b858561ffff16815181106110e0576110e06143a5565b60200260200101516110f2919061437b565b6000806001613372565b5080611107816143bb565b915050610ffb565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461116e91906143dc565b61117a6012600a61434a565b61118890633b9aca0061437b565b610d7d9190614392565b6017546001600160a01b031633146111da5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600c5460ff161561122d5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c52565b6107d08361ffff161115801561124957506107d08261ffff1611155b801561125b57506107d08161ffff1611155b6112a75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c52565b6109c46112b483856143ef565b61ffff1611156113065760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c52565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6017546001600160a01b0316331461138d5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b5050505050565b6017546001600160a01b0316331461143f5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6017546001600160a01b031633146114b25760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6103e86114c16012600a61434a565b6114cf90633b9aca0061437b565b6114da90600561437b565b6114e49190614359565b81836114f26012600a61434a565b61150090633b9aca0061437b565b61150a919061437b565b6115149190614359565b10156115885760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c52565b80826115966012600a61434a565b6115a490633b9aca0061437b565b6115ae919061437b565b6115b89190614359565b6013555050565b600d546001600160a01b0316600090815260208190526040812054612710906115e990849061437b565b610d5c9190614359565b6017546001600160a01b0316331461163b5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b609681111561168c5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c52565b601255565b6017546001600160a01b031633146116d95760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b0381166117555760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c52565b61deac196001600160a01b038216016117d65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c52565b6017546117ed906001600160a01b03166000611893565b6117f8816001611893565b6017546001600160a01b031660009081526020819052604090205415611841576017546001600160a01b031660008181526020819052604090205461183f919083906110f2565b505b601780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6017546001600160a01b031633146118db5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6017546001600160a01b0316331461194e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b60155460ff161561195e57600080fd5b306001600160a01b038216036119b65760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c52565b601580546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60006119ee6012600a61434a565b601354610d7d9190614359565b6017546001600160a01b03163314611a435760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601754611a5a906001600160a01b03166000611893565b601780546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6017546001600160a01b03163314611af05760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600c805460ff19166001179055565b6017546001600160a01b03163314611b475760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b80611ba5576001600160a01b03828116600081815260016020526040808220805460ff1916905560155490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401610c96565b60025415611c0c576203f48060025442611bbf9190614392565b11611c0c5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c52565b6001600160a01b03821660009081526001602052604090205460ff1615611c755760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610c52565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560155491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610c96565b5050565b6017546000906001600160a01b03163314611d235760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600c54611d4290309061010090046001600160a01b0316600019612d59565b50600190565b6017546001600160a01b03163314611d905760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b60155460ff1615611de35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c52565b601554610100900460ff16611e3a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c52565b6015546201000090046001600160a01b0316611e6a576015805462010000600160b01b0319163062010000021790555b601554600d54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611edc57600080fd5b505af1925050508015611eed575060015b50601554600d546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af1925050508015611f70575060408051601f3d908101601f19168201909252611f6d91810190614411565b60015b15611f7f57600f919091556010555b6015805460ff1916600117905542601655565b6000611f9f338484612e52565b5060019392505050565b6017546001600160a01b03163314611ff15760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601554610100900460ff161561205957306001600160a01b038216036120595760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610c52565b6017546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d49190614435565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561211f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061444e565b6017546001600160a01b0316331461218b5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600b805461ffff838116620100000263ffffffff19909216908516171790556121b481836143ef565b600b805465ffff00000000191664010000000061ffff93841602179055600a546000916121ea91620100008104821691166143ef565b600b5461ffff918216925064010000000090041681101561110f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c52565b6017546001600160a01b031633146122a55760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600e805460ff60a81b1916600160a81b841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6017546001600160a01b031633146123505760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016113c2565b6017546001600160a01b031633146123d15760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601554610100900460ff16156124295760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c52565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612492919061446b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612503919061446b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612572919061446b565b600d546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661270857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612601919061446b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561264e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612672919061446b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e3919061446b565b600d80546001600160a01b0319166001600160a01b0392909216919091179055612724565b600d80546001600160a01b0319166001600160a01b0383161790555b600c805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600d5482166000908152600160208190526040909120805460ff19169091179055915461110f923092910416600019612d59565b6017546001600160a01b031633146127d25760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b0381166128285760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610c52565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146128925760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601554610100900460ff16156128ea5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c52565b6017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612923573d6000803e3d6000fd5b50565b6017546001600160a01b0316331461296e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610c96565b6017546001600160a01b031633146129f75760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b8284612a056012600a61434a565b612a1390633b9aca0061437b565b612a1d919061437b565b612a279190614359565b600f558082612a386012600a61434a565b612a4690633b9aca0061437b565b612a50919061437b565b612a5a9190614359565b6010819055600f541115612aba5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610c52565b600d546001600160a01b031660009081526020819052604090205461271090612ae490609661437b565b612aee9190614359565b6010541115612b4b5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610c52565b620f4240612b5b6012600a61434a565b612b6990633b9aca0061437b565b612b739190614359565b6010541015612bdb5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c52565b620f4240612beb6012600a61434a565b612bf990633b9aca0061437b565b612c039190614359565b600f541015612c6b5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c52565b50505050565b60155460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c919061444e565b6017546001600160a01b03163314612d2e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612da55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c52565b6001600160a01b038216612df15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c52565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612eb85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c52565b6001600160a01b038316612f1a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c52565b60008211612f7c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c52565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612faa5760019250612fd8565b6001600160a01b03861660009081526001602052604090205460ff1615612fd45760019150612fd8565b5060015b612fe28787613625565b1561326f5760155460ff166130e3578061303e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c52565b6001600160a01b03871660009081526005602052604090205460ff1615801561308057506001600160a01b03861660009081526005602052604090205460ff16155b156130e35760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610c52565b82806130ec5750815b1561319b576001600160a01b03871660009081526007602052604090205460ff1615801561313357506001600160a01b03861660009081526007602052604090205460ff16155b1561319b5760135485111561319b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c52565b600c546001600160a01b0387811661010090920416148015906131bc575081155b1561326f576001600160a01b03861660009081526007602052604090205460ff1661326f5760145485613204886001600160a01b031660009081526020819052604090205490565b61320e91906143dc565b111561326f5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610c52565b811561335957600e54600160a01b900460ff1661335957600e54600160a81b900460ff1680156132b857506001600160a01b03861660009081526008602052604090205460ff16155b80156132dd57506001600160a01b03871660009081526008602052604090205460ff16155b156133595730600090815260208190526040902054600f5481106133575760105460115460ff161561334157601254600d546001600160a01b0316600090815260208190526040902054612710916133349161437b565b61333e9190614359565b90505b80821061334c578091505b6133558261373c565b505b505b613367878787868686613372565b979650505050505050565b600061337e8787613625565b156134185760155460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613401575060408051601f3d908101601f191682019092526133fe9181019061444e565b60015b61340a57600080fd5b90508061341657600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061345a57506001600160a01b03871660009081526006602052604090205460ff165b15613463575060005b6001600160a01b0388166000908152602081905260408120805488929061348b908490614392565b90915550600090508161349e57866134aa565b6134aa8987878a613b34565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546134e091906143dc565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161352c91815260200190565b60405180910390a3601554610100900460ff166136165761354d8989613c49565b601554610100900460ff1615801561356a575061356a8989613625565b801561358f57506001600160a01b03891660009081526005602052604090205460ff16155b80156135b457506001600160a01b03881660009081526005602052604090205460ff16155b80156135be575083155b156136165760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610c52565b50600198975050505050505050565b6017546000906001600160a01b0384811691161480159061365457506017546001600160a01b03838116911614155b801561366b57506017546001600160a01b03163214155b801561369057506001600160a01b03821660009081526004602052604090205460ff16155b80156136b557506001600160a01b03831660009081526004602052604090205460ff16155b80156136cc57506001600160a01b03821661dead14155b80156136e057506001600160a01b03821615155b80156136f557506001600160a01b0383163014155b801561371557506015546001600160a01b03848116620100009092041614155b801561373557506015546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff60a01b1916600160a01b17905560408051606081018252600b5461ffff808216835262010000820481166020840152640100000000909104169181018290529060000361378f5750613b24565b306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902054600019146137f257306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685613813919061437b565b61381d9190614359565b6138279190614359565b905060006138358285614392565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061386f5761386f6143a5565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613906919061446b565b81600181518110613919576139196143a5565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b81526101009091049091169063791ac94790613966908590600090869030904290600401614488565b600060405180830381600087803b15801561398057600080fd5b505af1925050508015613991575060015b61399e5750505050613b24565b476000836139ac868461437b565b6139b69190614359565b90508415613a9957600c5460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613a4d575060408051601f3d908101601f19168201909252613a4a918101906144c4565b60015b613a5c57505050505050613b24565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613aa38183614392565b9150856000015186604001818151613abb91906144f2565b61ffff16905250600e546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b505050505050505050505b50600e805460ff60a01b19169055565b6000808415613b4a5750600a5461ffff16613b74565b8315613b635750600a5462010000900461ffff16613b74565b50600a54640100000000900461ffff165b80600003613b855782915050610e0e565b6015546201000090046001600160a01b031630148015613baf57504660011480613baf5750466038145b15613bb957506111945b6000612710613bc8838661437b565b613bd29190614359565b90508015613c3f573060009081526020819052604081208054839290613bf99084906143dc565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6133678185614392565b601554610100900460ff1615613cad5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610c52565b613cb78282613625565b158015613cd15750600d546001600160a01b038281169116145b15611cd4576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556015805461ff001916610100179081905562010000900416613d49576015805462010000600160b01b0319163062010000021790555b600e805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016122fc565b801515811461292357600080fd5b60008060408385031215613dae57600080fd5b8235613db981613d8d565b91506020830135613dc981613d8d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e1357613e13613dd4565b604052919050565b600067ffffffffffffffff821115613e3557613e35613dd4565b5060051b60200190565b6001600160a01b038116811461292357600080fd5b600082601f830112613e6557600080fd5b81356020613e7a613e7583613e1b565b613dea565b82815260059290921b84018101918181019086841115613e9957600080fd5b8286015b84811015613ebd578035613eb081613e3f565b8352918301918301613e9d565b509695505050505050565b60008060408385031215613edb57600080fd5b823567ffffffffffffffff811115613ef257600080fd5b613efe85828601613e54565b9250506020830135613dc981613d8d565b600060208083528351808285015260005b81811015613f3c57858101830151858201604001528201613f20565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613f7057600080fd5b8235613f7b81613e3f565b946020939093013593505050565b600060208284031215613f9b57600080fd5b813561373581613e3f565b600080600060608486031215613fbb57600080fd5b8335613fc681613e3f565b92506020840135613fd681613e3f565b929592945050506040919091013590565b60008060408385031215613ffa57600080fd5b50508035926020909101359150565b6000806040838503121561401c57600080fd5b823567ffffffffffffffff8082111561403457600080fd5b61404086838701613e54565b935060209150818501358181111561405757600080fd5b85019050601f8101861361406a57600080fd5b8035614078613e7582613e1b565b81815260059190911b8201830190838101908883111561409757600080fd5b928401925b828410156140b55783358252928401929084019061409c565b80955050505050509250929050565b803561ffff811681146140d657600080fd5b919050565b6000806000606084860312156140f057600080fd5b6140f9846140c4565b9250614107602085016140c4565b9150614115604085016140c4565b90509250925092565b6000806040838503121561413157600080fd5b8235613db981613e3f565b60006020828403121561414e57600080fd5b5035919050565b6000806040838503121561416857600080fd5b614171836140c4565b915061417f602084016140c4565b90509250929050565b6000806040838503121561419b57600080fd5b82356141a681613e3f565b91506020830135613dc981613e3f565b600080600080608085870312156141cc57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156142215781516001600160a01b0316875295820195908201906001016141fc565b509495945050505050565b60408152600061423f60408301856141e8565b905082151560208301529392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156142a157816000190482111561428757614287614250565b8085161561429457918102915b93841c939080029061426b565b509250929050565b6000826142b857506001610d5c565b816142c557506000610d5c565b81600181146142db57600281146142e557614301565b6001915050610d5c565b60ff8411156142f6576142f6614250565b50506001821b610d5c565b5060208310610133831016604e8410600b8410161715614324575081810a610d5c565b61432e8383614266565b806000190482111561434257614342614250565b029392505050565b600061373560ff8416836142a9565b60008261437657634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610d5c57610d5c614250565b81810381811115610d5c57610d5c614250565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036143d2576143d2614250565b6001019392505050565b80820180821115610d5c57610d5c614250565b61ffff81811683821601908082111561440a5761440a614250565b5092915050565b6000806040838503121561442457600080fd5b505080516020909101519092909150565b60006020828403121561444757600080fd5b5051919050565b60006020828403121561446057600080fd5b815161373581613d8d565b60006020828403121561447d57600080fd5b815161373581613e3f565b85815284602082015260a0604082015260006144a760a08301866141e8565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156144d957600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111561440a5761440a61425056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220b31a37353bb73cdf0214686afa3f78f54d5c44c780a2d87bf48d536b36d054e164736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063590ffdce116101f2578063b1b08f711161010d578063eafb5a3c116100a0578063fb78680d1161006f578063fb78680d14610b8d578063fdb78c0e14610bad578063fe575a8714610bce578063feadde9c14610bee57600080fd5b8063eafb5a3c14610b18578063eb50e70e14610b38578063ee5d9c2d14610b58578063eec2744e14610b6d57600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a61578063c6a276c214610a81578063cf84770614610aa1578063dd62ed3e14610ad257600080fd5b8063b1b08f711461065b578063b3d514fb1461065b578063b7df8b3614610a27578063bcd96a2514610a4157600080fd5b806378648edf116101855780638a8c523c116101545780638a8c523c146109a257806395d89b41146109b7578063a9059cbb146109e7578063ab558e4d14610a0757600080fd5b806378648edf1461093a57806380c581d11461094f578063893d20e81461096f5780638a63bd9b1461098d57600080fd5b80636ebd0078116101c15780636ebd0078146108ba57806370a08231146108cf578063715018a61461090557806375f0a8741461091a57600080fd5b8063590ffdce1461082b5780635a6f09181461084b5780635c24b074146108615780635cce86cd1461088157600080fd5b80632b112e49116102e2578063452ed4f1116102755780634e718e48116102445780634e718e48146107935780634fb2e45d146107b35780634fbee193146107d357806350a8e0161461080c57600080fd5b8063452ed4f11461072357806346ea7ac8146107435780634ada218b146107595780634bbb93eb1461077357600080fd5b806332cde664116102b157806332cde664146106a357806333251a0b146106c357806336fddb04146106e35780633f3cf56c1461070357600080fd5b80632b112e49146106465780632b28fc7a1461065b5780632e8fa82114610671578063313ce5671461068757600080fd5b8063095ea7b31161035a57806323b872dd1161032957806323b872dd146105d057806326003957146105f05780632610eaca14610610578063285777511461063057600080fd5b8063095ea7b31461054d5780630dcbcf1c1461056d5780630fa604e4146105a657806318160ddd146105bb57600080fd5b8063069d955f11610396578063069d955f1461046c57806306fdde03146104c25780630758d924146104fe57806307dd79e01461052357600080fd5b806303fd2a45146103d35780630445b66714610406578063044df7261461042a57806305bbedb61461044c57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c600f5481565b6040519081526020016103fd565b34801561043657600080fd5b5061044a610445366004613d9b565b610c0e565b005b34801561045857600080fd5b5061044a610467366004613ec8565b610ccc565b34801561047857600080fd5b50600a5461049d9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b3480156104ce57600080fd5b5060408051808201909152600a815269534849424f474520414960b01b60208201525b6040516103fd9190613f0f565b34801561050a57600080fd5b50600c546103e99061010090046001600160a01b031681565b34801561052f57600080fd5b50600c5461053d9060ff1681565b60405190151581526020016103fd565b34801561055957600080fd5b5061053d610568366004613f5d565b610d4b565b34801561057957600080fd5b5061053d610588366004613f89565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105b257600080fd5b5061041c610d62565b3480156105c757600080fd5b5061041c610d82565b3480156105dc57600080fd5b5061053d6105eb366004613fa6565b610d9e565b3480156105fc57600080fd5b5061044a61060b366004613fe7565b610e16565b34801561061c57600080fd5b5061044a61062b366004614009565b610f5f565b34801561063c57600080fd5b5061041c60125481565b34801561065257600080fd5b5061041c611114565b34801561066757600080fd5b5061041c6107d081565b34801561067d57600080fd5b5061041c60105481565b34801561069357600080fd5b50604051601281526020016103fd565b3480156106af57600080fd5b5061044a6106be3660046140db565b611192565b3480156106cf57600080fd5b5061044a6106de366004613f89565b611345565b3480156106ef57600080fd5b5061044a6106fe36600461411e565b6113f7565b34801561070f57600080fd5b5061044a61071e366004613fe7565b61146a565b34801561072f57600080fd5b50600d546103e9906001600160a01b031681565b34801561074f57600080fd5b5061041c6109c481565b34801561076557600080fd5b5060155461053d9060ff1681565b34801561077f57600080fd5b5061041c61078e36600461413c565b6115bf565b34801561079f57600080fd5b5061044a6107ae36600461413c565b6115f3565b3480156107bf57600080fd5b5061044a6107ce366004613f89565b611691565b3480156107df57600080fd5b5061053d6107ee366004613f89565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561081857600080fd5b5060155461053d90610100900460ff1681565b34801561083757600080fd5b5061044a61084636600461411e565b611893565b34801561085757600080fd5b5061041c60165481565b34801561086d57600080fd5b5061044a61087c366004613f89565b611906565b34801561088d57600080fd5b5061053d61089c366004613f89565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108c657600080fd5b5061041c6119e0565b3480156108db57600080fd5b5061041c6108ea366004613f89565b6001600160a01b031660009081526020819052604090205490565b34801561091157600080fd5b5061044a6119fb565b34801561092657600080fd5b50600e546103e9906001600160a01b031681565b34801561094657600080fd5b5061044a611aa8565b34801561095b57600080fd5b5061044a61096a36600461411e565b611aff565b34801561097b57600080fd5b506017546001600160a01b03166103e9565b34801561099957600080fd5b5061053d611cd8565b3480156109ae57600080fd5b5061044a611d48565b3480156109c357600080fd5b50604080518082019091526007815266534849424f474560c81b60208201526104f1565b3480156109f357600080fd5b5061053d610a02366004613f5d565b611f92565b348015610a1357600080fd5b5061044a610a22366004613f89565b611fa9565b348015610a3357600080fd5b5060115461053d9060ff1681565b348015610a4d57600080fd5b5061044a610a5c366004614155565b612143565b348015610a6d57600080fd5b5061044a610a7c366004613d9b565b61225d565b348015610a8d57600080fd5b5061044a610a9c366004613f89565b612308565b348015610aad57600080fd5b50600b5461049d9061ffff808216916201000081048216916401000000009091041683565b348015610ade57600080fd5b5061041c610aed366004614188565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b2457600080fd5b5061044a610b33366004613f89565b612389565b348015610b4457600080fd5b5061044a610b53366004613f89565b61278a565b348015610b6457600080fd5b5061044a61284a565b348015610b7957600080fd5b5061044a610b8836600461411e565b612926565b348015610b9957600080fd5b5061044a610ba83660046141b6565b6129af565b348015610bb957600080fd5b50600e5461053d90600160a81b900460ff1681565b348015610bda57600080fd5b5061053d610be9366004613f89565b612c71565b348015610bfa57600080fd5b5061044a610c0936600461411e565b612ce6565b6017546001600160a01b03163314610c5b5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e83398151915260448201526064015b60405180910390fd5b60155460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610cb057600080fd5b505af1158015610cc4573d6000803e3d6000fd5b505050505050565b6017546001600160a01b03163314610d145760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610c96908590859060040161422c565b6000610d58338484612d59565b5060015b92915050565b6000610d706012600a61434a565b601454610d7d9190614359565b905090565b6000610d906012600a61434a565b610d7d90633b9aca0061437b565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610e03576001600160a01b038416600090815260036020908152604080832033845290915281208054849290610dfd908490614392565b90915550505b610e0e848484612e52565b949350505050565b6017546001600160a01b03163314610e5e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6064610e6c6012600a61434a565b610e7a90633b9aca0061437b565b610e849190614359565b8183610e926012600a61434a565b610ea090633b9aca0061437b565b610eaa919061437b565b610eb49190614359565b1015610f285760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610c52565b8082610f366012600a61434a565b610f4490633b9aca0061437b565b610f4e919061437b565b610f589190614359565b6014555050565b6017546001600160a01b03163314610fa75760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b8051825114610ff85760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610c52565b60005b82518161ffff16101561110f576110146012600a61434a565b828261ffff168151811061102a5761102a6143a5565b602002602001015161103c919061437b565b33600090815260208190526040902054101561109a5760405162461bcd60e51b815260206004820152601260248201527f4e6f7420656e6f75676820746f6b656e732e00000000000000000000000000006044820152606401610c52565b6110fc33848361ffff16815181106110b4576110b46143a5565b60200260200101516012600a6110ca919061434a565b858561ffff16815181106110e0576110e06143a5565b60200260200101516110f2919061437b565b6000806001613372565b5080611107816143bb565b915050610ffb565b505050565b600060208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55461dead82527f44ad89ba62b98ff34f51403ac22759b55759460c0bb5521eb4b6ee3cff49cf835461116e91906143dc565b61117a6012600a61434a565b61118890633b9aca0061437b565b610d7d9190614392565b6017546001600160a01b031633146111da5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600c5460ff161561122d5760405162461bcd60e51b815260206004820152601160248201527f546178657320617265206c6f636b65642e0000000000000000000000000000006044820152606401610c52565b6107d08361ffff161115801561124957506107d08261ffff1611155b801561125b57506107d08161ffff1611155b6112a75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610c52565b6109c46112b483856143ef565b61ffff1611156113065760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610c52565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6017546001600160a01b0316331461138d5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b600060405180830381600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b5050505050565b6017546001600160a01b0316331461143f5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6017546001600160a01b031633146114b25760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6103e86114c16012600a61434a565b6114cf90633b9aca0061437b565b6114da90600561437b565b6114e49190614359565b81836114f26012600a61434a565b61150090633b9aca0061437b565b61150a919061437b565b6115149190614359565b10156115885760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610c52565b80826115966012600a61434a565b6115a490633b9aca0061437b565b6115ae919061437b565b6115b89190614359565b6013555050565b600d546001600160a01b0316600090815260208190526040812054612710906115e990849061437b565b610d5c9190614359565b6017546001600160a01b0316331461163b5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b609681111561168c5760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610c52565b601255565b6017546001600160a01b031633146116d95760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b0381166117555760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c52565b61deac196001600160a01b038216016117d65760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610c52565b6017546117ed906001600160a01b03166000611893565b6117f8816001611893565b6017546001600160a01b031660009081526020819052604090205415611841576017546001600160a01b031660008181526020819052604090205461183f919083906110f2565b505b601780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6017546001600160a01b031633146118db5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6017546001600160a01b0316331461194e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b60155460ff161561195e57600080fd5b306001600160a01b038216036119b65760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610c52565b601580546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b60006119ee6012600a61434a565b601354610d7d9190614359565b6017546001600160a01b03163314611a435760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601754611a5a906001600160a01b03166000611893565b601780546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6017546001600160a01b03163314611af05760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600c805460ff19166001179055565b6017546001600160a01b03163314611b475760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b80611ba5576001600160a01b03828116600081815260016020526040808220805460ff1916905560155490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401610c96565b60025415611c0c576203f48060025442611bbf9190614392565b11611c0c5760405162461bcd60e51b815260206004820152600f60248201527f332044617920636f6f6c646f776e2e00000000000000000000000000000000006044820152606401610c52565b6001600160a01b03821660009081526001602052604090205460ff1615611c755760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610c52565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560155491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610c96565b5050565b6017546000906001600160a01b03163314611d235760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600c54611d4290309061010090046001600160a01b0316600019612d59565b50600190565b6017546001600160a01b03163314611d905760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b60155460ff1615611de35760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610c52565b601554610100900460ff16611e3a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610c52565b6015546201000090046001600160a01b0316611e6a576015805462010000600160b01b0319163062010000021790555b601554600d54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611edc57600080fd5b505af1925050508015611eed575060015b50601554600d546001600160a01b03908116600090815260208190526040908190205490516312d38e5760e11b815260048101919091526201000090920416906325a71cae9060240160408051808303816000875af1925050508015611f70575060408051601f3d908101601f19168201909252611f6d91810190614411565b60015b15611f7f57600f919091556010555b6015805460ff1916600117905542601655565b6000611f9f338484612e52565b5060019392505050565b6017546001600160a01b03163314611ff15760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601554610100900460ff161561205957306001600160a01b038216036120595760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610c52565b6017546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d49190614435565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561211f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061444e565b6017546001600160a01b0316331461218b5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600b805461ffff838116620100000263ffffffff19909216908516171790556121b481836143ef565b600b805465ffff00000000191664010000000061ffff93841602179055600a546000916121ea91620100008104821691166143ef565b600b5461ffff918216925064010000000090041681101561110f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610c52565b6017546001600160a01b031633146122a55760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b600e805460ff60a81b1916600160a81b841515908102919091179091556011805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6017546001600160a01b031633146123505760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c2906024016113c2565b6017546001600160a01b031633146123d15760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601554610100900460ff16156124295760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610c52565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612492919061446b565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612503919061446b565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612572919061446b565b600d546001600160a01b039081166000908152600160205260409020805460ff19169055909150811661270857816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612601919061446b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561264e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612672919061446b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156126bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e3919061446b565b600d80546001600160a01b0319166001600160a01b0392909216919091179055612724565b600d80546001600160a01b0319166001600160a01b0383161790555b600c805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038581168202929092178355600d5482166000908152600160208190526040909120805460ff19169091179055915461110f923092910416600019612d59565b6017546001600160a01b031633146127d25760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b0381166128285760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610c52565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6017546001600160a01b031633146128925760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b601554610100900460ff16156128ea5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610c52565b6017546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612923573d6000803e3d6000fd5b50565b6017546001600160a01b0316331461296e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6015546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610c96565b6017546001600160a01b031633146129f75760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b8284612a056012600a61434a565b612a1390633b9aca0061437b565b612a1d919061437b565b612a279190614359565b600f558082612a386012600a61434a565b612a4690633b9aca0061437b565b612a50919061437b565b612a5a9190614359565b6010819055600f541115612aba5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610c52565b600d546001600160a01b031660009081526020819052604090205461271090612ae490609661437b565b612aee9190614359565b6010541115612b4b5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610c52565b620f4240612b5b6012600a61434a565b612b6990633b9aca0061437b565b612b739190614359565b6010541015612bdb5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c52565b620f4240612beb6012600a61434a565b612bf990633b9aca0061437b565b612c039190614359565b600f541015612c6b5760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c52565b50505050565b60155460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612cc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c919061444e565b6017546001600160a01b03163314612d2e5760405162461bcd60e51b8152602060048201526011602482015260008051602061450e8339815191526044820152606401610c52565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612da55760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c52565b6001600160a01b038216612df15760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610c52565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416612eb85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c52565b6001600160a01b038316612f1a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c52565b60008211612f7c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c52565b6001600160a01b0384166000908152600160205260408120548190819060ff1615612faa5760019250612fd8565b6001600160a01b03861660009081526001602052604090205460ff1615612fd45760019150612fd8565b5060015b612fe28787613625565b1561326f5760155460ff166130e3578061303e5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610c52565b6001600160a01b03871660009081526005602052604090205460ff1615801561308057506001600160a01b03861660009081526005602052604090205460ff16155b156130e35760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610c52565b82806130ec5750815b1561319b576001600160a01b03871660009081526007602052604090205460ff1615801561313357506001600160a01b03861660009081526007602052604090205460ff16155b1561319b5760135485111561319b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610c52565b600c546001600160a01b0387811661010090920416148015906131bc575081155b1561326f576001600160a01b03861660009081526007602052604090205460ff1661326f5760145485613204886001600160a01b031660009081526020819052604090205490565b61320e91906143dc565b111561326f5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610c52565b811561335957600e54600160a01b900460ff1661335957600e54600160a81b900460ff1680156132b857506001600160a01b03861660009081526008602052604090205460ff16155b80156132dd57506001600160a01b03871660009081526008602052604090205460ff16155b156133595730600090815260208190526040902054600f5481106133575760105460115460ff161561334157601254600d546001600160a01b0316600090815260208190526040902054612710916133349161437b565b61333e9190614359565b90505b80821061334c578091505b6133558261373c565b505b505b613367878787868686613372565b979650505050505050565b600061337e8787613625565b156134185760155460405163ecd07a5360e01b81526001600160a01b038981166004830152888116602483015260448201889052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613401575060408051601f3d908101601f191682019092526133fe9181019061444e565b60015b61340a57600080fd5b90508061341657600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061345a57506001600160a01b03871660009081526006602052604090205460ff165b15613463575060005b6001600160a01b0388166000908152602081905260408120805488929061348b908490614392565b90915550600090508161349e57866134aa565b6134aa8987878a613b34565b9050806000808a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546134e091906143dc565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161352c91815260200190565b60405180910390a3601554610100900460ff166136165761354d8989613c49565b601554610100900460ff1615801561356a575061356a8989613625565b801561358f57506001600160a01b03891660009081526005602052604090205460ff16155b80156135b457506001600160a01b03881660009081526005602052604090205460ff16155b80156135be575083155b156136165760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610c52565b50600198975050505050505050565b6017546000906001600160a01b0384811691161480159061365457506017546001600160a01b03838116911614155b801561366b57506017546001600160a01b03163214155b801561369057506001600160a01b03821660009081526004602052604090205460ff16155b80156136b557506001600160a01b03831660009081526004602052604090205460ff16155b80156136cc57506001600160a01b03821661dead14155b80156136e057506001600160a01b03821615155b80156136f557506001600160a01b0383163014155b801561371557506015546001600160a01b03848116620100009092041614155b801561373557506015546001600160a01b03838116620100009092041614155b9392505050565b600e805460ff60a01b1916600160a01b17905560408051606081018252600b5461ffff808216835262010000820481166020840152640100000000909104169181018290529060000361378f5750613b24565b306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902054600019146137f257306000908152600360209081526040808320600c5461010090046001600160a01b03168452909152902060001990555b60006002826040015161ffff16836000015161ffff1685613813919061437b565b61381d9190614359565b6138279190614359565b905060006138358285614392565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061386f5761386f6143a5565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613906919061446b565b81600181518110613919576139196143a5565b6001600160a01b039283166020918202929092010152600c5460405163791ac94760e01b81526101009091049091169063791ac94790613966908590600090869030904290600401614488565b600060405180830381600087803b15801561398057600080fd5b505af1925050508015613991575060015b61399e5750505050613b24565b476000836139ac868461437b565b6139b69190614359565b90508415613a9957600c5460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526101009091046001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015613a4d575060408051601f3d908101601f19168201909252613a4a918101906144c4565b60015b613a5c57505050505050613b24565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613aa38183614392565b9150856000015186604001818151613abb91906144f2565b61ffff16905250600e546040516000916001600160a01b03169061d6d890479084818181858888f193505050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b505050505050505050505b50600e805460ff60a01b19169055565b6000808415613b4a5750600a5461ffff16613b74565b8315613b635750600a5462010000900461ffff16613b74565b50600a54640100000000900461ffff165b80600003613b855782915050610e0e565b6015546201000090046001600160a01b031630148015613baf57504660011480613baf5750466038145b15613bb957506111945b6000612710613bc8838661437b565b613bd29190614359565b90508015613c3f573060009081526020819052604081208054839290613bf99084906143dc565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6133678185614392565b601554610100900460ff1615613cad5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610c52565b613cb78282613625565b158015613cd15750600d546001600160a01b038281169116145b15611cd4576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556015805461ff001916610100179081905562010000900416613d49576015805462010000600160b01b0319163062010000021790555b600e805460ff60a81b1916600160a81b179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016122fc565b801515811461292357600080fd5b60008060408385031215613dae57600080fd5b8235613db981613d8d565b91506020830135613dc981613d8d565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e1357613e13613dd4565b604052919050565b600067ffffffffffffffff821115613e3557613e35613dd4565b5060051b60200190565b6001600160a01b038116811461292357600080fd5b600082601f830112613e6557600080fd5b81356020613e7a613e7583613e1b565b613dea565b82815260059290921b84018101918181019086841115613e9957600080fd5b8286015b84811015613ebd578035613eb081613e3f565b8352918301918301613e9d565b509695505050505050565b60008060408385031215613edb57600080fd5b823567ffffffffffffffff811115613ef257600080fd5b613efe85828601613e54565b9250506020830135613dc981613d8d565b600060208083528351808285015260005b81811015613f3c57858101830151858201604001528201613f20565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215613f7057600080fd5b8235613f7b81613e3f565b946020939093013593505050565b600060208284031215613f9b57600080fd5b813561373581613e3f565b600080600060608486031215613fbb57600080fd5b8335613fc681613e3f565b92506020840135613fd681613e3f565b929592945050506040919091013590565b60008060408385031215613ffa57600080fd5b50508035926020909101359150565b6000806040838503121561401c57600080fd5b823567ffffffffffffffff8082111561403457600080fd5b61404086838701613e54565b935060209150818501358181111561405757600080fd5b85019050601f8101861361406a57600080fd5b8035614078613e7582613e1b565b81815260059190911b8201830190838101908883111561409757600080fd5b928401925b828410156140b55783358252928401929084019061409c565b80955050505050509250929050565b803561ffff811681146140d657600080fd5b919050565b6000806000606084860312156140f057600080fd5b6140f9846140c4565b9250614107602085016140c4565b9150614115604085016140c4565b90509250925092565b6000806040838503121561413157600080fd5b8235613db981613e3f565b60006020828403121561414e57600080fd5b5035919050565b6000806040838503121561416857600080fd5b614171836140c4565b915061417f602084016140c4565b90509250929050565b6000806040838503121561419b57600080fd5b82356141a681613e3f565b91506020830135613dc981613e3f565b600080600080608085870312156141cc57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156142215781516001600160a01b0316875295820195908201906001016141fc565b509495945050505050565b60408152600061423f60408301856141e8565b905082151560208301529392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156142a157816000190482111561428757614287614250565b8085161561429457918102915b93841c939080029061426b565b509250929050565b6000826142b857506001610d5c565b816142c557506000610d5c565b81600181146142db57600281146142e557614301565b6001915050610d5c565b60ff8411156142f6576142f6614250565b50506001821b610d5c565b5060208310610133831016604e8410600b8410161715614324575081810a610d5c565b61432e8383614266565b806000190482111561434257614342614250565b029392505050565b600061373560ff8416836142a9565b60008261437657634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610d5c57610d5c614250565b81810381811115610d5c57610d5c614250565b634e487b7160e01b600052603260045260246000fd5b600061ffff8083168181036143d2576143d2614250565b6001019392505050565b80820180821115610d5c57610d5c614250565b61ffff81811683821601908082111561440a5761440a614250565b5092915050565b6000806040838503121561442457600080fd5b505080516020909101519092909150565b60006020828403121561444757600080fd5b5051919050565b60006020828403121561446057600080fd5b815161373581613d8d565b60006020828403121561447d57600080fd5b815161373581613e3f565b85815284602082015260a0604082015260006144a760a08301866141e8565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156144d957600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111561440a5761440a61425056fe43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000a2646970667358221220b31a37353bb73cdf0214686afa3f78f54d5c44c780a2d87bf48d536b36d054e164736f6c63430008120033

Deployed Bytecode Sourcemap

4378:23657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6073:73;;;;;;;;;;;;6104:42;6073:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6073:73:0;;;;;;;;6322:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6322:28:0;245:177:1;15871:153:0;;;;;;;;;;-1:-1:-1;15871:153:0;;;;;:::i;:::-;;:::i;:::-;;15160:174;;;;;;;;;;-1:-1:-1;15160:174:0;;;;;:::i;:::-;;:::i;5481:108::-;;;;;;;;;;-1:-1:-1;5481:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;3120:6:1;3153:15;;;3135:34;;3205:15;;;3200:2;3185:18;;3178:43;3257:15;;3237:18;;;3230:43;;;;3098:2;3083:18;5481:108:0;2914:365:1;10841:80:0;;;;;;;;;;-1:-1:-1;10913:5:0;;;;;;;;;;;;-1:-1:-1;;;10913:5:0;;;;10841:80;;;;;;;:::i;6012:26::-;;;;;;;;;;-1:-1:-1;6012:26:0;;;;;;;-1:-1:-1;;;;;6012:26:0;;;5979;;;;;;;;;;-1:-1:-1;5979:26:0;;;;;;;;;;;4250:14:1;;4243:22;4225:41;;4213:2;4198:18;5979:26:0;4085:187:1;11449:161:0;;;;;;;;;;-1:-1:-1;11449:161:0;;;;;:::i;:::-;;:::i;14488:140::-;;;;;;;;;;-1:-1:-1;14488:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14586:34:0;14562:4;14586:34;;;:25;:34;;;;;;;;;14488:140;18016:114;;;;;;;;;;;;;:::i;10576:83::-;;;;;;;;;;;;;:::i;12119:306::-;;;;;;;;;;-1:-1:-1;12119:306:0;;;;;:::i;:::-;;:::i;17628:264::-;;;;;;;;;;-1:-1:-1;17628:264:0;;;;;:::i;:::-;;:::i;25710:447::-;;;;;;;;;;-1:-1:-1;25710:447:0;;;;;:::i;:::-;;:::i;6430:33::-;;;;;;;;;;;;;;;;14792:141;;;;;;;;;;;;;:::i;5723:42::-;;;;;;;;;;;;5761:4;5723:42;;6357:25;;;;;;;;;;;;;;;;10665:80;;;;;;;;;;-1:-1:-1;10665:80:0;;5181:2;6848:36:1;;6836:2;6821:18;10665:80:0;6706:184:1;16222:544:0;;;;;;;;;;-1:-1:-1;16222:544:0;;;;;:::i;:::-;;:::i;15753:110::-;;;;;;;;;;-1:-1:-1;15753:110:0;;;;;:::i;:::-;;:::i;14063:140::-;;;;;;;;;;-1:-1:-1;14063:140:0;;;;;:::i;:::-;;:::i;17347:273::-;;;;;;;;;;-1:-1:-1;17347:273:0;;;;;:::i;:::-;;:::i;6045:21::-;;;;;;;;;;-1:-1:-1;6045:21:0;;;;-1:-1:-1;;;;;6045:21:0;;;5876:46;;;;;;;;;;;;5918:4;5876:46;;6595:34;;;;;;;;;;-1:-1:-1;6595:34:0;;;;;;;;18138:189;;;;;;;;;;-1:-1:-1;18138:189:0;;;;;:::i;:::-;;:::i;19042:217::-;;;;;;;;;;-1:-1:-1;19042:217:0;;;;;:::i;:::-;;:::i;9293:654::-;;;;;;;;;;-1:-1:-1;9293:654:0;;;;;:::i;:::-;;:::i;14211:127::-;;;;;;;;;;-1:-1:-1;14211:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14302:28:0;14278:4;14302:28;;;:19;:28;;;;;;;;;14211:127;6636:36;;;;;;;;;;-1:-1:-1;6636:36:0;;;;;;;;;;;14346:134;;;;;;;;;;-1:-1:-1;14346:134:0;;;;;:::i;:::-;;:::i;6709:26::-;;;;;;;;;;;;;;;;13693:222;;;;;;;;;;-1:-1:-1;13693:222:0;;;;;:::i;:::-;;:::i;13923:132::-;;;;;;;;;;-1:-1:-1;13923:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14017:30:0;13993:4;14017:30;;;:21;:30;;;;;;;;;13923:132;17900:108;;;;;;;;;;;;;:::i;11151:117::-;;;;;;;;;;-1:-1:-1;11151:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;11244:16:0;11217:7;11244:16;;;;;;;;;;;;11151:117;9955:225;;;;;;;;;;;;;:::i;6153:92::-;;;;;;;;;;-1:-1:-1;6153:92:0;;;;-1:-1:-1;;;;;6153:92:0;;;16032:182;;;;;;;;;;;;;:::i;13121:564::-;;;;;;;;;;-1:-1:-1;13121:564:0;;;;;:::i;:::-;;:::i;10927:79::-;;;;;;;;;;-1:-1:-1;10997:6:0;;-1:-1:-1;;;;;10997:6:0;10927:79;;11936:175;;;;;;;;;;;;;:::i;24513:695::-;;;;;;;;;;;;;:::i;10751:84::-;;;;;;;;;;-1:-1:-1;10825:7:0;;;;;;;;;;;;-1:-1:-1;;;10825:7:0;;;;10751:84;;11276:165;;;;;;;;;;-1:-1:-1;11276:165:0;;;;;:::i;:::-;;:::i;25406:296::-;;;;;;;;;;-1:-1:-1;25406:296:0;;;;;:::i;:::-;;:::i;6389:34::-;;;;;;;;;;-1:-1:-1;6389:34:0;;;;;;;;16774:366;;;;;;;;;;-1:-1:-1;16774:366:0;;;;;:::i;:::-;;:::i;19267:263::-;;;;;;;;;;-1:-1:-1;19267:263:0;;;;;:::i;:::-;;:::i;15479:202::-;;;;;;;;;;-1:-1:-1;15479:202:0;;;;;:::i;:::-;;:::i;5598:116::-;;;;;;;;;;-1:-1:-1;5598:116:0;;;;;;;;;;;;;;;;;;;;;;11012:133;;;;;;;;;;-1:-1:-1;11012:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11114:19:0;;;11096:7;11114:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11012:133;12433:680;;;;;;;;;;-1:-1:-1;12433:680:0;;;;;:::i;:::-;;:::i;17148:191::-;;;;;;;;;;-1:-1:-1;17148:191:0;;;;;:::i;:::-;;:::i;25216:182::-;;;;;;;;;;;;;:::i;15005:147::-;;;;;;;;;;-1:-1:-1;15005:147:0;;;;;:::i;:::-;;:::i;18335:699::-;;;;;;;;;;-1:-1:-1;18335:699:0;;;;;:::i;:::-;;:::i;6276:39::-;;;;;;;;;;-1:-1:-1;6276:39:0;;;;-1:-1:-1;;;6276:39:0;;;;;;15342:129;;;;;;;;;;-1:-1:-1;15342:129:0;;;;;:::i;:::-;;:::i;14636:148::-;;;;;;;;;;-1:-1:-1;14636:148:0;;;;;:::i;:::-;;:::i;15871:153::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;;;;;;;;;15966:11:::1;::::0;:50:::1;::::0;-1:-1:-1;;;15966:50:0;;10048:14:1;;10041:22;15966:50:0::1;::::0;::::1;10023:41:1::0;10107:14;;10100:22;10080:18;;;10073:50;15966:11:0;;;::::1;-1:-1:-1::0;;;;;15966:11:0::1;::::0;:26:::1;::::0;9996:18:1;;15966:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15871:153:::0;;:::o;15160:174::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;15268:11:::1;::::0;:58:::1;::::0;-1:-1:-1;;;15268:58:0;;:11;;;::::1;-1:-1:-1::0;;;;;15268:11:0::1;::::0;:39:::1;::::0;:58:::1;::::0;15308:8;;15318:7;;15268:58:::1;;;:::i;11449:161::-:0;11526:4;11543:37;11552:10;11564:7;11573:6;11543:8;:37::i;:::-;-1:-1:-1;11598:4:0;11449:161;;;;;:::o;18016:114::-;18063:7;18108:13;5181:2;18108;:13;:::i;:::-;18090:14;;:32;;;;:::i;:::-;18083:39;;18016:114;:::o;10576:83::-;10631:7;5242:13;5181:2;5242;:13;:::i;:::-;5225:30;;5025:13;5225:30;:::i;12119:306::-;-1:-1:-1;;;;;12240:19:0;;12219:4;12240:19;;;:11;:19;;;;;;;;12260:10;12240:31;;;;;;;;-1:-1:-1;;12240:52:0;12236:126;;-1:-1:-1;;;;;12309:19:0;;;;;;:11;:19;;;;;;;;12329:10;12309:31;;;;;;;:41;;12344:6;;12309:19;:41;;12344:6;;12309:41;:::i;:::-;;;;-1:-1:-1;;12236:126:0;12381:36;12391:6;12399:9;12410:6;12381:9;:36::i;:::-;12374:43;12119:306;-1:-1:-1;;;;12119:306:0:o;17628:264::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;17770:3:::1;5242:13;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;17760:13;;;;:::i;:::-;17748:7:::0;17737;5242:13:::1;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;17727:17;;;;:::i;:::-;17726:29;;;;:::i;:::-;:48;;17718:109;;;::::0;-1:-1:-1;;;17718:109:0;;13215:2:1;17718:109:0::1;::::0;::::1;13197:21:1::0;13254:2;13234:18;;;13227:30;13293:34;13273:18;;;13266:62;13364:18;13344;;;13337:46;13400:19;;17718:109:0::1;13013:412:1::0;17718:109:0::1;17877:7:::0;17866;5242:13:::1;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;17856:17;;;;:::i;:::-;17855:29;;;;:::i;:::-;17838:14;:46:::0;-1:-1:-1;;17628:264:0:o;25710:447::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;25845:7:::1;:14;25826:8;:15;:33;25818:67;;;::::0;-1:-1:-1;;;25818:67:0;;13632:2:1;25818:67:0::1;::::0;::::1;13614:21:1::0;13671:2;13651:18;;;13644:30;13710:23;13690:18;;;13683:51;13751:18;;25818:67:0::1;13430:345:1::0;25818:67:0::1;25901:8;25896:254;25919:8;:15;25915:1;:19;;;25896:254;;;26000:13;5181:2;26000;:13;:::i;:::-;25989:7;25997:1;25989:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25974:10;11217:7:::0;11244:16;;;;;;;;;;;25964:49:::1;;25956:80;;;::::0;-1:-1:-1;;;25956:80:0;;14114:2:1;25956:80:0::1;::::0;::::1;14096:21:1::0;14153:2;14133:18;;;14126:30;14192:20;14172:18;;;14165:48;14230:18;;25956:80:0::1;13912:342:1::0;25956:80:0::1;26051:87;26068:10;26080:8;26089:1;26080:11;;;;;;;;;;:::i;:::-;;;;;;;5181:2;26104;:13;;;;:::i;:::-;26093:7;26101:1;26093:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;26119:5;26126::::0;26133:4:::1;26051:16;:87::i;:::-;-1:-1:-1::0;25936:3:0;::::1;::::0;::::1;:::i;:::-;;;;25896:254;;;;25710:447:::0;;:::o;14792:141::-;14845:7;11244:16;;;;;;6104:42;11244:16;;;;14884:39;;11244:16;14884:39;:::i;:::-;5242:13;5181:2;5242;:13;:::i;:::-;5225:30;;5025:13;5225:30;:::i;:::-;14873:51;;;;:::i;16222:544::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;16330:14:::1;::::0;::::1;;16329:15;16321:45;;;::::0;-1:-1:-1;;;16321:45:0;;14793:2:1;16321:45:0::1;::::0;::::1;14775:21:1::0;14832:2;14812:18;;;14805:30;14871:19;14851:18;;;14844:47;14908:18;;16321:45:0::1;14591:341:1::0;16321:45:0::1;5761:4;16385:6;:21;;;;:65;;;;;5811:4;16427:7;:23;;;;16385:65;:117;;;;;5865:4;16471:11;:31;;;;16385:117;16377:170;;;::::0;-1:-1:-1;;;16377:170:0;;15139:2:1;16377:170:0::1;::::0;::::1;15121:21:1::0;15178:2;15158:18;;;15151:30;15217:25;15197:18;;;15190:53;15260:18;;16377:170:0::1;14937:347:1::0;16377:170:0::1;5918:4;16566:16;16575:7:::0;16566:6;:16:::1;:::i;:::-;:35;;;;16558:80;;;::::0;-1:-1:-1;;;16558:80:0;;15664:2:1;16558:80:0::1;::::0;::::1;15646:21:1::0;;;15683:18;;;15676:30;15742:34;15722:18;;;15715:62;15794:18;;16558:80:0::1;15462:356:1::0;16558:80:0::1;16649:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;16685:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;16723:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16222:544::o;15753:110::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;15822:11:::1;::::0;:33:::1;::::0;-1:-1:-1;;;15822:33:0;;-1:-1:-1;;;;;178:55:1;;;15822:33:0::1;::::0;::::1;160:74:1::0;15822:11:0;;;::::1;::::0;;::::1;::::0;:24:::1;::::0;133:18:1;;15822:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15753:110:::0;:::o;14063:140::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;-1:-1:-1;;;;;14155:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14155:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14063:140::o;17347:273::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;17492:4:::1;5242:13;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;17478:11;::::0;17488:1:::1;17478:11;:::i;:::-;:18;;;;:::i;:::-;17466:7:::0;17455;5242:13:::1;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;17445:17;;;;:::i;:::-;17444:29;;;;:::i;:::-;:53;;17436:121;;;::::0;-1:-1:-1;;;17436:121:0;;16025:2:1;17436:121:0::1;::::0;::::1;16007:21:1::0;16064:2;16044:18;;;16037:30;16103:34;16083:18;;;16076:62;16174:25;16154:18;;;16147:53;16217:19;;17436:121:0::1;15823:419:1::0;17436:121:0::1;17605:7:::0;17594;5242:13:::1;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;17584:17;;;;:::i;:::-;17583:29;;;;:::i;:::-;17568:12;:44:::0;-1:-1:-1;;17347:273:0:o;18138:189::-;18267:6;;-1:-1:-1;;;;;18267:6:0;18229:7;11244:16;;;;;;;;;;;5965:5;;18257:41;;18277:21;;18257:41;:::i;:::-;18256:62;;;;:::i;19042:217::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;19172:3:::1;19146:22;:29;;19138:64;;;::::0;-1:-1:-1;;;19138:64:0;;16449:2:1;19138:64:0::1;::::0;::::1;16431:21:1::0;16488:2;16468:18;;;16461:30;16527:24;16507:18;;;16500:52;16569:18;;19138:64:0::1;16247:346:1::0;19138:64:0::1;19213:13;:38:::0;19042:217::o;9293:654::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;-1:-1:-1;;;;;9372:22:0;::::1;9364:96;;;::::0;-1:-1:-1;;;9364:96:0;;16800:2:1;9364:96:0::1;::::0;::::1;16782:21:1::0;16839:2;16819:18;;;16812:30;16878:34;16858:18;;;16851:62;16949:31;16929:18;;;16922:59;16998:19;;9364:96:0::1;16598:425:1::0;9364:96:0::1;-1:-1:-1::0;;;;;;;9479:16:0;::::1;::::0;9471:90:::1;;;::::0;-1:-1:-1;;;9471:90:0;;16800:2:1;9471:90:0::1;::::0;::::1;16782:21:1::0;16839:2;16819:18;;;16812:30;16878:34;16858:18;;;16851:62;16949:31;16929:18;;;16922:59;16998:19;;9471:90:0::1;16598:425:1::0;9471:90:0::1;9592:6;::::0;9572:34:::1;::::0;-1:-1:-1;;;;;9592:6:0::1;;9572:19;:34::i;:::-;9617:35;9637:8;9647:4;9617:19;:35::i;:::-;9687:6;::::0;-1:-1:-1;;;;;9687:6:0::1;9697:1;11244:16:::0;;;;;;;;;;;9677:21;9673:127:::1;;9732:6;::::0;-1:-1:-1;;;;;9732:6:0::1;11217:7:::0;11244:16;;;;;;;;;;;9715:73:::1;::::0;9732:6;9740:8;;9750:17:::1;11151:117:::0;9715:73:::1;;9673:127;9839:6;::::0;;-1:-1:-1;;;;;9856:17:0;;::::1;-1:-1:-1::0;;;;;;9856:17:0;::::1;::::0;::::1;::::0;;;9889:40:::1;::::0;9839:6;::::1;::::0;9856:17;9839:6;;9889:40:::1;::::0;9820:16:::1;::::0;9889:40:::1;9353:594;9293:654:::0;:::o;14346:134::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;-1:-1:-1;;;;;14434:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;14434:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14346:134::o;13693:222::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;13777:14:::1;::::0;::::1;;13776:15;13768:24;;;::::0;::::1;;13834:4;-1:-1:-1::0;;;;;13811:28:0;::::1;::::0;13803:55:::1;;;::::0;-1:-1:-1;;;13803:55:0;;17230:2:1;13803:55:0::1;::::0;::::1;17212:21:1::0;17269:2;17249:18;;;17242:30;17308:16;17288:18;;;17281:44;17342:18;;13803:55:0::1;17028:338:1::0;13803:55:0::1;13869:11;:38:::0;;-1:-1:-1;;;;;13869:38:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;13869:38:0;;::::1;::::0;;;::::1;::::0;;13693:222::o;17900:108::-;17943:7;17986:13;5181:2;17986;:13;:::i;:::-;17970:12;;:30;;;;:::i;9955:225::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;10034:6:::1;::::0;10014:34:::1;::::0;-1:-1:-1;;;;;10034:6:0::1;;10014:19;:34::i;:::-;10078:6;::::0;;-1:-1:-1;;;;;;10095:19:0;::::1;::::0;;;10130:42:::1;::::0;-1:-1:-1;;;;;10078:6:0;;::::1;::::0;10059:16:::1;::::0;10078:6;;10130:42:::1;::::0;10059:16;;10130:42:::1;10003:177;9955:225::o:0;16032:182::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;16185:14:::1;:21:::0;;-1:-1:-1;;16185:21:0::1;16202:4;16185:21;::::0;;16032:182::o;13121:564::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;13203:7:::1;13198:480;;-1:-1:-1::0;;;;;13227:13:0;;::::1;13243:5;13227:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13227:21:0::1;::::0;;13263:11:::1;::::0;:34;;-1:-1:-1;;;13263:34:0;;::::1;::::0;::::1;17539:74:1::0;;;;17629:18;;;17622:50;;;;13263:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17512:18:1;;13263:34:0::1;17371:307:1::0;13198:480:0::1;13334:17;::::0;:22;13330:135:::1;;13423:6;13403:17;;13385:15;:35;;;;:::i;:::-;:44;13377:72;;;::::0;-1:-1:-1;;;13377:72:0;;17885:2:1;13377:72:0::1;::::0;::::1;17867:21:1::0;17924:2;17904:18;;;17897:30;17963:17;17943:18;;;17936:45;17998:18;;13377:72:0::1;17683:339:1::0;13377:72:0::1;-1:-1:-1::0;;;;;13488:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;13487:14;13479:54;;;::::0;-1:-1:-1;;;13479:54:0;;18229:2:1;13479:54:0::1;::::0;::::1;18211:21:1::0;18268:2;18248:18;;;18241:30;18307:29;18287:18;;;18280:57;18354:18;;13479:54:0::1;18027:351:1::0;13479:54:0::1;-1:-1:-1::0;;;;;13548:13:0;;::::1;;::::0;;;13564:4:::1;13548:13;::::0;;;;;;;;:20;;-1:-1:-1;;13548:20:0::1;::::0;::::1;::::0;;13603:15:::1;13583:17;:35:::0;13633:11:::1;::::0;:33;;-1:-1:-1;;;13633:33:0;;::::1;::::0;::::1;17539:74:1::0;;;;17629:18;;;17622:50;13633:11:0;;::::1;::::0;;::::1;::::0;:21:::1;::::0;17512:18:1;;13633:33:0::1;17371:307:1::0;13198:480:0::1;13121:564:::0;;:::o;11936:175::-;9147:6;;12002:4;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;12051:9:::1;::::0;12019:62:::1;::::0;12036:4:::1;::::0;12051:9:::1;::::0;::::1;-1:-1:-1::0;;;;;12051:9:0::1;-1:-1:-1::0;;12019:8:0::1;:62::i;:::-;-1:-1:-1::0;12099:4:0::1;11936:175:::0;:::o;24513:695::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;24575:14:::1;::::0;::::1;;24574:15;24566:52;;;::::0;-1:-1:-1;;;24566:52:0;;18585:2:1;24566:52:0::1;::::0;::::1;18567:21:1::0;18624:2;18604:18;;;18597:30;18663:26;18643:18;;;18636:54;18707:18;;24566:52:0::1;18383:348:1::0;24566:52:0::1;24637:16;::::0;::::1;::::0;::::1;;;24629:53;;;::::0;-1:-1:-1;;;24629:53:0;;18938:2:1;24629:53:0::1;::::0;::::1;18920:21:1::0;18977:2;18957:18;;;18950:30;19016:26;18996:18;;;18989:54;19060:18;;24629:53:0::1;18736:348:1::0;24629:53:0::1;24705:11;::::0;;;::::1;-1:-1:-1::0;;;;;24705:11:0::1;24693:106;;24747:11;:40:::0;;-1:-1:-1;;;;;;24747:40:0::1;24781:4;24747:40:::0;::::1;;::::0;;24693:106:::1;24813:11;::::0;24835:6:::1;::::0;24813:87:::1;::::0;-1:-1:-1;;;24813:87:0;;-1:-1:-1;;;;;24835:6:0;;::::1;24813:87;::::0;::::1;19312:74:1::0;19434:10;24850:12:0::1;19422:23:1::0;19402:18;;;19395:51;19494:18;24872:15:0::1;19482:31:1::0;19462:18;;;19455:59;5181:2:0::1;19530:18:1::0;;;19523:45;24813:11:0;;;::::1;;::::0;:21:::1;::::0;19284:19:1;;24813:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;24926:11:0::1;::::0;24957:6:::1;::::0;-1:-1:-1;;;;;24957:6:0;;::::1;11217:7:::0;11244:16;;;;;;;;;;;;;24926:39;;-1:-1:-1;;;24926:39:0;;::::1;::::0;::::1;391:25:1::0;;;;24926:11:0;;;::::1;;::::0;:20:::1;::::0;364:18:1;;24926:39:0::1;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;24926:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;24926:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;24922:207:::0;::::1;;25037:13;:29:::0;;;;25081:10:::1;:27:::0;24922:207:::1;25139:14;:21:::0;;-1:-1:-1;;25139:21:0::1;25156:4;25139:21;::::0;;25185:15:::1;25171:11;:29:::0;24513:695::o;11276:165::-;11354:4;11371:40;11381:10;11393:9;11404:6;11371:9;:40::i;:::-;-1:-1:-1;11429:4:0;;11276:165;-1:-1:-1;;;11276:165:0:o;25406:296::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;25484:16:::1;::::0;::::1;::::0;::::1;;;25480:111;;;25542:4;-1:-1:-1::0;;;;;25525:22:0;::::1;::::0;25517:62:::1;;;::::0;-1:-1:-1;;;25517:62:0;;20031:2:1;25517:62:0::1;::::0;::::1;20013:21:1::0;20070:2;20050:18;;;20043:30;20109:29;20089:18;;;20082:57;20156:18;;25517:62:0::1;19829:351:1::0;25517:62:0::1;25655:6;::::0;25663:30:::1;::::0;-1:-1:-1;;;25663:30:0;;25687:4:::1;25663:30;::::0;::::1;160:74:1::0;25623:5:0;;-1:-1:-1;;;;;25640:14:0;;::::1;::::0;::::1;::::0;25655:6;;;::::1;::::0;25640:14;;25663:15:::1;::::0;133:18:1;;25663:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25640:54;::::0;-1:-1:-1;;;;;;25640:54:0::1;::::0;;;;;;-1:-1:-1;;;;;20566:55:1;;;25640:54:0::1;::::0;::::1;20548:74:1::0;20638:18;;;20631:34;20521:18;;25640:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16774:366::-:0;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;16859:7:::1;:29:::0;;::::1;16899::::0;;::::1;::::0;::::1;-1:-1:-1::0;;16899:29:0;;;16859;;::::1;16899::::0;::::1;::::0;;16959:21:::1;16919:9:::0;16879;16959:21:::1;:::i;:::-;16939:7;:41:::0;;-1:-1:-1;;16939:41:0::1;::::0;::::1;::::0;;::::1;;;::::0;;17026:9:::1;:17:::0;-1:-1:-1;;17007:36:0::1;::::0;17026:17;;::::1;::::0;::::1;::::0;17007:16:::1;:36;:::i;:::-;17062:7;:17:::0;16991:52:::1;::::0;;::::1;::::0;-1:-1:-1;17062:17:0;;::::1;;:26:::0;-1:-1:-1;17062:26:0::1;17054:78;;;::::0;-1:-1:-1;;;17054:78:0;;21128:2:1;17054:78:0::1;::::0;::::1;21110:21:1::0;21167:2;21147:18;;;21140:30;21206:34;21186:18;;;21179:62;-1:-1:-1;;;21257:18:1;;;21250:37;21304:19;;17054:78:0::1;20926:403:1::0;19267:263:0;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;19376:19:::1;:33:::0;;-1:-1:-1;;;;19376:33:0::1;-1:-1:-1::0;;;19376:33:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19420:22:::1;:47:::0;;-1:-1:-1;;19420:47:0::1;::::0;::::1;;;::::0;;19483:39:::1;::::0;4225:41:1;;;19483:39:0::1;::::0;4213:2:1;4198:18;19483:39:0::1;;;;;;;;19267:263:::0;;:::o;15479:202::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;15635:11:::1;::::0;:38:::1;::::0;-1:-1:-1;;;15635:38:0;;-1:-1:-1;;;;;178:55:1;;;15635:38:0::1;::::0;::::1;160:74:1::0;15635:11:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;133:18:1;;15635:38:0::1;14:226:1::0;12433:680:0;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;12513:16:::1;::::0;::::1;::::0;::::1;;;12512:17;12504:60;;;::::0;-1:-1:-1;;;12504:60:0;;21536:2:1;12504:60:0::1;::::0;::::1;21518:21:1::0;21575:2;21555:18;;;21548:30;21614:32;21594:18;;;21587:60;21664:18;;12504:60:0::1;21334:354:1::0;12504:60:0::1;12575:20;12608:9;12575:43;;12629:16;12659:10;-1:-1:-1::0;;;;;12659:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12648:40:0::1;;12697:4;12704:10;-1:-1:-1::0;;;;;12704:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12648:74;::::0;-1:-1:-1;;;;;;12648:74:0::1;::::0;;;;;;-1:-1:-1;;;;;22202:15:1;;;12648:74:0::1;::::0;::::1;22184:34:1::0;22254:15;;22234:18;;;22227:43;22096:18;;12648:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12741:6;::::0;-1:-1:-1;;;;;12741:6:0;;::::1;12751:5;12733:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;12733:23:0::1;::::0;;12629:93;;-1:-1:-1;12771:22:0;::::1;12767:200;;12830:10;-1:-1:-1::0;;;;;12830:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12819:43:0::1;;12871:4;12878:10;-1:-1:-1::0;;;;;12878:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12819:77;::::0;-1:-1:-1;;;;;;12819:77:0::1;::::0;;;;;;-1:-1:-1;;;;;22202:15:1;;;12819:77:0::1;::::0;::::1;22184:34:1::0;22254:15;;22234:18;;;22227:43;22096:18;;12819:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12810:6;:86:::0;;-1:-1:-1;;;;;;12810:86:0::1;-1:-1:-1::0;;;;;12810:86:0;;;::::1;::::0;;;::::1;::::0;;12767:200:::1;;;12938:6;:17:::0;;-1:-1:-1;;;;;;12938:17:0::1;-1:-1:-1::0;;;;;12938:17:0;::::1;;::::0;;12767:200:::1;12977:9;:22:::0;;-1:-1:-1;;12977:22:0::1;;-1:-1:-1::0;;;;;12977:22:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;13018:6:::1;::::0;;::::1;-1:-1:-1::0;13010:15:0;;;-1:-1:-1;13010:15:0::1;::::0;;;;;;;:22;;-1:-1:-1;;13010:22:0::1;::::0;;::::1;::::0;;13075:9;;13043:62:::1;::::0;13060:4:::1;::::0;13075:9;::::1;;-1:-1:-1::0;;13043:8:0::1;:62::i;17148:191::-:0;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;-1:-1:-1;;;;;17233:23:0;::::1;17225:59;;;::::0;-1:-1:-1;;;17225:59:0;;22483:2:1;17225:59:0::1;::::0;::::1;22465:21:1::0;22522:2;22502:18;;;22495:30;22561:25;22541:18;;;22534:53;22604:18;;17225:59:0::1;22281:347:1::0;17225:59:0::1;17295:15;:36:::0;;-1:-1:-1;;;;;;17295:36:0::1;-1:-1:-1::0;;;;;17295:36:0;;;::::1;::::0;;;::::1;::::0;;17148:191::o;25216:182::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;25283:16:::1;::::0;::::1;::::0;::::1;;;25282:17;25274:58;;;::::0;-1:-1:-1;;;25274:58:0;;22835:2:1;25274:58:0::1;::::0;::::1;22817:21:1::0;22874:2;22854:18;;;22847:30;22913;22893:18;;;22886:58;22961:18;;25274:58:0::1;22633:352:1::0;25274:58:0::1;25351:6;::::0;25343:47:::1;::::0;-1:-1:-1;;;;;25351:6:0;;::::1;::::0;25368:21:::1;25343:47:::0;::::1;;;::::0;25351:6:::1;25343:47:::0;25351:6;25343:47;25368:21;25351:6;25343:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25216:182::o:0;15005:147::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;15095:11:::1;::::0;:49:::1;::::0;-1:-1:-1;;;15095:49:0;;-1:-1:-1;;;;;17557:55:1;;;15095:49:0::1;::::0;::::1;17539:74:1::0;17656:14;;17649:22;17629:18;;;17622:50;15095:11:0;;;::::1;::::0;;::::1;::::0;:31:::1;::::0;17512:18:1;;15095:49:0::1;17371:307:1::0;18335:699:0;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;18535:16;18515;5242:13:::1;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;18505:26;;;;:::i;:::-;18504:47;;;;:::i;:::-;18488:13;:63:::0;18603:13;18586;5242::::1;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;18576:23;;;;:::i;:::-;18575:41;;;;:::i;:::-;18562:10;:54:::0;;;18635:13:::1;::::0;:27:::1;;18627:73;;;::::0;-1:-1:-1;;;18627:73:0;;23192:2:1;18627:73:0::1;::::0;::::1;23174:21:1::0;23231:2;23211:18;;;23204:30;23270:34;23250:18;;;23243:62;-1:-1:-1;;;23321:18:1;;;23314:31;23362:19;;18627:73:0::1;22990:397:1::0;18627:73:0::1;18744:6;::::0;-1:-1:-1;;;;;18744:6:0::1;11217:7:::0;11244:16;;;;;;;;;;;5965:5:::1;::::0;18734:23:::1;::::0;18754:3:::1;18734:23;:::i;:::-;18733:44;;;;:::i;:::-;18719:10;;:58;;18711:106;;;::::0;-1:-1:-1;;;18711:106:0;;23594:2:1;18711:106:0::1;::::0;::::1;23576:21:1::0;23633:2;23613:18;;;23606:30;23672:34;23652:18;;;23645:62;-1:-1:-1;;;23723:18:1;;;23716:33;23766:19;;18711:106:0::1;23392:399:1::0;18711:106:0::1;18860:9;5242:13;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;18850:19;;;;:::i;:::-;18836:10;;:33;;18828:92;;;::::0;-1:-1:-1;;;18828:92:0;;23998:2:1;18828:92:0::1;::::0;::::1;23980:21:1::0;24037:2;24017:18;;;24010:30;24076:34;24056:18;;;24049:62;-1:-1:-1;;;24127:18:1;;;24120:44;24181:19;;18828:92:0::1;23796:410:1::0;18828:92:0::1;18966:9;5242:13;5181:2;5242;:13;:::i;:::-;5225:30;::::0;5025:13:::1;5225:30;:::i;:::-;18956:19;;;;:::i;:::-;18939:13;;:36;;18931:95;;;::::0;-1:-1:-1;;;18931:95:0;;23998:2:1;18931:95:0::1;::::0;::::1;23980:21:1::0;24037:2;24017:18;;;24010:30;24076:34;24056:18;;;24049:62;-1:-1:-1;;;24127:18:1;;;24120:44;24181:19;;18931:95:0::1;23796:410:1::0;18931:95:0::1;18335:699:::0;;;;:::o;15342:129::-;15429:11;;:34;;-1:-1:-1;;;15429:34:0;;-1:-1:-1;;;;;178:55:1;;;15429:34:0;;;160:74:1;15405:4:0;;15429:11;;;;;:25;;133:18:1;;15429:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14636:148::-;9147:6;;-1:-1:-1;;;;;9147:6:0;9157:10;9147:20;9139:50;;;;-1:-1:-1;;;9139:50:0;;9717:2:1;9139:50:0;;;9699:21:1;9756:2;9736:18;;;9729:30;-1:-1:-1;;;;;;;;;;;9775:18:1;;;9768:47;9832:18;;9139:50:0;9515:341:1;9139:50:0;-1:-1:-1;;;;;14732:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;14732:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14636:148::o;11618:310::-;-1:-1:-1;;;;;11713:20:0;;11705:52;;;;-1:-1:-1;;;11705:52:0;;24413:2:1;11705:52:0;;;24395:21:1;24452:2;24432:18;;;24425:30;-1:-1:-1;;;24471:18:1;;;24464:49;24530:18;;11705:52:0;24211:343:1;11705:52:0;-1:-1:-1;;;;;11776:21:0;;11768:53;;;;-1:-1:-1;;;11768:53:0;;24413:2:1;11768:53:0;;;24395:21:1;24452:2;24432:18;;;24425:30;-1:-1:-1;;;24471:18:1;;;24464:49;24530:18;;11768:53:0;24211:343:1;11768:53:0;-1:-1:-1;;;;;11834:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;11887:33;;391:25:1;;;11887:33:0;;364:18:1;11887:33:0;;;;;;;11618:310;;;:::o;19992:2286::-;20071:4;-1:-1:-1;;;;;20096:18:0;;20088:68;;;;-1:-1:-1;;;20088:68:0;;24761:2:1;20088:68:0;;;24743:21:1;24800:2;24780:18;;;24773:30;24839:34;24819:18;;;24812:62;-1:-1:-1;;;24890:18:1;;;24883:35;24935:19;;20088:68:0;24559:401:1;20088:68:0;-1:-1:-1;;;;;20175:16:0;;20167:64;;;;-1:-1:-1;;;20167:64:0;;25167:2:1;20167:64:0;;;25149:21:1;25206:2;25186:18;;;25179:30;25245:34;25225:18;;;25218:62;-1:-1:-1;;;25296:18:1;;;25289:33;25339:19;;20167:64:0;24965:399:1;20167:64:0;20259:1;20250:6;:10;20242:64;;;;-1:-1:-1;;;20242:64:0;;25571:2:1;20242:64:0;;;25553:21:1;25610:2;25590:18;;;25583:30;25649:34;25629:18;;;25622:62;-1:-1:-1;;;25700:18:1;;;25693:39;25749:19;;20242:64:0;25369:405:1;20242:64:0;-1:-1:-1;;;;;20405:13:0;;20317:8;20405:13;;;:7;:13;;;;;;20317:8;;;;20405:13;;20401:162;;;20441:4;20435:10;;20401:162;;;-1:-1:-1;;;;;20467:11:0;;;;;;:7;:11;;;;;;;;20463:100;;;20502:4;20495:11;;20463:100;;;-1:-1:-1;20547:4:0;20463:100;20577:20;20588:4;20594:2;20577:10;:20::i;:::-;20573:874;;;20618:14;;;;20614:319;;20658:5;20653:265;;20688:34;;-1:-1:-1;;;20688:34:0;;25981:2:1;20688:34:0;;;25963:21:1;26020:2;26000:18;;;25993:30;26059:26;26039:18;;;26032:54;26103:18;;20688:34:0;25779:348:1;20653:265:0;-1:-1:-1;;;;;20753:31:0;;;;;;:25;:31;;;;;;;;20752:32;:66;;;;-1:-1:-1;;;;;;20789:29:0;;;;;;:25;:29;;;;;;;;20788:30;20752:66;20748:170;;;20843:55;;-1:-1:-1;;;20843:55:0;;26334:2:1;20843:55:0;;;26316:21:1;26373:2;26353:18;;;26346:30;26412:34;26392:18;;;26385:62;-1:-1:-1;;;26463:18:1;;;26456:43;26516:19;;20843:55:0;26132:409:1;20748:170:0;20951:3;:11;;;;20958:4;20951:11;20947:232;;;-1:-1:-1;;;;;20987:27:0;;;;;;:21;:27;;;;;;;;20986:28;:58;;;;-1:-1:-1;;;;;;21019:25:0;;;;;;:21;:25;;;;;;;;21018:26;20986:58;20982:182;;;21087:12;;21077:6;:22;;21069:75;;;;-1:-1:-1;;;21069:75:0;;26748:2:1;21069:75:0;;;26730:21:1;26787:2;26767:18;;;26760:30;26826:34;26806:18;;;26799:62;-1:-1:-1;;;26877:18:1;;;26870:38;26925:19;;21069:75:0;26546:404:1;21069:75:0;21211:9;;-1:-1:-1;;;;;21197:24:0;;;21211:9;;;;;21197:24;;;;:33;;;21226:4;21225:5;21197:33;21193:243;;;-1:-1:-1;;;;;21256:25:0;;;;;;:21;:25;;;;;;;;21251:170;;21340:14;;21330:6;21314:13;21324:2;-1:-1:-1;;;;;11244:16:0;11217:7;11244:16;;;;;;;;;;;;11151:117;21314:13;:22;;;;:::i;:::-;:40;;21306:95;;;;-1:-1:-1;;;21306:95:0;;27157:2:1;21306:95:0;;;27139:21:1;27196:2;27176:18;;;27169:30;27235:34;27215:18;;;27208:62;-1:-1:-1;;;27286:18:1;;;27279:40;27336:19;;21306:95:0;26955:406:1;21306:95:0;21463:4;21459:742;;;21489:6;;-1:-1:-1;;;21489:6:0;;;;21484:706;;21520:19;;-1:-1:-1;;;21520:19:0;;;;:64;;;;-1:-1:-1;;;;;;21564:20:0;;;;;;:16;:20;;;;;;;;21563:21;21520:64;:111;;;;-1:-1:-1;;;;;;21609:22:0;;;;;;:16;:22;;;;;;;;21608:23;21520:111;21516:659;;;21723:4;21674:28;11244:16;;;;;;;;;;;21780:13;;21756:37;;21752:404;;21840:10;;21881:22;;;;21877:97;;;21938:13;;21928:6;;-1:-1:-1;;;;;21928:6:0;11217:7;11244:16;;;;;;;;;;;5965:5;;21918:33;;;:::i;:::-;21917:54;;;;:::i;:::-;21907:64;;21877:97;22028:7;22004:20;:31;22000:72;;22062:7;22039:30;;22000:72;22098:34;22111:20;22098:12;:34::i;:::-;21795:361;21752:404;21651:524;21516:659;22218:52;22235:4;22241:2;22245:6;22253:3;22258:4;22264:5;22218:16;:52::i;:::-;22211:59;19992:2286;-1:-1:-1;;;;;;;19992:2286:0:o;26165:1055::-;26284:4;26305:20;26316:4;26322:2;26305:10;:20::i;:::-;26301:228;;;26360:11;;:39;;-1:-1:-1;;;26360:39:0;;-1:-1:-1;;;;;27647:15:1;;;26360:39:0;;;27629:34:1;27699:15;;;27679:18;;;27672:43;27731:18;;;27724:34;;;26329:12:0;;26360:11;;;;;:21;;27541:18:1;;26360:39:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;26360:39:0;;;;;;;;-1:-1:-1;;26360:39:0;;;;;;;;;;;;:::i;:::-;;;26356:122;;26467:8;;;26356:122;26450:5;-1:-1:-1;26496:7:0;26492:26;;26507:8;;;26492:26;26327:202;26301:228;-1:-1:-1;;;;;26573:25:0;;26539:12;26573:25;;;:19;:25;;;;;;26554:4;;26573:25;;;:52;;-1:-1:-1;;;;;;26602:23:0;;;;;;:19;:23;;;;;;;;26573:52;26569:99;;;-1:-1:-1;26651:5:0;26569:99;-1:-1:-1;;;;;26678:13:0;;:7;:13;;;;;;;;;;:23;;26695:6;;26678:7;:23;;26695:6;;26678:23;:::i;:::-;;;;-1:-1:-1;26712:22:0;;-1:-1:-1;26738:7:0;26737:55;;26786:6;26737:55;;;26749:34;26759:4;26765:3;26770:4;26776:6;26749:9;:34::i;:::-;26712:80;;26818:14;26803:7;:11;26811:2;-1:-1:-1;;;;;26803:11:0;-1:-1:-1;;;;;26803:11:0;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;26863:2;-1:-1:-1;;;;;26848:34:0;26857:4;-1:-1:-1;;;;;26848:34:0;;26867:14;26848:34;;;;391:25:1;;379:2;364:18;;245:177;26848:34:0;;;;;;;;26898:16;;;;;;;26893:298;;26931:28;26950:4;26956:2;26931:18;:28::i;:::-;26979:16;;;;;;;26978:17;:41;;;;;26999:20;27010:4;27016:2;26999:10;:20::i;:::-;26978:77;;;;-1:-1:-1;;;;;;27024:31:0;;;;;;:25;:31;;;;;;;;27023:32;26978:77;:111;;;;-1:-1:-1;;;;;;27060:29:0;;;;;;:25;:29;;;;;;;;27059:30;26978:111;:121;;;;;27094:5;27093:6;26978:121;26974:206;;;27120:44;;-1:-1:-1;;;27120:44:0;;27971:2:1;27120:44:0;;;27953:21:1;28010:2;27990:18;;;27983:30;28049:34;28029:18;;;28022:62;-1:-1:-1;;;28100:18:1;;;28093:32;28142:19;;27120:44:0;27769:398:1;26974:206:0;-1:-1:-1;27208:4:0;;26165:1055;-1:-1:-1;;;;;;;;26165:1055:0:o;19538:446::-;19639:6;;19607:4;;-1:-1:-1;;;;;19631:14:0;;;19639:6;;19631:14;;;;:43;;-1:-1:-1;19668:6:0;;-1:-1:-1;;;;;19662:12:0;;;19668:6;;19662:12;;19631:43;:79;;;;-1:-1:-1;19704:6:0;;-1:-1:-1;;;;;19704:6:0;19691:9;:19;;19631:79;:118;;;;-1:-1:-1;;;;;;19728:21:0;;;;;;:17;:21;;;;;;;;19727:22;19631:118;:159;;;;-1:-1:-1;;;;;;19767:23:0;;;;;;:17;:23;;;;;;;;19766:24;19631:159;:186;;;;-1:-1:-1;;;;;;19807:10:0;;6104:42;19807:10;;19631:186;:219;;;;-1:-1:-1;;;;;;19834:16:0;;;;19631:219;:257;;;;-1:-1:-1;;;;;;19867:21:0;;19883:4;19867:21;;19631:257;:302;;;;-1:-1:-1;19921:11:0;;-1:-1:-1;;;;;19905:28:0;;;19921:11;;;;;19905:28;;19631:302;:345;;;;-1:-1:-1;19964:11:0;;-1:-1:-1;;;;;19950:26:0;;;19964:11;;;;;19950:26;;19631:345;19624:352;19538:446;-1:-1:-1;;;19538:446:0:o;22286:1648::-;6900:6;:13;;-1:-1:-1;;;;6900:13:0;-1:-1:-1;;;6900:13:0;;;22369:30:::1;::::0;;::::1;::::0;::::1;::::0;;22392:7:::1;22369:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;6900:13;22414:21;22410:60:::1;;22452:7;;;22410:60;22506:4;22486:26;::::0;;;:11:::1;:26;::::0;;;;;;;22521:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22521:9:0::1;22486:46:::0;;;;;;;;-1:-1:-1;;22486:67:0::1;22482:166;;22590:4;22570:26;::::0;;;:11:::1;:26;::::0;;;;;;;22605:9:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;22605:9:0::1;22570:46:::0;;;;;;;-1:-1:-1;;22570:66:0;;22482:166:::1;22660:17;22745:1;22725:6;:16;;;22681:60;;22705:6;:16;;;22682:39;;:20;:39;;;;:::i;:::-;22681:60;;;;:::i;:::-;22680:66;;;;:::i;:::-;22660:86:::0;-1:-1:-1;22757:15:0::1;22775:32;22660:86:::0;22775:20;:32:::1;:::i;:::-;22852:16;::::0;;22866:1:::1;22852:16:::0;;;;;::::1;::::0;;22757:50;;-1:-1:-1;22828:21:0::1;::::0;22852:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22852:16:0::1;22828:40;;22897:4;22879;22884:1;22879:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;22879:23:0::1;;;-1:-1:-1::0;;;;;22879:23:0::1;;;::::0;::::1;22923:9;;;;;;;;;-1:-1:-1::0;;;;;22923:9:0::1;-1:-1:-1::0;;;;;22923:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22913:4;22918:1;22913:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22913:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22956:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;22956:186:0;;:9:::1;::::0;;::::1;::::0;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;23031:7;;23053:1:::1;::::0;23069:4;;23096::::1;::::0;23116:15:::1;::::0;22956:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22952:233;;23167:7;;;;;;22952:233;23218:21;23197:18;23304:7:::0;23278:22:::1;23291:9:::0;23218:21;23278:22:::1;:::i;:::-;23277:34;;;;:::i;:::-;23250:61:::0;-1:-1:-1;23328:13:0;;23324:400:::1;;23362:9;::::0;:222:::1;::::0;-1:-1:-1;;;23362:222:0;;23439:4:::1;23362:222;::::0;::::1;29146:34:1::0;29196:18;;;29189:34;;;23491:1:0::1;29239:18:1::0;;;29232:34;;;29282:18;;;29275:34;6104:42:0::1;29325:19:1::0;;;29318:44;23554:15:0::1;29378:19:1::0;;;29371:35;23362:9:0::1;::::0;;::::1;-1:-1:-1::0;;;;;23362:9:0::1;::::0;:25:::1;::::0;23395:16;;29057:19:1;;23362:222:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23362:222:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23362:222:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23358:355;;23691:7;;;;;;;;23358:355;-1:-1:-1::0;;23609:40:0::1;::::0;;29902:25:1;;;29958:2;29943:18;;29936:34;;;23609:40:0::1;::::0;-1:-1:-1;29875:18:1;23609:40:0::1;;;;;;;23358:355;23736:30;23750:16:::0;23736:30;::::1;:::i;:::-;;;23797:6;:16;;;23777:6;:16;;:36;;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;23860:15:0::1;::::0;:66:::1;::::0;23824:12:::1;::::0;-1:-1:-1;;;;;23860:15:0::1;::::0;23916:5:::1;::::0;23888:21:::1;::::0;23824:12;23860:66;23824:12;23860:66;23888:21;23860:15;23916:5;23860:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;6924:1:0::1;-1:-1:-1::0;6936:6:0;:14;;-1:-1:-1;;;;6936:14:0;;;22286:1648::o;27228:804::-;27316:7;27336:18;27369:3;27365:205;;;-1:-1:-1;27402:9:0;:16;;;27365:205;;;27440:4;27436:134;;;-1:-1:-1;27474:9:0;:17;;;;;;27436:134;;;-1:-1:-1;27537:9:0;:21;;;;;;27436:134;27584:10;27598:1;27584:15;27580:39;;27610:6;27603:13;;;;;27580:39;27641:11;;;;;-1:-1:-1;;;;;27641:11:0;27665:4;27633:37;:110;;;;;27688:13;27705:1;27688:18;:54;;;;27723:13;27740:2;27723:19;27688:54;27629:138;;;-1:-1:-1;27760:4:0;27629:138;27777:17;5965:5;27797:19;27806:10;27797:6;:19;:::i;:::-;:38;;;;:::i;:::-;27777:58;-1:-1:-1;27850:13:0;;27846:141;;27896:4;27880:7;:22;;;;;;;;;;:35;;27906:9;;27880:7;:35;;27906:9;;27880:35;:::i;:::-;;;;-1:-1:-1;;27935:40:0;;391:25:1;;;27958:4:0;;-1:-1:-1;;;;;27935:40:0;;;;;379:2:1;364:18;27935:40:0;;;;;;;27846:141;28006:18;28015:9;28006:6;:18;:::i;23942:563::-;24025:16;;;;;;;24024:17;24016:65;;;;-1:-1:-1;;;24016:65:0;;30569:2:1;24016:65:0;;;30551:21:1;30608:2;30588:18;;;30581:30;30647:34;30627:18;;;30620:62;-1:-1:-1;;;30698:18:1;;;30691:33;30741:19;;24016:65:0;30367:399:1;24016:65:0;24097:20;24108:4;24114:2;24097:10;:20::i;:::-;24096:21;:37;;;;-1:-1:-1;24127:6:0;;-1:-1:-1;;;;;24121:12:0;;;24127:6;;24121:12;24096:37;24092:406;;;-1:-1:-1;;;;;24150:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;24150:30:0;;;24176:4;24150:30;;;;;;24195:19;:25;;;;;:32;;;;;;;;;;24242:16;:23;;-1:-1:-1;;24242:23:0;24150:30;24242:23;;;;;24292:11;;;;24280:114;;24338:11;:40;;-1:-1:-1;;;;;;24338:40:0;24372:4;24338:40;;;;;24280:114;24408:19;:26;;-1:-1:-1;;;;24408:26:0;-1:-1:-1;;;24408:26:0;;;24454:32;;-1:-1:-1;4225:41:1;;24454:32:0;;4213:2:1;4198:18;24454:32:0;4085: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;931:127::-;992:10;987:3;983:20;980:1;973:31;1023:4;1020:1;1013:15;1047:4;1044:1;1037:15;1063:275;1134:2;1128:9;1199:2;1180:13;;-1:-1:-1;;1176:27:1;1164:40;;1234:18;1219:34;;1255:22;;;1216:62;1213:88;;;1281:18;;:::i;:::-;1317:2;1310:22;1063:275;;-1:-1:-1;1063:275:1:o;1343:183::-;1403:4;1436:18;1428:6;1425:30;1422:56;;;1458:18;;:::i;:::-;-1:-1:-1;1503:1:1;1499:14;1515:4;1495:25;;1343:183::o;1531:154::-;-1:-1:-1;;;;;1610:5:1;1606:54;1599:5;1596:65;1586:93;;1675:1;1672;1665:12;1690:737;1744:5;1797:3;1790:4;1782:6;1778:17;1774:27;1764:55;;1815:1;1812;1805:12;1764:55;1851:6;1838:20;1877:4;1901:60;1917:43;1957:2;1917:43;:::i;:::-;1901:60;:::i;:::-;1995:15;;;2081:1;2077:10;;;;2065:23;;2061:32;;;2026:12;;;;2105:15;;;2102:35;;;2133:1;2130;2123:12;2102:35;2169:2;2161:6;2157:15;2181:217;2197:6;2192:3;2189:15;2181:217;;;2277:3;2264:17;2294:31;2319:5;2294:31;:::i;:::-;2338:18;;2376:12;;;;2214;;2181:217;;;-1:-1:-1;2416:5:1;1690:737;-1:-1:-1;;;;;;1690:737:1:o;2432:477::-;2522:6;2530;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2639:9;2626:23;2672:18;2664:6;2661:30;2658:50;;;2704:1;2701;2694:12;2658:50;2727:61;2780:7;2771:6;2760:9;2756:22;2727:61;:::i;:::-;2717:71;;;2838:2;2827:9;2823:18;2810:32;2851:28;2873:5;2851:28;:::i;3284:548::-;3396:4;3425:2;3454;3443:9;3436:21;3486:6;3480:13;3529:6;3524:2;3513:9;3509:18;3502:34;3554:1;3564:140;3578:6;3575:1;3572:13;3564:140;;;3673:14;;;3669:23;;3663:30;3639:17;;;3658:2;3635:26;3628:66;3593:10;;3564:140;;;3568:3;3753:1;3748:2;3739:6;3728:9;3724:22;3720:31;3713:42;3823:2;3816;3812:7;3807:2;3799:6;3795:15;3791:29;3780:9;3776:45;3772:54;3764:62;;;;3284:548;;;;:::o;4277:315::-;4345:6;4353;4406:2;4394:9;4385:7;4381:23;4377:32;4374:52;;;4422:1;4419;4412:12;4374:52;4461:9;4448:23;4480:31;4505:5;4480:31;:::i;:::-;4530:5;4582:2;4567:18;;;;4554:32;;-1:-1:-1;;;4277:315:1:o;4597:247::-;4656:6;4709:2;4697:9;4688:7;4684:23;4680:32;4677:52;;;4725:1;4722;4715:12;4677:52;4764:9;4751:23;4783:31;4808:5;4783:31;:::i;4849:456::-;4926:6;4934;4942;4995:2;4983:9;4974:7;4970:23;4966:32;4963:52;;;5011:1;5008;5001:12;4963:52;5050:9;5037:23;5069:31;5094:5;5069:31;:::i;:::-;5119:5;-1:-1:-1;5176:2:1;5161:18;;5148:32;5189:33;5148:32;5189:33;:::i;:::-;4849:456;;5241:7;;-1:-1:-1;;;5295:2:1;5280:18;;;;5267:32;;4849:456::o;5310:248::-;5378:6;5386;5439:2;5427:9;5418:7;5414:23;5410:32;5407:52;;;5455:1;5452;5445:12;5407:52;-1:-1:-1;;5478:23:1;;;5548:2;5533:18;;;5520:32;;-1:-1:-1;5310:248:1:o;5563:1138::-;5681:6;5689;5742:2;5730:9;5721:7;5717:23;5713:32;5710:52;;;5758:1;5755;5748:12;5710:52;5798:9;5785:23;5827:18;5868:2;5860:6;5857:14;5854:34;;;5884:1;5881;5874:12;5854:34;5907:61;5960:7;5951:6;5940:9;5936:22;5907:61;:::i;:::-;5897:71;;5987:2;5977:12;;6042:2;6031:9;6027:18;6014:32;6071:2;6061:8;6058:16;6055:36;;;6087:1;6084;6077:12;6055:36;6110:24;;;-1:-1:-1;6165:4:1;6157:13;;6153:27;-1:-1:-1;6143:55:1;;6194:1;6191;6184:12;6143:55;6230:2;6217:16;6253:60;6269:43;6309:2;6269:43;:::i;6253:60::-;6347:15;;;6429:1;6425:10;;;;6417:19;;6413:28;;;6378:12;;;;6453:19;;;6450:39;;;6485:1;6482;6475:12;6450:39;6509:11;;;;6529:142;6545:6;6540:3;6537:15;6529:142;;;6611:17;;6599:30;;6562:12;;;;6649;;;;6529:142;;;6690:5;6680:15;;;;;;;5563:1138;;;;;:::o;6895:159::-;6962:20;;7022:6;7011:18;;7001:29;;6991:57;;7044:1;7041;7034:12;6991:57;6895:159;;;:::o;7059:328::-;7133:6;7141;7149;7202:2;7190:9;7181:7;7177:23;7173:32;7170:52;;;7218:1;7215;7208:12;7170:52;7241:28;7259:9;7241:28;:::i;:::-;7231:38;;7288:37;7321:2;7310:9;7306:18;7288:37;:::i;:::-;7278:47;;7344:37;7377:2;7366:9;7362:18;7344:37;:::i;:::-;7334:47;;7059:328;;;;;:::o;7392:382::-;7457:6;7465;7518:2;7506:9;7497:7;7493:23;7489:32;7486:52;;;7534:1;7531;7524:12;7486:52;7573:9;7560:23;7592:31;7617:5;7592:31;:::i;7779:180::-;7838:6;7891:2;7879:9;7870:7;7866:23;7862:32;7859:52;;;7907:1;7904;7897:12;7859:52;-1:-1:-1;7930:23:1;;7779:180;-1:-1:-1;7779:180:1:o;8211:256::-;8277:6;8285;8338:2;8326:9;8317:7;8313:23;8309:32;8306:52;;;8354:1;8351;8344:12;8306:52;8377:28;8395:9;8377:28;:::i;:::-;8367:38;;8424:37;8457:2;8446:9;8442:18;8424:37;:::i;:::-;8414:47;;8211:256;;;;;:::o;8472:388::-;8540:6;8548;8601:2;8589:9;8580:7;8576:23;8572:32;8569:52;;;8617:1;8614;8607:12;8569:52;8656:9;8643:23;8675:31;8700:5;8675:31;:::i;:::-;8725:5;-1:-1:-1;8782:2:1;8767:18;;8754:32;8795:33;8754:32;8795:33;:::i;9125:385::-;9211:6;9219;9227;9235;9288:3;9276:9;9267:7;9263:23;9259:33;9256:53;;;9305:1;9302;9295:12;9256:53;-1:-1:-1;;9328:23:1;;;9398:2;9383:18;;9370:32;;-1:-1:-1;9449:2:1;9434:18;;9421:32;;9500:2;9485:18;9472:32;;-1:-1:-1;9125:385:1;-1:-1:-1;9125:385:1:o;10134:484::-;10187:3;10225:5;10219:12;10252:6;10247:3;10240:19;10278:4;10307:2;10302:3;10298:12;10291:19;;10344:2;10337:5;10333:14;10365:1;10375:218;10389:6;10386:1;10383:13;10375:218;;;10454:13;;-1:-1:-1;;;;;10450:62:1;10438:75;;10533:12;;;;10568:15;;;;10411:1;10404:9;10375:218;;;-1:-1:-1;10609:3:1;;10134:484;-1:-1:-1;;;;;10134:484:1:o;10623:342::-;10824:2;10813:9;10806:21;10787:4;10844:56;10896:2;10885:9;10881:18;10873:6;10844:56;:::i;:::-;10836:64;;10950:6;10943:14;10936:22;10931:2;10920:9;10916:18;10909:50;10623:342;;;;;:::o;10970:127::-;11031:10;11026:3;11022:20;11019:1;11012:31;11062:4;11059:1;11052:15;11086:4;11083:1;11076:15;11102:422;11191:1;11234:5;11191:1;11248:270;11269:7;11259:8;11256:21;11248:270;;;11328:4;11324:1;11320:6;11316:17;11310:4;11307:27;11304:53;;;11337:18;;:::i;:::-;11387:7;11377:8;11373:22;11370:55;;;11407:16;;;;11370:55;11486:22;;;;11446:15;;;;11248:270;;;11252:3;11102:422;;;;;:::o;11529:806::-;11578:5;11608:8;11598:80;;-1:-1:-1;11649:1:1;11663:5;;11598:80;11697:4;11687:76;;-1:-1:-1;11734:1:1;11748:5;;11687:76;11779:4;11797:1;11792:59;;;;11865:1;11860:130;;;;11772:218;;11792:59;11822:1;11813:10;;11836:5;;;11860:130;11897:3;11887:8;11884:17;11881:43;;;11904:18;;:::i;:::-;-1:-1:-1;;11960:1:1;11946:16;;11975:5;;11772:218;;12074:2;12064:8;12061:16;12055:3;12049:4;12046:13;12042:36;12036:2;12026:8;12023:16;12018:2;12012:4;12009:12;12005:35;12002:77;11999:159;;;-1:-1:-1;12111:19:1;;;12143:5;;11999:159;12190:34;12215:8;12209:4;12190:34;:::i;:::-;12260:6;12256:1;12252:6;12248:19;12239:7;12236:32;12233:58;;;12271:18;;:::i;:::-;12309:20;;11529:806;-1:-1:-1;;;11529:806:1:o;12340:140::-;12398:5;12427:47;12468:4;12458:8;12454:19;12448:4;12427:47;:::i;12485:217::-;12525:1;12551;12541:132;;12595:10;12590:3;12586:20;12583:1;12576:31;12630:4;12627:1;12620:15;12658:4;12655:1;12648:15;12541:132;-1:-1:-1;12687:9:1;;12485:217::o;12707:168::-;12780:9;;;12811;;12828:15;;;12822:22;;12808:37;12798:71;;12849:18;;:::i;12880:128::-;12947:9;;;12968:11;;;12965:37;;;12982:18;;:::i;13780:127::-;13841:10;13836:3;13832:20;13829:1;13822:31;13872:4;13869:1;13862:15;13896:4;13893:1;13886:15;14259:197;14297:3;14325:6;14366:2;14359:5;14355:14;14393:2;14384:7;14381:15;14378:41;;14399:18;;:::i;:::-;14448:1;14435:15;;14259:197;-1:-1:-1;;;14259:197:1:o;14461:125::-;14526:9;;;14547:10;;;14544:36;;;14560:18;;:::i;15289:168::-;15356:6;15382:10;;;15394;;;15378:27;;15417:11;;;15414:37;;;15431:18;;:::i;:::-;15414:37;15289:168;;;;:::o;19579:245::-;19658:6;19666;19719:2;19707:9;19698:7;19694:23;19690:32;19687:52;;;19735:1;19732;19725:12;19687:52;-1:-1:-1;;19758:16:1;;19814:2;19799:18;;;19793:25;19758:16;;19793:25;;-1:-1:-1;19579:245:1:o;20185:184::-;20255:6;20308:2;20296:9;20287:7;20283:23;20279:32;20276:52;;;20324:1;20321;20314:12;20276:52;-1:-1:-1;20347:16:1;;20185:184;-1:-1:-1;20185:184:1:o;20676:245::-;20743:6;20796:2;20784:9;20775:7;20771:23;20767:32;20764:52;;;20812:1;20809;20802:12;20764:52;20844:9;20838:16;20863:28;20885:5;20863:28;:::i;21693:251::-;21763:6;21816:2;21804:9;21795:7;21791:23;21787:32;21784:52;;;21832:1;21829;21822:12;21784:52;21864:9;21858:16;21883:31;21908:5;21883:31;:::i;28172:605::-;28471:6;28460:9;28453:25;28514:6;28509:2;28498:9;28494:18;28487:34;28557:3;28552:2;28541:9;28537:18;28530:31;28434:4;28578:57;28630:3;28619:9;28615:19;28607:6;28578:57;:::i;:::-;-1:-1:-1;;;;;28671:55:1;;;;28666:2;28651:18;;28644:83;-1:-1:-1;28758:3:1;28743:19;28736:35;28570:65;28172:605;-1:-1:-1;;;28172:605:1:o;29417:306::-;29505:6;29513;29521;29574:2;29562:9;29553:7;29549:23;29545:32;29542:52;;;29590:1;29587;29580:12;29542:52;29619:9;29613:16;29603:26;;29669:2;29658:9;29654:18;29648:25;29638:35;;29713:2;29702:9;29698:18;29692:25;29682:35;;29417:306;;;;;:::o;29981:171::-;30049:6;30088:10;;;30076;;;30072:27;;30111:12;;;30108:38;;;30126:18;;:::i

Swarm Source

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