ETH Price: $3,617.83 (+5.73%)

Token

BNDR ($SWIPES)
 

Overview

Max Total Supply

1,000,000,000 $SWIPES

Holders

749 ( -0.134%)

Market

Price

$0.00 @ 0.000001 ETH (-3.11%)

Onchain Market Cap

$2,211,438.79

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: $SWIPES
Balance
45,390,899.082835137 $SWIPES

Value
$100,379.20 ( ~27.7457 Eth) [4.5391%]
0xc30a3c1f39b0f0ec235c0187276513bb01b8cd73
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Bndr.ai platform facilitates seamless connections between users and projects, enhancing the process of discovering new opportunities.

Market

Volume (24H):$3,512.40
Market Capitalization:$0.00
Circulating Supply:0.00 $SWIPES
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Bndr

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 50 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-29
*/

// 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 IInitializer {
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
}


interface IStaking {
    function addRewards(uint256 rewardAmount) external;
}


contract Bndr is IERC20 {
    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }


    struct Ratios {
        uint16 marketing;
        uint16 development;
        uint16 staking;
        uint16 team;
        uint16 totalSwap;
    }


    struct TaxWallets {
        address payable marketing;
        address payable development;
        address payable team;
        address payable staking;
    }


    struct TokenDistributionWallets {
        address team_advisors;
        address marketing;
        address dev_wallet;
        address private_sell;
        address liquidity_operations;
    }


    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xB6BE6742242E401035be7032CF6C705415e08760),
        development: payable(0xBCF40d3b26c932aDE09A2c53D3ACcc3172A68666),
        team: payable(0xd0405F6d830feFc8E0223337c701418d91d41cDA),
        staking: payable(0xcf27f53f2279a2F92660F6729943FD04122aa003)
    });


    TokenDistributionWallets public tokenDistributionWallets = TokenDistributionWallets({
        team_advisors: 0x3838e628448f2Ab5ff424e8867B856455A092399,
        marketing: 0xE9A624575D3379fD841A17E1e7Aae6c8423FCcDa,
        dev_wallet: 0xB8749d4a399C875f2F17eB34053521137AfEBf84,
        private_sell: 0xE2ec39d3911740d8BbF540f04b8A34124342A4fA,
        liquidity_operations: 0xCdd889740122dDd4C319A5B97F642de0b8afF9A0
    });


    uint8 constant private _decimals = 9;
    string constant private _symbol = "$SWIPES";
    string constant private _name = "BNDR";
    uint256 constant private startingSupply = 1_000_000_000;
    uint256 constant private _tTotal = startingSupply * 10**_decimals;


    mapping (address => uint256) private _tOwned;


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


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


    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromWallet;
    mapping(address => uint256) private _lastSwapTime;

    uint256 public max_wallet = _tTotal * 30 /1000;
    uint256 public max_transaction = _tTotal * 30 /1000;


    mapping (address => mapping (address => uint256)) private _allowances;


    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;


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


    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    uint256 public sellCooldownTime = 299;


    bool public taxesAreLocked;
    bool public addRewardsEnabled;


    address private _owner;
    uint256 public launchStamp;
    IInitializer initializer;


    bool public _hasLiqBeenAdded = false;
    bool public tradingEnabled = false;


    bool public initialized;


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


    Ratios public _ratios = Ratios({
        marketing: 1,
        development: 1,
        staking: 1,
        team: 1,
        totalSwap: 4
    });


    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


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


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


    constructor () {
        _owner = msg.sender;
    }


    function initialize(address[] memory _whlist) external onlyOwner {
        require(!initialized, "already initialized");
        initialized = true;
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock


        _isExcludedFromWallet[tokenDistributionWallets.marketing] = true;
        _isExcludedFromWallet[tokenDistributionWallets.liquidity_operations] = true;
        _isExcludedFromWallet[tokenDistributionWallets.team_advisors] = true;
        _isExcludedFromWallet[tokenDistributionWallets.private_sell] = true;
        _isExcludedFromWallet[tokenDistributionWallets.dev_wallet] = true;
       
        _tOwned[tokenDistributionWallets.marketing] = _tTotal * 100 / 1000;
        _tOwned[tokenDistributionWallets.liquidity_operations] = _tTotal * 650 / 1000;
        _tOwned[tokenDistributionWallets.team_advisors] = _tTotal * 100 / 1000;
        _tOwned[tokenDistributionWallets.private_sell] = _tTotal * 50 / 1000;
        _tOwned[tokenDistributionWallets.dev_wallet] = _tTotal * 100 / 1000;


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

        _isExcludedFromFees[tokenDistributionWallets.marketing] = true;
        _isExcludedFromFees[tokenDistributionWallets.liquidity_operations] = true;
        _isExcludedFromFees[tokenDistributionWallets.team_advisors] = true;
        _isExcludedFromFees[tokenDistributionWallets.private_sell] = true;
        _isExcludedFromFees[tokenDistributionWallets.dev_wallet] = true;
       
        for (uint i = 0; i < _whlist.length; i++) {
            _isExcludedFromFees[_whlist[i]] = true;
            _isExcludedFromWallet[_whlist[i]] = true;
        }


        emit Transfer(address(0), tokenDistributionWallets.liquidity_operations,  _tTotal * 650 / 1000);
        emit Transfer(address(0), tokenDistributionWallets.team_advisors, _tTotal * 100 / 1000);
        emit Transfer(address(0), tokenDistributionWallets.marketing,  _tTotal * 100 / 1000);
        emit Transfer(address(0), tokenDistributionWallets.private_sell,  _tTotal * 50 / 1000);
        emit Transfer(address(0), tokenDistributionWallets.dev_wallet,  _tTotal * 100 / 1000);
    }


    function applyTaxes(address from, uint256 amount, bool buy, bool sell) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }
        if (currentFee == 0) { return amount; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }
        return amount - feeAmount;
    }


    function settleUpdate(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }


        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? applyTaxes(from, amount, buy, sell) : amount;
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }


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


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


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


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


        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 teamBalance = (amtBalance * ratios.team) / ratios.totalSwap;
        uint256 stakingBalance = (amtBalance * ratios.staking) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (stakingBalance + developmentBalance + teamBalance);
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}("");
        }
        if (ratios.team > 0) {
            (success,) = _taxWallets.team.call{value: teamBalance, gas: 55000}("");
        }
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}("");
        }
        if (ratios.staking > 0) {
            (success,) = _taxWallets.staking.call{value: stakingBalance, gas: 55000}("");
            if (addRewardsEnabled) {
                try IStaking(_taxWallets.staking).addRewards(stakingBalance) {} catch {}
            }
        }
    }


    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(from != address(0), "ERC20: transfer from the zero address");


        bool sell = false;
        bool other = false;
        bool buy = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
            if(!_isExcludedFromWallet[from]){
                if (amount>max_transaction){
                    revert("Transaction Exceeds Max Transaction");}
                    }
        } else {
            other = true;
        }

        if (!_isExcludedFromWallet[to]){
            if (_tOwned[to]+amount>max_wallet){
                revert("Transaction Exceeds Max Wallet");
            }
        }


        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }


        if (sell) {
            if (!_isExcludedFromFees[from]){
                require(_lastSwapTime[from]+sellCooldownTime < block.timestamp, "You need to wait before selling again");
                _lastSwapTime[from]=block.timestamp;
            }
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return settleUpdate(from, to, amount, buy, sell, other);
    }


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


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

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


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


    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
   
    function isExcludedFromWallet(address account) external view returns(bool) {
        return _isExcludedFromWallet[account];
    }
    function CoolDownTime() external view returns(uint256)  {
        return sellCooldownTime;
    }
    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 MaxWalletTokens() external view returns(uint256)  {
        return max_wallet;
    }
    function MaxTransactionTokens() external view returns(uint256)  {
        return max_transaction;
    }
    function _approve(address sender, address spender, uint256 amount) internal {
        require(spender != address(0), "ERC20: Zero Address");
        require(sender != address(0), "ERC20: Zero Address");


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


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


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


    /** OWNER FUNCTIONS */


    function startStaking(bool _enable) external onlyOwner {
        addRewardsEnabled = _enable;
    }

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


    function sweepExternalTokens(address token) external onlyOwner {
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }


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


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


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


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


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


    function setRecipients(address payable marketing, address payable staking, address payable development, address payable team) external onlyOwner {
        _taxWallets.development = payable(development);
        _taxWallets.staking = payable(staking);
        _taxWallets.team = payable(team);
        _taxWallets.marketing = payable(marketing);
        require(marketing != address(0) && staking != address(0) && development != address(0) && team != address(0), "Cannot be zero address.");
    }


    function setAllocations(uint16 marketing, uint16 development, uint16 team, uint16 staking) external onlyOwner {
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;


        _ratios.development = development;
        _ratios.team = team;
        _ratios.staking = staking;
        _ratios.marketing = marketing;
        _ratios.totalSwap = marketing + staking + development + team;


        require(_ratios.totalSwap <= total, "Cannot exceed sum of buy and sell fees.");
    }
   
    function setMaxWallet(uint256 maxWallet, uint256 maxTransaction) external onlyOwner {
        max_wallet = _tTotal * maxWallet / 1000;
        max_transaction = _tTotal * maxTransaction / 1000;
        require(max_wallet <= _tTotal, "Cannot exceed Total supply.");
        require(max_transaction <= _tTotal, "Cannot exceed Total supply.");
    }


    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(_taxRates.sellFee>sellFee,"Protects community against increasing taxes");
        require(_taxRates.buyFee>buyFee, "Protects community against increasing taxes");


        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
        _taxRates.buyFee = buyFee;


        if (block.timestamp >= launchStamp + 3 days && launchStamp != 0) {
            require(buyFee <= maxBuyTaxes
                    && sellFee <= maxSellTaxes
                    && transferFee <= maxTransferTaxes,
                    "Cannot exceed maximums.");
        }


    }


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


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


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


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


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


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


    function setNewRouter(address newRouter) external onlyOwner {
        IRouter02 _newRouter = IRouter02(newRouter);
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");


        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }


        _isExcludedFromWallet[lpPair]=true;
        _isExcludedFromWallet[newRouter]=true;


        lpPairs[lpPair] = true;
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }


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


    function revokeAccess() external onlyOwner {
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);


        emit OwnershipTransferred(oldOwner, address(0));
        require(tradingEnabled, "Cannot renounce until trading has been enabled.");
    }


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


    receive() external payable {}
    function totalSupply() external pure override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return _owner; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","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":"CoolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTransactionTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"team","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":"development","type":"address"},{"internalType":"address payable","name":"team","type":"address"},{"internalType":"address payable","name":"staking","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addRewardsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"distributeCoins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whlist","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","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":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_wallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_whlist","type":"address[]"}],"name":"resetWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCooldownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"}],"name":"setAllocations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxTransaction","type":"uint256"}],"name":"setMaxWallet","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":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"staking","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"name":"setRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"selltime","type":"uint256"}],"name":"setSellCooldownTime","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":"bool","name":"_enable","type":"bool"}],"name":"startStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributionWallets","outputs":[{"internalType":"address","name":"team_advisors","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"dev_wallet","type":"address"},{"internalType":"address","name":"private_sell","type":"address"},{"internalType":"address","name":"liquidity_operations","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

73b6be6742242e401035be7032cf6c705415e08760608081905273bcf40d3b26c932ade09a2c53d3accc3172a6866660a081905273d0405f6d830fefc8e0223337c701418d91d41cda60c081905273cf27f53f2279a2f92660f6729943fd04122aa00360e08190525f80546001600160a01b0319908116909517815560018054861690941790935560028054851690921790915560038054841690911790556101a0604052733838e628448f2ab5ff424e8867b856455a09239961010081905273e9a624575d3379fd841a17e1e7aae6c8423fccda61012081905273b8749d4a399c875f2f17eb34053521137afebf8461014081905273e2ec39d3911740d8bbf540f04b8a34124342a4fa61016081905273cdd889740122ddd4c319a5b97f642de0b8aff9a0610180819052600480548816909517909455600580548716909317909255600680548616909117905560078054851690911790556008805490931617909155600b556103e86101766009600a61038f565b61018490633b9aca006103a4565b61018f90601e6103a4565b61019991906103bb565b6011556103e86101ab6009600a61038f565b6101b990633b9aca006103a4565b6101c490601e6103a4565b6101ce91906103bb565b601255600a6015556017805460ff60a81b1916905561012b601a55601d805461ffff60a01b1916905560408051606080820183526103e88083526020808401919091525f92840192909252601e805465ffffffffffff19166303e803e8179055825160a08101845260018082529281018390529283018290528201526004608090910152601f8054680400010001000100016001600160501b031990911617905534801561027a575f80fd5b50601b805462010000600160b01b0319163362010000021790556103da565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156102e757815f19048211156102cd576102cd610299565b808516156102da57918102915b93841c93908002906102b2565b509250929050565b5f826102fd57506001610389565b8161030957505f610389565b816001811461031f576002811461032957610345565b6001915050610389565b60ff84111561033a5761033a610299565b50506001821b610389565b5060208310610133831016604e8410600b8410161715610368575081810a610389565b61037283836102ad565b805f190482111561038557610385610299565b0290505b92915050565b5f61039d60ff8416836102ef565b9392505050565b808202811582820484141761038957610389610299565b5f826103d557634e487b7160e01b5f52601260045260245ffd5b500490565b61477a806103e75f395ff3fe60806040526004361061035f575f3560e01c806370a08231116101c3578063b3295635116100f5578063d3459d0b11610099578063d3459d0b14610b04578063dd62ed3e14610b19578063e717fc3014610b5d578063eafb5a3c14610b72578063ee5d9c2d14610b91578063f94aa1b414610ba5578063fb78680d14610c09578063fdb78c0e14610c28578063feadde9c14610c48575f80fd5b8063b3295635146109c0578063b3d514fb1461055b578063b7df8b36146109df578063b9e0ddfa146109f8578063bd7c004714610a2f578063bfc2fc3514610a4e578063c3e981db14610a6d578063cf84770614610a8c575f80fd5b806395d89b411161016757806395d89b4114610865578063a1e900e014610894578063a224cee714610906578063a9059cbb14610925578063ab558e4d14610944578063abe57e7014610963578063ace96c3214610982578063b10e6c94146109a1578063b1b08f711461055b575f80fd5b806370a082311461078a5780637f4cdb1f146107a957806380c581d1146107bd57806386240a23146107dc578063893d20e8146107fb5780638a63bd9b1461081e5780638a8c523c146108325780638f28397014610846575f80fd5b806332cde6641161029c5780634e718e48116102405780634e718e48146106795780634fbee1931461069857806350a8e016146106cf578063590ffdce146106ef578063596cd99b1461070e5780635a6f09181461072d5780635c24b074146107425780636920b492146107615780636a50c66d14610775575f80fd5b806332cde664146105a057806335b90399146105c1578063452ed4f1146105df5780634ada218b146105fe5780634bbb93eb1461061e5780634c23bdbd1461063d5780634d9f486e146106515780634e4c7d9b14610665575f80fd5b8063158ef93e11610303578063158ef93e146104df57806318160ddd146104ff57806323b872dd1461051357806328577751146105325780632b112e49146105475780632b28fc7a1461055b5780632e8fa82114610570578063313ce56714610585575f80fd5b806303fd2a451461036a5780630445b66714610395578063069d955f146103b857806306fdde031461040c5780630758d9241461044157806307dd79e014610460578063095ea7b3146104895780630dcbcf1c146104a8575f80fd5b3661036657005b5f80fd5b348015610375575f80fd5b5061037f61dead81565b60405161038c9190613e03565b60405180910390f35b3480156103a0575f80fd5b506103aa60185481565b60405190815260200161038c565b3480156103c3575f80fd5b50601e546103e79061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038c565b348015610417575f80fd5b506040805180820190915260048152632127222960e11b60208201525b60405161038c9190613e17565b34801561044c575f80fd5b5060165461037f906001600160a01b031681565b34801561046b575f80fd5b50601b546104799060ff1681565b604051901515815260200161038c565b348015610494575f80fd5b506104796104a3366004613e60565b610c67565b3480156104b3575f80fd5b506104796104c2366004613e8a565b6001600160a01b03165f908152600d602052604090205460ff1690565b3480156104ea575f80fd5b50601d5461047990600160b01b900460ff1681565b34801561050a575f80fd5b506103aa610c7d565b34801561051e575f80fd5b5061047961052d366004613ea5565b610c9d565b34801561053d575f80fd5b506103aa60155481565b348015610552575f80fd5b506103aa610d12565b348015610566575f80fd5b506103aa6103e881565b34801561057b575f80fd5b506103aa60195481565b348015610590575f80fd5b506040516009815260200161038c565b3480156105ab575f80fd5b506105bf6105ba366004613ef9565b610d55565b005b3480156105cc575f80fd5b50601b5461047990610100900460ff1681565b3480156105ea575f80fd5b5060175461037f906001600160a01b031681565b348015610609575f80fd5b50601d5461047990600160a81b900460ff1681565b348015610629575f80fd5b506103aa610638366004613f39565b610f06565b348015610648575f80fd5b50601a546103aa565b34801561065c575f80fd5b506105bf610f37565b348015610670575f80fd5b506105bf610f76565b348015610684575f80fd5b506105bf610693366004613f39565b611087565b3480156106a3575f80fd5b506104796106b2366004613e8a565b6001600160a01b03165f908152600e602052604090205460ff1690565b3480156106da575f80fd5b50601d5461047990600160a01b900460ff1681565b3480156106fa575f80fd5b506105bf610709366004613f5d565b611106565b348015610719575f80fd5b506105bf610728366004613f94565b611160565b348015610738575f80fd5b506103aa601c5481565b34801561074d575f80fd5b506105bf61075c366004613e8a565b611261565b34801561076c575f80fd5b506011546103aa565b348015610780575f80fd5b506103aa60125481565b348015610795575f80fd5b506103aa6107a4366004613e8a565b6113e3565b3480156107b4575f80fd5b506012546103aa565b3480156107c8575f80fd5b506105bf6107d7366004613f5d565b6113fd565b3480156107e7575f80fd5b506105bf6107f63660046140c8565b6115c2565b348015610806575f80fd5b50601b546201000090046001600160a01b031661037f565b348015610829575f80fd5b5061047961169f565b34801561083d575f80fd5b506105bf6116f0565b348015610851575f80fd5b506105bf610860366004613e8a565b611904565b348015610870575f80fd5b506040805180820190915260078152662453574950455360c81b6020820152610434565b34801561089f575f80fd5b506004546005546006546007546008546108cc946001600160a01b03908116948116938116928116911685565b604080516001600160a01b03968716815294861660208601529285169284019290925283166060830152909116608082015260a00161038c565b348015610911575f80fd5b506105bf6109203660046140c8565b611a55565b348015610930575f80fd5b5061047961093f366004613e60565b6120e5565b34801561094f575f80fd5b506105bf61095e366004613e8a565b6120fb565b34801561096e575f80fd5b506105bf61097d3660046140f9565b61221a565b34801561098d575f80fd5b506105bf61099c366004613f5d565b61232a565b3480156109ac575f80fd5b506105bf6109bb366004614119565b612384565b3480156109cb575f80fd5b506105bf6109da366004614134565b6123ce565b3480156109ea575f80fd5b506014546104799060ff1681565b348015610a03575f80fd5b50610479610a12366004613e8a565b6001600160a01b03165f908152600f602052604090205460ff1690565b348015610a3a575f80fd5b506105bf610a49366004613f39565b612518565b348015610a59575f80fd5b506105bf610a68366004614185565b61254d565b348015610a78575f80fd5b506105bf610a873660046141a1565b6125e2565b348015610a97575f80fd5b50601f54610acf9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161038c565b348015610b0f575f80fd5b506103aa601a5481565b348015610b24575f80fd5b506103aa610b33366004614255565b6001600160a01b039182165f90815260136020908152604080832093909416825291909152205490565b348015610b68575f80fd5b506103aa60115481565b348015610b7d575f80fd5b506105bf610b8c366004613e8a565b612756565b348015610b9c575f80fd5b506105bf612b1f565b348015610bb0575f80fd5b505f54600154600254600354610bd6936001600160a01b03908116938116928116911684565b604080516001600160a01b039586168152938516602085015291841691830191909152909116606082015260800161038c565b348015610c14575f80fd5b506105bf610c23366004614281565b612bea565b348015610c33575f80fd5b5060175461047990600160a81b900460ff1681565b348015610c53575f80fd5b506105bf610c62366004613f5d565b612dfb565b5f610c73338484612e55565b5060015b92915050565b5f610c8a6009600a6143a4565b610c9890633b9aca006143b2565b905090565b6001600160a01b0383165f9081526013602090815260408083203384529091528120545f1914610cff576001600160a01b0384165f90815260136020908152604080832033845290915281208054849290610cf99084906143c9565b90915550505b610d0a848484612f19565b949350505050565b5f610d1c5f6113e3565b610d2761dead6113e3565b610d3191906143dc565b610d3d6009600a6143a4565b610d4b90633b9aca006143b2565b610c9891906143c9565b601b546201000090046001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610d85906143ef565b60405180910390fd5b601b5460ff1615610dd55760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d85565b601e5461ffff808416620100009092041611610e035760405162461bcd60e51b8152600401610d859061441a565b601e5461ffff808516911611610e2b5760405162461bcd60e51b8152600401610d859061441a565b601e805465ffffffff000019166201000061ffff8581169190910265ffff00000000191691909117600160201b848316021761ffff1916908516179055601c54610e78906203f4806143dc565b4210158015610e885750601c5415155b15610f01576103e88361ffff1611158015610ea957506103e88261ffff1611155b8015610ebb57506103e88161ffff1611155b610f015760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba1032bc31b2b2b21036b0bc34b6bab6b99760491b6044820152606401610d85565b505050565b6017545f906103e8908390610f23906001600160a01b03166113e3565b610f2d91906143b2565b610c779190614465565b601b546201000090046001600160a01b03163314610f675760405162461bcd60e51b8152600401610d85906143ef565b601b805460ff19166001179055565b601b546201000090046001600160a01b03163314610fa65760405162461bcd60e51b8152600401610d85906143ef565b601b54610fc2906201000090046001600160a01b03165f611106565b601b805462010000600160b01b03198116909155604051620100009091046001600160a01b0316905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601d54600160a81b900460ff166110845760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610d85565b50565b601b546201000090046001600160a01b031633146110b75760405162461bcd60e51b8152600401610d85906143ef565b601581905560968111156110845760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d85565b601b546201000090046001600160a01b031633146111365760405162461bcd60e51b8152600401610d85906143ef565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b601b546201000090046001600160a01b031633146111905760405162461bcd60e51b8152600401610d85906143ef565b600180546001600160a01b038085166001600160a01b03199283161790925560038054868416908316179055600280548484169083161790555f80549287169290911682179055158015906111ed57506001600160a01b03831615155b801561120157506001600160a01b03821615155b801561121557506001600160a01b03811615155b61125b5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610d85565b50505050565b601b546201000090046001600160a01b031633146112915760405162461bcd60e51b8152600401610d85906143ef565b306001600160a01b038216036112da5760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d85565b601d54600160a81b900460ff16156112f0575f80fd5b601d80546001600160a01b0319166001600160a01b038316908117909155604080516330fe427560e21b8152815163c3f909d49260048084019391929182900301815f875af1925050508015611363575060408051601f3d908101601f1916820190925261136091810190614484565b60015b61136b575f80fd5b601680546001600160a01b038085166001600160a01b0319928316178355601780548583169316831790555f918252600a6020526040909120805460ff1916600117905590546113bf913091165f19612e55565b601b54601654610f01916001600160a01b0362010000909104811691165f19612e55565b6001600160a01b03165f9081526009602052604090205490565b601b546201000090046001600160a01b0316331461142d5760405162461bcd60e51b8152600401610d85906143ef565b806114ab576001600160a01b038083165f908152600a6020526040808220805460ff19169055601d5490516380c581d160e01b81529216916380c581d19161147a918691906004016144b1565b5f604051808303815f87803b158015611491575f80fd5b505af11580156114a3573d5f803e3d5ffd5b505050505050565b6001600160a01b0382165f908152600a602052604090205460ff16156115115760405162461bcd60e51b815260206004820152601b60248201527a2830b4b91030b63932b0b23c9030b23232b2103a37903634b9ba1760291b6044820152606401610d85565b600b541561156a576203f480600b544261152b91906143c9565b1161156a5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d85565b42600b556001600160a01b038083165f908152600a602052604090819020805460ff19166001908117909155601d5491516380c581d160e01b815291909216916380c581d19161147a9186916004016144b1565b5050565b601b546201000090046001600160a01b031633146115f25760405162461bcd60e51b8152600401610d85906143ef565b5f5b81518110156115be575f600e5f848481518110611613576116136144cc565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f600f5f848481518110611666576116666144cc565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016115f4565b601b545f906201000090046001600160a01b031633146116d15760405162461bcd60e51b8152600401610d85906143ef565b6016546116ea9030906001600160a01b03165f19612e55565b50600190565b601b546201000090046001600160a01b031633146117205760405162461bcd60e51b8152600401610d85906143ef565b601d546001600160a01b031661174357601d80546001600160a01b031916301790555b601d54600160a01b900460ff166117975760405162461bcd60e51b81526020600482015260186024820152772634b8bab4b234ba3c9036bab9ba1031329030b23232b21760411b6044820152606401610d85565b601d54600160a81b900460ff16156117ec5760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610d85565b601d54601754604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff431660248201526001600160401b034216604482015260096064820152911690636c115c34906084015f604051808303815f87803b158015611854575f80fd5b505af1925050508015611865575060015b50601d546017546001600160a01b03918216916325a71cae9161188891166113e3565b6040518263ffffffff1660e01b81526004016118a691815260200190565b60408051808303815f875af19250505080156118df575060408051601f3d908101601f191682019092526118dc918101906144e0565b60015b156118eb576019556018555b42601c55601d805460ff60a81b1916600160a81b179055565b601b546201000090046001600160a01b031633146119345760405162461bcd60e51b8152600401610d85906143ef565b61deac196001600160a01b0382160161195f5760405162461bcd60e51b8152600401610d8590614502565b6001600160a01b0381166119855760405162461bcd60e51b8152600401610d8590614502565b611990816001611106565b601b546119ac906201000090046001600160a01b03165f611106565b601b545f906119c9906201000090046001600160a01b03166113e3565b11156119fa57601b546119f8906201000090046001600160a01b0316826119ef826113e3565b5f806001613422565b505b601b80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b601b546201000090046001600160a01b03163314611a855760405162461bcd60e51b8152600401610d85906143ef565b601d54600160b01b900460ff1615611ad55760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610d85565b601d805460ff60b01b1916600160b01b1790557f152feca52e8f3fdde126fe21b8dd660e1f859eb6b4fafaa83368b183ff73b961805460ff1990811660019081179092557f6952827425c8afd3eba8a8768a6defbe71191752872f74297e726c054b3ae2d480548216831790557f5928c27a6fd40c8ed0e37a03e2e351082578ae0dedc08ce702ad6e3f7d65c58380548216831790556005546001600160a01b039081165f908152600f60205260408082208054851686179055600854831682528082208054851686179055600454831682528082208054851686179055600754831682528082208054851686179055600654909216815220805490911690911790556103e8611be76009600a6143a4565b611bf590633b9aca006143b2565b611c009060646143b2565b611c0a9190614465565b6005546001600160a01b03165f908152600960208190526040909120919091556103e890611c3990600a6143a4565b611c4790633b9aca006143b2565b611c539061028a6143b2565b611c5d9190614465565b6008546001600160a01b03165f908152600960208190526040909120919091556103e890611c8c90600a6143a4565b611c9a90633b9aca006143b2565b611ca59060646143b2565b611caf9190614465565b6004546001600160a01b03165f908152600960208190526040909120919091556103e890611cde90600a6143a4565b611cec90633b9aca006143b2565b611cf79060326143b2565b611d019190614465565b6007546001600160a01b03165f908152600960208190526040909120919091556103e890611d3090600a6143a4565b611d3e90633b9aca006143b2565b611d499060646143b2565b611d539190614465565b600680546001600160a01b039081165f90815260096020908152604080832095909555601b8054620100009081900485168452600c83528684208054600160ff199182168117909255600e8086527ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548316841790559354929092048616855287852080548316821790553085528785208054831682179055600f845287852080548316821790556005548616855291909252858320805483168217905560085484168352858320805483168217905560045484168352858320805483168217905560075484168352858320805483168217905593549092168152928320805490911690911790555b8151811015611f0a576001600e5f848481518110611e7d57611e7d6144cc565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f848481518110611ed157611ed16144cc565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611e5d565b506008546001600160a01b03165f5f805160206147258339815191526103e8611f356009600a6143a4565b611f4390633b9aca006143b2565b611f4f9061028a6143b2565b611f599190614465565b60405190815260200160405180910390a36004546001600160a01b03165f5f805160206147258339815191526103e8611f946009600a6143a4565b611fa290633b9aca006143b2565b611fad9060646143b2565b611fb79190614465565b60405190815260200160405180910390a36005546001600160a01b03165f5f805160206147258339815191526103e8611ff26009600a6143a4565b61200090633b9aca006143b2565b61200b9060646143b2565b6120159190614465565b60405190815260200160405180910390a36007546001600160a01b03165f5f805160206147258339815191526103e86120506009600a6143a4565b61205e90633b9aca006143b2565b6120699060326143b2565b6120739190614465565b60405190815260200160405180910390a36006546001600160a01b03165f5f805160206147258339815191526103e86120ae6009600a6143a4565b6120bc90633b9aca006143b2565b6120c79060646143b2565b6120d19190614465565b60405190815260200160405180910390a350565b5f6120f1338484612f19565b5060019392505050565b601b546201000090046001600160a01b0316331461212b5760405162461bcd60e51b8152600401610d85906143ef565b601b546040516370a0823160e01b815282916001600160a01b038084169263a9059cbb926201000090049091169083906370a082319061216f903090600401613e03565b602060405180830381865afa15801561218a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ae919061455a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156121f6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190614571565b601b546201000090046001600160a01b0316331461224a5760405162461bcd60e51b8152600401610d85906143ef565b6103e88261225a6009600a6143a4565b61226890633b9aca006143b2565b61227291906143b2565b61227c9190614465565b6011556103e88161228f6009600a6143a4565b61229d90633b9aca006143b2565b6122a791906143b2565b6122b19190614465565b6012556122c06009600a6143a4565b6122ce90633b9aca006143b2565b60115411156122ef5760405162461bcd60e51b8152600401610d859061458c565b6122fb6009600a6143a4565b61230990633b9aca006143b2565b60125411156115be5760405162461bcd60e51b8152600401610d859061458c565b601b546201000090046001600160a01b0316331461235a5760405162461bcd60e51b8152600401610d85906143ef565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b601b546201000090046001600160a01b031633146123b45760405162461bcd60e51b8152600401610d85906143ef565b601b80549115156101000261ff0019909216919091179055565b601b546201000090046001600160a01b031633146123fe5760405162461bcd60e51b8152600401610d85906143ef565b601e545f906124199061ffff620100008204811691166145c1565b601f805467ffff0000ffff000019166201000061ffff8881169190910261ffff60301b191691909117600160301b878316021765ffff0000ffff1916600160201b8683160261ffff19161788821617909155169050828461247a84886145c1565b61248491906145c1565b61248e91906145c1565b601f805461ffff60401b1916600160401b61ffff938416810291909117918290559004168110156125115760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d85565b5050505050565b601b546201000090046001600160a01b031633146125485760405162461bcd60e51b8152600401610d85906143ef565b601a55565b601b546201000090046001600160a01b0316331461257d5760405162461bcd60e51b8152600401610d85906143ef565b60405182151581527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a16014805460ff19169115159190911790556017805460ff60a81b1916600160a81b92151592909202919091179055565b601b546201000090046001600160a01b031633146126125760405162461bcd60e51b8152600401610d85906143ef565b5f5b82518161ffff16101561270c5761262d6009600a6143a4565b828261ffff1681518110612643576126436144cc565b602002602001015161265591906143b2565b61265e336113e3565b10156126a15760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d85565b6126f933848361ffff16815181106126bb576126bb6144cc565b60200260200101516009600a6126d191906143a4565b858561ffff16815181106126e7576126e76144cc565b60200260200101516119ef91906143b2565b5080612704816145e3565b915050612614565b5080518251146115be5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d85565b601b546201000090046001600160a01b031633146127865760405162461bcd60e51b8152600401610d85906143ef565b601d548190600160a01b900460ff16156127e25760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d85565b5f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128439190614603565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b29190614603565b6040518363ffffffff1660e01b81526004016128cf92919061461e565b602060405180830381865afa1580156128ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290e9190614603565b6017546001600160a01b039081165f908152600a60205260409020805460ff191690559091508116612a8b57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612976573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299a9190614603565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a099190614603565b6040518363ffffffff1660e01b8152600401612a2692919061461e565b6020604051808303815f875af1158015612a42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a669190614603565b601780546001600160a01b0319166001600160a01b0392909216919091179055612aa7565b601780546001600160a01b0319166001600160a01b0383161790555b601780546001600160a01b039081165f908152600f602090815260408083208054600160ff19918216811790925589861685528285208054821683179055955485168452600a909252909120805490931617909155601680546001600160a01b0319169184169182179055610f019030905f19612e55565b601b546201000090046001600160a01b03163314612b4f5760405162461bcd60e51b8152600401610d85906143ef565b601b546040516001600160a01b036201000090920491909116904780156108fc02915f818181858888f19350505050158015612b8d573d5f803e3d5ffd5b50601d54600160a01b900460ff1615612be85760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d85565b565b601b546201000090046001600160a01b03163314612c1a5760405162461bcd60e51b8152600401610d85906143ef565b8082612c286009600a6143a4565b612c3690633b9aca006143b2565b612c4091906143b2565b612c4a9190614465565b6019558284612c5b6009600a6143a4565b612c6990633b9aca006143b2565b612c7391906143b2565b612c7d9190614465565b6018556017546103e890612c99906001600160a01b03166113e3565b612ca49060966143b2565b612cae9190614465565b6019541115612d0b5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d85565b620f4240612d1b6009600a6143a4565b612d2990633b9aca006143b2565b612d339190614465565b6019541015612d545760405162461bcd60e51b8152600401610d8590614638565b620f4240612d646009600a6143a4565b612d7290633b9aca006143b2565b612d7c9190614465565b6018541015612d9d5760405162461bcd60e51b8152600401610d8590614638565b601954601854111561125b5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d85565b601b546201000090046001600160a01b03163314612e2b5760405162461bcd60e51b8152600401610d85906143ef565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b038216612e7b5760405162461bcd60e51b8152600401610d8590614686565b6001600160a01b038316612ea15760405162461bcd60e51b8152600401610d8590614686565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ee691815260200190565b60405180910390a36001600160a01b039283165f9081526013602090815260408083209490951682529290925291902055565b5f6001600160a01b038316612f7c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d85565b5f8211612fdd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d85565b6001600160a01b0384166130415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d85565b6001600160a01b0384165f908152600a60205260408120548190819060ff161561306d57506001613118565b6001600160a01b0386165f908152600a602052604090205460ff1615613113576001600160a01b0387165f908152600f60205260409020546001935060ff1661310e5760125485111561310e5760405162461bcd60e51b815260206004820152602360248201527f5472616e73616374696f6e2045786365656473204d6178205472616e7361637460448201526234b7b760e91b6064820152608401610d85565b613118565b600191505b6001600160a01b0386165f908152600f602052604090205460ff166131ab576011546001600160a01b0387165f9081526009602052604090205461315d9087906143dc565b11156131ab5760405162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e2045786365656473204d61782057616c6c657400006044820152606401610d85565b6131b5878761360f565b156132b657601d54600160a81b900460ff166132b657816132135760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610d85565b6001600160a01b0387165f908152600d602052604090205460ff1615801561325357506001600160a01b0386165f908152600d602052604090205460ff16155b156132b65760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d85565b8215613409576001600160a01b0387165f908152600e602052604090205460ff1661337757601a546001600160a01b0388165f908152601060205260409020544291613301916143dc565b1061335c5760405162461bcd60e51b815260206004820152602560248201527f596f75206e65656420746f2077616974206265666f72652073656c6c696e672060448201526430b3b0b4b760d91b6064820152608401610d85565b6001600160a01b0387165f9081526010602052604090204290555b601754600160a01b900460ff1661340957601754600160a81b900460ff1615613409575f6133a4306113e3565b905060185481106134075760195460145460ff16156133f1576015546017546103e891906133da906001600160a01b03166113e3565b6133e491906143b2565b6133ee9190614465565b90505b8082106133fc578091505b61340582613729565b505b505b613417878787848787613422565b979650505050505050565b6001600160a01b0386165f908152600e602052604081205460019060ff168061346257506001600160a01b0387165f908152600e602052604090205460ff165b1561346a57505f5b6001600160a01b0388165f90815260096020526040812080548892906134919084906143c9565b909155505f9050816134a357866134af565b6134af89888888613bf5565b6001600160a01b0389165f908152600960205260408120805492935083929091906134db9084906143dc565b92505081905550876001600160a01b0316896001600160a01b03165f805160206147258339815191528360405161351491815260200190565b60405180910390a3601d54600160a01b900460ff16613600576135378989613cbe565b601d54600160a01b900460ff161580156135565750613556898961360f565b801561357a57506001600160a01b0389165f908152600d602052604090205460ff16155b801561359e57506001600160a01b0388165f908152600d602052604090205460ff16155b80156135a8575083155b156136005760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d85565b50600198975050505050505050565b601b545f906001600160a01b038481166201000090920416148015906136465750601b546201000090046001600160a01b03163214155b801561366a57506001600160a01b0382165f908152600c602052604090205460ff16155b801561368e57506001600160a01b0383165f908152600c602052604090205460ff16155b80156136a557506001600160a01b03821661dead14155b80156136b957506001600160a01b03821615155b80156136ce57506001600160a01b0383163014155b80156136e85750601d546001600160a01b03848116911614155b80156137025750601d546001600160a01b03838116911614155b80156137225750601b546001600160a01b03838116620100009092041614155b9392505050565b6017805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061376f5761376f6144cc565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156137c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ea9190614603565b816001815181106137fd576137fd6144cc565b6001600160a01b039092166020928302919091018201526040805160a081018252601f5461ffff8082168352620100008204811694830194909452600160201b8104841692820192909252600160301b820483166060820152600160401b909104909116608082018190525f03613875575050613be5565b305f9081526013602090815260408083206016546001600160a01b031684529091529020545f19146138ca57305f9081526013602090815260408083206016546001600160a01b0316845290915290205f1990555b60165460405163791ac94760e01b81526001600160a01b039091169063791ac947906139029086905f908790309042906004016146b3565b5f604051808303815f87803b158015613919575f80fd5b505af192505050801561392a575060015b613935575050613be5565b5f4790505f80836080015161ffff16846020015161ffff168461395891906143b2565b6139629190614465565b90505f846080015161ffff16856060015161ffff168561398291906143b2565b61398c9190614465565b90505f856080015161ffff16866040015161ffff16866139ac91906143b2565b6139b69190614465565b90505f826139c485846143dc565b6139ce91906143dc565b6139d890876143c9565b602088015190915061ffff1615613a43576001546040516001600160a01b039091169061d6d89086905f818181858888f193505050503d805f8114613a38576040519150601f19603f3d011682016040523d82523d5f602084013e613a3d565b606091505b50909550505b606087015161ffff1615613aab576002546040516001600160a01b039091169061d6d89085905f818181858888f193505050503d805f8114613aa0576040519150601f19603f3d011682016040523d82523d5f602084013e613aa5565b606091505b50909550505b865161ffff1615613b0f575f80546040516001600160a01b039091169161d6d8918491818181858888f193505050503d805f8114613b04576040519150601f19603f3d011682016040523d82523d5f602084013e613b09565b606091505b50909550505b604087015161ffff1615613bdc576003546040516001600160a01b039091169061d6d89084905f818181858888f193505050503d805f8114613b6c576040519150601f19603f3d011682016040523d82523d5f602084013e613b71565b606091505b5050601b54909550610100900460ff1615613bdc5760035460405163beceed3960e01b8152600481018490526001600160a01b039091169063beceed39906024015f604051808303815f87803b158015613bc9575f80fd5b505af1925050508015613bda575060015b505b50505050505050505b506017805460ff60a01b19169055565b5f808315613c0a5750601e5461ffff16613c33565b8215613c235750601e5462010000900461ffff16613c33565b50601e54600160201b900461ffff165b805f03613c435784915050610d0a565b5f6103e8613c5183886143b2565b613c5b9190614465565b90508015613cb457305f9081526009602052604081208054839290613c819084906143dc565b909155505060405181815230906001600160a01b038916905f805160206147258339815191529060200160405180910390a35b61341781876143c9565b601d54600160a01b900460ff1615613d245760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d85565b613d2e828261360f565b158015613d4857506017546001600160a01b038281169116145b156115be576001600160a01b038083165f908152600e60209081526040808320805460ff199081166001908117909255601d805460ff60a01b1916600160a01b178155600c9094529190932080549091169092179091555416613db857601d80546001600160a01b031916301790555b604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a16017805460ff60a81b1916600160a81b1790555050565b6001600160a01b0391909116815260200190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611084575f80fd5b5f8060408385031215613e71575f80fd5b8235613e7c81613e4c565b946020939093013593505050565b5f60208284031215613e9a575f80fd5b813561372281613e4c565b5f805f60608486031215613eb7575f80fd5b8335613ec281613e4c565b92506020840135613ed281613e4c565b929592945050506040919091013590565b803561ffff81168114613ef4575f80fd5b919050565b5f805f60608486031215613f0b575f80fd5b613f1484613ee3565b9250613f2260208501613ee3565b9150613f3060408501613ee3565b90509250925092565b5f60208284031215613f49575f80fd5b5035919050565b8015158114611084575f80fd5b5f8060408385031215613f6e575f80fd5b8235613f7981613e4c565b91506020830135613f8981613f50565b809150509250929050565b5f805f8060808587031215613fa7575f80fd5b8435613fb281613e4c565b93506020850135613fc281613e4c565b92506040850135613fd281613e4c565b91506060850135613fe281613e4c565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561402957614029613fed565b604052919050565b5f6001600160401b0382111561404957614049613fed565b5060051b60200190565b5f82601f830112614062575f80fd5b8135602061407761407283614031565b614001565b8083825260208201915060208460051b870101935086841115614098575f80fd5b602086015b848110156140bd5780356140b081613e4c565b835291830191830161409d565b509695505050505050565b5f602082840312156140d8575f80fd5b81356001600160401b038111156140ed575f80fd5b610d0a84828501614053565b5f806040838503121561410a575f80fd5b50508035926020909101359150565b5f60208284031215614129575f80fd5b813561372281613f50565b5f805f8060808587031215614147575f80fd5b61415085613ee3565b935061415e60208601613ee3565b925061416c60408601613ee3565b915061417a60608601613ee3565b905092959194509250565b5f8060408385031215614196575f80fd5b8235613f7981613f50565b5f80604083850312156141b2575f80fd5b82356001600160401b03808211156141c8575f80fd5b6141d486838701614053565b93506020915081850135818111156141ea575f80fd5b85019050601f810186136141fc575f80fd5b803561420a61407282614031565b81815260059190911b82018301908381019088831115614228575f80fd5b928401925b828410156142465783358252928401929084019061422d565b80955050505050509250929050565b5f8060408385031215614266575f80fd5b823561427181613e4c565b91506020830135613f8981613e4c565b5f805f8060808587031215614294575f80fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156142fe57815f19048211156142e4576142e46142b0565b808516156142f157918102915b93841c93908002906142c9565b509250929050565b5f8261431457506001610c77565b8161432057505f610c77565b816001811461433657600281146143405761435c565b6001915050610c77565b60ff841115614351576143516142b0565b50506001821b610c77565b5060208310610133831016604e8410600b841016171561437f575081810a610c77565b61438983836142c4565b805f190482111561439c5761439c6142b0565b029392505050565b5f61372260ff841683614306565b8082028115828204841417610c7757610c776142b0565b81810381811115610c7757610c776142b0565b80820180821115610c7757610c776142b0565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252602b908201527f50726f746563747320636f6d6d756e69747920616761696e737420696e63726560408201526a6173696e6720746178657360a81b606082015260800190565b5f8261447f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f8060408385031215614495575f80fd5b82516144a081613e4c565b6020840151909250613f8981613e4c565b6001600160a01b039290921682521515602082015260400190565b634e487b7160e01b5f52603260045260245ffd5b5f80604083850312156144f1575f80fd5b505080516020909101519092909150565b60208082526038908201527f43616c6c207265766f6b6541636365737320746f207472616e73666572206f776040820152773732b9103a37903a3432903d32b9379030b2323932b9b99760411b606082015260800190565b5f6020828403121561456a575f80fd5b5051919050565b5f60208284031215614581575f80fd5b815161372281613f50565b6020808252601b908201527a21b0b73737ba1032bc31b2b2b2102a37ba30b61039bab838363c9760291b604082015260600190565b61ffff8181168382160190808211156145dc576145dc6142b0565b5092915050565b5f61ffff8083168181036145f9576145f96142b0565b6001019392505050565b5f60208284031215614613575f80fd5b815161372281613e4c565b6001600160a01b0392831681529116602082015260400190565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156147035784516001600160a01b0316835293830193918301916001016146de565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204043f4038b83b0ea1aa2f34b45f4e5a68db83b545d75895fdc443694b7a262a564736f6c63430008190033

Deployed Bytecode

0x60806040526004361061035f575f3560e01c806370a08231116101c3578063b3295635116100f5578063d3459d0b11610099578063d3459d0b14610b04578063dd62ed3e14610b19578063e717fc3014610b5d578063eafb5a3c14610b72578063ee5d9c2d14610b91578063f94aa1b414610ba5578063fb78680d14610c09578063fdb78c0e14610c28578063feadde9c14610c48575f80fd5b8063b3295635146109c0578063b3d514fb1461055b578063b7df8b36146109df578063b9e0ddfa146109f8578063bd7c004714610a2f578063bfc2fc3514610a4e578063c3e981db14610a6d578063cf84770614610a8c575f80fd5b806395d89b411161016757806395d89b4114610865578063a1e900e014610894578063a224cee714610906578063a9059cbb14610925578063ab558e4d14610944578063abe57e7014610963578063ace96c3214610982578063b10e6c94146109a1578063b1b08f711461055b575f80fd5b806370a082311461078a5780637f4cdb1f146107a957806380c581d1146107bd57806386240a23146107dc578063893d20e8146107fb5780638a63bd9b1461081e5780638a8c523c146108325780638f28397014610846575f80fd5b806332cde6641161029c5780634e718e48116102405780634e718e48146106795780634fbee1931461069857806350a8e016146106cf578063590ffdce146106ef578063596cd99b1461070e5780635a6f09181461072d5780635c24b074146107425780636920b492146107615780636a50c66d14610775575f80fd5b806332cde664146105a057806335b90399146105c1578063452ed4f1146105df5780634ada218b146105fe5780634bbb93eb1461061e5780634c23bdbd1461063d5780634d9f486e146106515780634e4c7d9b14610665575f80fd5b8063158ef93e11610303578063158ef93e146104df57806318160ddd146104ff57806323b872dd1461051357806328577751146105325780632b112e49146105475780632b28fc7a1461055b5780632e8fa82114610570578063313ce56714610585575f80fd5b806303fd2a451461036a5780630445b66714610395578063069d955f146103b857806306fdde031461040c5780630758d9241461044157806307dd79e014610460578063095ea7b3146104895780630dcbcf1c146104a8575f80fd5b3661036657005b5f80fd5b348015610375575f80fd5b5061037f61dead81565b60405161038c9190613e03565b60405180910390f35b3480156103a0575f80fd5b506103aa60185481565b60405190815260200161038c565b3480156103c3575f80fd5b50601e546103e79061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161038c565b348015610417575f80fd5b506040805180820190915260048152632127222960e11b60208201525b60405161038c9190613e17565b34801561044c575f80fd5b5060165461037f906001600160a01b031681565b34801561046b575f80fd5b50601b546104799060ff1681565b604051901515815260200161038c565b348015610494575f80fd5b506104796104a3366004613e60565b610c67565b3480156104b3575f80fd5b506104796104c2366004613e8a565b6001600160a01b03165f908152600d602052604090205460ff1690565b3480156104ea575f80fd5b50601d5461047990600160b01b900460ff1681565b34801561050a575f80fd5b506103aa610c7d565b34801561051e575f80fd5b5061047961052d366004613ea5565b610c9d565b34801561053d575f80fd5b506103aa60155481565b348015610552575f80fd5b506103aa610d12565b348015610566575f80fd5b506103aa6103e881565b34801561057b575f80fd5b506103aa60195481565b348015610590575f80fd5b506040516009815260200161038c565b3480156105ab575f80fd5b506105bf6105ba366004613ef9565b610d55565b005b3480156105cc575f80fd5b50601b5461047990610100900460ff1681565b3480156105ea575f80fd5b5060175461037f906001600160a01b031681565b348015610609575f80fd5b50601d5461047990600160a81b900460ff1681565b348015610629575f80fd5b506103aa610638366004613f39565b610f06565b348015610648575f80fd5b50601a546103aa565b34801561065c575f80fd5b506105bf610f37565b348015610670575f80fd5b506105bf610f76565b348015610684575f80fd5b506105bf610693366004613f39565b611087565b3480156106a3575f80fd5b506104796106b2366004613e8a565b6001600160a01b03165f908152600e602052604090205460ff1690565b3480156106da575f80fd5b50601d5461047990600160a01b900460ff1681565b3480156106fa575f80fd5b506105bf610709366004613f5d565b611106565b348015610719575f80fd5b506105bf610728366004613f94565b611160565b348015610738575f80fd5b506103aa601c5481565b34801561074d575f80fd5b506105bf61075c366004613e8a565b611261565b34801561076c575f80fd5b506011546103aa565b348015610780575f80fd5b506103aa60125481565b348015610795575f80fd5b506103aa6107a4366004613e8a565b6113e3565b3480156107b4575f80fd5b506012546103aa565b3480156107c8575f80fd5b506105bf6107d7366004613f5d565b6113fd565b3480156107e7575f80fd5b506105bf6107f63660046140c8565b6115c2565b348015610806575f80fd5b50601b546201000090046001600160a01b031661037f565b348015610829575f80fd5b5061047961169f565b34801561083d575f80fd5b506105bf6116f0565b348015610851575f80fd5b506105bf610860366004613e8a565b611904565b348015610870575f80fd5b506040805180820190915260078152662453574950455360c81b6020820152610434565b34801561089f575f80fd5b506004546005546006546007546008546108cc946001600160a01b03908116948116938116928116911685565b604080516001600160a01b03968716815294861660208601529285169284019290925283166060830152909116608082015260a00161038c565b348015610911575f80fd5b506105bf6109203660046140c8565b611a55565b348015610930575f80fd5b5061047961093f366004613e60565b6120e5565b34801561094f575f80fd5b506105bf61095e366004613e8a565b6120fb565b34801561096e575f80fd5b506105bf61097d3660046140f9565b61221a565b34801561098d575f80fd5b506105bf61099c366004613f5d565b61232a565b3480156109ac575f80fd5b506105bf6109bb366004614119565b612384565b3480156109cb575f80fd5b506105bf6109da366004614134565b6123ce565b3480156109ea575f80fd5b506014546104799060ff1681565b348015610a03575f80fd5b50610479610a12366004613e8a565b6001600160a01b03165f908152600f602052604090205460ff1690565b348015610a3a575f80fd5b506105bf610a49366004613f39565b612518565b348015610a59575f80fd5b506105bf610a68366004614185565b61254d565b348015610a78575f80fd5b506105bf610a873660046141a1565b6125e2565b348015610a97575f80fd5b50601f54610acf9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161038c565b348015610b0f575f80fd5b506103aa601a5481565b348015610b24575f80fd5b506103aa610b33366004614255565b6001600160a01b039182165f90815260136020908152604080832093909416825291909152205490565b348015610b68575f80fd5b506103aa60115481565b348015610b7d575f80fd5b506105bf610b8c366004613e8a565b612756565b348015610b9c575f80fd5b506105bf612b1f565b348015610bb0575f80fd5b505f54600154600254600354610bd6936001600160a01b03908116938116928116911684565b604080516001600160a01b039586168152938516602085015291841691830191909152909116606082015260800161038c565b348015610c14575f80fd5b506105bf610c23366004614281565b612bea565b348015610c33575f80fd5b5060175461047990600160a81b900460ff1681565b348015610c53575f80fd5b506105bf610c62366004613f5d565b612dfb565b5f610c73338484612e55565b5060015b92915050565b5f610c8a6009600a6143a4565b610c9890633b9aca006143b2565b905090565b6001600160a01b0383165f9081526013602090815260408083203384529091528120545f1914610cff576001600160a01b0384165f90815260136020908152604080832033845290915281208054849290610cf99084906143c9565b90915550505b610d0a848484612f19565b949350505050565b5f610d1c5f6113e3565b610d2761dead6113e3565b610d3191906143dc565b610d3d6009600a6143a4565b610d4b90633b9aca006143b2565b610c9891906143c9565b601b546201000090046001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610d85906143ef565b60405180910390fd5b601b5460ff1615610dd55760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d85565b601e5461ffff808416620100009092041611610e035760405162461bcd60e51b8152600401610d859061441a565b601e5461ffff808516911611610e2b5760405162461bcd60e51b8152600401610d859061441a565b601e805465ffffffff000019166201000061ffff8581169190910265ffff00000000191691909117600160201b848316021761ffff1916908516179055601c54610e78906203f4806143dc565b4210158015610e885750601c5415155b15610f01576103e88361ffff1611158015610ea957506103e88261ffff1611155b8015610ebb57506103e88161ffff1611155b610f015760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba1032bc31b2b2b21036b0bc34b6bab6b99760491b6044820152606401610d85565b505050565b6017545f906103e8908390610f23906001600160a01b03166113e3565b610f2d91906143b2565b610c779190614465565b601b546201000090046001600160a01b03163314610f675760405162461bcd60e51b8152600401610d85906143ef565b601b805460ff19166001179055565b601b546201000090046001600160a01b03163314610fa65760405162461bcd60e51b8152600401610d85906143ef565b601b54610fc2906201000090046001600160a01b03165f611106565b601b805462010000600160b01b03198116909155604051620100009091046001600160a01b0316905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601d54600160a81b900460ff166110845760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610d85565b50565b601b546201000090046001600160a01b031633146110b75760405162461bcd60e51b8152600401610d85906143ef565b601581905560968111156110845760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d85565b601b546201000090046001600160a01b031633146111365760405162461bcd60e51b8152600401610d85906143ef565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b601b546201000090046001600160a01b031633146111905760405162461bcd60e51b8152600401610d85906143ef565b600180546001600160a01b038085166001600160a01b03199283161790925560038054868416908316179055600280548484169083161790555f80549287169290911682179055158015906111ed57506001600160a01b03831615155b801561120157506001600160a01b03821615155b801561121557506001600160a01b03811615155b61125b5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103132903d32b9379030b2323932b9b99760491b6044820152606401610d85565b50505050565b601b546201000090046001600160a01b031633146112915760405162461bcd60e51b8152600401610d85906143ef565b306001600160a01b038216036112da5760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d85565b601d54600160a81b900460ff16156112f0575f80fd5b601d80546001600160a01b0319166001600160a01b038316908117909155604080516330fe427560e21b8152815163c3f909d49260048084019391929182900301815f875af1925050508015611363575060408051601f3d908101601f1916820190925261136091810190614484565b60015b61136b575f80fd5b601680546001600160a01b038085166001600160a01b0319928316178355601780548583169316831790555f918252600a6020526040909120805460ff1916600117905590546113bf913091165f19612e55565b601b54601654610f01916001600160a01b0362010000909104811691165f19612e55565b6001600160a01b03165f9081526009602052604090205490565b601b546201000090046001600160a01b0316331461142d5760405162461bcd60e51b8152600401610d85906143ef565b806114ab576001600160a01b038083165f908152600a6020526040808220805460ff19169055601d5490516380c581d160e01b81529216916380c581d19161147a918691906004016144b1565b5f604051808303815f87803b158015611491575f80fd5b505af11580156114a3573d5f803e3d5ffd5b505050505050565b6001600160a01b0382165f908152600a602052604090205460ff16156115115760405162461bcd60e51b815260206004820152601b60248201527a2830b4b91030b63932b0b23c9030b23232b2103a37903634b9ba1760291b6044820152606401610d85565b600b541561156a576203f480600b544261152b91906143c9565b1161156a5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d85565b42600b556001600160a01b038083165f908152600a602052604090819020805460ff19166001908117909155601d5491516380c581d160e01b815291909216916380c581d19161147a9186916004016144b1565b5050565b601b546201000090046001600160a01b031633146115f25760405162461bcd60e51b8152600401610d85906143ef565b5f5b81518110156115be575f600e5f848481518110611613576116136144cc565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f600f5f848481518110611666576116666144cc565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016115f4565b601b545f906201000090046001600160a01b031633146116d15760405162461bcd60e51b8152600401610d85906143ef565b6016546116ea9030906001600160a01b03165f19612e55565b50600190565b601b546201000090046001600160a01b031633146117205760405162461bcd60e51b8152600401610d85906143ef565b601d546001600160a01b031661174357601d80546001600160a01b031916301790555b601d54600160a01b900460ff166117975760405162461bcd60e51b81526020600482015260186024820152772634b8bab4b234ba3c9036bab9ba1031329030b23232b21760411b6044820152606401610d85565b601d54600160a81b900460ff16156117ec5760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b6044820152606401610d85565b601d54601754604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff431660248201526001600160401b034216604482015260096064820152911690636c115c34906084015f604051808303815f87803b158015611854575f80fd5b505af1925050508015611865575060015b50601d546017546001600160a01b03918216916325a71cae9161188891166113e3565b6040518263ffffffff1660e01b81526004016118a691815260200190565b60408051808303815f875af19250505080156118df575060408051601f3d908101601f191682019092526118dc918101906144e0565b60015b156118eb576019556018555b42601c55601d805460ff60a81b1916600160a81b179055565b601b546201000090046001600160a01b031633146119345760405162461bcd60e51b8152600401610d85906143ef565b61deac196001600160a01b0382160161195f5760405162461bcd60e51b8152600401610d8590614502565b6001600160a01b0381166119855760405162461bcd60e51b8152600401610d8590614502565b611990816001611106565b601b546119ac906201000090046001600160a01b03165f611106565b601b545f906119c9906201000090046001600160a01b03166113e3565b11156119fa57601b546119f8906201000090046001600160a01b0316826119ef826113e3565b5f806001613422565b505b601b80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b601b546201000090046001600160a01b03163314611a855760405162461bcd60e51b8152600401610d85906143ef565b601d54600160b01b900460ff1615611ad55760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610d85565b601d805460ff60b01b1916600160b01b1790557f152feca52e8f3fdde126fe21b8dd660e1f859eb6b4fafaa83368b183ff73b961805460ff1990811660019081179092557f6952827425c8afd3eba8a8768a6defbe71191752872f74297e726c054b3ae2d480548216831790557f5928c27a6fd40c8ed0e37a03e2e351082578ae0dedc08ce702ad6e3f7d65c58380548216831790556005546001600160a01b039081165f908152600f60205260408082208054851686179055600854831682528082208054851686179055600454831682528082208054851686179055600754831682528082208054851686179055600654909216815220805490911690911790556103e8611be76009600a6143a4565b611bf590633b9aca006143b2565b611c009060646143b2565b611c0a9190614465565b6005546001600160a01b03165f908152600960208190526040909120919091556103e890611c3990600a6143a4565b611c4790633b9aca006143b2565b611c539061028a6143b2565b611c5d9190614465565b6008546001600160a01b03165f908152600960208190526040909120919091556103e890611c8c90600a6143a4565b611c9a90633b9aca006143b2565b611ca59060646143b2565b611caf9190614465565b6004546001600160a01b03165f908152600960208190526040909120919091556103e890611cde90600a6143a4565b611cec90633b9aca006143b2565b611cf79060326143b2565b611d019190614465565b6007546001600160a01b03165f908152600960208190526040909120919091556103e890611d3090600a6143a4565b611d3e90633b9aca006143b2565b611d499060646143b2565b611d539190614465565b600680546001600160a01b039081165f90815260096020908152604080832095909555601b8054620100009081900485168452600c83528684208054600160ff199182168117909255600e8086527ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548316841790559354929092048616855287852080548316821790553085528785208054831682179055600f845287852080548316821790556005548616855291909252858320805483168217905560085484168352858320805483168217905560045484168352858320805483168217905560075484168352858320805483168217905593549092168152928320805490911690911790555b8151811015611f0a576001600e5f848481518110611e7d57611e7d6144cc565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f848481518110611ed157611ed16144cc565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611e5d565b506008546001600160a01b03165f5f805160206147258339815191526103e8611f356009600a6143a4565b611f4390633b9aca006143b2565b611f4f9061028a6143b2565b611f599190614465565b60405190815260200160405180910390a36004546001600160a01b03165f5f805160206147258339815191526103e8611f946009600a6143a4565b611fa290633b9aca006143b2565b611fad9060646143b2565b611fb79190614465565b60405190815260200160405180910390a36005546001600160a01b03165f5f805160206147258339815191526103e8611ff26009600a6143a4565b61200090633b9aca006143b2565b61200b9060646143b2565b6120159190614465565b60405190815260200160405180910390a36007546001600160a01b03165f5f805160206147258339815191526103e86120506009600a6143a4565b61205e90633b9aca006143b2565b6120699060326143b2565b6120739190614465565b60405190815260200160405180910390a36006546001600160a01b03165f5f805160206147258339815191526103e86120ae6009600a6143a4565b6120bc90633b9aca006143b2565b6120c79060646143b2565b6120d19190614465565b60405190815260200160405180910390a350565b5f6120f1338484612f19565b5060019392505050565b601b546201000090046001600160a01b0316331461212b5760405162461bcd60e51b8152600401610d85906143ef565b601b546040516370a0823160e01b815282916001600160a01b038084169263a9059cbb926201000090049091169083906370a082319061216f903090600401613e03565b602060405180830381865afa15801561218a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ae919061455a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156121f6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190614571565b601b546201000090046001600160a01b0316331461224a5760405162461bcd60e51b8152600401610d85906143ef565b6103e88261225a6009600a6143a4565b61226890633b9aca006143b2565b61227291906143b2565b61227c9190614465565b6011556103e88161228f6009600a6143a4565b61229d90633b9aca006143b2565b6122a791906143b2565b6122b19190614465565b6012556122c06009600a6143a4565b6122ce90633b9aca006143b2565b60115411156122ef5760405162461bcd60e51b8152600401610d859061458c565b6122fb6009600a6143a4565b61230990633b9aca006143b2565b60125411156115be5760405162461bcd60e51b8152600401610d859061458c565b601b546201000090046001600160a01b0316331461235a5760405162461bcd60e51b8152600401610d85906143ef565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b601b546201000090046001600160a01b031633146123b45760405162461bcd60e51b8152600401610d85906143ef565b601b80549115156101000261ff0019909216919091179055565b601b546201000090046001600160a01b031633146123fe5760405162461bcd60e51b8152600401610d85906143ef565b601e545f906124199061ffff620100008204811691166145c1565b601f805467ffff0000ffff000019166201000061ffff8881169190910261ffff60301b191691909117600160301b878316021765ffff0000ffff1916600160201b8683160261ffff19161788821617909155169050828461247a84886145c1565b61248491906145c1565b61248e91906145c1565b601f805461ffff60401b1916600160401b61ffff938416810291909117918290559004168110156125115760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d85565b5050505050565b601b546201000090046001600160a01b031633146125485760405162461bcd60e51b8152600401610d85906143ef565b601a55565b601b546201000090046001600160a01b0316331461257d5760405162461bcd60e51b8152600401610d85906143ef565b60405182151581527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a16014805460ff19169115159190911790556017805460ff60a81b1916600160a81b92151592909202919091179055565b601b546201000090046001600160a01b031633146126125760405162461bcd60e51b8152600401610d85906143ef565b5f5b82518161ffff16101561270c5761262d6009600a6143a4565b828261ffff1681518110612643576126436144cc565b602002602001015161265591906143b2565b61265e336113e3565b10156126a15760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d85565b6126f933848361ffff16815181106126bb576126bb6144cc565b60200260200101516009600a6126d191906143a4565b858561ffff16815181106126e7576126e76144cc565b60200260200101516119ef91906143b2565b5080612704816145e3565b915050612614565b5080518251146115be5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d85565b601b546201000090046001600160a01b031633146127865760405162461bcd60e51b8152600401610d85906143ef565b601d548190600160a01b900460ff16156127e25760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d85565b5f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128439190614603565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561288e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b29190614603565b6040518363ffffffff1660e01b81526004016128cf92919061461e565b602060405180830381865afa1580156128ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290e9190614603565b6017546001600160a01b039081165f908152600a60205260409020805460ff191690559091508116612a8b57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612976573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299a9190614603565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a099190614603565b6040518363ffffffff1660e01b8152600401612a2692919061461e565b6020604051808303815f875af1158015612a42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a669190614603565b601780546001600160a01b0319166001600160a01b0392909216919091179055612aa7565b601780546001600160a01b0319166001600160a01b0383161790555b601780546001600160a01b039081165f908152600f602090815260408083208054600160ff19918216811790925589861685528285208054821683179055955485168452600a909252909120805490931617909155601680546001600160a01b0319169184169182179055610f019030905f19612e55565b601b546201000090046001600160a01b03163314612b4f5760405162461bcd60e51b8152600401610d85906143ef565b601b546040516001600160a01b036201000090920491909116904780156108fc02915f818181858888f19350505050158015612b8d573d5f803e3d5ffd5b50601d54600160a01b900460ff1615612be85760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d85565b565b601b546201000090046001600160a01b03163314612c1a5760405162461bcd60e51b8152600401610d85906143ef565b8082612c286009600a6143a4565b612c3690633b9aca006143b2565b612c4091906143b2565b612c4a9190614465565b6019558284612c5b6009600a6143a4565b612c6990633b9aca006143b2565b612c7391906143b2565b612c7d9190614465565b6018556017546103e890612c99906001600160a01b03166113e3565b612ca49060966143b2565b612cae9190614465565b6019541115612d0b5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d85565b620f4240612d1b6009600a6143a4565b612d2990633b9aca006143b2565b612d339190614465565b6019541015612d545760405162461bcd60e51b8152600401610d8590614638565b620f4240612d646009600a6143a4565b612d7290633b9aca006143b2565b612d7c9190614465565b6018541015612d9d5760405162461bcd60e51b8152600401610d8590614638565b601954601854111561125b5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d85565b601b546201000090046001600160a01b03163314612e2b5760405162461bcd60e51b8152600401610d85906143ef565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b6001600160a01b038216612e7b5760405162461bcd60e51b8152600401610d8590614686565b6001600160a01b038316612ea15760405162461bcd60e51b8152600401610d8590614686565b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ee691815260200190565b60405180910390a36001600160a01b039283165f9081526013602090815260408083209490951682529290925291902055565b5f6001600160a01b038316612f7c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d85565b5f8211612fdd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d85565b6001600160a01b0384166130415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d85565b6001600160a01b0384165f908152600a60205260408120548190819060ff161561306d57506001613118565b6001600160a01b0386165f908152600a602052604090205460ff1615613113576001600160a01b0387165f908152600f60205260409020546001935060ff1661310e5760125485111561310e5760405162461bcd60e51b815260206004820152602360248201527f5472616e73616374696f6e2045786365656473204d6178205472616e7361637460448201526234b7b760e91b6064820152608401610d85565b613118565b600191505b6001600160a01b0386165f908152600f602052604090205460ff166131ab576011546001600160a01b0387165f9081526009602052604090205461315d9087906143dc565b11156131ab5760405162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e2045786365656473204d61782057616c6c657400006044820152606401610d85565b6131b5878761360f565b156132b657601d54600160a81b900460ff166132b657816132135760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b6044820152606401610d85565b6001600160a01b0387165f908152600d602052604090205460ff1615801561325357506001600160a01b0386165f908152600d602052604090205460ff16155b156132b65760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d85565b8215613409576001600160a01b0387165f908152600e602052604090205460ff1661337757601a546001600160a01b0388165f908152601060205260409020544291613301916143dc565b1061335c5760405162461bcd60e51b815260206004820152602560248201527f596f75206e65656420746f2077616974206265666f72652073656c6c696e672060448201526430b3b0b4b760d91b6064820152608401610d85565b6001600160a01b0387165f9081526010602052604090204290555b601754600160a01b900460ff1661340957601754600160a81b900460ff1615613409575f6133a4306113e3565b905060185481106134075760195460145460ff16156133f1576015546017546103e891906133da906001600160a01b03166113e3565b6133e491906143b2565b6133ee9190614465565b90505b8082106133fc578091505b61340582613729565b505b505b613417878787848787613422565b979650505050505050565b6001600160a01b0386165f908152600e602052604081205460019060ff168061346257506001600160a01b0387165f908152600e602052604090205460ff165b1561346a57505f5b6001600160a01b0388165f90815260096020526040812080548892906134919084906143c9565b909155505f9050816134a357866134af565b6134af89888888613bf5565b6001600160a01b0389165f908152600960205260408120805492935083929091906134db9084906143dc565b92505081905550876001600160a01b0316896001600160a01b03165f805160206147258339815191528360405161351491815260200190565b60405180910390a3601d54600160a01b900460ff16613600576135378989613cbe565b601d54600160a01b900460ff161580156135565750613556898961360f565b801561357a57506001600160a01b0389165f908152600d602052604090205460ff16155b801561359e57506001600160a01b0388165f908152600d602052604090205460ff16155b80156135a8575083155b156136005760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d85565b50600198975050505050505050565b601b545f906001600160a01b038481166201000090920416148015906136465750601b546201000090046001600160a01b03163214155b801561366a57506001600160a01b0382165f908152600c602052604090205460ff16155b801561368e57506001600160a01b0383165f908152600c602052604090205460ff16155b80156136a557506001600160a01b03821661dead14155b80156136b957506001600160a01b03821615155b80156136ce57506001600160a01b0383163014155b80156136e85750601d546001600160a01b03848116911614155b80156137025750601d546001600160a01b03838116911614155b80156137225750601b546001600160a01b03838116620100009092041614155b9392505050565b6017805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061376f5761376f6144cc565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156137c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ea9190614603565b816001815181106137fd576137fd6144cc565b6001600160a01b039092166020928302919091018201526040805160a081018252601f5461ffff8082168352620100008204811694830194909452600160201b8104841692820192909252600160301b820483166060820152600160401b909104909116608082018190525f03613875575050613be5565b305f9081526013602090815260408083206016546001600160a01b031684529091529020545f19146138ca57305f9081526013602090815260408083206016546001600160a01b0316845290915290205f1990555b60165460405163791ac94760e01b81526001600160a01b039091169063791ac947906139029086905f908790309042906004016146b3565b5f604051808303815f87803b158015613919575f80fd5b505af192505050801561392a575060015b613935575050613be5565b5f4790505f80836080015161ffff16846020015161ffff168461395891906143b2565b6139629190614465565b90505f846080015161ffff16856060015161ffff168561398291906143b2565b61398c9190614465565b90505f856080015161ffff16866040015161ffff16866139ac91906143b2565b6139b69190614465565b90505f826139c485846143dc565b6139ce91906143dc565b6139d890876143c9565b602088015190915061ffff1615613a43576001546040516001600160a01b039091169061d6d89086905f818181858888f193505050503d805f8114613a38576040519150601f19603f3d011682016040523d82523d5f602084013e613a3d565b606091505b50909550505b606087015161ffff1615613aab576002546040516001600160a01b039091169061d6d89085905f818181858888f193505050503d805f8114613aa0576040519150601f19603f3d011682016040523d82523d5f602084013e613aa5565b606091505b50909550505b865161ffff1615613b0f575f80546040516001600160a01b039091169161d6d8918491818181858888f193505050503d805f8114613b04576040519150601f19603f3d011682016040523d82523d5f602084013e613b09565b606091505b50909550505b604087015161ffff1615613bdc576003546040516001600160a01b039091169061d6d89084905f818181858888f193505050503d805f8114613b6c576040519150601f19603f3d011682016040523d82523d5f602084013e613b71565b606091505b5050601b54909550610100900460ff1615613bdc5760035460405163beceed3960e01b8152600481018490526001600160a01b039091169063beceed39906024015f604051808303815f87803b158015613bc9575f80fd5b505af1925050508015613bda575060015b505b50505050505050505b506017805460ff60a01b19169055565b5f808315613c0a5750601e5461ffff16613c33565b8215613c235750601e5462010000900461ffff16613c33565b50601e54600160201b900461ffff165b805f03613c435784915050610d0a565b5f6103e8613c5183886143b2565b613c5b9190614465565b90508015613cb457305f9081526009602052604081208054839290613c819084906143dc565b909155505060405181815230906001600160a01b038916905f805160206147258339815191529060200160405180910390a35b61341781876143c9565b601d54600160a01b900460ff1615613d245760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d85565b613d2e828261360f565b158015613d4857506017546001600160a01b038281169116145b156115be576001600160a01b038083165f908152600e60209081526040808320805460ff199081166001908117909255601d805460ff60a01b1916600160a01b178155600c9094529190932080549091169092179091555416613db857601d80546001600160a01b031916301790555b604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a16017805460ff60a81b1916600160a81b1790555050565b6001600160a01b0391909116815260200190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611084575f80fd5b5f8060408385031215613e71575f80fd5b8235613e7c81613e4c565b946020939093013593505050565b5f60208284031215613e9a575f80fd5b813561372281613e4c565b5f805f60608486031215613eb7575f80fd5b8335613ec281613e4c565b92506020840135613ed281613e4c565b929592945050506040919091013590565b803561ffff81168114613ef4575f80fd5b919050565b5f805f60608486031215613f0b575f80fd5b613f1484613ee3565b9250613f2260208501613ee3565b9150613f3060408501613ee3565b90509250925092565b5f60208284031215613f49575f80fd5b5035919050565b8015158114611084575f80fd5b5f8060408385031215613f6e575f80fd5b8235613f7981613e4c565b91506020830135613f8981613f50565b809150509250929050565b5f805f8060808587031215613fa7575f80fd5b8435613fb281613e4c565b93506020850135613fc281613e4c565b92506040850135613fd281613e4c565b91506060850135613fe281613e4c565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561402957614029613fed565b604052919050565b5f6001600160401b0382111561404957614049613fed565b5060051b60200190565b5f82601f830112614062575f80fd5b8135602061407761407283614031565b614001565b8083825260208201915060208460051b870101935086841115614098575f80fd5b602086015b848110156140bd5780356140b081613e4c565b835291830191830161409d565b509695505050505050565b5f602082840312156140d8575f80fd5b81356001600160401b038111156140ed575f80fd5b610d0a84828501614053565b5f806040838503121561410a575f80fd5b50508035926020909101359150565b5f60208284031215614129575f80fd5b813561372281613f50565b5f805f8060808587031215614147575f80fd5b61415085613ee3565b935061415e60208601613ee3565b925061416c60408601613ee3565b915061417a60608601613ee3565b905092959194509250565b5f8060408385031215614196575f80fd5b8235613f7981613f50565b5f80604083850312156141b2575f80fd5b82356001600160401b03808211156141c8575f80fd5b6141d486838701614053565b93506020915081850135818111156141ea575f80fd5b85019050601f810186136141fc575f80fd5b803561420a61407282614031565b81815260059190911b82018301908381019088831115614228575f80fd5b928401925b828410156142465783358252928401929084019061422d565b80955050505050509250929050565b5f8060408385031215614266575f80fd5b823561427181613e4c565b91506020830135613f8981613e4c565b5f805f8060808587031215614294575f80fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156142fe57815f19048211156142e4576142e46142b0565b808516156142f157918102915b93841c93908002906142c9565b509250929050565b5f8261431457506001610c77565b8161432057505f610c77565b816001811461433657600281146143405761435c565b6001915050610c77565b60ff841115614351576143516142b0565b50506001821b610c77565b5060208310610133831016604e8410600b841016171561437f575081810a610c77565b61438983836142c4565b805f190482111561439c5761439c6142b0565b029392505050565b5f61372260ff841683614306565b8082028115828204841417610c7757610c776142b0565b81810381811115610c7757610c776142b0565b80820180821115610c7757610c776142b0565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b6020808252602b908201527f50726f746563747320636f6d6d756e69747920616761696e737420696e63726560408201526a6173696e6720746178657360a81b606082015260800190565b5f8261447f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f8060408385031215614495575f80fd5b82516144a081613e4c565b6020840151909250613f8981613e4c565b6001600160a01b039290921682521515602082015260400190565b634e487b7160e01b5f52603260045260245ffd5b5f80604083850312156144f1575f80fd5b505080516020909101519092909150565b60208082526038908201527f43616c6c207265766f6b6541636365737320746f207472616e73666572206f776040820152773732b9103a37903a3432903d32b9379030b2323932b9b99760411b606082015260800190565b5f6020828403121561456a575f80fd5b5051919050565b5f60208284031215614581575f80fd5b815161372281613f50565b6020808252601b908201527a21b0b73737ba1032bc31b2b2b2102a37ba30b61039bab838363c9760291b604082015260600190565b61ffff8181168382160190808211156145dc576145dc6142b0565b5092915050565b5f61ffff8083168181036145f9576145f96142b0565b6001019392505050565b5f60208284031215614613575f80fd5b815161372281613e4c565b6001600160a01b0392831681529116602082015260400190565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156147035784516001600160a01b0316835293830193918301916001016146de565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204043f4038b83b0ea1aa2f34b45f4e5a68db83b545d75895fdc443694b7a262a564736f6c63430008190033

Deployed Bytecode Sourcemap

3992:25280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6736:73;;;;;;;;;;;;6767:42;6736:73;;;;;;;;;:::i;:::-;;;;;;;;6884:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;6884:28:0;222:177:1;7291:109:0;;;;;;;;;;-1:-1:-1;7291:109:0;;;;;;;;;;;;;;;-1:-1:-1;;;7291:109:0;;;;;;;;;;610:6:1;643:15;;;625:34;;695:15;;;690:2;675:18;;668:43;747:15;;727:18;;;720:43;;;;588:2;573:18;7291:109:0;404:365:1;28842:80:0;;;;;;;;;;-1:-1:-1;28914:5:0;;;;;;;;;;;;-1:-1:-1;;;28914:5:0;;;;28842:80;;;;;;;:::i;6675:26::-;;;;;;;;;;-1:-1:-1;6675:26:0;;;;-1:-1:-1;;;;;6675:26:0;;;6999;;;;;;;;;;-1:-1:-1;6999:26:0;;;;;;;;;;;1587:14:1;;1580:22;1562:41;;1550:2;1535:18;6999:26:0;1422:187:1;19058:161:0;;;;;;;;;;-1:-1:-1;19058:161:0;;;;;:::i;:::-;;:::i;17681:140::-;;;;;;;;;;-1:-1:-1;17681:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;17779:34:0;17755:4;17779:34;;;:25;:34;;;;;;;;;17681:140;7257:23;;;;;;;;;;-1:-1:-1;7257:23:0;;;;-1:-1:-1;;;7257:23:0;;;;;;28577:83;;;;;;;;;;;;;:::i;18210:308::-;;;;;;;;;;-1:-1:-1;18210:308:0;;;;;:::i;:::-;;:::i;6631:33::-;;;;;;;;;;;;;;;;17530:141;;;;;;;;;;;;;:::i;6038:42::-;;;;;;;;;;;;6076:4;6038:42;;6919:25;;;;;;;;;;;;;;;;28666:80;;;;;;;;;;-1:-1:-1;28666:80:0;;5503:1;2925:36:1;;2913:2;2898:18;28666:80:0;2783:184:1;23933:749:0;;;;;;;;;;-1:-1:-1;23933:749:0;;;;;:::i;:::-;;:::i;:::-;;7032:29;;;;;;;;;;-1:-1:-1;7032:29:0;;;;;;;;;;;6708:21;;;;;;;;;;-1:-1:-1;6708:21:0;;;;-1:-1:-1;;;;;6708:21:0;;;7212:34;;;;;;;;;;-1:-1:-1;7212:34:0;;;;-1:-1:-1;;;7212:34:0;;;;;;17327:189;;;;;;;;;;-1:-1:-1;17327:189:0;;;;;:::i;:::-;;:::i;18106:98::-;;;;;;;;;;-1:-1:-1;18180:16:0;;18106:98;;24692:184;;;;;;;;;;;;;:::i;27578:309::-;;;;;;;;;;;;;:::i;21615:217::-;;;;;;;;;;-1:-1:-1;21615:217:0;;;;;:::i;:::-;;:::i;17831:127::-;;;;;;;;;;-1:-1:-1;17831:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17922:28:0;17898:4;17922:28;;;:19;:28;;;;;;;;;17831:127;7169:36;;;;;;;;;;-1:-1:-1;7169:36:0;;;;-1:-1:-1;;;7169:36:0;;;;;;25044:134;;;;;;;;;;-1:-1:-1;25044:134:0;;;;;:::i;:::-;;:::i;22551:501::-;;;;;;;;;;-1:-1:-1;22551:501:0;;;;;:::i;:::-;;:::i;7101:26::-;;;;;;;;;;;;;;;;25457:557;;;;;;;;;;-1:-1:-1;25457:557:0;;;;;:::i;:::-;;:::i;18524:95::-;;;;;;;;;;-1:-1:-1;18601:10:0;;18524:95;;6448:51;;;;;;;;;;;;;;;;29152:117;;;;;;;;;;-1:-1:-1;29152:117:0;;;;;:::i;:::-;;:::i;18625:105::-;;;;;;;;;;-1:-1:-1;18707:15:0;;18625:105;;26024:564;;;;;;;;;;-1:-1:-1;26024:564:0;;;;;:::i;:::-;;:::i;19545:249::-;;;;;;;;;;-1:-1:-1;19545:249:0;;;;;:::i;:::-;;:::i;28928:79::-;;;;;;;;;;-1:-1:-1;28998:6:0;;;;;-1:-1:-1;;;;;28998:6:0;28928:79;;27393:175;;;;;;;;;;;;;:::i;20636:696::-;;;;;;;;;;;;;:::i;27897:635::-;;;;;;;;;;-1:-1:-1;27897:635:0;;;;;:::i;:::-;;:::i;28752:84::-;;;;;;;;;;-1:-1:-1;28826:7:0;;;;;;;;;;;;-1:-1:-1;;;28826:7:0;;;;28752:84;;5026:431;;;;;;;;;;-1:-1:-1;5026:431:0;;;;;;;;;;;;-1:-1:-1;;;;;5026:431:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6888:15:1;;;6870:34;;6940:15;;;6935:2;6920:18;;6913:43;6992:15;;;6972:18;;;6965:43;;;;7044:15;;7039:2;7024:18;;7017:43;7097:15;;;7091:3;7076:19;;7069:44;6819:3;6804:19;5026:431:0;6573:546:1;8039:2562:0;;;;;;;;;;-1:-1:-1;8039:2562:0;;;;;:::i;:::-;;:::i;19229:165::-;;;;;;;;;;-1:-1:-1;19229:165:0;;;;;:::i;:::-;;:::i;20259:175::-;;;;;;;;;;-1:-1:-1;20259:175:0;;;;;:::i;:::-;;:::i;23572:351::-;;;;;;;;;;-1:-1:-1;23572:351:0;;;;;:::i;:::-;;:::i;25309:138::-;;;;;;;;;;-1:-1:-1;25309:138:0;;;;;:::i;:::-;;:::i;19436:101::-;;;;;;;;;;-1:-1:-1;19436:101:0;;;;;:::i;:::-;;:::i;23062:499::-;;;;;;;;;;-1:-1:-1;23062:499:0;;;;;:::i;:::-;;:::i;6590:34::-;;;;;;;;;;-1:-1:-1;6590:34:0;;;;;;;;17969:131;;;;;;;;;;-1:-1:-1;17969:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;18062:30:0;18038:4;18062:30;;;:21;:30;;;;;;;;;17969:131;25189:110;;;;;;;;;;-1:-1:-1;25189:110:0;;;;;:::i;:::-;;:::i;21342:263::-;;;;;;;;;;-1:-1:-1;21342:263:0;;;;;:::i;:::-;;:::i;19806:443::-;;;;;;;;;;-1:-1:-1;19806:443:0;;;;;:::i;:::-;;:::i;7411:149::-;;;;;;;;;;-1:-1:-1;7411:149:0;;;;;;;;;;;;;;;-1:-1:-1;;;7411:149:0;;;;;-1:-1:-1;;;7411:149:0;;;;;-1:-1:-1;;;7411:149:0;;;;;;;;;;9812:6:1;9845:15;;;9827:34;;9897:15;;;9892:2;9877:18;;9870:43;9949:15;;;9929:18;;;9922:43;;;;10001:15;;9996:2;9981:18;;9974:43;10054:15;;;10048:3;10033:19;;10026:44;9789:3;9774:19;7411:149:0;9553:523:1;6951:37:0;;;;;;;;;;;;;;;;29013:133;;;;;;;;;;-1:-1:-1;29013:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;29115:19:0;;;29097:7;29115:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;29013:133;6395:46;;;;;;;;;;;;;;;;26598:785;;;;;;;;;;-1:-1:-1;26598:785:0;;;;;:::i;:::-;;:::i;20444:182::-;;;;;;;;;;;;;:::i;4677:338::-;;;;;;;;;;-1:-1:-1;4677:338:0;;;;;;;;;;-1:-1:-1;;;;;4677:338:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10825:15:1;;;10807:34;;10877:15;;;10872:2;10857:18;;10850:43;10929:15;;;10909:18;;;10902:43;;;;10981:15;;;10976:2;10961:18;;10954:43;10756:3;10741:19;4677:338:0;10474:529:1;21842:699:0;;;;;;;;;;-1:-1:-1;21842:699:0;;;;;:::i;:::-;;:::i;6838:39::-;;;;;;;;;;-1:-1:-1;6838:39:0;;;;-1:-1:-1;;;6838:39:0;;;;;;24886:148;;;;;;;;;;-1:-1:-1;24886:148:0;;;;;:::i;:::-;;:::i;19058:161::-;19135:4;19152:37;19161:10;19173:7;19182:6;19152:8;:37::i;:::-;-1:-1:-1;19207:4:0;19058:161;;;;;:::o;28577:83::-;28632:7;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;;5648:13;5703:30;:::i;:::-;28643:14;;28577:83;:::o;18210:308::-;-1:-1:-1;;;;;18331:19:0;;18310:4;18331:19;;;:11;:19;;;;;;;;18351:10;18331:31;;;;;;;;-1:-1:-1;;18331:52:0;18327:126;;-1:-1:-1;;;;;18400:19:0;;;;;;:11;:19;;;;;;;;18420:10;18400:31;;;;;;;:41;;18435:6;;18400:19;:41;;18435:6;;18400:41;:::i;:::-;;;;-1:-1:-1;;18327:126:0;18474:36;18484:6;18492:9;18503:6;18474:9;:36::i;:::-;18467:43;18210:308;-1:-1:-1;;;;18210:308:0:o;17530:141::-;17583:7;17640:21;17658:1;17640:9;:21::i;:::-;17622:15;6767:42;17622:9;:15::i;:::-;:39;;;;:::i;:::-;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;;5648:13;5703:30;:::i;:::-;17611:51;;;;:::i;23933:749::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;;;;;;;;;24041:14:::1;::::0;::::1;;24040:15;24032:45;;;::::0;-1:-1:-1;;;24032:45:0;;13891:2:1;24032:45:0::1;::::0;::::1;13873:21:1::0;13930:2;13910:18;;;13903:30;-1:-1:-1;;;13949:18:1;;;13942:47;14006:18;;24032:45:0::1;13689:341:1::0;24032:45:0::1;24096:9;:17:::0;:25:::1;::::0;;::::1;:17:::0;;;::::1;;:25;24088:80;;;;-1:-1:-1::0;;;24088:80:0::1;;;;;;;:::i;:::-;24187:9;:16:::0;:23:::1;::::0;;::::1;:16:::0;::::1;:23;24179:79;;;;-1:-1:-1::0;;;24179:79:0::1;;;;;;;:::i;:::-;24273:9;:27:::0;;-1:-1:-1;;24311:35:0;24273:27;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;24311:35:0;;;;;-1:-1:-1;;;24311:35:0;;::::1;;;-1:-1:-1::0;;24357:25:0::1;::::0;;::::1;;::::0;;24420:11:::1;::::0;:20:::1;::::0;24434:6:::1;24420:20;:::i;:::-;24401:15;:39;;:59;;;;-1:-1:-1::0;24444:11:0::1;::::0;:16;::::1;24401:59;24397:274;;;6076:4;24485:6;:21;;;;:69;;;;;5926:4;24531:7;:23;;;;24485:69;:125;;;;;5980:4;24579:11;:31;;;;24485:125;24477:182;;;::::0;-1:-1:-1;;;24477:182:0;;14649:2:1;24477:182:0::1;::::0;::::1;14631:21:1::0;14688:2;14668:18;;;14661:30;-1:-1:-1;;;14707:18:1;;;14700:53;14770:18;;24477:182:0::1;14447:347:1::0;24477:182:0::1;23933:749:::0;;;:::o;17327:189::-;17456:6;;17418:7;;6027:4;;17466:21;;17446:17;;-1:-1:-1;;;;;17456:6:0;17446:9;:17::i;:::-;:41;;;;:::i;:::-;17445:62;;;;:::i;24692:184::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;24847:14:::1;:21:::0;;-1:-1:-1;;24847:21:0::1;24864:4;24847:21;::::0;;24692:184::o;27578:309::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;27652:6:::1;::::0;27632:34:::1;::::0;27652:6;;::::1;-1:-1:-1::0;;;;;27652:6:0::1;27660:5;27632:19;:34::i;:::-;27696:6;::::0;;-1:-1:-1;;;;;;27713:19:0;::::1;::::0;;;27752:42:::1;::::0;27696:6;;;::::1;-1:-1:-1::0;;;;;27696:6:0::1;::::0;-1:-1:-1;;27696:6:0;;27752:42:::1;::::0;-1:-1:-1;;27752:42:0::1;27813:14;::::0;-1:-1:-1;;;27813:14:0;::::1;;;27805:74;;;::::0;-1:-1:-1;;;27805:74:0;;15223:2:1;27805:74:0::1;::::0;::::1;15205:21:1::0;15262:2;15242:18;;;15235:30;15301:34;15281:18;;;15274:62;-1:-1:-1;;;15352:18:1;;;15345:45;15407:19;;27805:74:0::1;15021:411:1::0;27805:74:0::1;27621:266;27578:309::o:0;21615:217::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;21711:13:::1;:38:::0;;;21794:3:::1;21768:29:::0;::::1;;21760:64;;;::::0;-1:-1:-1;;;21760:64:0;;15639:2:1;21760:64:0::1;::::0;::::1;15621:21:1::0;15678:2;15658:18;;;15651:30;-1:-1:-1;;;15697:18:1;;;15690:52;15759:18;;21760:64:0::1;15437:346:1::0;25044:134:0;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25132:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;25132:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25044:134::o;22551:501::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;22707:23:::1;:46:::0;;-1:-1:-1;;;;;22707:46:0;;::::1;-1:-1:-1::0;;;;;;22707:46:0;;::::1;;::::0;;;22764:19:::1;:38:::0;;;;::::1;::::0;;::::1;;::::0;;22813:16:::1;:32:::0;;;;::::1;::::0;;::::1;;::::0;;22707:11:::1;22856:42:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;22917:23;;::::1;::::0;:48:::1;;-1:-1:-1::0;;;;;;22944:21:0;::::1;::::0;::::1;22917:48;:77;;;;-1:-1:-1::0;;;;;;22969:25:0;::::1;::::0;::::1;22917:77;:99;;;;-1:-1:-1::0;;;;;;22998:18:0;::::1;::::0;::::1;22917:99;22909:135;;;::::0;-1:-1:-1;;;22909:135:0;;15990:2:1;22909:135:0::1;::::0;::::1;15972:21:1::0;16029:2;16009:18;;;16002:30;-1:-1:-1;;;16048:18:1;;;16041:53;16111:18;;22909:135:0::1;15788:347:1::0;22909:135:0::1;22551:501:::0;;;;:::o;25457:557::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;25547:4:::1;-1:-1:-1::0;;;;;25531:21:0;::::1;::::0;25523:48:::1;;;::::0;-1:-1:-1;;;25523:48:0;;16342:2:1;25523:48:0::1;::::0;::::1;16324:21:1::0;16381:2;16361:18;;;16354:30;-1:-1:-1;;;16400:18:1;;;16393:44;16454:18;;25523:48:0::1;16140:338:1::0;25523:48:0::1;25591:14;::::0;-1:-1:-1;;;25591:14:0;::::1;;;25590:15;25582:24;;;::::0;::::1;;25617:11;:32:::0;;-1:-1:-1;;;;;;25617:32:0::1;-1:-1:-1::0;;;;;25617:32:0;::::1;::::0;;::::1;::::0;;;25664:23:::1;::::0;;-1:-1:-1;;;25664:23:0;;;;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;25617:32:0;25664:23:::1;;;;;;;;;;-1:-1:-1::0;25664:23:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25664:23:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25660:347;;25996:8;::::0;::::1;25660:347;25751:9;:29:::0;;-1:-1:-1;;;;;25751:29:0;;::::1;-1:-1:-1::0;;;;;;25751:29:0;;::::1;;::::0;;25782:6:::1;:22:::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;;25751:9:::1;25806:15:::0;;;:7:::1;:15;::::0;;;;;:22;;-1:-1:-1;;25806:22:0::1;25751:29:::0;25806:22:::1;::::0;;25875:9;;25843:62:::1;::::0;25860:4:::1;::::0;25875:9:::1;-1:-1:-1::0;;25843:8:0::1;:62::i;:::-;25929:6;::::0;25945:9:::1;::::0;25920:55:::1;::::0;-1:-1:-1;;;;;25929:6:0;;;::::1;::::0;::::1;::::0;25945:9:::1;-1:-1:-1::0;;25920:8:0::1;:55::i;29152:117::-:0;-1:-1:-1;;;;;29245:16:0;29218:7;29245:16;;;:7;:16;;;;;;;29152:117::o;26024:564::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;26106:7:::1;26101:480;;-1:-1:-1::0;;;;;26130:13:0;;::::1;26146:5;26130:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;26130:21:0::1;::::0;;26166:11:::1;::::0;:34;;-1:-1:-1;;;26166:34:0;;:11;::::1;::::0;:21:::1;::::0;:34:::1;::::0;26138:4;;26146:5;26166:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26024:564:::0;;:::o;26101:480::-:1;-1:-1:-1::0;;;;;26242:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;26241:14;26233:54;;;::::0;-1:-1:-1;;;26233:54:0;;17364:2:1;26233:54:0::1;::::0;::::1;17346:21:1::0;17403:2;17383:18;;;17376:30;-1:-1:-1;;;17422:18:1;;;17415:57;17489:18;;26233:54:0::1;17162:351:1::0;26233:54:0::1;26306:17;::::0;:22;26302:135:::1;;26395:6;26375:17;;26357:15;:35;;;;:::i;:::-;:44;26349:72;;;::::0;-1:-1:-1;;;26349:72:0;;17720:2:1;26349:72:0::1;::::0;::::1;17702:21:1::0;17759:2;17739:18;;;17732:30;-1:-1:-1;;;17778:18:1;;;17771:45;17833:18;;26349:72:0::1;17518:339:1::0;26349:72:0::1;26471:15;26451:17;:35:::0;-1:-1:-1;;;;;26501:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;26501:20:0::1;26517:4;26501:20:::0;;::::1;::::0;;;26536:11:::1;::::0;:33;;-1:-1:-1;;;26536:33:0;;:11;;;::::1;::::0;:21:::1;::::0;:33:::1;::::0;26509:4;;26536:33:::1;;;:::i;26101:480::-;26024:564:::0;;:::o;19545:249::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;19628:6:::1;19623:164;19644:7;:14;19640:1;:18;19623:164;;;19714:5;19680:19;:31;19700:7;19708:1;19700:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;19680:31:0::1;-1:-1:-1::0;;;;;19680:31:0::1;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19770:5;19734:21;:33;19756:7;19764:1;19756:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;19734:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;19734:33:0;:41;;-1:-1:-1;;19734:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;19660:3:0::1;19623:164;;27393:175:::0;7918:6;;27459:4;;7918:6;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;27508:9:::1;::::0;27476:62:::1;::::0;27493:4:::1;::::0;-1:-1:-1;;;;;27508:9:0::1;-1:-1:-1::0;;27476:8:0::1;:62::i;:::-;-1:-1:-1::0;27556:4:0::1;27393:175:::0;:::o;20636:696::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;20701:11:::1;::::0;-1:-1:-1;;;;;20701:11:0::1;20689:107;;20743:11;:41:::0;;-1:-1:-1;;;;;;20743:41:0::1;20778:4;20743:41;::::0;;20689:107:::1;20814:16;::::0;-1:-1:-1;;;20814:16:0;::::1;;;20806:53;;;::::0;-1:-1:-1;;;20806:53:0;;18196:2:1;20806:53:0::1;::::0;::::1;18178:21:1::0;18235:2;18215:18;;;18208:30;-1:-1:-1;;;18254:18:1;;;18247:54;18318:18;;20806:53:0::1;17994:348:1::0;20806:53:0::1;20879:14;::::0;-1:-1:-1;;;20879:14:0;::::1;;;20878:15;20870:52;;;::::0;-1:-1:-1;;;20870:52:0;;18549:2:1;20870:52:0::1;::::0;::::1;18531:21:1::0;18588:2;18568:18;;;18561:30;-1:-1:-1;;;18607:18:1;;;18600:54;18671:18;;20870:52:0::1;18347:348:1::0;20870:52:0::1;20937:11;::::0;20959:6:::1;::::0;20937:87:::1;::::0;-1:-1:-1;;;20937:87:0;;-1:-1:-1;;;;;20959:6:0;;::::1;20937:87;::::0;::::1;18923:51:1::0;19022:10;20974:12:0::1;19010:23:1::0;18990:18;;;18983:51;-1:-1:-1;;;;;20996:15:0::1;19070:31:1::0;19050:18;;;19043:59;5503:1:0::1;19118:18:1::0;;;19111:45;20937:11:0;::::1;::::0;:21:::1;::::0;18895:19:1;;20937:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;20933:103:::0;21050:11:::1;::::0;21081:6:::1;::::0;-1:-1:-1;;;;;21050:11:0;;::::1;::::0;:20:::1;::::0;21071:17:::1;::::0;21081:6:::1;21071:9;:17::i;:::-;21050:39;;;;;;;;;;;;;368:25:1::0;;356:2;341:18;;222:177;21050:39:0::1;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;21050:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;21050:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;21046:207:::0;::::1;;21161:10;:27:::0;21203:13:::1;:29:::0;21046:207:::1;21277:15;21263:11;:29:::0;21303:14:::1;:21:::0;;-1:-1:-1;;;;21303:21:0::1;-1:-1:-1::0;;;21303:21:0::1;::::0;;20636:696::o;27897:635::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;27974:16:0;::::1;::::0;27966:85:::1;;;;-1:-1:-1::0;;;27966:85:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28070:22:0;::::1;28062:91;;;;-1:-1:-1::0;;;28062:91:0::1;;;;;;;:::i;:::-;28164:35;28184:8;28194:4;28164:19;:35::i;:::-;28230:6;::::0;28210:34:::1;::::0;28230:6;;::::1;-1:-1:-1::0;;;;;28230:6:0::1;28238:5;28210:19;:34::i;:::-;28278:6;::::0;28288:1:::1;::::0;28268:17:::1;::::0;28278:6;;::::1;-1:-1:-1::0;;;;;28278:6:0::1;28268:9;:17::i;:::-;:21;28264:123;;;28319:6;::::0;28306:69:::1;::::0;28319:6;;::::1;-1:-1:-1::0;;;;;28319:6:0::1;28327:8:::0;28337:17:::1;28319:6:::0;28337:9:::1;:17::i;:::-;28356:5;28363::::0;28370:4:::1;28306:12;:69::i;:::-;;28264:123;28425:6;::::0;;-1:-1:-1;;;;;28442:17:0;;::::1;28425:6:::0;28442:17;;::::1;-1:-1:-1::0;;;;;;28442:17:0;::::1;;::::0;;;28475:40:::1;::::0;28425:6;;;::::1;;::::0;;;28475:40:::1;::::0;28406:16:::1;::::0;28475:40:::1;27955:577;27897:635:::0;:::o;8039:2562::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;8124:11:::1;::::0;-1:-1:-1;;;8124:11:0;::::1;;;8123:12;8115:44;;;::::0;-1:-1:-1;;;8115:44:0;;20044:2:1;8115:44:0::1;::::0;::::1;20026:21:1::0;20083:2;20063:18;;;20056:30;-1:-1:-1;;;20102:18:1;;;20095:49;20161:18;;8115:44:0::1;19842:343:1::0;8115:44:0::1;8170:11;:18:::0;;-1:-1:-1;;;;8170:18:0::1;-1:-1:-1::0;;;8170:18:0::1;::::0;;8199:63;:70;;-1:-1:-1;;8199:70:0;;::::1;8184:4;8199:70:::0;;::::1;::::0;;;8298:63;:70;;;::::1;::::0;::::1;::::0;;8397:63;:70;;;::::1;::::0;::::1;::::0;;8516:34;;-1:-1:-1;;;;;8516:34:0;;::::1;8170:18:::0;8494:57;;;:21:::1;8199:63;8494:57:::0;8199:63;8494:57;;;:64;;;::::1;::::0;::::1;::::0;;8591:45;;;::::1;8569:68:::0;;;;;:75;;;::::1;::::0;::::1;::::0;;8516:24:::1;8677:38:::0;;::::1;8655:61:::0;;;;;:68;;;::::1;::::0;::::1;::::0;;8756:37;;;::::1;8734:60:::0;;;;;:67;;;::::1;::::0;::::1;::::0;;8834:35;;;;::::1;8812:58:::0;;;:65;;;;::::1;::::0;;::::1;::::0;;8959:4:::1;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;8943:13;::::0;8953:3:::1;8943:13;:::i;:::-;:20;;;;:::i;:::-;8905:34:::0;;-1:-1:-1;;;;;8905:34:0::1;8897:43;::::0;;;:7:::1;:43;::::0;;;;;;;:66;;;;9047:4:::1;::::0;5720:13:::1;::::0;:2:::1;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;9031:13;::::0;9041:3:::1;9031:13;:::i;:::-;:20;;;;:::i;:::-;8982:45:::0;;-1:-1:-1;;;;;8982:45:0::1;8974:54;::::0;;;:7:::1;:54;::::0;;;;;;;:77;;;;9128:4:::1;::::0;5720:13:::1;::::0;:2:::1;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;9112:13;::::0;9122:3:::1;9112:13;:::i;:::-;:20;;;;:::i;:::-;9070:24;:38:::0;-1:-1:-1;;;;;9070:38:0::1;9062:47;::::0;;;:7:::1;:47;::::0;;;;;;;:70;;;;9207:4:::1;::::0;5720:13:::1;::::0;:2:::1;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;9192:12;::::0;9202:2:::1;9192:12;:::i;:::-;:19;;;;:::i;:::-;9151:37:::0;;-1:-1:-1;;;;;9151:37:0::1;9143:46;::::0;;;:7:::1;:46;::::0;;;;;;;:68;;;;9285:4:::1;::::0;5720:13:::1;::::0;:2:::1;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;9269:13;::::0;9279:3:::1;9269:13;:::i;:::-;:20;;;;:::i;:::-;9230:35:::0;;;-1:-1:-1;;;;;9230:35:0;;::::1;9222:44;::::0;;;:7:::1;:44;::::0;;;;;;;:67;;;;9322:6:::1;::::0;;;;;;::::1;::::0;::::1;9304:25:::0;;:17:::1;:25:::0;;;;;:32;;9230:35;-1:-1:-1;;9304:32:0;;::::1;::::0;::::1;::::0;;;9347:19:::1;:25:::0;;;;:32;;;::::1;::::0;::::1;::::0;;9410:6;;;;;::::1;::::0;::::1;9390:27:::0;;;;;:34;;;::::1;::::0;::::1;::::0;;9463:4:::1;9435:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;9487:21:::1;:36:::0;;;;;:43;;;::::1;::::0;::::1;::::0;;9563:34;;;::::1;9543:55:::0;;;;;;;;;:62;;;::::1;::::0;::::1;::::0;;9636:45;;;::::1;9616:66:::0;;;;;:73;;;::::1;::::0;::::1;::::0;;9230:24:::1;9720:38:::0;;::::1;9700:59:::0;;;;;:66;;;::::1;::::0;::::1;::::0;;9797:37;;;::::1;9777:58:::0;;;;;:65;;;::::1;::::0;::::1;::::0;;9873:35;;;;::::1;9853:56:::0;;;;;:63;;;;::::1;::::0;;::::1;::::0;;9936:162:::1;9957:7;:14;9953:1;:18;9936:162;;;10027:4;9993:19;:31;10013:7;10021:1;10013:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;9993:31:0::1;-1:-1:-1::0;;;;;9993:31:0::1;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;10082:4;10046:21;:33;10068:7;10076:1;10068:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;10046:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;10046:33:0;:40;;-1:-1:-1;;10046:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;9973:3:0::1;9936:162;;;-1:-1:-1::0;10138:45:0;;-1:-1:-1;;;;;10138:45:0::1;;-1:-1:-1::0;;;;;;;;;;;10202:4:0::1;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;10186:13;::::0;10196:3:::1;10186:13;:::i;:::-;:20;;;;:::i;:::-;10117:90;::::0;368:25:1;;;356:2;341:18;10117:90:0::1;;;;;;;10244:24;:38:::0;-1:-1:-1;;;;;10244:38:0::1;;-1:-1:-1::0;;;;;;;;;;;10300:4:0::1;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;10284:13;::::0;10294:3:::1;10284:13;:::i;:::-;:20;;;;:::i;:::-;10223:82;::::0;368:25:1;;;356:2;341:18;10223:82:0::1;;;;;;;10342:34:::0;;-1:-1:-1;;;;;10342:34:0::1;;-1:-1:-1::0;;;;;;;;;;;10395:4:0::1;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;10379:13;::::0;10389:3:::1;10379:13;:::i;:::-;:20;;;;:::i;:::-;10321:79;::::0;368:25:1;;;356:2;341:18;10321:79:0::1;;;;;;;10437:37:::0;;-1:-1:-1;;;;;10437:37:0::1;;-1:-1:-1::0;;;;;;;;;;;10492:4:0::1;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;10477:12;::::0;10487:2:::1;10477:12;:::i;:::-;:19;;;;:::i;:::-;10416:81;::::0;368:25:1;;;356:2;341:18;10416:81:0::1;;;;;;;10534:35:::0;;-1:-1:-1;;;;;10534:35:0::1;;-1:-1:-1::0;;;;;;;;;;;10588:4:0::1;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;10572:13;::::0;10582:3:::1;10572:13;:::i;:::-;:20;;;;:::i;:::-;10513:80;::::0;368:25:1;;;356:2;341:18;10513:80:0::1;;;;;;;8039:2562:::0;:::o;19229:165::-;19307:4;19324:40;19334:10;19346:9;19357:6;19324:9;:40::i;:::-;-1:-1:-1;19382:4:0;;19229:165;-1:-1:-1;;;19229:165:0:o;20259:175::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;20387:6:::1;::::0;20395:30:::1;::::0;-1:-1:-1;;;20395:30:0;;20355:5;;-1:-1:-1;;;;;20372:14:0;;::::1;::::0;::::1;::::0;20387:6;;::::1;::::0;;::::1;::::0;20372:14;;20395:15:::1;::::0;:30:::1;::::0;20419:4:::1;::::0;20395:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20372:54;::::0;-1:-1:-1;;;;;;20372:54:0::1;::::0;;;;;;-1:-1:-1;;;;;20571:32:1;;;20372:54:0::1;::::0;::::1;20553:51:1::0;20620:18;;;20613:34;20526:18;;20372:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23572:351::-:0;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;23702:4:::1;23690:9:::0;5720:13:::1;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;23680:19;;;;:::i;:::-;:26;;;;:::i;:::-;23667:10;:39:::0;23762:4:::1;23745:14:::0;5720:13:::1;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;23735:24;;;;:::i;:::-;:31;;;;:::i;:::-;23717:15;:49:::0;5720:13:::1;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;23785:10;;:21;;23777:61;;;;-1:-1:-1::0;;;23777:61:0::1;;;;;;;:::i;:::-;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;23857:15;;:26;;23849:66;;;;-1:-1:-1::0;;;23849:66:0::1;;;;;;;:::i;25309:138::-:0;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25399:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;25399:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25309:138::o;19436:101::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;19502:17:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;19502:27:0;;::::1;::::0;;;::::1;::::0;;19436:101::o;23062:499::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;23218:9:::1;:17:::0;23183:13:::1;::::0;23199:36:::1;::::0;23218:17:::1;::::0;;::::1;::::0;::::1;::::0;23199:16:::1;:36;:::i;:::-;23250:7;:33:::0;;-1:-1:-1;;23294:19:0;23250:33;23183:52:::1;23250:33:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;23294:19:0;;;;;-1:-1:-1;;;23294:19:0;;::::1;;;-1:-1:-1::0;;23360:29:0;-1:-1:-1;;;23324:25:0;;::::1;;-1:-1:-1::0;;23360:29:0;;;;::::1;;::::0;;;23183:52:::1;::::0;-1:-1:-1;23294:19:0;23250:33;23420:19:::1;23324:25:::0;23360:29;23420:19:::1;:::i;:::-;:33;;;;:::i;:::-;:40;;;;:::i;:::-;23400:7;:60:::0;;-1:-1:-1;;;;23400:60:0::1;-1:-1:-1::0;;;23400:60:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;23483:17;::::1;;-1:-1:-1::0;;23483:26:0::1;23475:78;;;::::0;-1:-1:-1;;;23475:78:0;;21639:2:1;23475:78:0::1;::::0;::::1;21621:21:1::0;21678:2;21658:18;;;21651:30;21717:34;21697:18;;;21690:62;-1:-1:-1;;;21768:18:1;;;21761:37;21815:19;;23475:78:0::1;21437:403:1::0;23475:78:0::1;23172:389;23062:499:::0;;;;:::o;25189:110::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;25264:16:::1;:27:::0;25189:110::o;21342:263::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;21456:39:::1;::::0;1587:14:1;;1580:22;1562:41;;21456:39:0::1;::::0;1550:2:1;1535:18;21456:39:0::1;;;;;;;21506:22;:47:::0;;-1:-1:-1;;21506:47:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21564:19:::1;:33:::0;;-1:-1:-1;;;;21564:33:0::1;-1:-1:-1::0;;;21564:33:0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;21342:263::o;19806:443::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;19919:8:::1;19914:250;19937:8;:15;19933:1;:19;;;19914:250;;;20018:13;5503:1;20018:2;:13;:::i;:::-;20007:7;20015:1;20007:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;19982:21;19992:10;19982:9;:21::i;:::-;:49;;19974:80;;;::::0;-1:-1:-1;;;19974:80:0;;22047:2:1;19974:80:0::1;::::0;::::1;22029:21:1::0;22086:2;22066:18;;;22059:30;-1:-1:-1;;;22105:18:1;;;22098:48;22163:18;;19974:80:0::1;21845:342:1::0;19974:80:0::1;20069:83;20082:10;20094:8;20103:1;20094:11;;;;;;;;;;:::i;:::-;;;;;;;5503:1;20118:2;:13;;;;:::i;:::-;20107:7;20115:1;20107:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;20069:83::-;-1:-1:-1::0;19954:3:0;::::1;::::0;::::1;:::i;:::-;;;;19914:250;;;;20201:7;:14;20182:8;:15;:33;20174:67;;;::::0;-1:-1:-1;;;20174:67:0;;22596:2:1;20174:67:0::1;::::0;::::1;22578:21:1::0;22635:2;22615:18;;;22608:30;-1:-1:-1;;;22654:18:1;;;22647:51;22715:18;;20174:67:0::1;22394:345:1::0;26598:785:0;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;26732:16:::1;::::0;26702:9;;-1:-1:-1;;;26732:16:0;::::1;;;26731:17;26723:60;;;::::0;-1:-1:-1;;;26723:60:0;;22946:2:1;26723:60:0::1;::::0;::::1;22928:21:1::0;22985:2;22965:18;;;22958:30;23024:32;23004:18;;;22997:60;23074:18;;26723:60:0::1;22744:354:1::0;26723:60:0::1;26798:16;26828:10;-1:-1:-1::0;;;;;26828:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26817:40:0::1;;26866:4;26873:10;-1:-1:-1::0;;;;;26873:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26817:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26910:6;::::0;-1:-1:-1;;;;;26910:6:0;;::::1;26920:5;26902:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;26902:23:0::1;::::0;;26798:93;;-1:-1:-1;26940:22:0;::::1;26936:200;;26999:10;-1:-1:-1::0;;;;;26999:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26988:43:0::1;;27040:4;27047:10;-1:-1:-1::0;;;;;27047:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26988:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26979:6;:86:::0;;-1:-1:-1;;;;;;26979:86:0::1;-1:-1:-1::0;;;;;26979:86:0;;;::::1;::::0;;;::::1;::::0;;26936:200:::1;;;27107:6;:17:::0;;-1:-1:-1;;;;;;27107:17:0::1;-1:-1:-1::0;;;;;27107:17:0;::::1;;::::0;;26936:200:::1;27172:6;::::0;;-1:-1:-1;;;;;27172:6:0;;::::1;27150:29;::::0;;;:21:::1;:29;::::0;;;;;;;:34;;27180:4:::1;-1:-1:-1::0;;27150:34:0;;::::1;::::0;::::1;::::0;;;27195:32;;::::1;::::0;;;;;:37;;;::::1;::::0;::::1;::::0;;27255:6;;;::::1;27247:15:::0;;:7:::1;:15:::0;;;;;;:22;;;;::::1;;::::0;;;27280:9:::1;:22:::0;;-1:-1:-1;;;;;;27280:22:0::1;::::0;;::::1;::::0;;::::1;::::0;;27313:62:::1;::::0;27330:4:::1;::::0;-1:-1:-1;;27313:8:0::1;:62::i;20444:182::-:0;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;20510:6:::1;::::0;20502:47:::1;::::0;-1:-1:-1;;;;;20510:6:0;;;::::1;::::0;;;::::1;::::0;20527:21:::1;20502:47:::0;::::1;;;::::0;::::1;::::0;;;20527:21;20510:6;20502:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;20569:16:0::1;::::0;-1:-1:-1;;;20569:16:0;::::1;;;20568:17;20560:58;;;::::0;-1:-1:-1;;;20560:58:0;;23870:2:1;20560:58:0::1;::::0;::::1;23852:21:1::0;23909:2;23889:18;;;23882:30;23948;23928:18;;;23921:58;23996:18;;20560:58:0::1;23668:352:1::0;20560:58:0::1;20444:182::o:0;21842:699::-;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;22036:13;22019;5720::::1;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;22009:23;;;;:::i;:::-;22008:41;;;;:::i;:::-;21995:10;:54:::0;22107:16;22087;5720:13:::1;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;22077:26;;;;:::i;:::-;22076:47;;;;:::i;:::-;22060:13;:63:::0;22167:6:::1;::::0;6027:4:::1;::::0;22157:17:::1;::::0;-1:-1:-1;;;;;22167:6:0::1;22157:9;:17::i;:::-;:23;::::0;22177:3:::1;22157:23;:::i;:::-;22156:44;;;;:::i;:::-;22142:10;;:58;;22134:106;;;::::0;-1:-1:-1;;;22134:106:0;;24227:2:1;22134:106:0::1;::::0;::::1;24209:21:1::0;24266:2;24246:18;;;24239:30;24305:34;24285:18;;;24278:62;-1:-1:-1;;;24356:18:1;;;24349:33;24399:19;;22134:106:0::1;24025:399:1::0;22134:106:0::1;22283:9;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;22273:19;;;;:::i;:::-;22259:10;;:33;;22251:92;;;;-1:-1:-1::0;;;22251:92:0::1;;;;;;;:::i;:::-;22389:9;5720:13;5503:1;5720:2;:13;:::i;:::-;5703:30;::::0;5648:13:::1;5703:30;:::i;:::-;22379:19;;;;:::i;:::-;22362:13;;:36;;22354:95;;;;-1:-1:-1::0;;;22354:95:0::1;;;;;;;:::i;:::-;22485:10;;22468:13;;:27;;22460:73;;;::::0;-1:-1:-1;;;22460:73:0;;25046:2:1;22460:73:0::1;::::0;::::1;25028:21:1::0;25085:2;25065:18;;;25058:30;25124:34;25104:18;;;25097:62;-1:-1:-1;;;25175:18:1;;;25168:31;25216:19;;22460:73:0::1;24844:397:1::0;24886:148:0;7918:6;;;;;-1:-1:-1;;;;;7918:6:0;7928:10;7918:20;7910:50;;;;-1:-1:-1;;;7910:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24982:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;24982:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24886:148::o;18736:312::-;-1:-1:-1;;;;;18831:21:0;;18823:53;;;;-1:-1:-1;;;18823:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18895:20:0;;18887:52;;;;-1:-1:-1;;;18887:52:0;;;;;;;:::i;:::-;18976:7;-1:-1:-1;;;;;18959:33:0;18968:6;-1:-1:-1;;;;;18959:33:0;;18985:6;18959:33;;;;368:25:1;;356:2;341:18;;222:177;18959:33:0;;;;;;;;-1:-1:-1;;;;;19003:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;18736:312::o;14581:2280::-;14660:4;-1:-1:-1;;;;;14685:16:0;;14677:64;;;;-1:-1:-1;;;14677:64:0;;25796:2:1;14677:64:0;;;25778:21:1;25835:2;25815:18;;;25808:30;25874:34;25854:18;;;25847:62;-1:-1:-1;;;25925:18:1;;;25918:33;25968:19;;14677:64:0;25594:399:1;14677:64:0;14769:1;14760:6;:10;14752:64;;;;-1:-1:-1;;;14752:64:0;;26200:2:1;14752:64:0;;;26182:21:1;26239:2;26219:18;;;26212:30;26278:34;26258:18;;;26251:62;-1:-1:-1;;;26329:18:1;;;26322:39;26378:19;;14752:64:0;25998:405:1;14752:64:0;-1:-1:-1;;;;;14835:18:0;;14827:68;;;;-1:-1:-1;;;14827:68:0;;26610:2:1;14827:68:0;;;26592:21:1;26649:2;26629:18;;;26622:30;26688:34;26668:18;;;26661:62;-1:-1:-1;;;26739:18:1;;;26732:35;26784:19;;14827:68:0;26408:401:1;14827:68:0;-1:-1:-1;;;;;14998:13:0;;14910:9;14998:13;;;:7;:13;;;;;;14910:9;;;;14998:13;;14994:347;;;-1:-1:-1;15034:4:0;14994:347;;;-1:-1:-1;;;;;15060:11:0;;;;;;:7;:11;;;;;;;;15056:285;;;-1:-1:-1;;;;;15118:27:0;;;;;;:21;:27;;;;;;15095:4;;-1:-1:-1;15118:27:0;;15114:171;;15176:15;;15169:6;:22;15165:97;;;15215:45;;-1:-1:-1;;;15215:45:0;;27016:2:1;15215:45:0;;;26998:21:1;27055:2;27035:18;;;27028:30;27094:34;27074:18;;;27067:62;-1:-1:-1;;;27145:18:1;;;27138:33;27188:19;;15215:45:0;26814:399:1;15165:97:0;15056:285;;;15325:4;15317:12;;15056:285;-1:-1:-1;;;;;15358:25:0;;;;;;:21;:25;;;;;;;;15353:166;;15422:10;;-1:-1:-1;;;;;15403:11:0;;;;;;:7;:11;;;;;;:18;;15415:6;;15403:18;:::i;:::-;:29;15399:109;;;15452:40;;-1:-1:-1;;;15452:40:0;;27420:2:1;15452:40:0;;;27402:21:1;27459:2;27439:18;;;27432:30;27498:32;27478:18;;;27471:60;27548:18;;15452:40:0;27218:354:1;15399:109:0;15537:20;15548:4;15554:2;15537:10;:20::i;:::-;15533:371;;;15578:14;;-1:-1:-1;;;15578:14:0;;;;15574:319;;15618:5;15613:265;;15648:34;;-1:-1:-1;;;15648:34:0;;27779:2:1;15648:34:0;;;27761:21:1;27818:2;27798:18;;;27791:30;-1:-1:-1;;;27837:18:1;;;27830:54;27901:18;;15648:34:0;27577:348:1;15613:265:0;-1:-1:-1;;;;;15713:31:0;;;;;;:25;:31;;;;;;;;15712:32;:66;;;;-1:-1:-1;;;;;;15749:29:0;;;;;;:25;:29;;;;;;;;15748:30;15712:66;15708:170;;;15803:55;;-1:-1:-1;;;15803:55:0;;28132:2:1;15803:55:0;;;28114:21:1;28171:2;28151:18;;;28144:30;28210:34;28190:18;;;28183:62;-1:-1:-1;;;28261:18:1;;;28254:43;28314:19;;15803:55:0;27930:409:1;15708:170:0;15922:4;15918:870;;;-1:-1:-1;;;;;15948:25:0;;;;;;:19;:25;;;;;;;;15943:224;;16021:16;;-1:-1:-1;;;;;16001:19:0;;;;;;:13;:19;;;;;;16040:15;;16001:36;;;:::i;:::-;:54;15993:104;;;;-1:-1:-1;;;15993:104:0;;28546:2:1;15993:104:0;;;28528:21:1;28585:2;28565:18;;;28558:30;28624:34;28604:18;;;28597:62;-1:-1:-1;;;28675:18:1;;;28668:35;28720:19;;15993:104:0;28344:401:1;15993:104:0;-1:-1:-1;;;;;16116:19:0;;;;;;:13;:19;;;;;16136:15;16116:35;;15943:224;16186:6;;-1:-1:-1;;;16186:6:0;;;;16181:596;;16217:19;;-1:-1:-1;;;16217:19:0;;;;16213:549;;;16261:28;16292:24;16310:4;16292:9;:24::i;:::-;16261:55;;16367:13;;16343:20;:37;16339:404;;16427:10;;16468:22;;;;16464:97;;;16525:13;;16515:6;;6027:4;;16525:13;16505:17;;-1:-1:-1;;;;;16515:6:0;16505:9;:17::i;:::-;:33;;;;:::i;:::-;16504:54;;;;:::i;:::-;16494:64;;16464:97;16615:7;16591:20;:31;16587:72;;16649:7;16626:30;;16587:72;16685:34;16698:20;16685:12;:34::i;:::-;16382:361;16339:404;16238:524;16213:549;16805:48;16818:4;16824:2;16828:6;16836:3;16841:4;16847:5;16805:12;:48::i;:::-;16798:55;14581:2280;-1:-1:-1;;;;;;;14581:2280:0:o;11276:818::-;-1:-1:-1;;;;;11442:25:0;;11391:4;11442:25;;;:19;:25;;;;;;11423:4;;11442:25;;;:52;;-1:-1:-1;;;;;;11471:23:0;;;;;;:19;:23;;;;;;;;11442:52;11438:99;;;-1:-1:-1;11520:5:0;11438:99;-1:-1:-1;;;;;11551:13:0;;;;;;:7;:13;;;;;:23;;11568:6;;11551:13;:23;;11568:6;;11551:23;:::i;:::-;;;;-1:-1:-1;11585:22:0;;-1:-1:-1;11611:7:0;11610:56;;11660:6;11610:56;;;11622:35;11633:4;11639:6;11647:3;11652:4;11622:10;:35::i;:::-;-1:-1:-1;;;;;11677:11:0;;;;;;:7;:11;;;;;:29;;11585:81;;-1:-1:-1;11585:81:0;;11677:11;;;:29;;11585:81;;11677:29;:::i;:::-;;;;;;;;11737:2;-1:-1:-1;;;;;11722:34:0;11731:4;-1:-1:-1;;;;;11722:34:0;-1:-1:-1;;;;;;;;;;;11741:14:0;11722:34;;;;368:25:1;;356:2;341:18;;222:177;11722:34:0;;;;;;;;11772:16;;-1:-1:-1;;;11772:16:0;;;;11767:298;;11805:28;11824:4;11830:2;11805:18;:28::i;:::-;11853:16;;-1:-1:-1;;;11853:16:0;;;;11852:17;:41;;;;;11873:20;11884:4;11890:2;11873:10;:20::i;:::-;11852:77;;;;-1:-1:-1;;;;;;11898:31:0;;;;;;:25;:31;;;;;;;;11897:32;11852:77;:111;;;;-1:-1:-1;;;;;;11934:29:0;;;;;;:25;:29;;;;;;;;11933:30;11852:111;:121;;;;;11968:5;11967:6;11852:121;11848:206;;;11994:44;;-1:-1:-1;;;11994:44:0;;28952:2:1;11994:44:0;;;28934:21:1;28991:2;28971:18;;;28964:30;29030:34;29010:18;;;29003:62;-1:-1:-1;;;29081:18:1;;;29074:32;29123:19;;11994:44:0;28750:398:1;11848:206:0;-1:-1:-1;12082:4:0;;11276:818;-1:-1:-1;;;;;;;;11276:818:0:o;16871:446::-;16972:6;;16940:4;;-1:-1:-1;;;;;16964:14:0;;;16972:6;;;;;16964:14;;;;:50;;-1:-1:-1;17008:6:0;;;;;-1:-1:-1;;;;;17008:6:0;16995:9;:19;;16964:50;:89;;;;-1:-1:-1;;;;;;17032:21:0;;;;;;:17;:21;;;;;;;;17031:22;16964:89;:130;;;;-1:-1:-1;;;;;;17071:23:0;;;;;;:17;:23;;;;;;;;17070:24;16964:130;:157;;;;-1:-1:-1;;;;;;17111:10:0;;6767:42;17111:10;;16964:157;:190;;;;-1:-1:-1;;;;;;17138:16:0;;;;16964:190;:228;;;;-1:-1:-1;;;;;;17171:21:0;;17187:4;17171:21;;16964:228;:273;;;;-1:-1:-1;17225:11:0;;-1:-1:-1;;;;;17209:28:0;;;17225:11;;17209:28;;16964:273;:316;;;;-1:-1:-1;17268:11:0;;-1:-1:-1;;;;;17254:26:0;;;17268:11;;17254:26;;16964:316;:345;;;;-1:-1:-1;17303:6:0;;-1:-1:-1;;;;;17297:12:0;;;17303:6;;;;;17297:12;;16964:345;16957:352;16871:446;-1:-1:-1;;;16871:446:0:o;12678:1893::-;7819:6;:13;;-1:-1:-1;;;;7819:13:0;-1:-1:-1;;;7819:13:0;;;12785:16:::1;::::0;;12799:1:::1;12785:16:::0;;;;;::::1;::::0;;-1:-1:-1;;12785:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;12785:16:0::1;12761:40;;12830:4;12812;12817:1;12812:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12812:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;12856:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;12856:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;12812:7;;12856:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12846:4;12851:1;12846:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12846:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:26;12887:30:::1;::::0;;::::1;::::0;::::1;::::0;;12910:7:::1;12887:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;12887:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;12887:30:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12887:30:0;;::::1;::::0;;::::1;::::0;;;;;;:20:::1;12932:21:::0;12928:60:::1;;12970:7;;;;12928:60;13026:4;13006:26;::::0;;;:11:::1;:26;::::0;;;;;;;13041:9:::1;::::0;-1:-1:-1;;;;;13041:9:0::1;13006:46:::0;;;;;;;;-1:-1:-1;;13006:67:0::1;13002:166;;13110:4;13090:26;::::0;;;:11:::1;:26;::::0;;;;;;;13125:9:::1;::::0;-1:-1:-1;;;;;13125:9:0::1;13090:46:::0;;;;;;;-1:-1:-1;;13090:66:0;;13002:166:::1;13186:9;::::0;:199:::1;::::0;-1:-1:-1;;;13186:199:0;;-1:-1:-1;;;;;13186:9:0;;::::1;::::0;:60:::1;::::0;:199:::1;::::0;13261:20;;13186:9:::1;::::0;13312:4;;13339::::1;::::0;13359:15:::1;::::0;13186:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;13182:246;;13410:7;;;;13182:246;13442:18;13463:21;13442:42;;13495:12;13518:26:::0;13583:6:::1;:16;;;13547:52;;13561:6;:18;;;13548:31;;:10;:31;;;;:::i;:::-;13547:52;;;;:::i;:::-;13518:81;;13610:19;13661:6;:16;;;13632:45;;13646:6;:11;;;13633:24;;:10;:24;;;;:::i;:::-;13632:45;;;;:::i;:::-;13610:67;;13688:22;13745:6;:16;;;13713:48;;13727:6;:14;;;13714:27;;:10;:27;;;;:::i;:::-;13713:48;;;;:::i;:::-;13688:73:::0;-1:-1:-1;13772:24:0::1;13851:11:::0;13813:35:::1;13830:18:::0;13688:73;13813:35:::1;:::i;:::-;:49;;;;:::i;:::-;13799:64;::::0;:10;:64:::1;:::i;:::-;13878:18;::::0;::::1;::::0;13772:91;;-1:-1:-1;13878:22:0::1;;::::0;13874:139:::1;;13930:23;::::0;:71:::1;::::0;-1:-1:-1;;;;;13930:23:0;;::::1;::::0;13991:5:::1;::::0;13966:18;;13930:71:::1;::::0;;;13966:18;13930:23;13991:5;13930:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13917:84:0;;-1:-1:-1;;13874:139:0::1;14027:11;::::0;::::1;::::0;:15:::1;;::::0;14023:118:::1;;14072:16;::::0;:57:::1;::::0;-1:-1:-1;;;;;14072:16:0;;::::1;::::0;14119:5:::1;::::0;14101:11;;14072:57:::1;::::0;;;14101:11;14072:16;14119:5;14072:57:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;14059:70:0;;-1:-1:-1;;14023:118:0::1;14155:16:::0;;:20:::1;;::::0;14151:133:::1;;14205:11;:21:::0;;:67:::1;::::0;-1:-1:-1;;;;;14205:21:0;;::::1;::::0;14262:5:::1;::::0;14239:16;;14205:67;:11;:67;14239:16;14205:21;14262:5;14205:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;14192:80:0;;-1:-1:-1;;14151:133:0::1;14298:14;::::0;::::1;::::0;:18:::1;;::::0;14294:270:::1;;14346:19;::::0;:63:::1;::::0;-1:-1:-1;;;;;14346:19:0;;::::1;::::0;14399:5:::1;::::0;14378:14;;14346:63:::1;::::0;;;14378:14;14346:19;14399:5;14346:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;14428:17:0::1;::::0;14333:76;;-1:-1:-1;14428:17:0::1;::::0;::::1;;;14424:129;;;14479:19;::::0;14470:56:::1;::::0;-1:-1:-1;;;14470:56:0;;::::1;::::0;::::1;368:25:1::0;;;-1:-1:-1;;;;;14479:19:0;;::::1;::::0;14470:40:::1;::::0;341:18:1;;14470:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;14466:72:::0;::::1;12750:1821;;;;;;;;7843:1;-1:-1:-1::0;7855:6:0;:14;;-1:-1:-1;;;;7855:14:0;;;12678:1893::o;10611:655::-;10700:7;10720:18;10753:3;10749:205;;;-1:-1:-1;10786:9:0;:16;;;10749:205;;;10824:4;10820:134;;;-1:-1:-1;10858:9:0;:17;;;;;;10820:134;;;-1:-1:-1;10921:9:0;:21;-1:-1:-1;;;10921:21:0;;;;10820:134;10968:10;10982:1;10968:15;10964:39;;10994:6;10987:13;;;;;10964:39;11013:17;6027:4;11033:19;11042:10;11033:6;:19;:::i;:::-;:38;;;;:::i;:::-;11013:58;-1:-1:-1;11086:13:0;;11082:141;;11132:4;11116:22;;;;:7;:22;;;;;:35;;11142:9;;11116:22;:35;;11142:9;;11116:35;:::i;:::-;;;;-1:-1:-1;;11171:40:0;;368:25:1;;;11194:4:0;;-1:-1:-1;;;;;11171:40:0;;;-1:-1:-1;;;;;;;;;;;11171:40:0;356:2:1;341:18;11171:40:0;;;;;;;11082:141;11240:18;11249:9;11240:6;:18;:::i;12104:564::-;12187:16;;-1:-1:-1;;;12187:16:0;;;;12186:17;12178:65;;;;-1:-1:-1;;;12178:65:0;;30550:2:1;12178:65:0;;;30532:21:1;30589:2;30569:18;;;30562:30;30628:34;30608:18;;;30601:62;-1:-1:-1;;;30679:18:1;;;30672:33;30722:19;;12178:65:0;30348:399:1;12178:65:0;12259:20;12270:4;12276:2;12259:10;:20::i;:::-;12258:21;:37;;;;-1:-1:-1;12289:6:0;;-1:-1:-1;;;;;12283:12:0;;;12289:6;;12283:12;12258:37;12254:407;;;-1:-1:-1;;;;;12312:25:0;;;;;;;:19;:25;;;;;;;;:32;;-1:-1:-1;;12312:32:0;;;12340:4;12312:32;;;;;;12359:16;:23;;-1:-1:-1;;;;12359:23:0;-1:-1:-1;;;12359:23:0;;;12397:17;:23;;;;;;;:30;;;;;;;;;;;12454:11;;12442:115;;12500:11;:41;;-1:-1:-1;;;;;;12500:41:0;12535:4;12500:41;;;12442:115;12576:32;;12603:4;1562:41:1;;12576:32:0;;1550:2:1;1535:18;12576:32:0;;;;;;;12623:19;:26;;-1:-1:-1;;;;12623:26:0;-1:-1:-1;;;12623:26:0;;;12104:564;;:::o;14:203:1:-;-1:-1:-1;;;;;178:32:1;;;;160:51;;148:2;133:18;;14:203::o;774:418::-;923:2;912:9;905:21;886:4;955:6;949:13;998:6;993:2;982:9;978:18;971:34;1057:6;1052:2;1044:6;1040:15;1035:2;1024:9;1020:18;1014:50;1113:1;1108:2;1099:6;1088:9;1084:22;1080:31;1073:42;1183:2;1176;1172:7;1167:2;1159:6;1155:15;1151:29;1140:9;1136:45;1132:54;1124:62;;;774:418;;;;:::o;1614:131::-;-1:-1:-1;;;;;1689:31:1;;1679:42;;1669:70;;1735:1;1732;1725:12;1750:315;1818:6;1826;1879:2;1867:9;1858:7;1854:23;1850:32;1847:52;;;1895:1;1892;1885:12;1847:52;1934:9;1921:23;1953:31;1978:5;1953:31;:::i;:::-;2003:5;2055:2;2040:18;;;;2027:32;;-1:-1:-1;;;1750:315:1:o;2070:247::-;2129:6;2182:2;2170:9;2161:7;2157:23;2153:32;2150:52;;;2198:1;2195;2188:12;2150:52;2237:9;2224:23;2256:31;2281:5;2256:31;:::i;2322:456::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2523:9;2510:23;2542:31;2567:5;2542:31;:::i;:::-;2592:5;-1:-1:-1;2649:2:1;2634:18;;2621:32;2662:33;2621:32;2662:33;:::i;:::-;2322:456;;2714:7;;-1:-1:-1;;;2768:2:1;2753:18;;;;2740:32;;2322:456::o;2972:159::-;3039:20;;3099:6;3088:18;;3078:29;;3068:57;;3121:1;3118;3111:12;3068:57;2972:159;;;:::o;3136:328::-;3210:6;3218;3226;3279:2;3267:9;3258:7;3254:23;3250:32;3247:52;;;3295:1;3292;3285:12;3247:52;3318:28;3336:9;3318:28;:::i;:::-;3308:38;;3365:37;3398:2;3387:9;3383:18;3365:37;:::i;:::-;3355:47;;3421:37;3454:2;3443:9;3439:18;3421:37;:::i;:::-;3411:47;;3136:328;;;;;:::o;3469:180::-;3528:6;3581:2;3569:9;3560:7;3556:23;3552:32;3549:52;;;3597:1;3594;3587:12;3549:52;-1:-1:-1;3620:23:1;;3469:180;-1:-1:-1;3469:180:1:o;3654:118::-;3740:5;3733:13;3726:21;3719:5;3716:32;3706:60;;3762:1;3759;3752:12;3777:382;3842:6;3850;3903:2;3891:9;3882:7;3878:23;3874:32;3871:52;;;3919:1;3916;3909:12;3871:52;3958:9;3945:23;3977:31;4002:5;3977:31;:::i;:::-;4027:5;-1:-1:-1;4084:2:1;4069:18;;4056:32;4097:30;4056:32;4097:30;:::i;:::-;4146:7;4136:17;;;3777:382;;;;;:::o;4164:703::-;4282:6;4290;4298;4306;4359:3;4347:9;4338:7;4334:23;4330:33;4327:53;;;4376:1;4373;4366:12;4327:53;4415:9;4402:23;4434:31;4459:5;4434:31;:::i;:::-;4484:5;-1:-1:-1;4541:2:1;4526:18;;4513:32;4554:33;4513:32;4554:33;:::i;:::-;4606:7;-1:-1:-1;4665:2:1;4650:18;;4637:32;4678:33;4637:32;4678:33;:::i;:::-;4730:7;-1:-1:-1;4789:2:1;4774:18;;4761:32;4802:33;4761:32;4802:33;:::i;:::-;4164:703;;;;-1:-1:-1;4164:703:1;;-1:-1:-1;;4164:703:1:o;4872:127::-;4933:10;4928:3;4924:20;4921:1;4914:31;4964:4;4961:1;4954:15;4988:4;4985:1;4978:15;5004:275;5075:2;5069:9;5140:2;5121:13;;-1:-1:-1;;5117:27:1;5105:40;;-1:-1:-1;;;;;5160:34:1;;5196:22;;;5157:62;5154:88;;;5222:18;;:::i;:::-;5258:2;5251:22;5004:275;;-1:-1:-1;5004:275:1:o;5284:183::-;5344:4;-1:-1:-1;;;;;5369:6:1;5366:30;5363:56;;;5399:18;;:::i;:::-;-1:-1:-1;5444:1:1;5440:14;5456:4;5436:25;;5284:183::o;5472:743::-;5526:5;5579:3;5572:4;5564:6;5560:17;5556:27;5546:55;;5597:1;5594;5587:12;5546:55;5633:6;5620:20;5659:4;5683:60;5699:43;5739:2;5699:43;:::i;:::-;5683:60;:::i;:::-;5765:3;5789:2;5784:3;5777:15;5817:4;5812:3;5808:14;5801:21;;5874:4;5868:2;5865:1;5861:10;5853:6;5849:23;5845:34;5831:48;;5902:3;5894:6;5891:15;5888:35;;;5919:1;5916;5909:12;5888:35;5955:4;5947:6;5943:17;5969:217;5985:6;5980:3;5977:15;5969:217;;;6065:3;6052:17;6082:31;6107:5;6082:31;:::i;:::-;6126:18;;6164:12;;;;6002;;5969:217;;;-1:-1:-1;6204:5:1;5472:743;-1:-1:-1;;;;;;5472:743:1:o;6220:348::-;6304:6;6357:2;6345:9;6336:7;6332:23;6328:32;6325:52;;;6373:1;6370;6363:12;6325:52;6413:9;6400:23;-1:-1:-1;;;;;6438:6:1;6435:30;6432:50;;;6478:1;6475;6468:12;6432:50;6501:61;6554:7;6545:6;6534:9;6530:22;6501:61;:::i;7124:248::-;7192:6;7200;7253:2;7241:9;7232:7;7228:23;7224:32;7221:52;;;7269:1;7266;7259:12;7221:52;-1:-1:-1;;7292:23:1;;;7362:2;7347:18;;;7334:32;;-1:-1:-1;7124:248:1:o;7377:241::-;7433:6;7486:2;7474:9;7465:7;7461:23;7457:32;7454:52;;;7502:1;7499;7492:12;7454:52;7541:9;7528:23;7560:28;7582:5;7560:28;:::i;7623:401::-;7705:6;7713;7721;7729;7782:3;7770:9;7761:7;7757:23;7753:33;7750:53;;;7799:1;7796;7789:12;7750:53;7822:28;7840:9;7822:28;:::i;:::-;7812:38;;7869:37;7902:2;7891:9;7887:18;7869:37;:::i;:::-;7859:47;;7925:37;7958:2;7947:9;7943:18;7925:37;:::i;:::-;7915:47;;7981:37;8014:2;8003:9;7999:18;7981:37;:::i;:::-;7971:47;;7623:401;;;;;;;:::o;8029:376::-;8091:6;8099;8152:2;8140:9;8131:7;8127:23;8123:32;8120:52;;;8168:1;8165;8158:12;8120:52;8207:9;8194:23;8226:28;8248:5;8226:28;:::i;8410:1138::-;8528:6;8536;8589:2;8577:9;8568:7;8564:23;8560:32;8557:52;;;8605:1;8602;8595:12;8557:52;8645:9;8632:23;-1:-1:-1;;;;;8715:2:1;8707:6;8704:14;8701:34;;;8731:1;8728;8721:12;8701:34;8754:61;8807:7;8798:6;8787:9;8783:22;8754:61;:::i;:::-;8744:71;;8834:2;8824:12;;8889:2;8878:9;8874:18;8861:32;8918:2;8908:8;8905:16;8902:36;;;8934:1;8931;8924:12;8902:36;8957:24;;;-1:-1:-1;9012:4:1;9004:13;;9000:27;-1:-1:-1;8990:55:1;;9041:1;9038;9031:12;8990:55;9077:2;9064:16;9100:60;9116:43;9156:2;9116:43;:::i;9100:60::-;9194:15;;;9276:1;9272:10;;;;9264:19;;9260:28;;;9225:12;;;;9300:19;;;9297:39;;;9332:1;9329;9322:12;9297:39;9356:11;;;;9376:142;9392:6;9387:3;9384:15;9376:142;;;9458:17;;9446:30;;9409:12;;;;9496;;;;9376:142;;;9537:5;9527:15;;;;;;;8410:1138;;;;;:::o;10081:388::-;10149:6;10157;10210:2;10198:9;10189:7;10185:23;10181:32;10178:52;;;10226:1;10223;10216:12;10178:52;10265:9;10252:23;10284:31;10309:5;10284:31;:::i;:::-;10334:5;-1:-1:-1;10391:2:1;10376:18;;10363:32;10404:33;10363:32;10404:33;:::i;11008:385::-;11094:6;11102;11110;11118;11171:3;11159:9;11150:7;11146:23;11142:33;11139:53;;;11188:1;11185;11178:12;11139:53;-1:-1:-1;;11211:23:1;;;11281:2;11266:18;;11253:32;;-1:-1:-1;11332:2:1;11317:18;;11304:32;;11383:2;11368:18;11355:32;;-1:-1:-1;11008:385:1;-1:-1:-1;11008:385:1:o;11398:127::-;11459:10;11454:3;11450:20;11447:1;11440:31;11490:4;11487:1;11480:15;11514:4;11511:1;11504:15;11530:416;11619:1;11656:5;11619:1;11670:270;11691:7;11681:8;11678:21;11670:270;;;11750:4;11746:1;11742:6;11738:17;11732:4;11729:27;11726:53;;;11759:18;;:::i;:::-;11809:7;11799:8;11795:22;11792:55;;;11829:16;;;;11792:55;11908:22;;;;11868:15;;;;11670:270;;;11674:3;11530:416;;;;;:::o;11951:806::-;12000:5;12030:8;12020:80;;-1:-1:-1;12071:1:1;12085:5;;12020:80;12119:4;12109:76;;-1:-1:-1;12156:1:1;12170:5;;12109:76;12201:4;12219:1;12214:59;;;;12287:1;12282:130;;;;12194:218;;12214:59;12244:1;12235:10;;12258:5;;;12282:130;12319:3;12309:8;12306:17;12303:43;;;12326:18;;:::i;:::-;-1:-1:-1;;12382:1:1;12368:16;;12397:5;;12194:218;;12496:2;12486:8;12483:16;12477:3;12471:4;12468:13;12464:36;12458:2;12448:8;12445:16;12440:2;12434:4;12431:12;12427:35;12424:77;12421:159;;;-1:-1:-1;12533:19:1;;;12565:5;;12421:159;12612:34;12637:8;12631:4;12612:34;:::i;:::-;12682:6;12678:1;12674:6;12670:19;12661:7;12658:32;12655:58;;;12693:18;;:::i;:::-;12731:20;;11951:806;-1:-1:-1;;;11951:806:1:o;12762:140::-;12820:5;12849:47;12890:4;12880:8;12876:19;12870:4;12849:47;:::i;12907:168::-;12980:9;;;13011;;13028:15;;;13022:22;;13008:37;12998:71;;13049:18;;:::i;13080:128::-;13147:9;;;13168:11;;;13165:37;;;13182:18;;:::i;13213:125::-;13278:9;;;13299:10;;;13296:36;;;13312:18;;:::i;13343:341::-;13545:2;13527:21;;;13584:2;13564:18;;;13557:30;-1:-1:-1;;;13618:2:1;13603:18;;13596:47;13675:2;13660:18;;13343:341::o;14035:407::-;14237:2;14219:21;;;14276:2;14256:18;;;14249:30;14315:34;14310:2;14295:18;;14288:62;-1:-1:-1;;;14381:2:1;14366:18;;14359:41;14432:3;14417:19;;14035:407::o;14799:217::-;14839:1;14865;14855:132;;14909:10;14904:3;14900:20;14897:1;14890:31;14944:4;14941:1;14934:15;14972:4;14969:1;14962:15;14855:132;-1:-1:-1;15001:9:1;;14799:217::o;16483:385::-;16562:6;16570;16623:2;16611:9;16602:7;16598:23;16594:32;16591:52;;;16639:1;16636;16629:12;16591:52;16671:9;16665:16;16690:31;16715:5;16690:31;:::i;:::-;16790:2;16775:18;;16769:25;16740:5;;-1:-1:-1;16803:33:1;16769:25;16803:33;:::i;16873:284::-;-1:-1:-1;;;;;17059:32:1;;;;17041:51;;17135:14;17128:22;17123:2;17108:18;;17101:50;17029:2;17014:18;;16873:284::o;17862:127::-;17923:10;17918:3;17914:20;17911:1;17904:31;17954:4;17951:1;17944:15;17978:4;17975:1;17968:15;19167:245;19246:6;19254;19307:2;19295:9;19286:7;19282:23;19278:32;19275:52;;;19323:1;19320;19313:12;19275:52;-1:-1:-1;;19346:16:1;;19402:2;19387:18;;;19381:25;19346:16;;19381:25;;-1:-1:-1;19167:245:1:o;19417:420::-;19619:2;19601:21;;;19658:2;19638:18;;;19631:30;19697:34;19692:2;19677:18;;19670:62;-1:-1:-1;;;19763:2:1;19748:18;;19741:54;19827:3;19812:19;;19417:420::o;20190:184::-;20260:6;20313:2;20301:9;20292:7;20288:23;20284:32;20281:52;;;20329:1;20326;20319:12;20281:52;-1:-1:-1;20352:16:1;;20190:184;-1:-1:-1;20190:184:1:o;20658:245::-;20725:6;20778:2;20766:9;20757:7;20753:23;20749:32;20746:52;;;20794:1;20791;20784:12;20746:52;20826:9;20820:16;20845:28;20867:5;20845:28;:::i;20908:351::-;21110:2;21092:21;;;21149:2;21129:18;;;21122:30;-1:-1:-1;;;21183:2:1;21168:18;;21161:57;21250:2;21235:18;;20908:351::o;21264:168::-;21331:6;21357:10;;;21369;;;21353:27;;21392:11;;;21389:37;;;21406:18;;:::i;:::-;21389:37;21264:168;;;;:::o;22192:197::-;22230:3;22258:6;22299:2;22292:5;22288:14;22326:2;22317:7;22314:15;22311:41;;22332:18;;:::i;:::-;22381:1;22368:15;;22192:197;-1:-1:-1;;;22192:197:1:o;23103:251::-;23173:6;23226:2;23214:9;23205:7;23201:23;23197:32;23194:52;;;23242:1;23239;23232:12;23194:52;23274:9;23268:16;23293:31;23318:5;23293:31;:::i;23359:304::-;-1:-1:-1;;;;;23589:15:1;;;23571:34;;23641:15;;23636:2;23621:18;;23614:43;23521:2;23506:18;;23359:304::o;24429:410::-;24631:2;24613:21;;;24670:2;24650:18;;;24643:30;24709:34;24704:2;24689:18;;24682:62;-1:-1:-1;;;24775:2:1;24760:18;;24753:44;24829:3;24814:19;;24429:410::o;25246:343::-;25448:2;25430:21;;;25487:2;25467:18;;;25460:30;-1:-1:-1;;;25521:2:1;25506:18;;25499:49;25580:2;25565:18;;25246:343::o;29153:980::-;29415:4;29463:3;29452:9;29448:19;29494:6;29483:9;29476:25;29520:2;29558:6;29553:2;29542:9;29538:18;29531:34;29601:3;29596:2;29585:9;29581:18;29574:31;29625:6;29660;29654:13;29691:6;29683;29676:22;29729:3;29718:9;29714:19;29707:26;;29768:2;29760:6;29756:15;29742:29;;29789:1;29799:195;29813:6;29810:1;29807:13;29799:195;;;29878:13;;-1:-1:-1;;;;;29874:39:1;29862:52;;29969:15;;;;29934:12;;;;29910:1;29828:9;29799:195;;;-1:-1:-1;;;;;;;30050:32:1;;;;30045:2;30030:18;;30023:60;-1:-1:-1;;;30114:3:1;30099:19;30092:35;30011:3;29153:980;-1:-1:-1;;;29153:980:1:o

Swarm Source

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