ETH Price: $3,342.01 (+0.62%)

Token

BB Verse (BB)
 

Overview

Max Total Supply

1,000,000,000 BB

Holders

101

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5.005389021103861395 BB

Value
$0.00
0xbb285381826eab2c137e90bc178c27e7dafa8f54
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:
BBVerse

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-30
*/

// 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 AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _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;
}

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

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

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

    uint256 private startingSupply = 1_000_000_000;

    string constant private _name = "BB Verse";
    string constant private _symbol = "BB";
   
    uint8 constant private _decimals = 18;

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

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

    struct Ratios {
        uint16 reflection;
        uint16 bigBeans;
        uint16 littleBeans;
        uint16 marketing;
        uint16 liquidity;
        uint16 totalSwap;
    }

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

    Ratios public _ratios = Ratios({
        reflection: 100,
        bigBeans: 700,
        littleBeans: 100,
        marketing: 700,
        liquidity: 400,
        totalSwap: 700 + 100 + 700 + 400
        });

    uint256 constant public maxBuyTaxes = 1500;
    uint256 constant public maxSellTaxes = 1500;
    uint256 constant public maxTransferTaxes = 1500;
    uint256 constant public maxRoundtripTax = 3000;
    uint256 constant masterTaxDivisor = 10000;

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x15Fe17dc42a0463cC531AEf67A70490C5952077D),
        bigBeans: payable(0xebF386CA0540d6a72Afb6aA378774c805DA6651D)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    uint256 private _maxTxAmount = (_tTotal * 2) / 100;
    uint256 private _maxWalletSize = (_tTotal * 4) / 100;

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

    bool public buybackEnabled;
    bool public littleBeansEnabled;
    bool public bigBeansEnabled;
    uint256 public littleBeansPercent = 10;
    uint256 public littleBeansDivisor = 100;

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }

    constructor () payable {
        _rOwned[msg.sender] = _rTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

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

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } 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;
    }

    receive() external payable {}

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

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

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

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

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

    function _approve(address sender, address spender, uint256 amount) 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() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

        return _transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        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 setWallets(address payable marketing, address payable bigBeans) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.bigBeans = payable(bigBeans);
    }

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

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

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

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

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

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
    }

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

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

    function setBuybackEnabled(bool enabled) external onlyOwner {
        buybackEnabled = enabled;
    }

    function setBigBeansEnabled(bool enabled) external onlyOwner {
        if (enabled) {
            littleBeansEnabled = false;
        }
        bigBeansEnabled = enabled;
    }

    function setLittleBeansEnabled(bool enabled) external onlyOwner {
        if (enabled) {
            bigBeansEnabled = false;
        }
        littleBeansEnabled = enabled;
    }

    function setLittleBeansSettings(uint256 percent, uint256 divisor) external onlyOwner {
        littleBeansPercent = percent;
        littleBeansDivisor = divisor;
    }

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

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

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

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

            if (buybackEnabled && from != address(this)) {
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = dexRouter.WETH();
                uint256 balance = dexRouter.getAmountsOut(amount, path)[1];
                uint256 value = (balance * littleBeansPercent) / littleBeansDivisor;
                if (littleBeansEnabled && value < address(this).balance) {
                    buybackAndBurn(value);
                }

                if (bigBeansEnabled) {
                    if (address(this).balance < balance * 2) {
                        bigBeansEnabled = false;
                        littleBeansEnabled = true;
                    } else {
                        buybackAndBurn(balance * 2);
                    }
                }
            }
        } 
        return _finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal lockTheSwap {
        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();

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

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

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

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 bigBeansBalance = (amtBalance * ratios.bigBeans) / ratios.totalSwap;
        uint256 littleBeansBalance = (amtBalance * ratios.littleBeans) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (bigBeansBalance + littleBeansBalance);
        if (ratios.bigBeans > 0) {
            (success,) = _taxWallets.bigBeans.call{value: bigBeansBalance, gas: 35000}("");
        }
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
    }

    function buybackAndBurn(uint256 amountETH) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            DEAD,
            block.timestamp
        );
    }

    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(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

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

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

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

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

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

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

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

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

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

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

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

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

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

        values.rAmount = tAmount * values.currentRate;

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

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

        if(takeFee) {
            uint256 currentFee;

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","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":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"bigBeans","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigBeansEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"littleBeansDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"littleBeansEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"littleBeansPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBigBeansEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBuybackEnabled","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":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLittleBeansEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setLittleBeansSettings","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":"reflection","type":"uint16"},{"internalType":"uint16","name":"bigBeans","type":"uint16"},{"internalType":"uint16","name":"littleBeans","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"bigBeans","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600455600d805460ff19166001179055633b9aca00600e556200002c6012600a620007ad565b600e546200003b9190620007c5565b600f8190556200004e90600019620007fd565b6200005c9060001962000814565b601055604080516060808201835261032082526104b060208084019190915261044c928401929092526011805465ffffffffffff191665044c04b00320179055825160c08101845260648082526102bc82850181905282860182905292820192909252610190608082015261076c60a090910152601280546001600160601b0319166b076c019002bc006402bc006417905582518084019093527315fe17dc42a0463cc531aef67a70490c5952077d80845273ebf386ca0540d6a72afb6aa378774c805da6651d93909201839052601580546001600160a01b031990811690931790556016805490921690921790556017805461ff0019169055600f5462000166906002620007c5565b6200017291906200082e565b601c556064600f546004620001889190620007c5565b6200019491906200082e565b601d55601e805461ff0019169055600a601f556064602090815560105433600081815260018452604080822093909355600f549251928352909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600080546001600160a01b03191633179055466038036200024257601380546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000335565b466061036200027757601380546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000335565b4660011480620002875750466004145b80620002935750466003145b15620002c557601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000335565b4661a86a03620002fb57601380546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000335565b4660fa036200033057601380546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000335565b600080fd5b601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000845565b6001600160a01b031663c9c65396601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000411573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000437919062000845565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000484573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004aa919062000845565b601480546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554601354620004f992918216911660001962000597565b601354620005159030906001600160a01b031660001962000597565b600080546001600160a01b0390811682526008602090815260408084208054600160ff19918216811790925530865282862080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548216831790558554909416855260069092529092208054909116909117905562000870565b6001600160a01b038316620005e95760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620006375760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620005e0565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006ef578160001904821115620006d357620006d362000698565b80851615620006e157918102915b93841c9390800290620006b3565b509250929050565b6000826200070857506001620007a7565b816200071757506000620007a7565b81600181146200073057600281146200073b576200075b565b6001915050620007a7565b60ff8411156200074f576200074f62000698565b50506001821b620007a7565b5060208310610133831016604e8410600b841016171562000780575081810a620007a7565b6200078c8383620006ae565b8060001904821115620007a357620007a362000698565b0290505b92915050565b6000620007be60ff841683620006f7565b9392505050565b6000816000190483118215151615620007e257620007e262000698565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200080f576200080f620007e7565b500690565b60008282101562000829576200082962000698565b500390565b600082620008405762000840620007e7565b500490565b6000602082840312156200085857600080fd5b81516001600160a01b0381168114620007be57600080fd5b614d4c80620008806000396000f3fe6080604052600436106104095760003560e01c8063590ffdce11610213578063a9059cbb11610123578063eafb5a3c116100ab578063f94aa1b41161007a578063f94aa1b414610cde578063fb78680d14610d25578063fdb78c0e14610d45578063fe575a8714610d64578063feadde9c14610d8457600080fd5b8063eafb5a3c14610c69578063ee5d9c2d14610c89578063eec2744e14610c9e578063f08f43a214610cbe57600080fd5b8063bfc2fc35116100f2578063bfc2fc3514610b43578063cf84770614610b63578063d29eedcc14610bed578063d3f6a15714610c03578063dd62ed3e14610c2357600080fd5b8063a9059cbb14610b09578063b1b08f71146106e8578063b3d514fb146106e8578063b7df8b3614610b2957600080fd5b806379808732116101a6578063893d20e811610175578063893d20e814610a765780638a63bd9b14610a945780638a8c523c14610aa957806395d89b4114610abe5780639a9b567d14610ae957600080fd5b806379808732146109dd57806380c581d1146109fd57806381b46f2e14610a1d57806388f8202014610a3d57600080fd5b806365707565116101e2578063657075651461097d5780636ebd00781461099357806370a08231146109a8578063715018a6146109c857600080fd5b8063590ffdce146108e35780635c24b074146109035780635cce86cd14610923578063612c03211461095c57600080fd5b80632610eaca116103195780633f3cf56c116102a15780634ada218b116102705780634ada218b146108315780634e718e481461084b5780634fb2e45d1461086b5780634fbee1931461088b57806350a8e016146108c457600080fd5b80633f3cf56c146107bb578063452ed4f1146107db57806346ea7ac8146107fb57806349653eb71461081157600080fd5b80632e8fa821116102e85780632e8fa8211461071e578063313ce5671461073457806332cde6641461075b57806333251a0b1461077b57806336fddb041461079b57600080fd5b80632610eaca146106b257806328577751146106d25780632b28fc7a146106e85780632d838119146106fe57600080fd5b80630dcbcf1c1161039c57806314c9874b1161036b57806314c9874b1461061b578063160d0da51461063c57806318160ddd1461065d57806323b872dd14610672578063260039571461069257600080fd5b80630dcbcf1c1461058d5780630fa604e4146105c657806313b4a7f4146105db57806313e46192146105fb57600080fd5b8063069d955f116103d8578063069d955f146104ae57806306fdde03146105035780630758d9241461053d578063095ea7b31461055d57600080fd5b806303fd2a45146104155780630445b66714610448578063044df7261461046c57806305bbedb61461048e57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045457600080fd5b5061045e60185481565b60405190815260200161043f565b34801561047857600080fd5b5061048c6104873660046143e5565b610da4565b005b34801561049a57600080fd5b5061048c6104a9366004614512565b610e48565b3480156104ba57600080fd5b506011546104de9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161043f565b34801561050f57600080fd5b50604080518082019091526008815267424220566572736560c01b60208201525b60405161043f9190614559565b34801561054957600080fd5b5060135461042b906001600160a01b031681565b34801561056957600080fd5b5061057d6105783660046145ae565b610ea9565b604051901515815260200161043f565b34801561059957600080fd5b5061057d6105a83660046145da565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105d257600080fd5b5061045e610ec0565b3480156105e757600080fd5b5061048c6105f63660046145f7565b610ee0565b34801561060757600080fd5b5061048c610616366004614625565b61105e565b34801561062757600080fd5b50601e5461057d90600160b81b900460ff1681565b34801561064857600080fd5b50601e5461057d90600160b01b900460ff1681565b34801561066957600080fd5b5061045e6114c6565b34801561067e57600080fd5b5061057d61068d366004614643565b6114de565b34801561069e57600080fd5b5061048c6106ad366004614684565b611556565b3480156106be57600080fd5b5061048c6106cd3660046146a6565b61162f565b3480156106de57600080fd5b5061045e601b5481565b3480156106f457600080fd5b5061045e6105dc81565b34801561070a57600080fd5b5061045e610719366004614761565b611755565b34801561072a57600080fd5b5061045e60195481565b34801561074057600080fd5b506107496117d9565b60405160ff909116815260200161043f565b34801561076757600080fd5b5061048c610776366004614791565b6117f0565b34801561078757600080fd5b5061048c6107963660046145da565b611931565b3480156107a757600080fd5b5061048c6107b6366004614625565b6119c4565b3480156107c757600080fd5b5061048c6107d6366004614684565b611a19565b3480156107e757600080fd5b5060145461042b906001600160a01b031681565b34801561080757600080fd5b5061045e610bb881565b34801561081d57600080fd5b5061048c61082c3660046147d4565b611b00565b34801561083d57600080fd5b50601e5461057d9060ff1681565b34801561085757600080fd5b5061048c610866366004614761565b611b5c565b34801561087757600080fd5b5061048c6108863660046145da565b611bd3565b34801561089757600080fd5b5061057d6108a63660046145da565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108d057600080fd5b50601e5461057d90610100900460ff1681565b3480156108ef57600080fd5b5061048c6108fe366004614625565b611cfa565b34801561090f57600080fd5b5061048c61091e3660046145da565b611d4f565b34801561092f57600080fd5b5061057d61093e3660046145da565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561096857600080fd5b50601e5461057d90600160c01b900460ff1681565b34801561098957600080fd5b5061045e60205481565b34801561099f57600080fd5b5061045e611dfc565b3480156109b457600080fd5b5061045e6109c33660046145da565b611e17565b3480156109d457600080fd5b5061048c611e76565b3480156109e957600080fd5b5061048c6109f8366004614684565b611f04565b348015610a0957600080fd5b5061048c610a18366004614625565b611f39565b348015610a2957600080fd5b5061048c610a383660046147d4565b612097565b348015610a4957600080fd5b5061057d610a583660046145da565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a8257600080fd5b506000546001600160a01b031661042b565b348015610aa057600080fd5b5061057d6120f3565b348015610ab557600080fd5b5061048c61213e565b348015610aca57600080fd5b50604080518082019091526002815261212160f11b6020820152610530565b348015610af557600080fd5b5061048c610b043660046147d4565b612343565b348015610b1557600080fd5b5061057d610b243660046145ae565b61238b565b348015610b3557600080fd5b50601a5461057d9060ff1681565b348015610b4f57600080fd5b5061048c610b5e3660046143e5565b6123a2565b348015610b6f57600080fd5b50601254610bb09061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c00161043f565b348015610bf957600080fd5b5061045e601f5481565b348015610c0f57600080fd5b5061048c610c1e3660046145f7565b61242b565b348015610c2f57600080fd5b5061045e610c3e3660046145f7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c7557600080fd5b5061048c610c843660046145da565b612483565b348015610c9557600080fd5b5061048c6127b7565b348015610caa57600080fd5b5061048c610cb9366004614625565b612876565b348015610cca57600080fd5b5061048c610cd93660046147f1565b6128e1565b348015610cea57600080fd5b50601554601654610d05916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161043f565b348015610d3157600080fd5b5061048c610d40366004614856565b612a4a565b348015610d5157600080fd5b5060175461057d90610100900460ff1681565b348015610d7057600080fd5b5061057d610d7f3660046145da565b612b10565b348015610d9057600080fd5b5061048c610d9f366004614625565b612b85565b6000546001600160a01b03163314610dd75760405162461bcd60e51b8152600401610dce90614888565b60405180910390fd5b601e5460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610e2c57600080fd5b505af1158015610e40573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e725760405162461bcd60e51b8152600401610dce90614888565b601e546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610e1290859085906004016148f7565b6000610eb6338484612bda565b5060015b92915050565b6000610ece6012600a614a15565b601d54610edb9190614a24565b905090565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610dce90614888565b600d5460ff16610f1957600080fd5b6001600160a01b0382163014801590610f3b57506001600160a01b0381163014155b610f755760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610dce565b806001600160a01b0316826001600160a01b031603610fe2576001600160a01b03811660009081526006602090815260408083208054600160ff199182168117909255600c9093529220805490911682179055610fd3908290611cfa565b610fde81600161105e565b5050565b6001600160a01b0382811660008181526006602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600c90925280832080548616831790559282529190208054909216811790915561104c908390611cfa565b611057816001611cfa565b610fd38260015b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610dce90614888565b80156111cf576001600160a01b0382166000908152600a602052604090205460ff16156110f75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dce565b6001600160a01b03821660009081526001602052604090205415611151576001600160a01b03821660009081526001602052604090205461113790611755565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff1916600117905560145490911614610fde57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0384161790555050565b80610fde576001600160a01b0382166000908152600a602052604090205460ff1661123c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dce565b6014546001600160a01b03908116908316036112b75761125a612cd3565b6001600160a01b03831660009081526002602052604090205461127d9190614a46565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b54600103611359576112c9612cd3565b6001600160a01b0383166000908152600260205260409020546112ec9190614a46565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061133357611333614a65565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600b548110156114c157826001600160a01b0316600b828154811061138357611383614a7b565b6000918252602090912001546001600160a01b0316036114af57600b80546113ad90600190614a91565b815481106113bd576113bd614a7b565b600091825260209091200154600b80546001600160a01b0390921691839081106113e9576113e9614a7b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516815260029091526040812055611428612cd3565b6001600160a01b03841660009081526002602052604090205461144b9190614a46565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b80548061148857611488614a65565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806114b981614aa8565b91505061135c565b505050565b6000600f546000036114d757600080fd5b50600f5490565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611543576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061153d908490614a91565b90915550505b61154e848484612e92565b949350505050565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610dce90614888565b6064600f5461158f9190614a24565b8183600f5461159e9190614a46565b6115a89190614a24565b101561160f5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610dce565b8082600f5461161e9190614a46565b6116289190614a24565b601d555050565b6000546001600160a01b031633146116595760405162461bcd60e51b8152600401610dce90614888565b80518251146116a25760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610dce565b60005b82518160ff1610156114c157818160ff16815181106116c6576116c6614a7b565b60200260200101516116d733611e17565b10156116e257600080fd5b61174233848360ff16815181106116fb576116fb614a7b565b60200260200101516012600a6117119190614a15565b858560ff168151811061172657611726614a7b565b60200260200101516117389190614a46565b6000806001613508565b508061174d81614ac1565b9150506116a5565b60006010548211156117bc5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610dce565b60006117c6612cd3565b90506117d28184614a24565b9392505050565b6000600f546000036117ea57600080fd5b50601290565b6000546001600160a01b0316331461181a5760405162461bcd60e51b8152600401610dce90614888565b6105dc8361ffff161115801561183657506105dc8261ffff1611155b801561184857506105dc8161ffff1611155b6118945760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610dce565b610bb86118a18385614ae0565b61ffff1611156118f35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610dce565b6011805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6000546001600160a01b0316331461195b5760405162461bcd60e51b8152600401610dce90614888565b601e546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a435760405162461bcd60e51b8152600401610dce90614888565b6103e8600f54611a539190614a24565b8183600f54611a629190614a46565b611a6c9190614a24565b1015611ae05760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610dce565b8082600f54611aef9190614a46565b611af99190614a24565b601c555050565b6000546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610dce90614888565b8015611b3e57601e805460ff60b81b191690555b601e8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611b865760405162461bcd60e51b8152600401610dce90614888565b60c8811115611bce5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba1030b137bb329019129760611b6044820152606401610dce565b601b55565b6000546001600160a01b03163314611bfd5760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b038116611c235760405162461bcd60e51b8152600401610dce90614b06565b61deac196001600160a01b03821601611c4e5760405162461bcd60e51b8152600401610dce90614b06565b60008054611c67916001600160a01b0390911690611cfa565b611c72816001611cfa565b60008054611c88906001600160a01b0316611e17565b1115611caa57600054611ca8906001600160a01b03168261173882611e17565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611d245760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d795760405162461bcd60e51b8152600401610dce90614888565b601e5460ff1615611d8957600080fd5b306001600160a01b03821603611dd25760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610dce565b601e80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000611e0a6012600a614a15565b601c54610edb9190614a24565b6001600160a01b0381166000908152600a602052604081205460ff1615611e5457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610eba90611755565b6000546001600160a01b03163314611ea05760405162461bcd60e51b8152600401610dce90614888565b60008054611eb9916001600160a01b0390911690611cfa565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611f2e5760405162461bcd60e51b8152600401610dce90614888565b601f91909155602055565b6000546001600160a01b03163314611f635760405162461bcd60e51b8152600401610dce90614888565b801515600003611fdb576001600160a01b03828116600081815260036020526040808220805460ff19169055601e5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e2c57600080fd5b60045415612035576203f48060045442611ff59190614a91565b116120355760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610dce565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601e5492516380c581d160e01b8152908101939093526024830152620100009004909116906380c581d190604401610e12565b6000546001600160a01b031633146120c15760405162461bcd60e51b8152600401610dce90614888565b80156120d557601e805460ff60c01b191690555b601e8054911515600160b81b0260ff60b81b19909216919091179055565b600080546001600160a01b0316331461211e5760405162461bcd60e51b8152600401610dce90614888565b6013546121389030906001600160a01b0316600019612bda565b50600190565b6000546001600160a01b031633146121685760405162461bcd60e51b8152600401610dce90614888565b601e5460ff16156121bb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dce565b601e54610100900460ff166122125760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610dce565b601e546201000090046001600160a01b031661224257601e805462010000600160b01b0319163062010000021790555b601e54601454604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156122b457600080fd5b505af19250505080156122c5575060015b50601e805460ff19908116600117909155600d80549091169055601454612710906122f8906001600160a01b0316611e17565b61230390600a614a46565b61230d9190614a24565b60185560145461271090612329906001600160a01b0316611e17565b61233490601e614a46565b61233e9190614a24565b601955565b6000546001600160a01b0316331461236d5760405162461bcd60e51b8152600401610dce90614888565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000612398338484612e92565b5060019392505050565b6000546001600160a01b031633146123cc5760405162461bcd60e51b8152600401610dce90614888565b6017805461ff00191661010084151590810291909117909155601a805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146124555760405162461bcd60e51b8152600401610dce90614888565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b6000546001600160a01b031633146124ad5760405162461bcd60e51b8152600401610dce90614888565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125169190614b63565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125879190614b63565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156125d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f69190614b63565b90506001600160a01b03811661276f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126689190614b63565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d99190614b63565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190614b63565b601480546001600160a01b0319166001600160a01b039290921691909117905561278b565b601480546001600160a01b0319166001600160a01b0383161790555b601380546001600160a01b0319166001600160a01b0384169081179091556114c1903090600019612bda565b6000546001600160a01b031633146127e15760405162461bcd60e51b8152600401610dce90614888565b601e54610100900460ff16156128395760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610dce565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612873573d6000803e3d6000fd5b50565b6000546001600160a01b031633146128a05760405162461bcd60e51b8152600401610dce90614888565b601e546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e12565b6000546001600160a01b0316331461290b5760405162461bcd60e51b8152600401610dce90614888565b6012805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff000000001916600160201b8683160267ffff000000000000191617600160301b858316021769ffff00000000000000001916600160401b91841691909102179055808361297d8685614ae0565b6129879190614ae0565b6129919190614ae0565b6012805461ffff60501b1916600160501b61ffff938416021790556011546000916129c59162010000810482169116614ae0565b60125461ffff918216925082916129e89180821691600160501b90910416614ae0565b61ffff161115610e405760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610dce565b6000546001600160a01b03163314612a745760405162461bcd60e51b8152600401610dce90614888565b8284600f54612a839190614a46565b612a8d9190614a24565b601855600f548190612aa0908490614a46565b612aaa9190614a24565b60198190556018541115612b0a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610dce565b50505050565b601e5460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba9190614b80565b6000546001600160a01b03163314612baf5760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b038316612c265760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610dce565b6001600160a01b038216612c725760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610dce565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546014546001600160a01b03166000908152600a6020526040812054909291908290829060ff1615612d6d576014546001600160a01b031660009081526001602090815260408083205460029092529091205483821180612d3857508281115b15612d5257612d478587614a24565b965050505050505090565b612d5c8285614a91565b9350612d688184614a91565b925050505b600b5415612e645760005b600b5460ff82161015612e6257600060016000600b8460ff1681548110612da157612da1614a7b565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600b805491935060029183919060ff8716908110612de657612de6614a7b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180612e1a57508381115b15612e3557612e298688614a24565b97505050505050505090565b612e3f8286614a91565b9450612e4b8185614a91565b935050508080612e5a90614ac1565b915050612d78565b505b612e6e8385614a24565b821015612e8857612e7f8385614a24565b94505050505090565b612e7f8183614a24565b60006001600160a01b038416612ef85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610dce565b6001600160a01b038316612f5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610dce565b60008211612fbc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610dce565b6001600160a01b0384166000908152600360205260408120548190819060ff1615612fea5760019250613018565b6001600160a01b03861660009081526003602052604090205460ff16156130145760019150613018565b5060015b6130228787613806565b156131ea57601e5460ff166130795760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dce565b82806130825750815b15613131576001600160a01b03871660009081526009602052604090205460ff161580156130c957506001600160a01b03861660009081526009602052604090205460ff16155b1561313157601c548511156131315760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610dce565b6013546001600160a01b0387811691161480159061314d575081155b156131ea576001600160a01b03861660009081526009602052604090205460ff166131ea57601d548561317f88611e17565b6131899190614b9d565b11156131ea5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610dce565b81156134ef5760175460ff166132c457601754610100900460ff16801561322a57506001600160a01b0386166000908152600c602052604090205460ff16155b801561324f57506001600160a01b0387166000908152600c602052604090205460ff16155b156132c457600061325f30611e17565b905060185481106132c257601954601a5460ff16156132ac57601b546014546127109190613295906001600160a01b0316611e17565b61329f9190614a46565b6132a99190614a24565b90505b8082106132b7578091505b6132c0826138da565b505b505b601e54600160b01b900460ff1680156132e657506001600160a01b0387163014155b156134ef57604080516002808252606082018352600092602083019080368337019050509050308160008151811061332057613320614a7b565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339d9190614b63565b816001815181106133b0576133b0614a7b565b6001600160a01b03928316602091820292909201015260135460405163d06ca61f60e01b8152600092919091169063d06ca61f906133f4908a908690600401614bb5565b600060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134399190810190614bce565b60018151811061344b5761344b614a7b565b602002602001015190506000602054601f54836134689190614a46565b6134729190614a24565b601e54909150600160b81b900460ff16801561348d57504781105b1561349b5761349b81613dac565b601e54600160c01b900460ff16156134eb576134b8826002614a46565b4710156134d857601e805461ffff60b81b1916600160b81b1790556134eb565b6134eb6134e6836002614a46565b613dac565b5050505b6134fd878787868686613508565b979650505050505050565b601e54600090610100900460ff166135ed576135248787613eff565b601e54610100900460ff1615801561354157506135418787613806565b801561356657506001600160a01b03871660009081526007602052604090205460ff16155b801561358b57506001600160a01b03861660009081526007602052604090205460ff16155b8015613595575081155b156135ed5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610dce565b6001600160a01b03871660009081526008602052604090205460019060ff168061362f57506001600160a01b03871660009081526008602052604090205460ff165b15613638575060005b6000613649898989858a8a8a61403f565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613678908490614a91565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906136aa908490614b9d565b90915550506001600160a01b0389166000908152600a602052604090205460ff161561370e576001600160a01b0389166000908152600260205260409020546136f4908890614a91565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff161561376e5780516001600160a01b0389166000908152600260205260409020546137549190614b9d565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613785575060008160200151115b156137a6578060a00151601060008282546137a09190614a91565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516137ef91815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b0384811691161480159061383357506000546001600160a01b03838116911614155b801561384a57506000546001600160a01b03163214155b801561386f57506001600160a01b03821660009081526006602052604090205460ff16155b801561389457506001600160a01b03831660009081526006602052604090205460ff16155b80156138ab57506001600160a01b03821661dead14155b80156138bf57506001600160a01b03821615155b80156117d257506001600160a01b0383163014159392505050565b6017805460ff191660011790556040805160c08101825260125461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a082018190526000036139535750613d9f565b3060009081526005602090815260408083206013546001600160a01b03168452909152902054600019146139ac573060009081526005602090815260408083206013546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836080015161ffff16856139cd9190614a46565b6139d79190614a24565b6139e19190614a24565b905060006139ef8285614a91565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a2957613a29614a7b565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa69190614b63565b81600181518110613ab957613ab9614a7b565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790613aff908590600090869030904290600401614c54565b600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b5047925060009150849050613b428684614a46565b613b4c9190614a24565b90508415613c245760135460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613bc2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613be79190614c90565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613c2e8183614a91565b915085608001518660a001818151613c469190614cbe565b61ffff90811690915260a0880151602089015160009350839291821691613c6e911686614a46565b613c789190614a24565b905060008860a0015161ffff16896040015161ffff1686613c999190614a46565b613ca39190614a24565b90506000613cb18284614b9d565b613cbb9087614a91565b60208b015190915061ffff1615613d29576016546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114613d1e576040519150601f19603f3d011682016040523d82523d6000602084013e613d23565b606091505b50909450505b60608a015161ffff1615613d94576015546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613d89576040519150601f19603f3d011682016040523d82523d6000602084013e613d8e565b606091505b50909450505b505050505050505050505b506017805460ff19169055565b6040805160028082526060820183526000926020830190803683375050601354604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190614b63565b81600081518110613e4d57613e4d614a7b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613e8157613e81614a7b565b6001600160a01b03928316602091820292909201015260135460405163b6f9de9560e01b815291169063b6f9de95908490613ec990600090869061dead904290600401614ce1565b6000604051808303818588803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b50505050505050565b601e54610100900460ff1615613f635760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610dce565b613f6d8282613806565b158015613f8757506014546001600160a01b038281169116145b15610fde576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601e805461ff001916610100179081905562010000900416613fff57601e805462010000600160b01b0319163062010000021790555b6017805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161241f565b61407f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6140bf6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c08101825260125461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a0820152614124612cd3565b60c083018190526141359089614a46565b60808301526141448a8a613806565b156141de57601e5460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156141c7575060408051601f3d908101601f191682019092526141c491810190614b80565b60015b6141d057600080fd5b9050806141dc57600080fd5b505b86156142b857600086156141f9575060115461ffff16614222565b8515614212575060115462010000900461ffff16614222565b50601154600160201b900461ffff165b6000612710614231838c614a46565b61423b9190614a24565b9050600083600001518460a001516142539190614ae0565b845161ffff9182169250829161426a911684614a46565b6142749190614a24565b602086018190526142859083614a91565b6040860152614294828c614a91565b855260c085015160208601516142aa9190614a46565b60a0860152506142bc915050565b8782525b604082015115614393578160c0015182604001516142da9190614a46565b30600090815260016020526040812080549091906142f9908490614b9d565b9091555050306000908152600a602052604090205460ff161561434157604080830151306000908152600260205291822080549192909161433b908490614b9d565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040015160405161438a91815260200190565b60405180910390a35b8160c0015182604001516143a79190614a46565b8260a001516143b69190614b9d565b82608001516143c59190614a91565b60608301525098975050505050505050565b801515811461287357600080fd5b600080604083850312156143f857600080fd5b8235614403816143d7565b91506020830135614413816143d7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561445d5761445d61441e565b604052919050565b600067ffffffffffffffff82111561447f5761447f61441e565b5060051b60200190565b6001600160a01b038116811461287357600080fd5b600082601f8301126144af57600080fd5b813560206144c46144bf83614465565b614434565b82815260059290921b840181019181810190868411156144e357600080fd5b8286015b848110156145075780356144fa81614489565b83529183019183016144e7565b509695505050505050565b6000806040838503121561452557600080fd5b823567ffffffffffffffff81111561453c57600080fd5b6145488582860161449e565b9250506020830135614413816143d7565b600060208083528351808285015260005b818110156145865785810183015185820160400152820161456a565b81811115614598576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156145c157600080fd5b82356145cc81614489565b946020939093013593505050565b6000602082840312156145ec57600080fd5b81356117d281614489565b6000806040838503121561460a57600080fd5b823561461581614489565b9150602083013561441381614489565b6000806040838503121561463857600080fd5b823561440381614489565b60008060006060848603121561465857600080fd5b833561466381614489565b9250602084013561467381614489565b929592945050506040919091013590565b6000806040838503121561469757600080fd5b50508035926020909101359150565b600080604083850312156146b957600080fd5b823567ffffffffffffffff808211156146d157600080fd5b6146dd8683870161449e565b93506020915081850135818111156146f457600080fd5b85019050601f8101861361470757600080fd5b80356147156144bf82614465565b81815260059190911b8201830190838101908883111561473457600080fd5b928401925b8284101561475257833582529284019290840190614739565b80955050505050509250929050565b60006020828403121561477357600080fd5b5035919050565b803561ffff8116811461478c57600080fd5b919050565b6000806000606084860312156147a657600080fd5b6147af8461477a565b92506147bd6020850161477a565b91506147cb6040850161477a565b90509250925092565b6000602082840312156147e657600080fd5b81356117d2816143d7565b600080600080600060a0868803121561480957600080fd5b6148128661477a565b94506148206020870161477a565b935061482e6040870161477a565b925061483c6060870161477a565b915061484a6080870161477a565b90509295509295909350565b6000806000806080858703121561486c57600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600081518084526020808501945080840160005b838110156148ec5781516001600160a01b0316875295820195908201906001016148c7565b509495945050505050565b60408152600061490a60408301856148b3565b905082151560208301529392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561496c5781600019048211156149525761495261491b565b8085161561495f57918102915b93841c9390800290614936565b509250929050565b60008261498357506001610eba565b8161499057506000610eba565b81600181146149a657600281146149b0576149cc565b6001915050610eba565b60ff8411156149c1576149c161491b565b50506001821b610eba565b5060208310610133831016604e8410600b84101617156149ef575081810a610eba565b6149f98383614931565b8060001904821115614a0d57614a0d61491b565b029392505050565b60006117d260ff841683614974565b600082614a4157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614a6057614a6061491b565b500290565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082821015614aa357614aa361491b565b500390565b600060018201614aba57614aba61491b565b5060010190565b600060ff821660ff8103614ad757614ad761491b565b60010192915050565b600061ffff808316818516808303821115614afd57614afd61491b565b01949350505050565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060208284031215614b7557600080fd5b81516117d281614489565b600060208284031215614b9257600080fd5b81516117d2816143d7565b60008219821115614bb057614bb061491b565b500190565b82815260406020820152600061154e60408301846148b3565b60006020808385031215614be157600080fd5b825167ffffffffffffffff811115614bf857600080fd5b8301601f81018513614c0957600080fd5b8051614c176144bf82614465565b81815260059190911b82018301908381019087831115614c3657600080fd5b928401925b828410156134fd57835182529284019290840190614c3b565b85815284602082015260a060408201526000614c7360a08301866148b3565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614ca557600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015614cd957614cd961491b565b039392505050565b848152608060208201526000614cfa60808301866148b3565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212200065704ba6b60c835bf512ce8f1b2490376137c22d4dd5b1c458b01e1201917364736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106104095760003560e01c8063590ffdce11610213578063a9059cbb11610123578063eafb5a3c116100ab578063f94aa1b41161007a578063f94aa1b414610cde578063fb78680d14610d25578063fdb78c0e14610d45578063fe575a8714610d64578063feadde9c14610d8457600080fd5b8063eafb5a3c14610c69578063ee5d9c2d14610c89578063eec2744e14610c9e578063f08f43a214610cbe57600080fd5b8063bfc2fc35116100f2578063bfc2fc3514610b43578063cf84770614610b63578063d29eedcc14610bed578063d3f6a15714610c03578063dd62ed3e14610c2357600080fd5b8063a9059cbb14610b09578063b1b08f71146106e8578063b3d514fb146106e8578063b7df8b3614610b2957600080fd5b806379808732116101a6578063893d20e811610175578063893d20e814610a765780638a63bd9b14610a945780638a8c523c14610aa957806395d89b4114610abe5780639a9b567d14610ae957600080fd5b806379808732146109dd57806380c581d1146109fd57806381b46f2e14610a1d57806388f8202014610a3d57600080fd5b806365707565116101e2578063657075651461097d5780636ebd00781461099357806370a08231146109a8578063715018a6146109c857600080fd5b8063590ffdce146108e35780635c24b074146109035780635cce86cd14610923578063612c03211461095c57600080fd5b80632610eaca116103195780633f3cf56c116102a15780634ada218b116102705780634ada218b146108315780634e718e481461084b5780634fb2e45d1461086b5780634fbee1931461088b57806350a8e016146108c457600080fd5b80633f3cf56c146107bb578063452ed4f1146107db57806346ea7ac8146107fb57806349653eb71461081157600080fd5b80632e8fa821116102e85780632e8fa8211461071e578063313ce5671461073457806332cde6641461075b57806333251a0b1461077b57806336fddb041461079b57600080fd5b80632610eaca146106b257806328577751146106d25780632b28fc7a146106e85780632d838119146106fe57600080fd5b80630dcbcf1c1161039c57806314c9874b1161036b57806314c9874b1461061b578063160d0da51461063c57806318160ddd1461065d57806323b872dd14610672578063260039571461069257600080fd5b80630dcbcf1c1461058d5780630fa604e4146105c657806313b4a7f4146105db57806313e46192146105fb57600080fd5b8063069d955f116103d8578063069d955f146104ae57806306fdde03146105035780630758d9241461053d578063095ea7b31461055d57600080fd5b806303fd2a45146104155780630445b66714610448578063044df7261461046c57806305bbedb61461048e57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045457600080fd5b5061045e60185481565b60405190815260200161043f565b34801561047857600080fd5b5061048c6104873660046143e5565b610da4565b005b34801561049a57600080fd5b5061048c6104a9366004614512565b610e48565b3480156104ba57600080fd5b506011546104de9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161043f565b34801561050f57600080fd5b50604080518082019091526008815267424220566572736560c01b60208201525b60405161043f9190614559565b34801561054957600080fd5b5060135461042b906001600160a01b031681565b34801561056957600080fd5b5061057d6105783660046145ae565b610ea9565b604051901515815260200161043f565b34801561059957600080fd5b5061057d6105a83660046145da565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105d257600080fd5b5061045e610ec0565b3480156105e757600080fd5b5061048c6105f63660046145f7565b610ee0565b34801561060757600080fd5b5061048c610616366004614625565b61105e565b34801561062757600080fd5b50601e5461057d90600160b81b900460ff1681565b34801561064857600080fd5b50601e5461057d90600160b01b900460ff1681565b34801561066957600080fd5b5061045e6114c6565b34801561067e57600080fd5b5061057d61068d366004614643565b6114de565b34801561069e57600080fd5b5061048c6106ad366004614684565b611556565b3480156106be57600080fd5b5061048c6106cd3660046146a6565b61162f565b3480156106de57600080fd5b5061045e601b5481565b3480156106f457600080fd5b5061045e6105dc81565b34801561070a57600080fd5b5061045e610719366004614761565b611755565b34801561072a57600080fd5b5061045e60195481565b34801561074057600080fd5b506107496117d9565b60405160ff909116815260200161043f565b34801561076757600080fd5b5061048c610776366004614791565b6117f0565b34801561078757600080fd5b5061048c6107963660046145da565b611931565b3480156107a757600080fd5b5061048c6107b6366004614625565b6119c4565b3480156107c757600080fd5b5061048c6107d6366004614684565b611a19565b3480156107e757600080fd5b5060145461042b906001600160a01b031681565b34801561080757600080fd5b5061045e610bb881565b34801561081d57600080fd5b5061048c61082c3660046147d4565b611b00565b34801561083d57600080fd5b50601e5461057d9060ff1681565b34801561085757600080fd5b5061048c610866366004614761565b611b5c565b34801561087757600080fd5b5061048c6108863660046145da565b611bd3565b34801561089757600080fd5b5061057d6108a63660046145da565b6001600160a01b031660009081526008602052604090205460ff1690565b3480156108d057600080fd5b50601e5461057d90610100900460ff1681565b3480156108ef57600080fd5b5061048c6108fe366004614625565b611cfa565b34801561090f57600080fd5b5061048c61091e3660046145da565b611d4f565b34801561092f57600080fd5b5061057d61093e3660046145da565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561096857600080fd5b50601e5461057d90600160c01b900460ff1681565b34801561098957600080fd5b5061045e60205481565b34801561099f57600080fd5b5061045e611dfc565b3480156109b457600080fd5b5061045e6109c33660046145da565b611e17565b3480156109d457600080fd5b5061048c611e76565b3480156109e957600080fd5b5061048c6109f8366004614684565b611f04565b348015610a0957600080fd5b5061048c610a18366004614625565b611f39565b348015610a2957600080fd5b5061048c610a383660046147d4565b612097565b348015610a4957600080fd5b5061057d610a583660046145da565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a8257600080fd5b506000546001600160a01b031661042b565b348015610aa057600080fd5b5061057d6120f3565b348015610ab557600080fd5b5061048c61213e565b348015610aca57600080fd5b50604080518082019091526002815261212160f11b6020820152610530565b348015610af557600080fd5b5061048c610b043660046147d4565b612343565b348015610b1557600080fd5b5061057d610b243660046145ae565b61238b565b348015610b3557600080fd5b50601a5461057d9060ff1681565b348015610b4f57600080fd5b5061048c610b5e3660046143e5565b6123a2565b348015610b6f57600080fd5b50601254610bb09061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c00161043f565b348015610bf957600080fd5b5061045e601f5481565b348015610c0f57600080fd5b5061048c610c1e3660046145f7565b61242b565b348015610c2f57600080fd5b5061045e610c3e3660046145f7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610c7557600080fd5b5061048c610c843660046145da565b612483565b348015610c9557600080fd5b5061048c6127b7565b348015610caa57600080fd5b5061048c610cb9366004614625565b612876565b348015610cca57600080fd5b5061048c610cd93660046147f1565b6128e1565b348015610cea57600080fd5b50601554601654610d05916001600160a01b03908116911682565b604080516001600160a01b0393841681529290911660208301520161043f565b348015610d3157600080fd5b5061048c610d40366004614856565b612a4a565b348015610d5157600080fd5b5060175461057d90610100900460ff1681565b348015610d7057600080fd5b5061057d610d7f3660046145da565b612b10565b348015610d9057600080fd5b5061048c610d9f366004614625565b612b85565b6000546001600160a01b03163314610dd75760405162461bcd60e51b8152600401610dce90614888565b60405180910390fd5b601e5460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610e2c57600080fd5b505af1158015610e40573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e725760405162461bcd60e51b8152600401610dce90614888565b601e546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610e1290859085906004016148f7565b6000610eb6338484612bda565b5060015b92915050565b6000610ece6012600a614a15565b601d54610edb9190614a24565b905090565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610dce90614888565b600d5460ff16610f1957600080fd5b6001600160a01b0382163014801590610f3b57506001600160a01b0381163014155b610f755760405162461bcd60e51b815260206004820152600b60248201526a253ab9ba103237b713ba1760a91b6044820152606401610dce565b806001600160a01b0316826001600160a01b031603610fe2576001600160a01b03811660009081526006602090815260408083208054600160ff199182168117909255600c9093529220805490911682179055610fd3908290611cfa565b610fde81600161105e565b5050565b6001600160a01b0382811660008181526006602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600c90925280832080548616831790559282529190208054909216811790915561104c908390611cfa565b611057816001611cfa565b610fd38260015b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610dce90614888565b80156111cf576001600160a01b0382166000908152600a602052604090205460ff16156110f75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610dce565b6001600160a01b03821660009081526001602052604090205415611151576001600160a01b03821660009081526001602052604090205461113790611755565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff1916600117905560145490911614610fde57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0384161790555050565b80610fde576001600160a01b0382166000908152600a602052604090205460ff1661123c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610dce565b6014546001600160a01b03908116908316036112b75761125a612cd3565b6001600160a01b03831660009081526002602052604090205461127d9190614a46565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b54600103611359576112c9612cd3565b6001600160a01b0383166000908152600260205260409020546112ec9190614a46565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061133357611333614a65565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60005b600b548110156114c157826001600160a01b0316600b828154811061138357611383614a7b565b6000918252602090912001546001600160a01b0316036114af57600b80546113ad90600190614a91565b815481106113bd576113bd614a7b565b600091825260209091200154600b80546001600160a01b0390921691839081106113e9576113e9614a7b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516815260029091526040812055611428612cd3565b6001600160a01b03841660009081526002602052604090205461144b9190614a46565b6001600160a01b038416600090815260016020908152604080832093909355600a905220805460ff19169055600b80548061148857611488614a65565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806114b981614aa8565b91505061135c565b505050565b6000600f546000036114d757600080fd5b50600f5490565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914611543576001600160a01b03841660009081526005602090815260408083203384529091528120805484929061153d908490614a91565b90915550505b61154e848484612e92565b949350505050565b6000546001600160a01b031633146115805760405162461bcd60e51b8152600401610dce90614888565b6064600f5461158f9190614a24565b8183600f5461159e9190614a46565b6115a89190614a24565b101561160f5760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610dce565b8082600f5461161e9190614a46565b6116289190614a24565b601d555050565b6000546001600160a01b031633146116595760405162461bcd60e51b8152600401610dce90614888565b80518251146116a25760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610dce565b60005b82518160ff1610156114c157818160ff16815181106116c6576116c6614a7b565b60200260200101516116d733611e17565b10156116e257600080fd5b61174233848360ff16815181106116fb576116fb614a7b565b60200260200101516012600a6117119190614a15565b858560ff168151811061172657611726614a7b565b60200260200101516117389190614a46565b6000806001613508565b508061174d81614ac1565b9150506116a5565b60006010548211156117bc5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610dce565b60006117c6612cd3565b90506117d28184614a24565b9392505050565b6000600f546000036117ea57600080fd5b50601290565b6000546001600160a01b0316331461181a5760405162461bcd60e51b8152600401610dce90614888565b6105dc8361ffff161115801561183657506105dc8261ffff1611155b801561184857506105dc8161ffff1611155b6118945760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610dce565b610bb86118a18385614ae0565b61ffff1611156118f35760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610dce565b6011805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6000546001600160a01b0316331461195b5760405162461bcd60e51b8152600401610dce90614888565b601e546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146119ee5760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a435760405162461bcd60e51b8152600401610dce90614888565b6103e8600f54611a539190614a24565b8183600f54611a629190614a46565b611a6c9190614a24565b1015611ae05760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610dce565b8082600f54611aef9190614a46565b611af99190614a24565b601c555050565b6000546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610dce90614888565b8015611b3e57601e805460ff60b81b191690555b601e8054911515600160c01b0260ff60c01b19909216919091179055565b6000546001600160a01b03163314611b865760405162461bcd60e51b8152600401610dce90614888565b60c8811115611bce5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba1030b137bb329019129760611b6044820152606401610dce565b601b55565b6000546001600160a01b03163314611bfd5760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b038116611c235760405162461bcd60e51b8152600401610dce90614b06565b61deac196001600160a01b03821601611c4e5760405162461bcd60e51b8152600401610dce90614b06565b60008054611c67916001600160a01b0390911690611cfa565b611c72816001611cfa565b60008054611c88906001600160a01b0316611e17565b1115611caa57600054611ca8906001600160a01b03168261173882611e17565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611d245760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d795760405162461bcd60e51b8152600401610dce90614888565b601e5460ff1615611d8957600080fd5b306001600160a01b03821603611dd25760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610dce565b601e80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000611e0a6012600a614a15565b601c54610edb9190614a24565b6001600160a01b0381166000908152600a602052604081205460ff1615611e5457506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610eba90611755565b6000546001600160a01b03163314611ea05760405162461bcd60e51b8152600401610dce90614888565b60008054611eb9916001600160a01b0390911690611cfa565b600080546001600160a01b0319811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611f2e5760405162461bcd60e51b8152600401610dce90614888565b601f91909155602055565b6000546001600160a01b03163314611f635760405162461bcd60e51b8152600401610dce90614888565b801515600003611fdb576001600160a01b03828116600081815260036020526040808220805460ff19169055601e5490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610e2c57600080fd5b60045415612035576203f48060045442611ff59190614a91565b116120355760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b6044820152606401610dce565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601e5492516380c581d160e01b8152908101939093526024830152620100009004909116906380c581d190604401610e12565b6000546001600160a01b031633146120c15760405162461bcd60e51b8152600401610dce90614888565b80156120d557601e805460ff60c01b191690555b601e8054911515600160b81b0260ff60b81b19909216919091179055565b600080546001600160a01b0316331461211e5760405162461bcd60e51b8152600401610dce90614888565b6013546121389030906001600160a01b0316600019612bda565b50600190565b6000546001600160a01b031633146121685760405162461bcd60e51b8152600401610dce90614888565b601e5460ff16156121bb5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610dce565b601e54610100900460ff166122125760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610dce565b601e546201000090046001600160a01b031661224257601e805462010000600160b01b0319163062010000021790555b601e54601454604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b1580156122b457600080fd5b505af19250505080156122c5575060015b50601e805460ff19908116600117909155600d80549091169055601454612710906122f8906001600160a01b0316611e17565b61230390600a614a46565b61230d9190614a24565b60185560145461271090612329906001600160a01b0316611e17565b61233490601e614a46565b61233e9190614a24565b601955565b6000546001600160a01b0316331461236d5760405162461bcd60e51b8152600401610dce90614888565b601e8054911515600160b01b0260ff60b01b19909216919091179055565b6000612398338484612e92565b5060019392505050565b6000546001600160a01b031633146123cc5760405162461bcd60e51b8152600401610dce90614888565b6017805461ff00191661010084151590810291909117909155601a805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b031633146124555760405162461bcd60e51b8152600401610dce90614888565b601580546001600160a01b039384166001600160a01b03199182161790915560168054929093169116179055565b6000546001600160a01b031633146124ad5760405162461bcd60e51b8152600401610dce90614888565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125169190614b63565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125879190614b63565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156125d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f69190614b63565b90506001600160a01b03811661276f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126689190614b63565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d99190614b63565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190614b63565b601480546001600160a01b0319166001600160a01b039290921691909117905561278b565b601480546001600160a01b0319166001600160a01b0383161790555b601380546001600160a01b0319166001600160a01b0384169081179091556114c1903090600019612bda565b6000546001600160a01b031633146127e15760405162461bcd60e51b8152600401610dce90614888565b601e54610100900460ff16156128395760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610dce565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612873573d6000803e3d6000fd5b50565b6000546001600160a01b031633146128a05760405162461bcd60e51b8152600401610dce90614888565b601e546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610e12565b6000546001600160a01b0316331461290b5760405162461bcd60e51b8152600401610dce90614888565b6012805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff000000001916600160201b8683160267ffff000000000000191617600160301b858316021769ffff00000000000000001916600160401b91841691909102179055808361297d8685614ae0565b6129879190614ae0565b6129919190614ae0565b6012805461ffff60501b1916600160501b61ffff938416021790556011546000916129c59162010000810482169116614ae0565b60125461ffff918216925082916129e89180821691600160501b90910416614ae0565b61ffff161115610e405760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610dce565b6000546001600160a01b03163314612a745760405162461bcd60e51b8152600401610dce90614888565b8284600f54612a839190614a46565b612a8d9190614a24565b601855600f548190612aa0908490614a46565b612aaa9190614a24565b60198190556018541115612b0a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610dce565b50505050565b601e5460405163fe575a8760e01b81526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba9190614b80565b6000546001600160a01b03163314612baf5760405162461bcd60e51b8152600401610dce90614888565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b038316612c265760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610dce565b6001600160a01b038216612c725760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610dce565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054600f546014546001600160a01b03166000908152600a6020526040812054909291908290829060ff1615612d6d576014546001600160a01b031660009081526001602090815260408083205460029092529091205483821180612d3857508281115b15612d5257612d478587614a24565b965050505050505090565b612d5c8285614a91565b9350612d688184614a91565b925050505b600b5415612e645760005b600b5460ff82161015612e6257600060016000600b8460ff1681548110612da157612da1614a7b565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600b805491935060029183919060ff8716908110612de657612de6614a7b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054905084821180612e1a57508381115b15612e3557612e298688614a24565b97505050505050505090565b612e3f8286614a91565b9450612e4b8185614a91565b935050508080612e5a90614ac1565b915050612d78565b505b612e6e8385614a24565b821015612e8857612e7f8385614a24565b94505050505090565b612e7f8183614a24565b60006001600160a01b038416612ef85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610dce565b6001600160a01b038316612f5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610dce565b60008211612fbc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610dce565b6001600160a01b0384166000908152600360205260408120548190819060ff1615612fea5760019250613018565b6001600160a01b03861660009081526003602052604090205460ff16156130145760019150613018565b5060015b6130228787613806565b156131ea57601e5460ff166130795760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610dce565b82806130825750815b15613131576001600160a01b03871660009081526009602052604090205460ff161580156130c957506001600160a01b03861660009081526009602052604090205460ff16155b1561313157601c548511156131315760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610dce565b6013546001600160a01b0387811691161480159061314d575081155b156131ea576001600160a01b03861660009081526009602052604090205460ff166131ea57601d548561317f88611e17565b6131899190614b9d565b11156131ea5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610dce565b81156134ef5760175460ff166132c457601754610100900460ff16801561322a57506001600160a01b0386166000908152600c602052604090205460ff16155b801561324f57506001600160a01b0387166000908152600c602052604090205460ff16155b156132c457600061325f30611e17565b905060185481106132c257601954601a5460ff16156132ac57601b546014546127109190613295906001600160a01b0316611e17565b61329f9190614a46565b6132a99190614a24565b90505b8082106132b7578091505b6132c0826138da565b505b505b601e54600160b01b900460ff1680156132e657506001600160a01b0387163014155b156134ef57604080516002808252606082018352600092602083019080368337019050509050308160008151811061332057613320614a7b565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339d9190614b63565b816001815181106133b0576133b0614a7b565b6001600160a01b03928316602091820292909201015260135460405163d06ca61f60e01b8152600092919091169063d06ca61f906133f4908a908690600401614bb5565b600060405180830381865afa158015613411573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134399190810190614bce565b60018151811061344b5761344b614a7b565b602002602001015190506000602054601f54836134689190614a46565b6134729190614a24565b601e54909150600160b81b900460ff16801561348d57504781105b1561349b5761349b81613dac565b601e54600160c01b900460ff16156134eb576134b8826002614a46565b4710156134d857601e805461ffff60b81b1916600160b81b1790556134eb565b6134eb6134e6836002614a46565b613dac565b5050505b6134fd878787868686613508565b979650505050505050565b601e54600090610100900460ff166135ed576135248787613eff565b601e54610100900460ff1615801561354157506135418787613806565b801561356657506001600160a01b03871660009081526007602052604090205460ff16155b801561358b57506001600160a01b03861660009081526007602052604090205460ff16155b8015613595575081155b156135ed5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610dce565b6001600160a01b03871660009081526008602052604090205460019060ff168061362f57506001600160a01b03871660009081526008602052604090205460ff165b15613638575060005b6000613649898989858a8a8a61403f565b60808101516001600160a01b038b16600090815260016020526040812080549394509192613678908490614a91565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906136aa908490614b9d565b90915550506001600160a01b0389166000908152600a602052604090205460ff161561370e576001600160a01b0389166000908152600260205260409020546136f4908890614a91565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff161561376e5780516001600160a01b0389166000908152600260205260409020546137549190614b9d565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613785575060008160200151115b156137a6578060a00151601060008282546137a09190614a91565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516137ef91815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b0384811691161480159061383357506000546001600160a01b03838116911614155b801561384a57506000546001600160a01b03163214155b801561386f57506001600160a01b03821660009081526006602052604090205460ff16155b801561389457506001600160a01b03831660009081526006602052604090205460ff16155b80156138ab57506001600160a01b03821661dead14155b80156138bf57506001600160a01b03821615155b80156117d257506001600160a01b0383163014159392505050565b6017805460ff191660011790556040805160c08101825260125461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a082018190526000036139535750613d9f565b3060009081526005602090815260408083206013546001600160a01b03168452909152902054600019146139ac573060009081526005602090815260408083206013546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836080015161ffff16856139cd9190614a46565b6139d79190614a24565b6139e19190614a24565b905060006139ef8285614a91565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613a2957613a29614a7b565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa69190614b63565b81600181518110613ab957613ab9614a7b565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790613aff908590600090869030904290600401614c54565b600060405180830381600087803b158015613b1957600080fd5b505af1158015613b2d573d6000803e3d6000fd5b5047925060009150849050613b428684614a46565b613b4c9190614a24565b90508415613c245760135460405163f305d71960e01b815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613bc2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613be79190614c90565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b613c2e8183614a91565b915085608001518660a001818151613c469190614cbe565b61ffff90811690915260a0880151602089015160009350839291821691613c6e911686614a46565b613c789190614a24565b905060008860a0015161ffff16896040015161ffff1686613c999190614a46565b613ca39190614a24565b90506000613cb18284614b9d565b613cbb9087614a91565b60208b015190915061ffff1615613d29576016546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114613d1e576040519150601f19603f3d011682016040523d82523d6000602084013e613d23565b606091505b50909450505b60608a015161ffff1615613d94576015546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114613d89576040519150601f19603f3d011682016040523d82523d6000602084013e613d8e565b606091505b50909450505b505050505050505050505b506017805460ff19169055565b6040805160028082526060820183526000926020830190803683375050601354604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190614b63565b81600081518110613e4d57613e4d614a7b565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110613e8157613e81614a7b565b6001600160a01b03928316602091820292909201015260135460405163b6f9de9560e01b815291169063b6f9de95908490613ec990600090869061dead904290600401614ce1565b6000604051808303818588803b158015613ee257600080fd5b505af1158015613ef6573d6000803e3d6000fd5b50505050505050565b601e54610100900460ff1615613f635760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610dce565b613f6d8282613806565b158015613f8757506014546001600160a01b038281169116145b15610fde576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601e805461ff001916610100179081905562010000900416613fff57601e805462010000600160b01b0319163062010000021790555b6017805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161241f565b61407f6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6140bf6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c08101825260125461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a0820152614124612cd3565b60c083018190526141359089614a46565b60808301526141448a8a613806565b156141de57601e5460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156141c7575060408051601f3d908101601f191682019092526141c491810190614b80565b60015b6141d057600080fd5b9050806141dc57600080fd5b505b86156142b857600086156141f9575060115461ffff16614222565b8515614212575060115462010000900461ffff16614222565b50601154600160201b900461ffff165b6000612710614231838c614a46565b61423b9190614a24565b9050600083600001518460a001516142539190614ae0565b845161ffff9182169250829161426a911684614a46565b6142749190614a24565b602086018190526142859083614a91565b6040860152614294828c614a91565b855260c085015160208601516142aa9190614a46565b60a0860152506142bc915050565b8782525b604082015115614393578160c0015182604001516142da9190614a46565b30600090815260016020526040812080549091906142f9908490614b9d565b9091555050306000908152600a602052604090205460ff161561434157604080830151306000908152600260205291822080549192909161433b908490614b9d565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040015160405161438a91815260200190565b60405180910390a35b8160c0015182604001516143a79190614a46565b8260a001516143b69190614b9d565b82608001516143c59190614a91565b60608301525098975050505050505050565b801515811461287357600080fd5b600080604083850312156143f857600080fd5b8235614403816143d7565b91506020830135614413816143d7565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561445d5761445d61441e565b604052919050565b600067ffffffffffffffff82111561447f5761447f61441e565b5060051b60200190565b6001600160a01b038116811461287357600080fd5b600082601f8301126144af57600080fd5b813560206144c46144bf83614465565b614434565b82815260059290921b840181019181810190868411156144e357600080fd5b8286015b848110156145075780356144fa81614489565b83529183019183016144e7565b509695505050505050565b6000806040838503121561452557600080fd5b823567ffffffffffffffff81111561453c57600080fd5b6145488582860161449e565b9250506020830135614413816143d7565b600060208083528351808285015260005b818110156145865785810183015185820160400152820161456a565b81811115614598576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156145c157600080fd5b82356145cc81614489565b946020939093013593505050565b6000602082840312156145ec57600080fd5b81356117d281614489565b6000806040838503121561460a57600080fd5b823561461581614489565b9150602083013561441381614489565b6000806040838503121561463857600080fd5b823561440381614489565b60008060006060848603121561465857600080fd5b833561466381614489565b9250602084013561467381614489565b929592945050506040919091013590565b6000806040838503121561469757600080fd5b50508035926020909101359150565b600080604083850312156146b957600080fd5b823567ffffffffffffffff808211156146d157600080fd5b6146dd8683870161449e565b93506020915081850135818111156146f457600080fd5b85019050601f8101861361470757600080fd5b80356147156144bf82614465565b81815260059190911b8201830190838101908883111561473457600080fd5b928401925b8284101561475257833582529284019290840190614739565b80955050505050509250929050565b60006020828403121561477357600080fd5b5035919050565b803561ffff8116811461478c57600080fd5b919050565b6000806000606084860312156147a657600080fd5b6147af8461477a565b92506147bd6020850161477a565b91506147cb6040850161477a565b90509250925092565b6000602082840312156147e657600080fd5b81356117d2816143d7565b600080600080600060a0868803121561480957600080fd5b6148128661477a565b94506148206020870161477a565b935061482e6040870161477a565b925061483c6060870161477a565b915061484a6080870161477a565b90509295509295909350565b6000806000806080858703121561486c57600080fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600081518084526020808501945080840160005b838110156148ec5781516001600160a01b0316875295820195908201906001016148c7565b509495945050505050565b60408152600061490a60408301856148b3565b905082151560208301529392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561496c5781600019048211156149525761495261491b565b8085161561495f57918102915b93841c9390800290614936565b509250929050565b60008261498357506001610eba565b8161499057506000610eba565b81600181146149a657600281146149b0576149cc565b6001915050610eba565b60ff8411156149c1576149c161491b565b50506001821b610eba565b5060208310610133831016604e8410600b84101617156149ef575081810a610eba565b6149f98383614931565b8060001904821115614a0d57614a0d61491b565b029392505050565b60006117d260ff841683614974565b600082614a4157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614a6057614a6061491b565b500290565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600082821015614aa357614aa361491b565b500390565b600060018201614aba57614aba61491b565b5060010190565b600060ff821660ff8103614ad757614ad761491b565b60010192915050565b600061ffff808316818516808303821115614afd57614afd61491b565b01949350505050565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600060208284031215614b7557600080fd5b81516117d281614489565b600060208284031215614b9257600080fd5b81516117d2816143d7565b60008219821115614bb057614bb061491b565b500190565b82815260406020820152600061154e60408301846148b3565b60006020808385031215614be157600080fd5b825167ffffffffffffffff811115614bf857600080fd5b8301601f81018513614c0957600080fd5b8051614c176144bf82614465565b81815260059190911b82018301908381019087831115614c3657600080fd5b928401925b828410156134fd57835182529284019290840190614c3b565b85815284602082015260a060408201526000614c7360a08301866148b3565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614ca557600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015614cd957614cd961491b565b039392505050565b848152608060208201526000614cfa60808301866148b3565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212200065704ba6b60c835bf512ce8f1b2490376137c22d4dd5b1c458b01e1201917364736f6c634300080e0033

Deployed Bytecode Sourcemap

4227:29890:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6390:73;;;;;;;;;;;;6421:42;6390:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;6390:73:0;;;;;;;;6854:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;6854:28:0;222:177:1;15834:151:0;;;;;;;;;;-1:-1:-1;15834:151:0;;;;;:::i;:::-;;:::i;:::-;;15405:172;;;;;;;;;;-1:-1:-1;15405:172:0;;;;;:::i;:::-;;:::i;5727:115::-;;;;;;;;;;-1:-1:-1;5727:115:0;;;;;;;;;;;;;;;-1:-1:-1;;;5727:115:0;;;;;;;;;;3074:6:1;3107:15;;;3089:34;;3159:15;;;3154:2;3139:18;;3132:43;3211:15;;3191:18;;;3184:43;;;;3052:2;3037:18;5727:115:0;2868:365:1;11430:80:0;;;;;;;;;;-1:-1:-1;11502:5:0;;;;;;;;;;;;-1:-1:-1;;;11502:5:0;;;;11430:80;;;;;;;:::i;6329:26::-;;;;;;;;;;-1:-1:-1;6329:26:0;;;;-1:-1:-1;;;;;6329:26:0;;;12121:159;;;;;;;;;;-1:-1:-1;12121:159:0;;;;;:::i;:::-;;:::i;:::-;;;4550:14:1;;4543:22;4525:41;;4513:2;4498:18;12121:159:0;4385:187:1;14658:140:0;;;;;;;;;;-1:-1:-1;14658:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14756:34:0;14732:4;14756:34;;;:25;:34;;;;;;;;;14658:140;17964:112;;;;;;;;;;;;;:::i;19630:866::-;;;;;;;;;;-1:-1:-1;19630:866:0;;;;;:::i;:::-;;:::i;28058:1519::-;;;;;;;;;;-1:-1:-1;28058:1519:0;;;;;:::i;:::-;;:::i;7258:30::-;;;;;;;;;;-1:-1:-1;7258:30:0;;;;-1:-1:-1;;;7258:30:0;;;;;;7225:26;;;;;;;;;;-1:-1:-1;7225:26:0;;;;-1:-1:-1;;;7225:26:0;;;;;;11101:115;;;;;;;;;;;;;:::i;12787:306::-;;;;;;;;;;-1:-1:-1;12787:306:0;;;;;:::i;:::-;;:::i;17578:264::-;;;;;;;;;;-1:-1:-1;17578:264:0;;;;;:::i;:::-;;:::i;27511:411::-;;;;;;;;;;-1:-1:-1;27511:411:0;;;;;:::i;:::-;;:::i;6962:28::-;;;;;;;;;;;;;;;;6073:42;;;;;;;;;;;;6111:4;6073:42;;29585:250;;;;;;;;;;-1:-1:-1;29585:250:0;;;;;:::i;:::-;;:::i;6889:25::-;;;;;;;;;;;;;;;;11222:112;;;;;;;;;;;;;:::i;:::-;;;7823:4:1;7811:17;;;7793:36;;7781:2;7766:18;11222:112:0;7651:184:1;15993:488:0;;;;;;;;;;-1:-1:-1;15993:488:0;;;;;:::i;:::-;;:::i;15718:108::-;;;;;;;;;;-1:-1:-1;15718:108:0;;;;;:::i;:::-;;:::i;14806:140::-;;;;;;;;;;-1:-1:-1;14806:140:0;;;;;:::i;:::-;;:::i;17301:269::-;;;;;;;;;;-1:-1:-1;17301:269:0;;;;;:::i;:::-;;:::i;6362:21::-;;;;;;;;;;-1:-1:-1;6362:21:0;;;;-1:-1:-1;;;;;6362:21:0;;;6226:46;;;;;;;;;;;;6268:4;6226:46;;19070:181;;;;;;;;;;-1:-1:-1;19070:181:0;;;;;:::i;:::-;;:::i;7121:26::-;;;;;;;;;;-1:-1:-1;7121:26:0;;;;;;;;18465:215;;;;;;;;;;-1:-1:-1;18465:215:0;;;;;:::i;:::-;;:::i;9861:654::-;;;;;;;;;;-1:-1:-1;9861:654:0;;;;;:::i;:::-;;:::i;14523:127::-;;;;;;;;;;-1:-1:-1;14523:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14614:28:0;14590:4;14614:28;;;:19;:28;;;;;;;;;14523:127;7154:36;;;;;;;;;;-1:-1:-1;7154:36:0;;;;;;;;;;;14954:134;;;;;;;;;;-1:-1:-1;14954:134:0;;;;;:::i;:::-;;:::i;14157:218::-;;;;;;;;;;-1:-1:-1;14157:218:0;;;;;:::i;:::-;;:::i;14383:132::-;;;;;;;;;;-1:-1:-1;14383:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14477:30:0;14453:4;14477:30;;;:21;:30;;;;;;;;;14383:132;7295:27;;;;;;;;;;-1:-1:-1;7295:27:0;;;;-1:-1:-1;;;7295:27:0;;;;;;7374:39;;;;;;;;;;;;;;;;17850:106;;;;;;;;;;;;;:::i;11742:198::-;;;;;;;;;;-1:-1:-1;11742:198:0;;;;;:::i;:::-;;:::i;10523:225::-;;;;;;;;;;;;;:::i;19451:171::-;;;;;;;;;;-1:-1:-1;19451:171:0;;;;;:::i;:::-;;:::i;13649:500::-;;;;;;;;;;-1:-1:-1;13649:500:0;;;;;:::i;:::-;;:::i;19259:184::-;;;;;;;;;;-1:-1:-1;19259:184:0;;;;;:::i;:::-;;:::i;27930:120::-;;;;;;;;;;-1:-1:-1;27930:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28022:20:0;27998:4;28022:20;;;:11;:20;;;;;;;;;27930:120;11516:79;;;;;;;;;;-1:-1:-1;11568:7:0;11586:6;-1:-1:-1;;;;;11586:6:0;11516:79;;12606:173;;;;;;;;;;;;;:::i;26727:586::-;;;;;;;;;;;;;:::i;11340:84::-;;;;;;;;;;-1:-1:-1;11414:7:0;;;;;;;;;;;;-1:-1:-1;;;11414:7:0;;;;11340:84;;18959:103;;;;;;;;;;-1:-1:-1;18959:103:0;;;;;:::i;:::-;;:::i;11948:165::-;;;;;;;;;;-1:-1:-1;11948:165:0;;;;;:::i;:::-;;:::i;6921:34::-;;;;;;;;;;-1:-1:-1;6921:34:0;;;;;;;;18688:263;;;;;;;;;;-1:-1:-1;18688:263:0;;;;;:::i;:::-;;:::i;5851:213::-;;;;;;;;;;-1:-1:-1;5851:213:0;;;;;;;;;;;;;;;-1:-1:-1;;;5851:213:0;;;;;-1:-1:-1;;;5851:213:0;;;;;-1:-1:-1;;;5851:213:0;;;;;-1:-1:-1;;;5851:213:0;;;;;;;;;8868:6:1;8901:15;;;8883:34;;8953:15;;;8948:2;8933:18;;8926:43;9005:15;;;8985:18;;;8978:43;;;;9057:15;;;9052:2;9037:18;;9030:43;9110:15;;9104:3;9089:19;;9082:44;9163:15;;;9157:3;9142:19;;9135:44;8845:3;8830:19;5851:213:0;8583:602:1;7329:38:0;;;;;;;;;;;;;;;;16489:204;;;;;;;;;;-1:-1:-1;16489:204:0;;;;;:::i;:::-;;:::i;11601:133::-;;;;;;;;;;-1:-1:-1;11601:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11703:19:0;;;11685:7;11703:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11601:133;13101:540;;;;;;;;;;-1:-1:-1;13101:540:0;;;;;:::i;:::-;;:::i;27321:182::-;;;;;;;;;;;;;:::i;15252:145::-;;;;;;;;;;-1:-1:-1;15252:145:0;;;;;:::i;:::-;;:::i;16701:592::-;;;;;;;;;;-1:-1:-1;16701:592:0;;;;;:::i;:::-;;:::i;6577:200::-;;;;;;;;;;-1:-1:-1;6577:200:0;;;;;;-1:-1:-1;;;;;6577:200:0;;;;;;;;;;;-1:-1:-1;;;;;10340:15:1;;;10322:34;;10392:15;;;;10387:2;10372:18;;10365:43;10257:18;6577:200:0;10078:336:1;18084:373:0;;;;;;;;;;-1:-1:-1;18084:373:0;;;;;:::i;:::-;;:::i;6808:39::-;;;;;;;;;;-1:-1:-1;6808:39:0;;;;;;;;;;;15585:125;;;;;;;;;;-1:-1:-1;15585:125:0;;;;;:::i;:::-;;:::i;15096:148::-;;;;;;;;;;-1:-1:-1;15096:148:0;;;;;:::i;:::-;;:::i;15834:151::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;;;;;;;;;15929:9:::1;::::0;:48:::1;::::0;-1:-1:-1;;;15929:48:0;;11342:14:1;;11335:22;15929:48:0::1;::::0;::::1;11317:41:1::0;11401:14;;11394:22;11374:18;;;11367:50;15929:9:0;;;::::1;-1:-1:-1::0;;;;;15929:9:0::1;::::0;:24:::1;::::0;11290:18:1;;15929:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15834:151:::0;;:::o;15405:172::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;15513:9:::1;::::0;:56:::1;::::0;-1:-1:-1;;;15513:56:0;;:9;;;::::1;-1:-1:-1::0;;;;;15513:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;15551:8;;15561:7;;15513:56:::1;;;:::i;12121:159::-:0;12196:4;12213:37;12222:10;12234:7;12243:6;12213:8;:37::i;:::-;-1:-1:-1;12268:4:0;12121:159;;;;;:::o;17964:112::-;18009:7;18054:13;5246:2;18054;:13;:::i;:::-;18036:14;;:32;;;;:::i;:::-;18029:39;;17964:112;:::o;19630:866::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;19734:23:::1;::::0;::::1;;19726:32;;;::::0;::::1;;-1:-1:-1::0;;;;;19777:23:0;::::1;19795:4;19777:23;::::0;::::1;::::0;:51:::1;;-1:-1:-1::0;;;;;;19804:24:0;::::1;19823:4;19804:24;;19777:51;19769:75;;;::::0;-1:-1:-1;;;19769:75:0;;14180:2:1;19769:75:0::1;::::0;::::1;14162:21:1::0;14219:2;14199:18;;;14192:30;-1:-1:-1;;;14238:18:1;;;14231:41;14289:18;;19769:75:0::1;13978:335:1::0;19769:75:0::1;19869:7;-1:-1:-1::0;;;;;19859:17:0::1;:6;-1:-1:-1::0;;;;;19859:17:0::1;::::0;19855:634:::1;;-1:-1:-1::0;;;;;19893:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;19922:4:::1;-1:-1:-1::0;;19893:33:0;;::::1;::::0;::::1;::::0;;;19941:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;19988:34:::1;::::0;19893:26;;19988:19:::1;:34::i;:::-;20037:36;20059:7;20068:4;20037:21;:36::i;:::-;19630:866:::0;;:::o;19855:634::-:1;-1:-1:-1::0;;;;;20106:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;20134:4:::1;-1:-1:-1::0;;20106:32:0;;::::1;::::0;::::1;::::0;;;20153:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;20201:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;20247:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;20294:33:::1;::::0;20106:25;;20294:19:::1;:33::i;:::-;20342:34;20362:7;20371:4;20342:19;:34::i;:::-;20391:35;20413:6;20421:4;28058:1519:::0;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;28152:7:::1;28148:1422;;;-1:-1:-1::0;;;;;28185:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28184:21;28176:62;;;::::0;-1:-1:-1;;;28176:62:0;;14520:2:1;28176:62:0::1;::::0;::::1;14502:21:1::0;14559:2;14539:18;;;14532:30;14598;14578:18;;;14571:58;14646:18;;28176:62:0::1;14318:352:1::0;28176:62:0::1;-1:-1:-1::0;;;;;28256:16:0;::::1;28275:1;28256:16:::0;;;:7:::1;:16;::::0;;;;;:20;28253:116:::1;;-1:-1:-1::0;;;;;28336:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28316:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28297:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28253:116:::1;-1:-1:-1::0;;;;;28383:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28383:27:0::1;28406:4;28383:27;::::0;;28439:6:::1;::::0;;;::::1;28428:17;28425:79;;28465:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28465:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;28465:23:0::1;-1:-1:-1::0;;;;;28465:23:0;::::1;;::::0;;19630:866;;:::o;28148:1422::-:1;28526:7;28521:1049;;-1:-1:-1::0;;;;;28558:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28550:61;;;::::0;-1:-1:-1;;;28550:61:0;;14877:2:1;28550:61:0::1;::::0;::::1;14859:21:1::0;14916:2;14896:18;;;14889:30;14955;14935:18;;;14928:58;15003:18;;28550:61:0::1;14675:352:1::0;28550:61:0::1;28641:6;::::0;-1:-1:-1;;;;;28641:6:0;;::::1;28630:17:::0;;::::1;::::0;28626:933:::1;;28706:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;28687:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;28668:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;28735:7:::1;:16:::0;;;;;:20;;;28774:11:::1;:20:::0;;;:28;;-1:-1:-1;;28774:28:0::1;::::0;;19630:866;;:::o;28626:933::-:1;28827:9;:16:::0;28847:1:::1;28827:21:::0;28824:735:::1;;28907:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;28888:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;28869:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;28936:7:::1;:16:::0;;;;;:20;;;28975:11:::1;:20:::0;;;:28;;-1:-1:-1;;28975:28:0::1;::::0;;29022:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29022:15:0;;;;;-1:-1:-1;;;;;;29022:15:0::1;::::0;;;;;19630:866;;:::o;28824:735::-:1;29083:9;29078:466;29102:9;:16:::0;29098:20;::::1;29078:466;;;29168:7;-1:-1:-1::0;;;;;29152:23:0::1;:9;29162:1;29152:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29152:12:0::1;:23:::0;29148:377:::1;;29219:9;29229:16:::0;;:20:::1;::::0;29248:1:::1;::::0;29229:20:::1;:::i;:::-;29219:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29204:9:::1;:12:::0;;-1:-1:-1;;;;;29219:31:0;;::::1;::::0;29214:1;;29204:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29204:46:0::1;-1:-1:-1::0;;;;;29204:46:0;;::::1;;::::0;;29277:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;29362:10:::1;:8;:10::i;:::-;-1:-1:-1::0;;;;;29343:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;29324:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;29399:11:::1;:20:::0;;;:28;;-1:-1:-1;;29399:28:0::1;::::0;;29454:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29454:15:0;;;;;-1:-1:-1;;;;;;29454:15:0::1;::::0;;;;;29078:466:::1;28058:1519:::0;;:::o;29148:377::-:1;29120:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29078:466;;;;28058:1519:::0;;:::o;11101:115::-;11156:7;11171;;11182:1;11171:12;11167:31;;11187:8;;;11167:31;-1:-1:-1;11206:7:0;;;11101:115::o;12787:306::-;-1:-1:-1;;;;;12908:19:0;;12887:4;12908:19;;;:11;:19;;;;;;;;12928:10;12908:31;;;;;;;;-1:-1:-1;;12908:52:0;12904:126;;-1:-1:-1;;;;;12977:19:0;;;;;;:11;:19;;;;;;;;12997:10;12977:31;;;;;;;:41;;13012:6;;12977:19;:41;;13012:6;;12977:41;:::i;:::-;;;;-1:-1:-1;;12904:126:0;13049:36;13059:6;13067:9;13078:6;13049:9;:36::i;:::-;13042:43;12787:306;-1:-1:-1;;;;12787:306:0:o;17578:264::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;17720:3:::1;17710:7;;:13;;;;:::i;:::-;17698:7;17687;17677;;:17;;;;:::i;:::-;17676:29;;;;:::i;:::-;:48;;17668:109;;;::::0;-1:-1:-1;;;17668:109:0;;15941:2:1;17668:109:0::1;::::0;::::1;15923:21:1::0;15980:2;15960:18;;;15953:30;16019:34;15999:18;;;15992:62;-1:-1:-1;;;16070:18:1;;;16063:46;16126:19;;17668:109:0::1;15739:412:1::0;17668:109:0::1;17827:7;17816;17806;;:17;;;;:::i;:::-;17805:29;;;;:::i;:::-;17788:14;:46:::0;-1:-1:-1;;17578:264:0:o;27511:411::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;27646:7:::1;:14;27627:8;:15;:33;27619:67;;;::::0;-1:-1:-1;;;27619:67:0;;16358:2:1;27619:67:0::1;::::0;::::1;16340:21:1::0;16397:2;16377:18;;;16370:30;-1:-1:-1;;;16416:18:1;;;16409:51;16477:18;;27619:67:0::1;16156:345:1::0;27619:67:0::1;27702:7;27697:218;27719:8;:15;27715:1;:19;;;27697:218;;;27789:7;27797:1;27789:10;;;;;;;;;;:::i;:::-;;;;;;;27764:21;27774:10;27764:9;:21::i;:::-;:35;;27756:44;;;::::0;::::1;;27815:88;27833:10;27845:8;27854:1;27845:11;;;;;;;;;;:::i;:::-;;;;;;;5246:2;27869;:13;;;;:::i;:::-;27858:7;27866:1;27858:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;27884:5;27891::::0;27898:4:::1;27815:17;:88::i;:::-;-1:-1:-1::0;27736:3:0;::::1;::::0;::::1;:::i;:::-;;;;27697:218;;29585:250:::0;29651:7;29690;;29679;:18;;29671:73;;;;-1:-1:-1;;;29671:73:0;;16888:2:1;29671:73:0;;;16870:21:1;16927:2;16907:18;;;16900:30;16966:34;16946:18;;;16939:62;-1:-1:-1;;;17017:18:1;;;17010:40;17067:19;;29671:73:0;16686:406:1;29671:73:0;29755:19;29778:10;:8;:10::i;:::-;29755:33;-1:-1:-1;29806:21:0;29755:33;29806:7;:21;:::i;:::-;29799:28;29585:250;-1:-1:-1;;;29585:250:0:o;11222:112::-;11274:5;11287:7;;11298:1;11287:12;11283:31;;11303:8;;;11283:31;-1:-1:-1;5246:2:0;;11222:112::o;15993:488::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;6111:4:::1;16100:6;:21;;;;:65;;;;;6161:4;16142:7;:23;;;;16100:65;:117;;;;;6215:4;16186:11;:31;;;;16100:117;16092:170;;;::::0;-1:-1:-1;;;16092:170:0;;17299:2:1;16092:170:0::1;::::0;::::1;17281:21:1::0;17338:2;17318:18;;;17311:30;17377:25;17357:18;;;17350:53;17420:18;;16092:170:0::1;17097:347:1::0;16092:170:0::1;6268:4;16281:16;16290:7:::0;16281:6;:16:::1;:::i;:::-;:35;;;;16273:80;;;::::0;-1:-1:-1;;;16273:80:0;;17880:2:1;16273:80:0::1;::::0;::::1;17862:21:1::0;;;17899:18;;;17892:30;17958:34;17938:18;;;17931:62;18010:18;;16273:80:0::1;17678:356:1::0;16273:80:0::1;16364:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;16400:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;16438:35:0::1;-1:-1:-1::0;;;16438:35:0;;;::::1;;::::0;;;::::1;::::0;;15993:488::o;15718:108::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;15787:9:::1;::::0;:31:::1;::::0;-1:-1:-1;;;15787:31:0;;-1:-1:-1;;;;;178:32:1;;;15787:31:0::1;::::0;::::1;160:51:1::0;15787:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;15787:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15718:108:::0;:::o;14806:140::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14898:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14898:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14806:140::o;17301:269::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;17442:4:::1;17432:7;;:14;;;;:::i;:::-;17420:7;17409;17399;;:17;;;;:::i;:::-;17398:29;;;;:::i;:::-;:49;;17390:117;;;::::0;-1:-1:-1;;;17390:117:0;;18241:2:1;17390:117:0::1;::::0;::::1;18223:21:1::0;18280:2;18260:18;;;18253:30;18319:34;18299:18;;;18292:62;18390:25;18370:18;;;18363:53;18433:19;;17390:117:0::1;18039:419:1::0;17390:117:0::1;17555:7;17544;17534;;:17;;;;:::i;:::-;17533:29;;;;:::i;:::-;17518:12;:44:::0;-1:-1:-1;;17301:269:0:o;19070:181::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;19146:7:::1;19142:66;;;19170:18;:26:::0;;-1:-1:-1;;;;19170:26:0::1;::::0;;19142:66:::1;19218:15;:25:::0;;;::::1;;-1:-1:-1::0;;;19218:25:0::1;-1:-1:-1::0;;;;19218:25:0;;::::1;::::0;;;::::1;::::0;;19070:181::o;18465:215::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;18595:3:::1;18569:22;:29;;18561:62;;;::::0;-1:-1:-1;;;18561:62:0;;18665:2:1;18561:62:0::1;::::0;::::1;18647:21:1::0;18704:2;18684:18;;;18677:30;-1:-1:-1;;;18723:18:1;;;18716:50;18783:18;;18561:62:0::1;18463:344:1::0;18561:62:0::1;18634:13;:38:::0;18465:215::o;9861:654::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9940:22:0;::::1;9932:96;;;;-1:-1:-1::0;;;9932:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;10047:16:0;::::1;::::0;10039:90:::1;;;;-1:-1:-1::0;;;10039:90:0::1;;;;;;;:::i;:::-;10160:6;::::0;;10140:34:::1;::::0;-1:-1:-1;;;;;10160:6:0;;::::1;::::0;10140:19:::1;:34::i;:::-;10185:35;10205:8;10215:4;10185:19;:35::i;:::-;10264:1;10254:6:::0;;10244:17:::1;::::0;-1:-1:-1;;;;;10254:6:0::1;10244:9;:17::i;:::-;:21;10241:127;;;10300:6;::::0;10282:74:::1;::::0;-1:-1:-1;;;;;10300:6:0::1;10308:8:::0;10318:17:::1;10300:6:::0;10318:9:::1;:17::i;10282:74::-;;10241:127;10388:16;10407:6:::0;;-1:-1:-1;;;;;10424:17:0;;::::1;-1:-1:-1::0;;;;;;10424:17:0;::::1;::::0;::::1;::::0;;10457:40:::1;::::0;10407:6;;;::::1;::::0;;;10457:40:::1;::::0;10388:16;10457:40:::1;9921:594;9861:654:::0;:::o;14954:134::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15042:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15042:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14954:134::o;14157:218::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;14241:14:::1;::::0;::::1;;14240:15;14232:24;;;::::0;::::1;;14298:4;-1:-1:-1::0;;;;;14275:28:0;::::1;::::0;14267:55:::1;;;::::0;-1:-1:-1;;;14267:55:0;;19444:2:1;14267:55:0::1;::::0;::::1;19426:21:1::0;19483:2;19463:18;;;19456:30;-1:-1:-1;;;19502:18:1;;;19495:44;19556:18;;14267:55:0::1;19242:338:1::0;14267:55:0::1;14333:9;:34:::0;;-1:-1:-1;;;;;14333:34:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;14333:34:0;;::::1;::::0;;;::::1;::::0;;14157:218::o;17850:106::-;17891:7;17934:13;5246:2;17934;:13;:::i;:::-;17918:12;;:30;;;;:::i;11742:198::-;-1:-1:-1;;;;;11832:20:0;;11808:7;11832:20;;;:11;:20;;;;;;;;11828:49;;;-1:-1:-1;;;;;;11861:16:0;;;;;:7;:16;;;;;;;11742:198::o;11828:49::-;-1:-1:-1;;;;;11915:16:0;;;;;;:7;:16;;;;;;11895:37;;:19;:37::i;10523:225::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;10602:6:::1;::::0;;10582:34:::1;::::0;-1:-1:-1;;;;;10602:6:0;;::::1;::::0;10582:19:::1;:34::i;:::-;10627:16;10646:6:::0;;-1:-1:-1;;;;;;10663:19:0;::::1;::::0;;10698:42:::1;::::0;-1:-1:-1;;;;;10646:6:0;;::::1;::::0;10627:16;10646:6;;10698:42:::1;::::0;10627:16;;10698:42:::1;10571:177;10523:225::o:0;19451:171::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;19547:18:::1;:28:::0;;;;19586:18:::1;:28:::0;19451:171::o;13649:500::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;13730:16;::::1;;13741:5;13730:16:::0;13726:416:::1;;-1:-1:-1::0;;;;;13763:13:0;;::::1;13779:5;13763:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13763:21:0::1;::::0;;13799:9:::1;::::0;:32;;-1:-1:-1;;;13799:32:0;;::::1;::::0;::::1;19753:51:1::0;;;;19820:18;;;19813:50;;;;13799:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19726:18:1;;13799:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;13726:416;13868:17;::::0;:22;13864:136:::1;;13957:6;13937:17;;13919:15;:35;;;;:::i;:::-;:44;13911:73;;;::::0;-1:-1:-1;;;13911:73:0;;20076:2:1;13911:73:0::1;::::0;::::1;20058:21:1::0;20115:2;20095:18;;;20088:30;-1:-1:-1;;;20134:18:1;;;20127:46;20190:18;;13911:73:0::1;19874:340:1::0;13911:73:0::1;-1:-1:-1::0;;;;;14014:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14014:20:0::1;14030:4;14014:20:::0;;::::1;::::0;;;14069:15:::1;14049:17;:35:::0;;;14099:9:::1;::::0;:31;;-1:-1:-1;;;14099:31:0;;;;::::1;19753:51:1::0;;;;19820:18;;;19813:50;14099:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19726:18:1;;14099:31:0::1;19585:284:1::0;19259:184:0;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;19338:7:::1;19334:63;;;19362:15;:23:::0;;-1:-1:-1;;;;19362:23:0::1;::::0;;19334:63:::1;19407:18;:28:::0;;;::::1;;-1:-1:-1::0;;;19407:28:0::1;-1:-1:-1::0;;;;19407:28:0;;::::1;::::0;;;::::1;::::0;;19259:184::o;12606:173::-;12670:4;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;12719:9:::1;::::0;12687:62:::1;::::0;12704:4:::1;::::0;-1:-1:-1;;;;;12719:9:0::1;-1:-1:-1::0;;12687:8:0::1;:62::i;:::-;-1:-1:-1::0;12767:4:0::1;12606:173:::0;:::o;26727:586::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;26789:14:::1;::::0;::::1;;26788:15;26780:52;;;::::0;-1:-1:-1;;;26780:52:0;;20421:2:1;26780:52:0::1;::::0;::::1;20403:21:1::0;20460:2;20440:18;;;20433:30;20499:26;20479:18;;;20472:54;20543:18;;26780:52:0::1;20219:348:1::0;26780:52:0::1;26851:16;::::0;::::1;::::0;::::1;;;26843:53;;;::::0;-1:-1:-1;;;26843:53:0;;20774:2:1;26843:53:0::1;::::0;::::1;20756:21:1::0;20813:2;20793:18;;;20786:30;20852:26;20832:18;;;20825:54;20896:18;;26843:53:0::1;20572:348:1::0;26843:53:0::1;26918:9;::::0;;;::::1;-1:-1:-1::0;;;;;26918:9:0::1;26907:99;;26958:9;:36:::0;;-1:-1:-1;;;;;;26958:36:0::1;26988:4;26958:36:::0;::::1;;::::0;;26907:99:::1;27020:9;::::0;27040:6:::1;::::0;27020:85:::1;::::0;-1:-1:-1;;;27020:85:0;;-1:-1:-1;;;;;27040:6:0;;::::1;27020:85;::::0;::::1;21148:51:1::0;21247:10;27055:12:0::1;21235:23:1::0;21215:18;;;21208:51;21307:18;27077:15:0::1;21295:31:1::0;21275:18;;;21268:59;5246:2:0::1;21343:18:1::0;;;21336:45;27020:9:0;;;::::1;;::::0;:19:::1;::::0;21120::1;;27020:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27016:101:::0;27127:14:::1;:21:::0;;-1:-1:-1;;27127:21:0;;::::1;27144:4;27127:21;::::0;;;27159:23:::1;:31:::0;;;;::::1;::::0;;27228:6:::1;::::0;27244:5:::1;::::0;27218:17:::1;::::0;-1:-1:-1;;;;;27228:6:0::1;27218:9;:17::i;:::-;:22;::::0;27238:2:::1;27218:22;:::i;:::-;27217:32;;;;:::i;:::-;27201:13;:48:::0;27284:6:::1;::::0;27300:5:::1;::::0;27274:17:::1;::::0;-1:-1:-1;;;;;27284:6:0::1;27274:9;:17::i;:::-;:22;::::0;27294:2:::1;27274:22;:::i;:::-;27273:32;;;;:::i;:::-;27260:10;:45:::0;26727:586::o;18959:103::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;19030:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;19030:24:0::1;-1:-1:-1::0;;;;19030:24:0;;::::1;::::0;;;::::1;::::0;;18959:103::o;11948:165::-;12026:4;12043:40;12053:10;12065:9;12076:6;12043:9;:40::i;:::-;-1:-1:-1;12101:4:0;;11948:165;-1:-1:-1;;;11948:165:0:o;18688:263::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;18797:19:::1;:33:::0;;-1:-1:-1;;18797:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;18841:22:::1;:47:::0;;-1:-1:-1;;18841:47:0::1;::::0;::::1;;;::::0;;18904:39:::1;::::0;4525:41:1;;;18904:39:0::1;::::0;4513:2:1;4498:18;18904:39:0::1;;;;;;;;18688:263:::0;;:::o;16489:204::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;16592:11:::1;:42:::0;;-1:-1:-1;;;;;16592:42:0;;::::1;-1:-1:-1::0;;;;;;16592:42:0;;::::1;;::::0;;;16645:20;:40;;;;;::::1;::::0;::::1;;::::0;;16489:204::o;13101:540::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;13170:20:::1;13203:9;13170:43;;13224:16;13254:10;-1:-1:-1::0;;;;;13254:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13243:40:0::1;;13292:4;13299:10;-1:-1:-1::0;;;;;13299:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13243:74;::::0;-1:-1:-1;;;;;;13243:74:0::1;::::0;;;;;;-1:-1:-1;;;;;10340:15:1;;;13243:74:0::1;::::0;::::1;10322:34:1::0;10392:15;;10372:18;;;10365:43;10257:18;;13243:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13224:93:::0;-1:-1:-1;;;;;;13332:22:0;::::1;13328:200;;13391:10;-1:-1:-1::0;;;;;13391:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13380:43:0::1;;13432:4;13439:10;-1:-1:-1::0;;;;;13439:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13380:77;::::0;-1:-1:-1;;;;;;13380:77:0::1;::::0;;;;;;-1:-1:-1;;;;;10340:15:1;;;13380:77:0::1;::::0;::::1;10322:34:1::0;10392:15;;10372:18;;;10365:43;10257:18;;13380:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13371:6;:86:::0;;-1:-1:-1;;;;;;13371:86:0::1;-1:-1:-1::0;;;;;13371:86:0;;;::::1;::::0;;;::::1;::::0;;13328:200:::1;;;13499:6;:17:::0;;-1:-1:-1;;;;;;13499:17:0::1;-1:-1:-1::0;;;;;13499:17:0;::::1;;::::0;;13328:200:::1;13538:9;:22:::0;;-1:-1:-1;;;;;;13538:22:0::1;-1:-1:-1::0;;;;;13538:22:0;::::1;::::0;;::::1;::::0;;;13571:62:::1;::::0;13588:4:::1;::::0;-1:-1:-1;;13571:8:0::1;:62::i;27321:182::-:0;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;27388:16:::1;::::0;::::1;::::0;::::1;;;27387:17;27379:58;;;::::0;-1:-1:-1;;;27379:58:0;;22159:2:1;27379:58:0::1;::::0;::::1;22141:21:1::0;22198:2;22178:18;;;22171:30;22237;22217:18;;;22210:58;22285:18;;27379:58:0::1;21957:352:1::0;27379:58:0::1;27456:6;::::0;;27448:47:::1;::::0;-1:-1:-1;;;;;27456:6:0;;::::1;::::0;27473:21:::1;27448:47:::0;::::1;;;::::0;27473:21;;27448:47;27456:6;27448:47;27473:21;27456:6;27448:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27321:182::o:0;15252:145::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;15342:9:::1;::::0;:47:::1;::::0;-1:-1:-1;;;15342:47:0;;-1:-1:-1;;;;;19771:32:1;;;15342:47:0::1;::::0;::::1;19753:51:1::0;19847:14;;19840:22;19820:18;;;19813:50;15342:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19726:18:1;;15342:47:0::1;19585:284:1::0;16701:592:0;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;16842:7:::1;:31:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;16884:27:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;16966:29:0;-1:-1:-1;;;16922:33:0;;::::1;;-1:-1:-1::0;;16966:29:0;;-1:-1:-1;;;16966:29:0;;::::1;;;-1:-1:-1::0;;17006:29:0::1;-1:-1:-1::0;;;17006:29:0;;::::1;::::0;;;::::1;;::::0;;;16922:33;17066:20:::1;16884:27:::0;16966:29;17066:20:::1;:::i;:::-;:34;;;;:::i;:::-;:46;;;;:::i;:::-;17046:7;:66:::0;;-1:-1:-1;;;;17046:66:0::1;-1:-1:-1::0;;;17046:66:0::1;::::0;;::::1;;;::::0;;17158:9:::1;:17:::0;-1:-1:-1;;17139:36:0::1;::::0;17158:17;;::::1;::::0;::::1;::::0;17139:16:::1;:36;:::i;:::-;17214:7;:18:::0;17123:52:::1;::::0;;::::1;::::0;-1:-1:-1;17123:52:0;;17194:38:::1;::::0;17214:18;;::::1;::::0;-1:-1:-1;;;17194:17:0;;::::1;;:38;:::i;:::-;:47;;;;17186:99;;;::::0;-1:-1:-1;;;17186:99:0;;22516:2:1;17186:99:0::1;::::0;::::1;22498:21:1::0;22555:2;22535:18;;;22528:30;22594:34;22574:18;;;22567:62;-1:-1:-1;;;22645:18:1;;;22638:37;22692:19;;17186:99:0::1;22314:403:1::0;18084:373:0;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;18284:16:::1;18264;18254:7;;:26;;;;:::i;:::-;18253:47;;;;:::i;:::-;18237:13;:63:::0;18325:7:::1;::::0;18352:13;;18325:23:::1;::::0;18335:13;;18325:23:::1;:::i;:::-;18324:41;;;;:::i;:::-;18311:10;:54:::0;;;18384:13:::1;::::0;:27:::1;;18376:73;;;::::0;-1:-1:-1;;;18376:73:0;;22924:2:1;18376:73:0::1;::::0;::::1;22906:21:1::0;22963:2;22943:18;;;22936:30;23002:34;22982:18;;;22975:62;-1:-1:-1;;;23053:18:1;;;23046:31;23094:19;;18376:73:0::1;22722:397:1::0;18376:73:0::1;18084:373:::0;;;;:::o;15585:125::-;15670:9;;:32;;-1:-1:-1;;;15670:32:0;;-1:-1:-1;;;;;178:32:1;;;15670::0;;;160:51:1;15646:4:0;;15670:9;;;;;:23;;133:18:1;;15670:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15096:148::-;7779:6;;-1:-1:-1;;;;;7779:6:0;7789:10;7779:20;7771:50;;;;-1:-1:-1;;;7771:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15192:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15192:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15096:148::o;12288:310::-;-1:-1:-1;;;;;12383:20:0;;12375:52;;;;-1:-1:-1;;;12375:52:0;;23576:2:1;12375:52:0;;;23558:21:1;23615:2;23595:18;;;23588:30;-1:-1:-1;;;23634:18:1;;;23627:49;23693:18;;12375:52:0;23374:343:1;12375:52:0;-1:-1:-1;;;;;12446:21:0;;12438:53;;;;-1:-1:-1;;;12438:53:0;;23576:2:1;12438:53:0;;;23558:21:1;23615:2;23595:18;;;23588:30;-1:-1:-1;;;23634:18:1;;;23627:49;23693:18;;12438:53:0;23374:343:1;12438:53:0;-1:-1:-1;;;;;12504:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12557:33;;368:25:1;;;12557:33:0;;341:18:1;12557:33:0;;;;;;;12288:310;;;:::o;33112:1002::-;33191:7;;33226;;33329:6;;-1:-1:-1;;;;;33329:6:0;33154:7;33317:19;;;:11;:19;;;;;;33154:7;;33191;33226;33191;;33226;;33317:19;;33314:285;;;33380:6;;-1:-1:-1;;;;;33380:6:0;33353:16;33372:15;;;:7;:15;;;;;;;;;33421:7;:15;;;;;;;33455:18;;;;:40;;;33488:7;33477:8;:18;33455:40;33451:68;;;33504:15;33513:6;33504;:15;:::i;:::-;33497:22;;;;;;;;33112:1002;:::o;33451:68::-;33534:19;33545:8;33534:19;;:::i;:::-;;-1:-1:-1;33568:19:0;33579:8;33568:19;;:::i;:::-;;;33338:261;;33314:285;33612:9;:16;:20;33609:399;;33654:7;33649:348;33671:9;:16;33667:20;;;;33649:348;;;33713:14;33730:7;:21;33738:9;33748:1;33738:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33738:12:0;33730:21;;;;;;;;;;;;;33795:9;:12;;33730:21;;-1:-1:-1;33787:7:0;;33738:12;;33795:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;33795:12:0;33787:21;;;;;;;;;;;;;;-1:-1:-1;33831:16:0;;;;:36;;;33860:7;33851:6;:16;33831:36;33827:64;;;33876:15;33885:6;33876;:15;:::i;:::-;33869:22;;;;;;;;;33112:1002;:::o;33827:64::-;33920:16;33930:6;33920:7;:16;:::i;:::-;33910:26;-1:-1:-1;33965:16:0;33975:6;33965:7;:16;:::i;:::-;33955:26;;33694:303;;33689:3;;;;;:::i;:::-;;;;33649:348;;;;33609:399;34032:15;34041:6;34032;:15;:::i;:::-;34022:7;:25;34018:53;;;34056:15;34065:6;34056;:15;:::i;:::-;34049:22;;;;;;33112:1002;:::o;34018:53::-;34089:17;34099:7;34089;:17;:::i;20870:2911::-;20949:4;-1:-1:-1;;;;;20974:18:0;;20966:68;;;;-1:-1:-1;;;20966:68:0;;23924:2:1;20966:68:0;;;23906:21:1;23963:2;23943:18;;;23936:30;24002:34;23982:18;;;23975:62;-1:-1:-1;;;24053:18:1;;;24046:35;24098:19;;20966:68:0;23722:401:1;20966:68:0;-1:-1:-1;;;;;21053:16:0;;21045:64;;;;-1:-1:-1;;;21045:64:0;;24330:2:1;21045:64:0;;;24312:21:1;24369:2;24349:18;;;24342:30;24408:34;24388:18;;;24381:62;-1:-1:-1;;;24459:18:1;;;24452:33;24502:19;;21045:64:0;24128:399:1;21045:64:0;21137:1;21128:6;:10;21120:64;;;;-1:-1:-1;;;21120:64:0;;24734:2:1;21120:64:0;;;24716:21:1;24773:2;24753:18;;;24746:30;24812:34;24792:18;;;24785:62;-1:-1:-1;;;24863:18:1;;;24856:39;24912:19;;21120:64:0;24532:405:1;21120:64:0;-1:-1:-1;;;;;21283:13:0;;21195:8;21283:13;;;:7;:13;;;;;;21195:8;;;;21283:13;;21279:162;;;21319:4;21313:10;;21279:162;;;-1:-1:-1;;;;;21345:11:0;;;;;;:7;:11;;;;;;;;21341:100;;;21380:4;21373:11;;21341:100;;;-1:-1:-1;21425:4:0;21341:100;21454:20;21465:4;21471:2;21454:10;:20::i;:::-;21451:641;;;21495:14;;;;21491:89;;21530:34;;-1:-1:-1;;;21530:34:0;;25144:2:1;21530:34:0;;;25126:21:1;25183:2;25163:18;;;25156:30;25222:26;25202:18;;;25195:54;25266:18;;21530:34:0;24942:348:1;21491:89:0;21597:3;:11;;;;21604:4;21597:11;21594:231;;;-1:-1:-1;;;;;21633:27:0;;;;;;:21;:27;;;;;;;;21632:28;:58;;;;-1:-1:-1;;;;;;21665:25:0;;;;;;:21;:25;;;;;;;;21664:26;21632:58;21628:182;;;21733:12;;21723:6;:22;;21715:75;;;;-1:-1:-1;;;21715:75:0;;25497:2:1;21715:75:0;;;25479:21:1;25536:2;25516:18;;;25509:30;25575:34;25555:18;;;25548:62;-1:-1:-1;;;25626:18:1;;;25619:38;25674:19;;21715:75:0;25295:404:1;21715:75:0;21856:9;;-1:-1:-1;;;;;21842:24:0;;;21856:9;;21842:24;;;;:33;;;21871:4;21870:5;21842:33;21839:242;;;-1:-1:-1;;;;;21901:25:0;;;;;;:21;:25;;;;;;;;21896:170;;21985:14;;21975:6;21959:13;21969:2;21959:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;21951:95;;;;-1:-1:-1;;;21951:95:0;;26039:2:1;21951:95:0;;;26021:21:1;26078:2;26058:18;;;26051:30;26117:34;26097:18;;;26090:62;-1:-1:-1;;;26168:18:1;;;26161:40;26218:19;;21951:95:0;25837:406:1;21951:95:0;22108:4;22104:1598;;;22134:6;;;;22129:703;;22164:19;;;;;;;:64;;;;-1:-1:-1;;;;;;22208:20:0;;;;;;:16;:20;;;;;;;;22207:21;22164:64;:111;;;;-1:-1:-1;;;;;;22253:22:0;;;;;;:16;:22;;;;;;;;22252:23;22164:111;22161:656;;;22318:28;22349:24;22367:4;22349:9;:24::i;:::-;22318:55;;22424:13;;22400:20;:37;22396:402;;22484:10;;22524:22;;;;22521:96;;;22581:13;;22571:6;;6315:5;;22581:13;22561:17;;-1:-1:-1;;;;;22571:6:0;22561:9;:17::i;:::-;:33;;;;:::i;:::-;22560:54;;;;:::i;:::-;22550:64;;22521:96;22670:7;22646:20;:31;22643:71;;22704:7;22681:30;;22643:71;22740:34;22753:20;22740:12;:34::i;:::-;22439:359;22396:402;22295:522;22161:656;22852:14;;-1:-1:-1;;;22852:14:0;;;;:39;;;;-1:-1:-1;;;;;;22870:21:0;;22886:4;22870:21;;22852:39;22848:843;;;22936:16;;;22950:1;22936:16;;;;;;;;22912:21;;22936:16;;;;;;;;;;-1:-1:-1;22936:16:0;22912:40;;22989:4;22971;22976:1;22971:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22971:23:0;;;:7;;;;;;;;;;:23;;;;23023:9;;:16;;;-1:-1:-1;;;23023:16:0;;;;:9;;;;;:14;;:16;;;;;22971:7;;23023:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23013:4;23018:1;23013:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23013:26:0;;;:7;;;;;;;;;:26;23076:9;;:37;;-1:-1:-1;;;23076:37:0;;23058:15;;23076:9;;;;;:23;;:37;;23100:6;;23108:4;;23076:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23076:37:0;;;;;;;;;;;;:::i;:::-;23114:1;23076:40;;;;;;;;:::i;:::-;;;;;;;23058:58;;23135:13;23184:18;;23162;;23152:7;:28;;;;:::i;:::-;23151:51;;;;:::i;:::-;23225:18;;23135:67;;-1:-1:-1;;;;23225:18:0;;;;:51;;;;;23255:21;23247:5;:29;23225:51;23221:121;;;23301:21;23316:5;23301:14;:21::i;:::-;23366:15;;-1:-1:-1;;;23366:15:0;;;;23362:314;;;23434:11;:7;23444:1;23434:11;:::i;:::-;23410:21;:35;23406:251;;;23474:15;:23;;-1:-1:-1;;;;23524:25:0;-1:-1:-1;;;23524:25:0;;;23406:251;;;23606:27;23621:11;:7;23631:1;23621:11;:::i;:::-;23606:14;:27::i;:::-;22893:798;;;22848:843;23720:53;23738:4;23744:2;23748:6;23756:3;23761:4;23767:5;23720:17;:53::i;:::-;23713:60;20870:2911;-1:-1:-1;;;;;;;20870:2911:0:o;30076:1163::-;30219:16;;30197:4;;30219:16;;;;;30214:298;;30252:28;30271:4;30277:2;30252:18;:28::i;:::-;30300:16;;;;;;;30299:17;:41;;;;;30320:20;30331:4;30337:2;30320:10;:20::i;:::-;30299:77;;;;-1:-1:-1;;;;;;30345:31:0;;;;;;:25;:31;;;;;;;;30344:32;30299:77;:111;;;;-1:-1:-1;;;;;;30381:29:0;;;;;;:25;:29;;;;;;;;30380:30;30299:111;:121;;;;;30415:5;30414:6;30299:121;30295:206;;;30441:44;;-1:-1:-1;;;30441:44:0;;27673:2:1;30441:44:0;;;27655:21:1;27712:2;27692:18;;;27685:30;27751:34;27731:18;;;27724:62;-1:-1:-1;;;27802:18:1;;;27795:32;27844:19;;30441:44:0;27471:398:1;30295:206:0;-1:-1:-1;;;;;30557:25:0;;30524:12;30557:25;;;:19;:25;;;;;;30539:4;;30557:25;;;:52;;-1:-1:-1;;;;;;30586:23:0;;;;;;:19;:23;;;;;;;;30557:52;30554:98;;;-1:-1:-1;30635:5:0;30554:98;30664:25;30692:55;30702:4;30708:2;30712:7;30721;30730:3;30735:4;30741:5;30692:9;:55::i;:::-;30777:14;;;;-1:-1:-1;;;;;30760:13:0;;;;;;:7;:13;;;;;:31;;30664:83;;-1:-1:-1;30777:14:0;;30760:31;;30777:14;;30760:31;:::i;:::-;;;;-1:-1:-1;;30817:22:0;;;;-1:-1:-1;;;;;30802:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;30817:22;;30802:37;:::i;:::-;;;;-1:-1:-1;;;;;;;30856:17:0;;;;;;:11;:17;;;;;;;;30852:89;;;-1:-1:-1;;;;;30906:13:0;;;;;;:7;:13;;;;;;:23;;30922:7;;30906:23;:::i;:::-;-1:-1:-1;;;;;30890:13:0;;;;;;:7;:13;;;;;:39;30852:89;-1:-1:-1;;;;;30955:15:0;;;;;;:11;:15;;;;;;;;30951:98;;;31015:22;;-1:-1:-1;;;;;31001:11:0;;31015:22;31001:11;;;:7;:11;;;;;;:36;;31015:22;31001:36;:::i;:::-;-1:-1:-1;;;;;30987:11:0;;;;;;:7;:11;;;;;:50;30951:98;31079:1;31065:6;:11;;;:15;:34;;;;31098:1;31084:6;:11;;;:15;31065:34;31061:89;;;31127:6;:11;;;31116:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;31061:89:0;31182:2;-1:-1:-1;;;;;31167:42:0;31176:4;-1:-1:-1;;;;;31167:42:0;;31186:6;:22;;;31167:42;;;;368:25:1;;356:2;341:18;;222:177;31167:42:0;;;;;;;;-1:-1:-1;31227:4:0;;30076:1163;-1:-1:-1;;;;;;;;30076:1163:0:o;20504:358::-;20573:4;20605:6;;-1:-1:-1;;;;;20597:14:0;;;20605:6;;20597:14;;;;:43;;-1:-1:-1;20634:6:0;;-1:-1:-1;;;;;20628:12:0;;;20634:6;;20628:12;;20597:43;:79;;;;-1:-1:-1;20670:6:0;;-1:-1:-1;;;;;20670:6:0;20657:9;:19;;20597:79;:118;;;;-1:-1:-1;;;;;;20694:21:0;;;;;;:17;:21;;;;;;;;20693:22;20597:118;:159;;;;-1:-1:-1;;;;;;20733:23:0;;;;;;:17;:23;;;;;;;;20732:24;20597:159;:186;;;;-1:-1:-1;;;;;;20773:10:0;;6421:42;20773:10;;20597:186;:219;;;;-1:-1:-1;;;;;;20800:16:0;;;;20597:219;:257;;;;-1:-1:-1;;;;;;20833:21:0;;20849:4;20833:21;;20590:264;20504:358;-1:-1:-1;;;20504:358:0:o;23789:1990::-;7673:6;:13;;-1:-1:-1;;7673:13:0;7682:4;7673:13;;;23873:30:::1;::::0;;::::1;::::0;::::1;::::0;;23896:7:::1;23873:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;23873:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;23873:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23873:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23873:30:0;::::1;::::0;;::::1;::::0;;;;;;7673:6;23918:21;23914:60:::1;;23956:7;;;23914:60;24009:4;23989:26;::::0;;;:11:::1;:26;::::0;;;;;;;24024:9:::1;::::0;-1:-1:-1;;;;;24024:9:0::1;23989:46:::0;;;;;;;;-1:-1:-1;;23989:67:0::1;23986:165;;24093:4;24073:26;::::0;;;:11:::1;:26;::::0;;;;;;;24108:9:::1;::::0;-1:-1:-1;;;;;24108:9:0::1;24073:46:::0;;;;;;;-1:-1:-1;;24073:66:0;;23986:165:::1;24163:17;24248:1;24228:6;:16;;;24184:60;;24208:6;:16;;;24185:39;;:20;:39;;;;:::i;:::-;24184:60;;;;:::i;:::-;24183:66;;;;:::i;:::-;24163:86:::0;-1:-1:-1;24260:15:0::1;24278:32;24163:86:::0;24278:20;:32:::1;:::i;:::-;24355:16;::::0;;24369:1:::1;24355:16:::0;;;;;::::1;::::0;;24260:50;;-1:-1:-1;24331:21:0::1;::::0;24355:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24355:16:0::1;24331:40;;24400:4;24382;24387:1;24382:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24382:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24426:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;24426:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;24382:7;;24426:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24416:4;24421:1;24416:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24416:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;24455:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;24455:186:0;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;24530:7;;24455:9:::1;::::0;24568:4;;24595::::1;::::0;24615:15:::1;::::0;24455:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24675:21:0::1;::::0;-1:-1:-1;24654:18:0::1;::::0;-1:-1:-1;24761:7:0;;-1:-1:-1;24735:22:0::1;24748:9:::0;24675:21;24735:22:::1;:::i;:::-;24734:34;;;;:::i;:::-;24707:61:::0;-1:-1:-1;24785:13:0;;24781:328:::1;;24815:9;::::0;:222:::1;::::0;-1:-1:-1;;;24815:222:0;;24892:4:::1;24815:222;::::0;::::1;28802:34:1::0;28852:18;;;28845:34;;;24815:9:0::1;28895:18:1::0;;;28888:34;;;28938:18;;;28931:34;6421:42:0::1;28981:19:1::0;;;28974:44;25007:15:0::1;29034:19:1::0;;;29027:35;-1:-1:-1;;;;;24815:9:0;;::::1;::::0;:25:::1;::::0;24848:16;;28736:19:1;;24815:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25057:40:0::1;::::0;;29558:25:1;;;29614:2;29599:18;;29592:34;;;25057:40:0::1;::::0;-1:-1:-1;29531:18:1;25057:40:0::1;;;;;;;24781:328;25121:30;25135:16:::0;25121:30;::::1;:::i;:::-;;;25182:6;:16;;;25162:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;25291:16:::1;::::0;::::1;::::0;25272:15:::1;::::0;::::1;::::0;25209:12:::1;::::0;-1:-1:-1;25209:12:0;;25258:49;;::::1;::::0;25259:28:::1;::::0;::::1;:10:::0;:28:::1;:::i;:::-;25258:49;;;;:::i;:::-;25232:75;;25318:26;25383:6;:16;;;25347:52;;25361:6;:18;;;25348:31;;:10;:31;;;;:::i;:::-;25347:52;;;;:::i;:::-;25318:81:::0;-1:-1:-1;25410:24:0::1;25451:36;25318:81:::0;25451:15;:36:::1;:::i;:::-;25437:51;::::0;:10;:51:::1;:::i;:::-;25503:15;::::0;::::1;::::0;25410:78;;-1:-1:-1;25503:19:0::1;;::::0;25499:130:::1;;25552:20:::0;;:65:::1;::::0;-1:-1:-1;;;;;25552:20:0;;::::1;::::0;25607:5:::1;::::0;25585:15;;25552:65:::1;::::0;;;25585:15;25552:20;25607:5;25552:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25539:78:0;;-1:-1:-1;;25499:130:0::1;25643:16;::::0;::::1;::::0;:20:::1;;::::0;25639:133:::1;;25693:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;25693:21:0;;::::1;::::0;25750:5:::1;::::0;25727:16;;25693:67:::1;::::0;;;25727:16;25693:21;25750:5;25693:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25680:80:0;;-1:-1:-1;;25639:133:0::1;23862:1917;;;;;;;;;;7697:1;-1:-1:-1::0;7709:6:0;:14;;-1:-1:-1;;7709:14:0;;;23789:1990::o;25787:368::-;25874:16;;;25888:1;25874:16;;;;;;;;25850:21;;25874:16;;;;;;;;-1:-1:-1;;25911:9:0;;:16;;;-1:-1:-1;;;25911:16:0;;;;25850:40;;-1:-1:-1;;;;;;25911:9:0;;;;:14;;-1:-1:-1;25911:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25901:4;25906:1;25901:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;25901:26:0;;;-1:-1:-1;;;;;25901:26:0;;;;;25956:4;25938;25943:1;25938:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25938:23:0;;;:7;;;;;;;;;:23;25974:9;;:173;;-1:-1:-1;;;25974:173:0;;:9;;;:60;;26042:9;;25974:173;;:9;;26083:4;;6421:42;;26121:15;;25974:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25839:316;25787:368;:::o;26163:556::-;26246:16;;;;;;;26245:17;26237:65;;;;-1:-1:-1;;;26237:65:0;;30786:2:1;26237:65:0;;;30768:21:1;30825:2;30805:18;;;30798:30;30864:34;30844:18;;;30837:62;-1:-1:-1;;;30915:18:1;;;30908:33;30958:19;;26237:65:0;30584:399:1;26237:65:0;26318:20;26329:4;26335:2;26318:10;:20::i;:::-;26317:21;:37;;;;-1:-1:-1;26348:6:0;;-1:-1:-1;;;;;26342:12:0;;;26348:6;;26342:12;26317:37;26313:399;;;-1:-1:-1;;;;;26371:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;26371:30:0;;;26397:4;26371:30;;;;;;26416:19;:25;;;;;:32;;;;;;;;;;26463:16;:23;;-1:-1:-1;;26463:23:0;26371:30;26463:23;;;;;26512:9;;;;26501:107;;26556:9;:36;;-1:-1:-1;;;;;;26556:36:0;26586:4;26556:36;;;;;26501:107;26622:19;:26;;-1:-1:-1;;26622:26:0;;;;;26668:32;;-1:-1:-1;4525:41:1;;26668:32:0;;4513:2:1;4498:18;26668:32:0;4385:187:1;31247:1857:0;31374:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31374:18:0;31405:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31405:25:0;31441:30;;;;;;;;31464:7;31441:30;;;;;;;;;;;;;;;;-1:-1:-1;;;31441:30:0;;;;;;;;;;;-1:-1:-1;;;31441:30:0;;;;;;;;-1:-1:-1;;;31441:30:0;;;;;;;;-1:-1:-1;;;31441:30:0;;;;;;;;;31503:10;:8;:10::i;:::-;31482:18;;;:31;;;31543:28;;:7;:28;:::i;:::-;31526:14;;;:45;31588:20;31599:4;31605:2;31588:10;:20::i;:::-;31584:315;;;31656:9;;:38;;-1:-1:-1;;;31656:38:0;;-1:-1:-1;;;;;31246:15:1;;;31656:38:0;;;31228:34:1;31298:15;;;31278:18;;;31271:43;31330:18;;;31323:34;;;31625:12:0;;31656:9;;;;;:19;;31163:18:1;;31656:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;31656:38:0;;;;;;;;-1:-1:-1;;31656:38:0;;;;;;;;;;;;:::i;:::-;;;31652:164;;31792:8;;;31652:164;31745:5;-1:-1:-1;31836:7:0;31832:56;;31864:8;;;31832:56;31610:289;31584:315;31914:7;31911:755;;;31938:18;31977:3;31973:229;;;-1:-1:-1;32014:9:0;:16;;;31973:229;;;32056:4;32052:150;;;-1:-1:-1;32094:9:0;:17;;;;;;32052:150;;;-1:-1:-1;32165:9:0;:21;-1:-1:-1;;;32165:21:0;;;;32052:150;32218:17;6315:5;32239:20;32249:10;32239:7;:20;:::i;:::-;32238:41;;;;:::i;:::-;32218:61;;32294:13;32329:6;:17;;;32310:6;:16;;;:36;;;;:::i;:::-;32388:17;;32294:52;;;;;-1:-1:-1;32294:52:0;;32376:29;;;:9;:29;:::i;:::-;32375:39;;;;:::i;:::-;32361:11;;;:53;;;32444:23;;:9;:23;:::i;:::-;32429:12;;;:38;32507:19;32517:9;32507:7;:19;:::i;:::-;32482:44;;32571:18;;;;32557:11;;;;:32;;32571:18;32557:32;:::i;:::-;32543:11;;;:46;-1:-1:-1;31911:755:0;;-1:-1:-1;;31911:755:0;;32622:32;;;31911:755;32682:12;;;;:16;32678:289;;32756:6;:18;;;32741:6;:12;;;:33;;;;:::i;:::-;32731:4;32715:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;32812:4:0;32792:26;;;;:11;:26;;;;;;;;32789:104;;;32865:12;;;;;32855:4;32839:22;;;;:7;:22;;;;;:38;;32865:12;;32839:22;;:38;;32865:12;;32839:38;:::i;:::-;;;;-1:-1:-1;;32789:104:0;32935:4;-1:-1:-1;;;;;32912:43:0;32921:4;-1:-1:-1;;;;;32912:43:0;;32942:6;:12;;;32912:43;;;;368:25:1;;356:2;341:18;;222:177;32912:43:0;;;;;;;;32678:289;33052:6;:18;;;33037:6;:12;;;:33;;;;:::i;:::-;33022:6;:11;;;:49;;;;:::i;:::-;33004:6;:14;;;:68;;;;:::i;:::-;32979:22;;;:93;-1:-1:-1;32979:22:0;31247:1857;-1:-1:-1;;;;;;;;31247:1857:0:o;404:118:1:-;490:5;483:13;476:21;469:5;466:32;456:60;;512:1;509;502:12;527:376;589:6;597;650:2;638:9;629:7;625:23;621:32;618:52;;;666:1;663;656:12;618:52;705:9;692:23;724:28;746:5;724:28;:::i;:::-;771:5;-1:-1:-1;828:2:1;813:18;;800:32;841:30;800:32;841:30;:::i;:::-;890:7;880:17;;;527:376;;;;;:::o;908:127::-;969:10;964:3;960:20;957:1;950:31;1000:4;997:1;990:15;1024:4;1021:1;1014:15;1040:275;1111:2;1105:9;1176:2;1157:13;;-1:-1:-1;;1153:27:1;1141:40;;1211:18;1196:34;;1232:22;;;1193:62;1190:88;;;1258:18;;:::i;:::-;1294:2;1287:22;1040:275;;-1:-1:-1;1040:275:1:o;1320:183::-;1380:4;1413:18;1405:6;1402:30;1399:56;;;1435:18;;:::i;:::-;-1:-1:-1;1480:1:1;1476:14;1492:4;1472:25;;1320:183::o;1508:131::-;-1:-1:-1;;;;;1583:31:1;;1573:42;;1563:70;;1629:1;1626;1619:12;1644:737;1698:5;1751:3;1744:4;1736:6;1732:17;1728:27;1718:55;;1769:1;1766;1759:12;1718:55;1805:6;1792:20;1831:4;1855:60;1871:43;1911:2;1871:43;:::i;:::-;1855:60;:::i;:::-;1949:15;;;2035:1;2031:10;;;;2019:23;;2015:32;;;1980:12;;;;2059:15;;;2056:35;;;2087:1;2084;2077:12;2056:35;2123:2;2115:6;2111:15;2135:217;2151:6;2146:3;2143:15;2135:217;;;2231:3;2218:17;2248:31;2273:5;2248:31;:::i;:::-;2292:18;;2330:12;;;;2168;;2135:217;;;-1:-1:-1;2370:5:1;1644:737;-1:-1:-1;;;;;;1644:737:1:o;2386:477::-;2476:6;2484;2537:2;2525:9;2516:7;2512:23;2508:32;2505:52;;;2553:1;2550;2543:12;2505:52;2593:9;2580:23;2626:18;2618:6;2615:30;2612:50;;;2658:1;2655;2648:12;2612:50;2681:61;2734:7;2725:6;2714:9;2710:22;2681:61;:::i;:::-;2671:71;;;2792:2;2781:9;2777:18;2764:32;2805:28;2827:5;2805:28;:::i;3238:597::-;3350:4;3379:2;3408;3397:9;3390:21;3440:6;3434:13;3483:6;3478:2;3467:9;3463:18;3456:34;3508:1;3518:140;3532:6;3529:1;3526:13;3518:140;;;3627:14;;;3623:23;;3617:30;3593:17;;;3612:2;3589:26;3582:66;3547:10;;3518:140;;;3676:6;3673:1;3670:13;3667:91;;;3746:1;3741:2;3732:6;3721:9;3717:22;3713:31;3706:42;3667:91;-1:-1:-1;3819:2:1;3798:15;-1:-1:-1;;3794:29:1;3779:45;;;;3826:2;3775:54;;3238:597;-1:-1:-1;;;3238:597:1:o;4065:315::-;4133:6;4141;4194:2;4182:9;4173:7;4169:23;4165:32;4162:52;;;4210:1;4207;4200:12;4162:52;4249:9;4236:23;4268:31;4293:5;4268:31;:::i;:::-;4318:5;4370:2;4355:18;;;;4342:32;;-1:-1:-1;;;4065:315:1:o;4577:247::-;4636:6;4689:2;4677:9;4668:7;4664:23;4660:32;4657:52;;;4705:1;4702;4695:12;4657:52;4744:9;4731:23;4763:31;4788:5;4763:31;:::i;4829:388::-;4897:6;4905;4958:2;4946:9;4937:7;4933:23;4929:32;4926:52;;;4974:1;4971;4964:12;4926:52;5013:9;5000:23;5032:31;5057:5;5032:31;:::i;:::-;5082:5;-1:-1:-1;5139:2:1;5124:18;;5111:32;5152:33;5111:32;5152:33;:::i;5222:382::-;5287:6;5295;5348:2;5336:9;5327:7;5323:23;5319:32;5316:52;;;5364:1;5361;5354:12;5316:52;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;5609:456::-;5686:6;5694;5702;5755:2;5743:9;5734:7;5730:23;5726:32;5723:52;;;5771:1;5768;5761:12;5723:52;5810:9;5797:23;5829:31;5854:5;5829:31;:::i;:::-;5879:5;-1:-1:-1;5936:2:1;5921:18;;5908:32;5949:33;5908:32;5949:33;:::i;:::-;5609:456;;6001:7;;-1:-1:-1;;;6055:2:1;6040:18;;;;6027:32;;5609:456::o;6070:248::-;6138:6;6146;6199:2;6187:9;6178:7;6174:23;6170:32;6167:52;;;6215:1;6212;6205:12;6167:52;-1:-1:-1;;6238:23:1;;;6308:2;6293:18;;;6280:32;;-1:-1:-1;6070:248:1:o;6323:1138::-;6441:6;6449;6502:2;6490:9;6481:7;6477:23;6473:32;6470:52;;;6518:1;6515;6508:12;6470:52;6558:9;6545:23;6587:18;6628:2;6620:6;6617:14;6614:34;;;6644:1;6641;6634:12;6614:34;6667:61;6720:7;6711:6;6700:9;6696:22;6667:61;:::i;:::-;6657:71;;6747:2;6737:12;;6802:2;6791:9;6787:18;6774:32;6831:2;6821:8;6818:16;6815:36;;;6847:1;6844;6837:12;6815:36;6870:24;;;-1:-1:-1;6925:4:1;6917:13;;6913:27;-1:-1:-1;6903:55:1;;6954:1;6951;6944:12;6903:55;6990:2;6977:16;7013:60;7029:43;7069:2;7029:43;:::i;7013:60::-;7107:15;;;7189:1;7185:10;;;;7177:19;;7173:28;;;7138:12;;;;7213:19;;;7210:39;;;7245:1;7242;7235:12;7210:39;7269:11;;;;7289:142;7305:6;7300:3;7297:15;7289:142;;;7371:17;;7359:30;;7322:12;;;;7409;;;;7289:142;;;7450:5;7440:15;;;;;;;6323:1138;;;;;:::o;7466:180::-;7525:6;7578:2;7566:9;7557:7;7553:23;7549:32;7546:52;;;7594:1;7591;7584:12;7546:52;-1:-1:-1;7617:23:1;;7466:180;-1:-1:-1;7466:180:1:o;7840:159::-;7907:20;;7967:6;7956:18;;7946:29;;7936:57;;7989:1;7986;7979:12;7936:57;7840:159;;;:::o;8004:328::-;8078:6;8086;8094;8147:2;8135:9;8126:7;8122:23;8118:32;8115:52;;;8163:1;8160;8153:12;8115:52;8186:28;8204:9;8186:28;:::i;:::-;8176:38;;8233:37;8266:2;8255:9;8251:18;8233:37;:::i;:::-;8223:47;;8289:37;8322:2;8311:9;8307:18;8289:37;:::i;:::-;8279:47;;8004:328;;;;;:::o;8337:241::-;8393:6;8446:2;8434:9;8425:7;8421:23;8417:32;8414:52;;;8462:1;8459;8452:12;8414:52;8501:9;8488:23;8520:28;8542:5;8520:28;:::i;9599:474::-;9689:6;9697;9705;9713;9721;9774:3;9762:9;9753:7;9749:23;9745:33;9742:53;;;9791:1;9788;9781:12;9742:53;9814:28;9832:9;9814:28;:::i;:::-;9804:38;;9861:37;9894:2;9883:9;9879:18;9861:37;:::i;:::-;9851:47;;9917:37;9950:2;9939:9;9935:18;9917:37;:::i;:::-;9907:47;;9973:37;10006:2;9995:9;9991:18;9973:37;:::i;:::-;9963:47;;10029:38;10062:3;10051:9;10047:19;10029:38;:::i;:::-;10019:48;;9599:474;;;;;;;;:::o;10419:385::-;10505:6;10513;10521;10529;10582:3;10570:9;10561:7;10557:23;10553:33;10550:53;;;10599:1;10596;10589:12;10550:53;-1:-1:-1;;10622:23:1;;;10692:2;10677:18;;10664:32;;-1:-1:-1;10743:2:1;10728:18;;10715:32;;10794:2;10779:18;10766:32;;-1:-1:-1;10419:385:1;-1:-1:-1;10419:385:1:o;10809:341::-;11011:2;10993:21;;;11050:2;11030:18;;;11023:30;-1:-1:-1;;;11084:2:1;11069:18;;11062:47;11141:2;11126:18;;10809:341::o;11428:461::-;11481:3;11519:5;11513:12;11546:6;11541:3;11534:19;11572:4;11601:2;11596:3;11592:12;11585:19;;11638:2;11631:5;11627:14;11659:1;11669:195;11683:6;11680:1;11677:13;11669:195;;;11748:13;;-1:-1:-1;;;;;11744:39:1;11732:52;;11804:12;;;;11839:15;;;;11780:1;11698:9;11669:195;;;-1:-1:-1;11880:3:1;;11428:461;-1:-1:-1;;;;;11428:461:1:o;11894:342::-;12095:2;12084:9;12077:21;12058:4;12115:56;12167:2;12156:9;12152:18;12144:6;12115:56;:::i;:::-;12107:64;;12221:6;12214:14;12207:22;12202:2;12191:9;12187:18;12180:50;11894:342;;;;;:::o;12241:127::-;12302:10;12297:3;12293:20;12290:1;12283:31;12333:4;12330:1;12323:15;12357:4;12354:1;12347:15;12373:422;12462:1;12505:5;12462:1;12519:270;12540:7;12530:8;12527:21;12519:270;;;12599:4;12595:1;12591:6;12587:17;12581:4;12578:27;12575:53;;;12608:18;;:::i;:::-;12658:7;12648:8;12644:22;12641:55;;;12678:16;;;;12641:55;12757:22;;;;12717:15;;;;12519:270;;;12523:3;12373:422;;;;;:::o;12800:806::-;12849:5;12879:8;12869:80;;-1:-1:-1;12920:1:1;12934:5;;12869:80;12968:4;12958:76;;-1:-1:-1;13005:1:1;13019:5;;12958:76;13050:4;13068:1;13063:59;;;;13136:1;13131:130;;;;13043:218;;13063:59;13093:1;13084:10;;13107:5;;;13131:130;13168:3;13158:8;13155:17;13152:43;;;13175:18;;:::i;:::-;-1:-1:-1;;13231:1:1;13217:16;;13246:5;;13043:218;;13345:2;13335:8;13332:16;13326:3;13320:4;13317:13;13313:36;13307:2;13297:8;13294:16;13289:2;13283:4;13280:12;13276:35;13273:77;13270:159;;;-1:-1:-1;13382:19:1;;;13414:5;;13270:159;13461:34;13486:8;13480:4;13461:34;:::i;:::-;13531:6;13527:1;13523:6;13519:19;13510:7;13507:32;13504:58;;;13542:18;;:::i;:::-;13580:20;;12800:806;-1:-1:-1;;;12800:806:1:o;13611:140::-;13669:5;13698:47;13739:4;13729:8;13725:19;13719:4;13698:47;:::i;13756:217::-;13796:1;13822;13812:132;;13866:10;13861:3;13857:20;13854:1;13847:31;13901:4;13898:1;13891:15;13929:4;13926:1;13919:15;13812:132;-1:-1:-1;13958:9:1;;13756:217::o;15032:168::-;15072:7;15138:1;15134;15130:6;15126:14;15123:1;15120:21;15115:1;15108:9;15101:17;15097:45;15094:71;;;15145:18;;:::i;:::-;-1:-1:-1;15185:9:1;;15032:168::o;15205:127::-;15266:10;15261:3;15257:20;15254:1;15247:31;15297:4;15294:1;15287:15;15321:4;15318:1;15311:15;15337:127;15398:10;15393:3;15389:20;15386:1;15379:31;15429:4;15426:1;15419:15;15453:4;15450:1;15443:15;15469:125;15509:4;15537:1;15534;15531:8;15528:34;;;15542:18;;:::i;:::-;-1:-1:-1;15579:9:1;;15469:125::o;15599:135::-;15638:3;15659:17;;;15656:43;;15679:18;;:::i;:::-;-1:-1:-1;15726:1:1;15715:13;;15599:135::o;16506:175::-;16543:3;16587:4;16580:5;16576:16;16616:4;16607:7;16604:17;16601:43;;16624:18;;:::i;:::-;16673:1;16660:15;;16506:175;-1:-1:-1;;16506:175:1:o;17449:224::-;17488:3;17516:6;17549:2;17546:1;17542:10;17579:2;17576:1;17572:10;17610:3;17606:2;17602:12;17597:3;17594:21;17591:47;;;17618:18;;:::i;:::-;17654:13;;17449:224;-1:-1:-1;;;;17449:224:1:o;18812:425::-;19014:2;18996:21;;;19053:2;19033:18;;;19026:30;19092:34;19087:2;19072:18;;19065:62;19163:31;19158:2;19143:18;;19136:59;19227:3;19212:19;;18812:425::o;21392:251::-;21462:6;21515:2;21503:9;21494:7;21490:23;21486:32;21483:52;;;21531:1;21528;21521:12;21483:52;21563:9;21557:16;21582:31;21607:5;21582:31;:::i;23124:245::-;23191:6;23244:2;23232:9;23223:7;23219:23;23215:32;23212:52;;;23260:1;23257;23250:12;23212:52;23292:9;23286:16;23311:28;23333:5;23311:28;:::i;25704:128::-;25744:3;25775:1;25771:6;25768:1;25765:13;25762:39;;;25781:18;;:::i;:::-;-1:-1:-1;25817:9:1;;25704:128::o;26248:332::-;26455:6;26444:9;26437:25;26498:2;26493;26482:9;26478:18;26471:30;26418:4;26518:56;26570:2;26559:9;26555:18;26547:6;26518:56;:::i;26585:881::-;26680:6;26711:2;26754;26742:9;26733:7;26729:23;26725:32;26722:52;;;26770:1;26767;26760:12;26722:52;26803:9;26797:16;26836:18;26828:6;26825:30;26822:50;;;26868:1;26865;26858:12;26822:50;26891:22;;26944:4;26936:13;;26932:27;-1:-1:-1;26922:55:1;;26973:1;26970;26963:12;26922:55;27002:2;26996:9;27025:60;27041:43;27081:2;27041:43;:::i;27025:60::-;27119:15;;;27201:1;27197:10;;;;27189:19;;27185:28;;;27150:12;;;;27225:19;;;27222:39;;;27257:1;27254;27247:12;27222:39;27281:11;;;;27301:135;27317:6;27312:3;27309:15;27301:135;;;27383:10;;27371:23;;27334:12;;;;27414;;;;27301:135;;27874:582;28173:6;28162:9;28155:25;28216:6;28211:2;28200:9;28196:18;28189:34;28259:3;28254:2;28243:9;28239:18;28232:31;28136:4;28280:57;28332:3;28321:9;28317:19;28309:6;28280:57;:::i;:::-;-1:-1:-1;;;;;28373:32:1;;;;28368:2;28353:18;;28346:60;-1:-1:-1;28437:3:1;28422:19;28415:35;28272:65;27874:582;-1:-1:-1;;;27874:582:1:o;29073:306::-;29161:6;29169;29177;29230:2;29218:9;29209:7;29205:23;29201:32;29198:52;;;29246:1;29243;29236:12;29198:52;29275:9;29269:16;29259:26;;29325:2;29314:9;29310:18;29304:25;29294:35;;29369:2;29358:9;29354:18;29348:25;29338:35;;29073:306;;;;;:::o;29637:217::-;29676:4;29705:6;29761:10;;;;29731;;29783:12;;;29780:38;;;29798:18;;:::i;:::-;29835:13;;29637:217;-1:-1:-1;;;29637:217:1:o;30069:510::-;30340:6;30329:9;30322:25;30383:3;30378:2;30367:9;30363:18;30356:31;30303:4;30404:57;30456:3;30445:9;30441:19;30433:6;30404:57;:::i;:::-;-1:-1:-1;;;;;30497:32:1;;;;30492:2;30477:18;;30470:60;-1:-1:-1;30561:2:1;30546:18;30539:34;30396:65;30069:510;-1:-1:-1;;30069:510:1:o

Swarm Source

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