ETH Price: $3,404.49 (+1.04%)

Token

Web Tracker AI (WTAI)
 

Overview

Max Total Supply

100,000,000 WTAI

Holders

82

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
465,500 WTAI

Value
$0.00
0x154510200b04bccc20dFEA1D9F1A0775F3275cE6
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WebTrackerAI

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
    https://t.me/WebTrackerAI
    https://twitter.com/WebTrackerAi
    https://webtrackerai.com/
*/

// SPDX-License-Identifier: MIT                                                                               


pragma solidity 0.8.15;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

contract WebTrackerAI is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public treasuryAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    mapping (address => bool) public privateSaleWallets;
    mapping (address => uint256) public nextPrivateWalletSellDate;
    uint256 public maxPrivSaleSell = 1 ether;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

    uint256 public lpWithdrawRequestTimestamp;
    uint256 public lpWithdrawRequestDuration = 1 seconds;
    bool public lpWithdrawRequestPending;
    uint256 public lpPercToWithDraw;

    uint256 public percentForLPBurn = 5; // 5 = .05%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 1800 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 seconds;
    uint256 public lastManualLpBurnTime;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedPrivateMaxSell(uint256 amount);

    event RequestedLPWithdraw();
    
    event WithdrewLPForMigration();

    event CanceledLpWithdrawRequest();

    constructor() ERC20("Web Tracker AI", "WTAI") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 1 * 1e8 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 1 / 200;
        maxSellAmount = totalSupply * 1 / 200;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyTreasuryFee = 400;
        buyLiquidityFee = 100;
        buyBurnFee = 0;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;

        sellTreasuryFee = 1900;
        sellLiquidityFee = 600;
        sellBurnFee = 0;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;

        treasuryAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(treasuryAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryAddress), true);
        excludeFromFees(address(dexRouter), true);

        
        _createInitialSupply(address(this), totalSupply * 99 / 100);  // update with % for LP
        _createInitialSupply(newOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 50, "Cannot make penalty blocks more than 50");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massRemoveBoughtEarly(address[] calldata accounts) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = false;
        }
    }

    function removeBoughtEarly(address wallet) external onlyOwner {
        require(boughtEarly[wallet], "Wallet is already not flagged.");
        boughtEarly[wallet] = false;
    }

    function emergencyUpdateRouter(address router) external onlyOwner {
        require(!tradingActive, "Cannot update after trading is functional");
        dexRouter = IDexRouter(router);
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max wallet amount lower than %");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }
     
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee, uint256 _burnFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee,uint256 _burnFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellBurnFee;
        require(sellTotalFees <= 30 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && tradingActive){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(privateSaleWallets[from]){
            if(automatedMarketMakerPairs[to]){
                //enforce max sell restrictions.
                require(nextPrivateWalletSellDate[from] <= block.timestamp, "Cannot sell yet");
                require(amount <= getPrivateSaleMaxSell(), "Attempting to sell over max sell amount.  Check max.");
                nextPrivateWalletSellDate[from] = block.timestamp + 24 hours;
            } else if(!_isExcludedFromFees[to]){
                revert("Private sale cannot transfer and must sell only or transfer to a whitelisted address.");
            }
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Cannot exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        uint256 tokensToBurn = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
                tokensToBurn = fees * sellBurnFee / buyTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensToBurn = fees * buyBurnFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                if(tokensToBurn > 0){
                    super._transfer(address(this), address(0xdead), tokensToBurn);
                }
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForTreasury;
            
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(treasuryAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "_treasuryAddress address cannot be 0");
        treasuryAddress = payable(_treasuryAddress);
        emit UpdatedTreasuryAddress(_treasuryAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function getPrivateSaleMaxSell() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(maxPrivSaleSell, path);
        return amounts[1] + (amounts[1] * (sellLiquidityFee + sellTreasuryFee))/100;
    }

    function setPrivateSaleMaxSell(uint256 amount) external onlyOwner{
        require(amount >= 10 && amount <= 50000, "Must set between 0.1 and 500 BNB");
        maxPrivSaleSell = amount * 1e16;
        emit UpdatedPrivateMaxSell(amount);
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 50, "Cannot make penalty blocks more than 50");

        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            privateSaleWallets[wallet] = true;
            nextPrivateWalletSellDate[wallet] = block.timestamp + 24 hours;
            uint256 amount = amountsInTokens[i] * (10 ** decimals());
            super._transfer(msg.sender, wallet, amount);
        }

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <=2000, "May not burn more than 20% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

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

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function requestToWithdrawLP(uint256 percToWithdraw) external onlyOwner {
        require(!lpWithdrawRequestPending, "Cannot request again until first request is over.");
        require(percToWithdraw <= 100 && percToWithdraw > 0, "Need to set between 1-100%");
        lpWithdrawRequestTimestamp = block.timestamp;
        lpWithdrawRequestPending = true;
        lpPercToWithDraw = percToWithdraw;
        emit RequestedLPWithdraw();
    }

    function nextAvailableLpWithdrawDate() public view returns (uint256){
        if(lpWithdrawRequestPending){
            return lpWithdrawRequestTimestamp + lpWithdrawRequestDuration;
        }
        else {
            return 0;  // 0 means no open requests
        }
    }

    function withdrawRequestedLP() external onlyOwner {
        require(block.timestamp >= nextAvailableLpWithdrawDate() && nextAvailableLpWithdrawDate() > 0, "Must request and wait.");
        lpWithdrawRequestTimestamp = 0;
        lpWithdrawRequestPending = false;

        uint256 amtToWithdraw = IERC20(address(lpPair)).balanceOf(address(this)) * lpPercToWithDraw / 100;
        
        lpPercToWithDraw = 0;

        IERC20(lpPair).transfer(msg.sender, amtToWithdraw);
    }

    function cancelLPWithdrawRequest() external onlyOwner {
        lpWithdrawRequestPending = false;
        lpPercToWithDraw = 0;
        lpWithdrawRequestTimestamp = 0;
        emit CanceledLpWithdrawRequest();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[],"name":"CanceledLpWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RequestedLPWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedPrivateMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"anonymous":false,"inputs":[],"name":"WithdrewLPForMigration","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelLPWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrivateSaleMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","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":"lpPercToWithDraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWithdrawRequestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"massRemoveBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPrivSaleSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextAvailableLpWithdrawDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nextPrivateWalletSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateSaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percToWithdraw","type":"uint256"}],"name":"requestToWithdrawLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPrivateSaleMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRequestedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d556012805462ffffff19166001908117909155670de0b6b3a76400006015556017805460ff1990811683179091556023919091556005602655602780549091169055610708602855601e602a55600e60809081526d57656220547261636b657220414960901b60a052610100604052600460c0908152635754414960e01b60e0526003620000928382620007de565b506004620000a18282620007de565b5050506000620000b66200044660201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062006054833981519152908290a350336000466001036200011b5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fd565b46600503620001405750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fd565b466038036200016557507310ed43c718714eb63d5aa57b78b54704e256024e620001fd565b466061036200018a575073d99d1c33f9fc3444f8101754abc46c52416550d1620001fd565b4661a4b103620001b05750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001fd565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b038316179055600062000223601290565b6200023090600a620009bf565b62000240906305f5e100620009d7565b905060c862000251826001620009d7565b6200025d9190620009f9565b60065560c86200026f826001620009d7565b6200027b9190620009f9565b60075560646200028d826001620009d7565b620002999190620009f9565b600855620186a0620002ad826019620009d7565b620002b99190620009f9565b600b5561019060198190556064601a8190556000601b81905591620002df919062000a1c565b620002eb919062000a1c565b60185561076c601d819055610258601e8190556000601f8190559162000312919062000a1c565b6200031e919062000a1c565b601c55600c80546001600160a01b03191633179055620003408360016200044a565b6200034d3060016200044a565b6200035c61dead60016200044a565b600c5462000375906001600160a01b031660016200044a565b6009546200038e906001600160a01b031660016200044a565b6200039b836001620004ad565b620003a8306001620004ad565b620003b761dead6001620004ad565b600c54620003d0906001600160a01b03166001620004ad565b600954620003e9906001600160a01b03166001620004ad565b6200040f306064620003fd846063620009d7565b620004099190620009f9565b62000557565b306000908152602081905260409020546200043290849062000409908462000a37565b6200043d836200063c565b50505062000a51565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620004f85760405162461bcd60e51b81526020600482018190526024820152600080516020620060348339815191526044820152606401620001f4565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005af5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001f4565b8060026000828254620005c3919062000a1c565b90915550506001600160a01b03821660009081526020819052604081208054839290620005f290849062000a1c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006875760405162461bcd60e51b81526020600482018190526024820152600080516020620060348339815191526044820152606401620001f4565b6001600160a01b038116620006ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001f4565b6005546040516001600160a01b038084169216906000805160206200605483398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200076457607f821691505b6020821081036200078557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007d957600081815260208120601f850160051c81016020861015620007b45750805b601f850160051c820191505b81811015620007d557828155600101620007c0565b5050505b505050565b81516001600160401b03811115620007fa57620007fa62000739565b62000812816200080b84546200074f565b846200078b565b602080601f8311600181146200084a5760008415620008315750858301515b600019600386901b1c1916600185901b178555620007d5565b600085815260208120601f198616915b828110156200087b578886015182559484019460019091019084016200085a565b50858210156200089a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000901578160001904821115620008e557620008e5620008aa565b80851615620008f357918102915b93841c9390800290620008c5565b509250929050565b6000826200091a57506001620009b9565b816200092957506000620009b9565b81600181146200094257600281146200094d576200096d565b6001915050620009b9565b60ff841115620009615762000961620008aa565b50506001821b620009b9565b5060208310610133831016604e8410600b841016171562000992575081810a620009b9565b6200099e8383620008c0565b8060001904821115620009b557620009b5620008aa565b0290505b92915050565b6000620009d060ff84168362000909565b9392505050565b6000816000190483118215151615620009f457620009f4620008aa565b500290565b60008262000a1757634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000a325762000a32620008aa565b500190565b60008282101562000a4c5762000a4c620008aa565b500390565b6155d38062000a616000396000f3fe6080604052600436106104c45760003560e01c80638366e79a11610276578063c5f956af1161014f578063ead010ae116100c1578063f2fde38b11610085578063f2fde38b14610e1a578063f5648a4f14610e3a578063f637434214610e4f578063f8b45b0514610e65578063fd361d0e14610e7b578063fe72b27a14610e9557600080fd5b8063ead010ae14610d98578063eb472fc414610db8578063ee40166e14610dd8578063ee44b44e14610dee578063f11a24d314610e0457600080fd5b8063d85ba06311610113578063d85ba06314610cdb578063dc3f0d0f14610cf1578063dd62ed3e14610d11578063e2f4560514610d57578063e71dc3f514610d6d578063e884f26014610d8357600080fd5b8063c5f956af14610c56578063c7c61e2c14610c76578063c876d0b914610c8b578063cc2ffe7c14610ca5578063d257b34f14610cbb57600080fd5b8063a62068ce116101e8578063b62496f5116101ac578063b62496f514610b87578063bbc0c74214610bb7578063bd5fb92014610bd6578063befd2fac14610bf6578063c024666814610c16578063c17b5b8c14610c3657600080fd5b8063a62068ce14610af5578063a9059cbb14610b0b578063acee28d114610b2b578063adb873bd14610b41578063afd6ce6114610b5757600080fd5b80639a5bd2dd1161023a5780639a5bd2dd14610a515780639a7a23d614610a735780639e93ad8e14610a935780639ec22c0e14610aa9578063a457c2d714610abf578063a4c82a0014610adf57600080fd5b80638366e79a146109b857806385ecfd28146109d857806388e765ff14610a085780638da5cb5b14610a1e57806395d89b4114610a3c57600080fd5b806354b85746116103a857806370a082311161031a578063751039fc116102de578063751039fc146109185780637571336a1461092d578063763cef491461094d578063783102eb146109625780638095d5641461097857806382aa7c681461099857600080fd5b806370a0823114610899578063712c2985146108b9578063713d0974146108ce578063715018a6146108e3578063730c1888146108f857600080fd5b80636605bfda1161036c5780636605bfda1461080157806366d602ae146108215780636a486a8e146108375780636b0a894c1461084d5780636b2fb124146108635780636ddd17131461087957600080fd5b806354b857461461076757806358a6d531146107875780635bb988c91461079e5780635c068a8c146107be5780635c3352d3146107d457600080fd5b80631a8145bb116104415780632e82f1a0116104055780632e82f1a0146106c2578063313ce567146106dc57806339509351146106f8578063452ed4f1146107185780634a62bb651461073857806351f205e41461075257600080fd5b80631a8145bb146106365780631c499ab01461064c57806323b872dd1461066c5780632be32b611461068c5780632c3e486c146106ac57600080fd5b80631805805b116104885780631805805b146105b357806318160ddd146105d5578063184c16c5146105ea57806318e1c12314610600578063199ffc721461062057600080fd5b8063058054c9146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b31461055357806310d5de531461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e660225481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610eb5565b6040516104f09190614bf1565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e366004614c5e565b610f47565b60405190151581526020016104f0565b34801561058f57600080fd5b5061057361059e366004614c8a565b602d6020526000908152604090205460ff1681565b3480156105bf57600080fd5b506105d36105ce366004614c8a565b610f5e565b005b3480156105e157600080fd5b506002546104e6565b3480156105f657600080fd5b506104e6602a5481565b34801561060c57600080fd5b506105d361061b366004614cae565b61101d565b34801561062c57600080fd5b506104e660265481565b34801561064257600080fd5b506104e660215481565b34801561065857600080fd5b506105d3610667366004614cae565b6110f1565b34801561067857600080fd5b50610573610687366004614cc7565b6111fd565b34801561069857600080fd5b506105d36106a7366004614cae565b6112a7565b3480156106b857600080fd5b506104e660285481565b3480156106ce57600080fd5b506027546105739060ff1681565b3480156106e857600080fd5b50604051601281526020016104f0565b34801561070457600080fd5b50610573610713366004614c5e565b6113b4565b34801561072457600080fd5b50600a5461053b906001600160a01b031681565b34801561074457600080fd5b506012546105739060ff1681565b34801561075e57600080fd5b506105d36113f0565b34801561077357600080fd5b506105d3610782366004614d54565b6114f9565b34801561079357600080fd5b50600e544310610573565b3480156107aa57600080fd5b506105d36107b9366004614c8a565b61159a565b3480156107ca57600080fd5b506104e660195481565b3480156107e057600080fd5b506104e66107ef366004614c8a565b60146020526000908152604090205481565b34801561080d57600080fd5b506105d361081c366004614c8a565b61164d565b34801561082d57600080fd5b506104e660075481565b34801561084357600080fd5b506104e6601c5481565b34801561085957600080fd5b506104e660115481565b34801561086f57600080fd5b506104e6601d5481565b34801561088557600080fd5b506012546105739062010000900460ff1681565b3480156108a557600080fd5b506104e66108b4366004614c8a565b611723565b3480156108c557600080fd5b506104e661173e565b3480156108da57600080fd5b506104e6611767565b3480156108ef57600080fd5b506105d3611963565b34801561090457600080fd5b506105d3610913366004614da4565b6119d7565b34801561092457600080fd5b506105d3611b00565b34801561093957600080fd5b506105d3610948366004614ddd565b611b77565b34801561095957600080fd5b506105d3611c3f565b34801561096e57600080fd5b506104e660255481565b34801561098457600080fd5b506105d3610993366004614e16565b611de0565b3480156109a457600080fd5b506105d36109b3366004614cae565b611e9b565b3480156109c457600080fd5b506105736109d3366004614e42565b611f8f565b3480156109e457600080fd5b506105736109f3366004614c8a565b600f6020526000908152604090205460ff1681565b348015610a1457600080fd5b506104e660065481565b348015610a2a57600080fd5b506005546001600160a01b031661053b565b348015610a4857600080fd5b5061050e6121c9565b348015610a5d57600080fd5b50610a666121d8565b6040516104f09190614eb4565b348015610a7f57600080fd5b506105d3610a8e366004614ddd565b612239565b348015610a9f57600080fd5b506104e661271081565b348015610ab557600080fd5b506104e6602b5481565b348015610acb57600080fd5b50610573610ada366004614c5e565b61232d565b348015610aeb57600080fd5b506104e660295481565b348015610b0157600080fd5b506104e6600e5481565b348015610b1757600080fd5b50610573610b26366004614c5e565b6123c6565b348015610b3757600080fd5b506104e660155481565b348015610b4d57600080fd5b506104e6601f5481565b348015610b6357600080fd5b50610573610b72366004614c8a565b60136020526000908152604090205460ff1681565b348015610b9357600080fd5b50610573610ba2366004614c8a565b602e6020526000908152604090205460ff1681565b348015610bc357600080fd5b5060125461057390610100900460ff1681565b348015610be257600080fd5b506105d3610bf1366004614ec7565b6123d3565b348015610c0257600080fd5b506105d3610c11366004614cae565b6124df565b348015610c2257600080fd5b506105d3610c31366004614ddd565b612615565b348015610c4257600080fd5b506105d3610c51366004614e16565b61269e565b348015610c6257600080fd5b50600c5461053b906001600160a01b031681565b348015610c8257600080fd5b506105d3612759565b348015610c9757600080fd5b506017546105739060ff1681565b348015610cb157600080fd5b506104e660205481565b348015610cc757600080fd5b506105d3610cd6366004614cae565b6127c2565b348015610ce757600080fd5b506104e660185481565b348015610cfd57600080fd5b506105d3610d0c366004614cae565b61290d565b348015610d1d57600080fd5b506104e6610d2c366004614e42565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506104e6601b5481565b348015610d8f57600080fd5b506105d3612a1b565b348015610da457600080fd5b506105d3610db3366004614fe9565b612a51565b348015610dc457600080fd5b5061053b610dd3366004614cae565b612fff565b348015610de457600080fd5b506104e6600d5481565b348015610dfa57600080fd5b506104e660235481565b348015610e1057600080fd5b506104e6601a5481565b348015610e2657600080fd5b506105d3610e35366004614c8a565b613029565b348015610e4657600080fd5b506105d3613114565b348015610e5b57600080fd5b506104e6601e5481565b348015610e7157600080fd5b506104e660085481565b348015610e8757600080fd5b506024546105739060ff1681565b348015610ea157600080fd5b506105d3610eb0366004614cae565b613180565b606060038054610ec4906150b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906150b4565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b6000610f5433848461347a565b5060015b92915050565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f88906150ee565b60405180910390fd5b601254610100900460ff1615610ffb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f88565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610f88906150ee565b600a811015801561105a575061c3508111155b6110a65760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f88565b6110b781662386f26fc10000615139565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610f88906150ee565b6111276012600a61523c565b606461113260025490565b61113d906001615139565b611147919061524b565b611151919061524b565b8110156111b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f88565b6111be6012600a61523c565b6111c89082615139565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110e6565b600061120a84848461359e565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561128f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f88565b61129c853385840361347a565b506001949350505050565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610f88906150ee565b6112dd6012600a61523c565b6103e86112e960025490565b6112f4906001615139565b6112fe919061524b565b611308919061524b565b8110156113695760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f88565b6113756012600a61523c565b61137f9082615139565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110e6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f549185906113eb90869061526d565b61347a565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610f88906150ee565b600b5461142630611723565b101561149c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f88565b600a805460ff60a01b1916600160a01b1790556114b761434b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115235760405162461bcd60e51b8152600401610f88906150ee565b60005b81811015611595576000600f600085858581811061154657611546615285565b905060200201602081019061155b9190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061158d8161529b565b915050611526565b505050565b6005546001600160a01b031633146115c45760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166000908152600f602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610f88565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166116d95760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156117615760235460225461175c919061526d565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f991906152b4565b8160008151811061180c5761180c615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061184057611840615285565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916118af9186906004016152d1565b600060405180830381865afa1580156118cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f491908101906152f2565b90506064601d54601e54611908919061526d565b8260018151811061191b5761191b615285565b602002602001015161192d9190615139565b611937919061524b565b8160018151811061194a5761194a615285565b602002602001015161195c919061526d565b9250505090565b6005546001600160a01b0316331461198d5760405162461bcd60e51b8152600401610f88906150ee565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611a015760405162461bcd60e51b8152600401610f88906150ee565b610258831015611a6f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f88565b6103e88211158015611a7f575060015b611ae45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f88565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610f88906150ee565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611ba15760405162461bcd60e51b8152600401610f88906150ee565b80611c1457600a546001600160a01b0390811690831603611c145760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f88565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c695760405162461bcd60e51b8152600401610f88906150ee565b611c7161173e565b4210158015611c8757506000611c8561173e565b115b611ccc5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f88565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190615383565b611d579190615139565b611d61919061524b565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc919061539c565b5050565b6005546001600160a01b03163314611e0a5760405162461bcd60e51b8152600401610f88906150ee565b6019839055601a829055601b81905580611e24838561526d565b611e2e919061526d565b6018556064611e40612710601e615139565b611e4a919061524b565b60185411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b03163314611ec55760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615611f1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f88565b6032811115611f3e5760405162461bcd60e51b8152600401610f88906153b9565b6012805462ffff0019166201010017905543600d819055611f6090829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0383166120125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f88565b6001600160a01b038316301415806120325750601254610100900460ff16155b61209b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f88565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121069190615383565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d919061539c565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610ec4906150b4565b60606010805480602002602001604051908101604052809291908181526020018280548015610f3d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612212575050505050905090565b6005546001600160a01b031633146122635760405162461bcd60e51b8152600401610f88906150ee565b600a546001600160a01b03908116908316036122e75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f88565b6122f182826144ad565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123af5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f88565b6123bc338585840361347a565b5060019392505050565b6000610f5433848461359e565b6005546001600160a01b031633146123fd5760405162461bcd60e51b8152600401610f88906150ee565b60005b828110156124d95781602c600086868581811061241f5761241f615285565b90506020020160208101906124349190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061246e5761246e615285565b90506020020160208101906124839190614c8a565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516124bf911515815260200190565b60405180910390a2806124d18161529b565b915050612400565b50505050565b6005546001600160a01b031633146125095760405162461bcd60e51b8152600401610f88906150ee565b60245460ff16156125765760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f88565b606481111580156125875750600081115b6125d35760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f88565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b0316331461263f5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126c85760405162461bcd60e51b8152600401610f88906150ee565b601d839055601e829055601f819055806126e2838561526d565b6126ec919061526d565b601c5560646126fe612710601e615139565b612708919061524b565b601c5411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b031633146127835760405162461bcd60e51b8152600401610f88906150ee565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b031633146127ec5760405162461bcd60e51b8152600401610f88906150ee565b620186a06127f960025490565b612804906001615139565b61280e919061524b565b81101561287b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f88565b6103e861288760025490565b612892906001615139565b61289c919061524b565b8111156129085760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f88565b600b55565b6005546001600160a01b031633146129375760405162461bcd60e51b8152600401610f88906150ee565b6129436012600a61523c565b6103e861294f60025490565b61295a906001615139565b612964919061524b565b61296e919061524b565b8110156129d05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f88565b6129dc6012600a61523c565b6129e69082615139565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e6565b6005546001600160a01b03163314612a455760405162461bcd60e51b8152600401610f88906150ee565b6017805460ff19169055565b6005546001600160a01b03163314612a7b5760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615612ae75760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f88565b60328110612b075760405162461bcd60e51b8152600401610f88906153b9565b8151835114612b585760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f88565b61012c835110612bc95760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f88565b60005b8351811015612c96576000848281518110612be957612be9615285565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612c28426201518061526d565b6001600160a01b038216600090815260146020526040812091909155612c506012600a61523c565b858481518110612c6257612c62615285565b6020026020010151612c749190615139565b9050612c813383836144db565b50508080612c8e9061529b565b915050612bcc565b506012805462ffff0019166201010017905543600d819055612cb990829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5c91906152b4565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de291906152b4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5391906152b4565b600a80546001600160a01b0319166001600160a01b03929092169182179055612e7d906001614630565b600a54612e94906001600160a01b031660016144ad565b60004711612ef05760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f88565b6000612efb30611723565b11612f575760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f88565b600954612f729030906001600160a01b03166113eb82611723565b6009546001600160a01b031663f305d7194730612f8e81611723565b60008030426040518863ffffffff1660e01b8152600401612fb496959493929190615400565b60606040518083038185885af1158015612fd2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff7919061543b565b505050505050565b6010818154811061300f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146130535760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166130b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f88565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461313e5760405162461bcd60e51b8152600401610f88906150ee565b604051600090339047908381818185875af1925050503d80600081146124d9576040519150601f19603f3d011682016040523d82523d6000602084013e6124d9565b6005546001600160a01b031633146131aa5760405162461bcd60e51b8152600401610f88906150ee565b6107d081111561321a5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f88565b602a546132279042615469565b602b5411156132685760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f88565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d99190615383565b905060006132e630611723565b905060006127106132f78585615139565b613301919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906133ba9030908690600190819084904290600401615400565b60408051808303816000875af11580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc9190615480565b505060008361340a30611723565b6134149190615469565b90508015613429576134293061dead836144db565b60006134358347615469565b905080156134465761344681614693565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f88565b6001600160a01b03821661353d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f88565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166135c45760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166135ea5760405162461bcd60e51b8152600401610f88906154e9565b6000811161363a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f88565b601254610100900460ff166136cd576001600160a01b0383166000908152602c602052604090205460ff168061368857506001600160a01b0382166000908152602c602052604090205460ff165b6136cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f88565b600e5443101580156136e65750601254610100900460ff165b156137b6576001600160a01b0383166000908152600f602052604090205460ff16158061372057506005546001600160a01b038381169116145b8061373557506001600160a01b03821661dead145b6137b65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f88565b6001600160a01b03831660009081526013602052604090205460ff161561399d576001600160a01b0382166000908152602e602052604090205460ff16156138f1576001600160a01b0383166000908152601460205260409020544210156138525760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f88565b61385a611767565b8111156138c65760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f88565b6138d3426201518061526d565b6001600160a01b03841660009081526014602052604090205561399d565b6001600160a01b0382166000908152602c602052604090205460ff1661399d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f88565b60125460ff1615613d99576005546001600160a01b038481169116148015906139d457506005546001600160a01b03838116911614155b80156139e857506001600160a01b03821615155b80156139ff57506001600160a01b03821661dead14155b8015613a2457506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a4957506001600160a01b0382166000908152602c602052604090205460ff16155b15613d995760175460ff1615613b62576009546001600160a01b03838116911614801590613a855750600a546001600160a01b03838116911614155b15613b6257613a95600243615469565b32600090815260166020526040902054108015613ad35750613ab8600243615469565b6001600160a01b038316600090815260166020526040902054105b613b3d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f88565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613ba357506001600160a01b0382166000908152602d602052604090205460ff16155b15613c6f57600654811115613c0b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f88565b600854613c1783611723565b613c21908361526d565b1115613c6a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b613d99565b6001600160a01b0382166000908152602e602052604090205460ff168015613cb057506001600160a01b0383166000908152602d602052604090205460ff16155b15613d1a57600754811115613c6a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f88565b6001600160a01b0382166000908152602d602052604090205460ff16613d9957600854613d4683611723565b613d50908361526d565b1115613d995760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b6000613da430611723565b600b5490915081108015908190613dc3575060125462010000900460ff165b8015613dd95750600a54600160a01b900460ff16155b8015613dfe57506001600160a01b0385166000908152602e602052604090205460ff16155b8015613e2357506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e4857506001600160a01b0384166000908152602c602052604090205460ff16155b15613e7657600a805460ff60a01b1916600160a01b179055613e6861434b565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613ea857506001600160a01b0384166000908152602e602052604090205460ff165b8015613eb6575060275460ff165b8015613ed15750602854602954613ecd919061526d565b4210155b8015613ef657506001600160a01b0385166000908152602c602052604090205460ff16155b15613f0357613f036147e6565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f4557506001600160a01b0385166000908152602c602052604090205460ff165b15613f4e575060005b600080821561433657600e5443108015613f8057506001600160a01b0388166000908152602e602052604090205460ff165b8015613fa557506001600160a01b0387166000908152602e602052604090205460ff16155b8015613fca57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fd857506000601854115b1561417e57600e544310613fff57600160066000828254613ff99190615469565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140df576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161405890849061526d565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140f09190615139565b6140fa919061524b565b9150601854601a548361410d9190615139565b614117919061524b565b60216000828254614128919061526d565b909155505060185460195461413d9084615139565b614147919061524b565b60206000828254614158919061526d565b9091555050601854601b5461416d9084615139565b614177919061524b565b9050614305565b6001600160a01b0387166000908152602e602052604090205460ff1680156141a857506000601c54115b1561423b57612710601c54876141be9190615139565b6141c8919061524b565b9150601c54601e54836141db9190615139565b6141e5919061524b565b602160008282546141f6919061526d565b9091555050601c54601d5461420b9084615139565b614215919061524b565b60206000828254614226919061526d565b9091555050601854601f5461416d9084615139565b6001600160a01b0388166000908152602e602052604090205460ff16801561426557506000601854115b15614305576127106018548761427b9190615139565b614285919061524b565b9150601854601a54836142989190615139565b6142a2919061524b565b602160008282546142b3919061526d565b90915550506018546019546142c89084615139565b6142d2919061524b565b602060008282546142e3919061526d565b9091555050601854601b546142f89084615139565b614302919061524b565b90505b8115614329576143168830846144db565b8015614329576143293061dead836144db565b6143338287615469565b95505b6143418888886144db565b5050505050505050565b600061435630611723565b9050600060205460215461436a919061526d565b9050811580614377575080155b15614380575050565b600b5461438e90600a615139565b8211156143a657600b546143a390600a615139565b91505b600080600283602154866143ba9190615139565b6143c4919061524b565b6143ce919061524b565b90506143e26143dd8286615469565b614a00565b602154479081906000906143f89060029061524b565b6144029087615469565b60205461440f9085615139565b614419919061524b565b90506144258183615469565b60006021819055602055915083158015906144405750600082115b1561444f5761444f8483614b52565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461449c576040519150601f19603f3d011682016040523d82523d6000602084013e6144a1565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122f18282614630565b6001600160a01b0383166145015760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166145275760405162461bcd60e51b8152600401610f88906154e9565b6001600160a01b0383166000908152602081905260409020548181101561459f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f88565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145d690849061526d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161462291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472191906152b4565b8160008151811061473457614734615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061476857614768615285565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906147b090600090869061dead90429060040161552c565b6000604051808303818588803b1580156147c957600080fd5b505af11580156147dd573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485c9190615383565b9050600061486930611723565b905060006127106026548461487e9190615139565b614888919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614906919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906149419030908690600190819084904290600401615400565b60408051808303816000875af115801561495f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149839190615480565b505060008361499130611723565b61499b9190615469565b905080156149b0576149b03061dead836144db565b60006149bc8347615469565b905080156149cd576149cd81614693565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a3557614a35615285565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab291906152b4565b81600181518110614ac557614ac5615285565b6001600160a01b039283166020918202929092010152600954614aeb913091168461347a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614b24908590600090869030904290600401615561565b600060405180830381600087803b158015614b3e57600080fd5b505af1158015612ff7573d6000803e3d6000fd5b600954614b6a9030906001600160a01b03168461347a565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614ba79030908790600090819084904290600401615400565b60606040518083038185885af1158015614bc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bea919061543b565b5050505050565b600060208083528351808285015260005b81811015614c1e57858101830151858201604001528201614c02565b81811115614c30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114614c5b57600080fd5b50565b60008060408385031215614c7157600080fd5b8235614c7c81614c46565b946020939093013593505050565b600060208284031215614c9c57600080fd5b8135614ca781614c46565b9392505050565b600060208284031215614cc057600080fd5b5035919050565b600080600060608486031215614cdc57600080fd5b8335614ce781614c46565b92506020840135614cf781614c46565b929592945050506040919091013590565b60008083601f840112614d1a57600080fd5b50813567ffffffffffffffff811115614d3257600080fd5b6020830191508360208260051b8501011115614d4d57600080fd5b9250929050565b60008060208385031215614d6757600080fd5b823567ffffffffffffffff811115614d7e57600080fd5b614d8a85828601614d08565b90969095509350505050565b8015158114614c5b57600080fd5b600080600060608486031215614db957600080fd5b83359250602084013591506040840135614dd281614d96565b809150509250925092565b60008060408385031215614df057600080fd5b8235614dfb81614c46565b91506020830135614e0b81614d96565b809150509250929050565b600080600060608486031215614e2b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e5557600080fd5b8235614e6081614c46565b91506020830135614e0b81614c46565b600081518084526020808501945080840160005b83811015614ea95781516001600160a01b031687529582019590820190600101614e84565b509495945050505050565b602081526000614ca76020830184614e70565b600080600060408486031215614edc57600080fd5b833567ffffffffffffffff811115614ef357600080fd5b614eff86828701614d08565b9094509250506020840135614dd281614d96565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f5257614f52614f13565b604052919050565b600067ffffffffffffffff821115614f7457614f74614f13565b5060051b60200190565b600082601f830112614f8f57600080fd5b81356020614fa4614f9f83614f5a565b614f29565b82815260059290921b84018101918181019086841115614fc357600080fd5b8286015b84811015614fde5780358352918301918301614fc7565b509695505050505050565b600080600060608486031215614ffe57600080fd5b833567ffffffffffffffff8082111561501657600080fd5b818601915086601f83011261502a57600080fd5b8135602061503a614f9f83614f5a565b82815260059290921b8401810191818101908a84111561505957600080fd5b948201945b8386101561508057853561507181614c46565b8252948201949082019061505e565b9750508701359250508082111561509657600080fd5b506150a386828701614f7e565b925050604084013590509250925092565b600181811c908216806150c857607f821691505b6020821081036150e857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561515357615153615123565b500290565b600181815b8085111561519357816000190482111561517957615179615123565b8085161561518657918102915b93841c939080029061515d565b509250929050565b6000826151aa57506001610f58565b816151b757506000610f58565b81600181146151cd57600281146151d7576151f3565b6001915050610f58565b60ff8411156151e8576151e8615123565b50506001821b610f58565b5060208310610133831016604e8410600b8410161715615216575081810a610f58565b6152208383615158565b806000190482111561523457615234615123565b029392505050565b6000614ca760ff84168361519b565b60008261526857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561528057615280615123565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016152ad576152ad615123565b5060010190565b6000602082840312156152c657600080fd5b8151614ca781614c46565b8281526040602082015260006152ea6040830184614e70565b949350505050565b6000602080838503121561530557600080fd5b825167ffffffffffffffff81111561531c57600080fd5b8301601f8101851361532d57600080fd5b805161533b614f9f82614f5a565b81815260059190911b8201830190838101908783111561535a57600080fd5b928401925b828410156153785783518252928401929084019061535f565b979650505050505050565b60006020828403121561539557600080fd5b5051919050565b6000602082840312156153ae57600080fd5b8151614ca781614d96565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561545057600080fd5b8351925060208401519150604084015190509250925092565b60008282101561547b5761547b615123565b500390565b6000806040838503121561549357600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006155456080830186614e70565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061558060a0830186614e70565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b044f348070a1e73634feef6abb394fb4425ab467b020f9d605c5bf5821fda7464736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c80638366e79a11610276578063c5f956af1161014f578063ead010ae116100c1578063f2fde38b11610085578063f2fde38b14610e1a578063f5648a4f14610e3a578063f637434214610e4f578063f8b45b0514610e65578063fd361d0e14610e7b578063fe72b27a14610e9557600080fd5b8063ead010ae14610d98578063eb472fc414610db8578063ee40166e14610dd8578063ee44b44e14610dee578063f11a24d314610e0457600080fd5b8063d85ba06311610113578063d85ba06314610cdb578063dc3f0d0f14610cf1578063dd62ed3e14610d11578063e2f4560514610d57578063e71dc3f514610d6d578063e884f26014610d8357600080fd5b8063c5f956af14610c56578063c7c61e2c14610c76578063c876d0b914610c8b578063cc2ffe7c14610ca5578063d257b34f14610cbb57600080fd5b8063a62068ce116101e8578063b62496f5116101ac578063b62496f514610b87578063bbc0c74214610bb7578063bd5fb92014610bd6578063befd2fac14610bf6578063c024666814610c16578063c17b5b8c14610c3657600080fd5b8063a62068ce14610af5578063a9059cbb14610b0b578063acee28d114610b2b578063adb873bd14610b41578063afd6ce6114610b5757600080fd5b80639a5bd2dd1161023a5780639a5bd2dd14610a515780639a7a23d614610a735780639e93ad8e14610a935780639ec22c0e14610aa9578063a457c2d714610abf578063a4c82a0014610adf57600080fd5b80638366e79a146109b857806385ecfd28146109d857806388e765ff14610a085780638da5cb5b14610a1e57806395d89b4114610a3c57600080fd5b806354b85746116103a857806370a082311161031a578063751039fc116102de578063751039fc146109185780637571336a1461092d578063763cef491461094d578063783102eb146109625780638095d5641461097857806382aa7c681461099857600080fd5b806370a0823114610899578063712c2985146108b9578063713d0974146108ce578063715018a6146108e3578063730c1888146108f857600080fd5b80636605bfda1161036c5780636605bfda1461080157806366d602ae146108215780636a486a8e146108375780636b0a894c1461084d5780636b2fb124146108635780636ddd17131461087957600080fd5b806354b857461461076757806358a6d531146107875780635bb988c91461079e5780635c068a8c146107be5780635c3352d3146107d457600080fd5b80631a8145bb116104415780632e82f1a0116104055780632e82f1a0146106c2578063313ce567146106dc57806339509351146106f8578063452ed4f1146107185780634a62bb651461073857806351f205e41461075257600080fd5b80631a8145bb146106365780631c499ab01461064c57806323b872dd1461066c5780632be32b611461068c5780632c3e486c146106ac57600080fd5b80631805805b116104885780631805805b146105b357806318160ddd146105d5578063184c16c5146105ea57806318e1c12314610600578063199ffc721461062057600080fd5b8063058054c9146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b31461055357806310d5de531461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e660225481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610eb5565b6040516104f09190614bf1565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e366004614c5e565b610f47565b60405190151581526020016104f0565b34801561058f57600080fd5b5061057361059e366004614c8a565b602d6020526000908152604090205460ff1681565b3480156105bf57600080fd5b506105d36105ce366004614c8a565b610f5e565b005b3480156105e157600080fd5b506002546104e6565b3480156105f657600080fd5b506104e6602a5481565b34801561060c57600080fd5b506105d361061b366004614cae565b61101d565b34801561062c57600080fd5b506104e660265481565b34801561064257600080fd5b506104e660215481565b34801561065857600080fd5b506105d3610667366004614cae565b6110f1565b34801561067857600080fd5b50610573610687366004614cc7565b6111fd565b34801561069857600080fd5b506105d36106a7366004614cae565b6112a7565b3480156106b857600080fd5b506104e660285481565b3480156106ce57600080fd5b506027546105739060ff1681565b3480156106e857600080fd5b50604051601281526020016104f0565b34801561070457600080fd5b50610573610713366004614c5e565b6113b4565b34801561072457600080fd5b50600a5461053b906001600160a01b031681565b34801561074457600080fd5b506012546105739060ff1681565b34801561075e57600080fd5b506105d36113f0565b34801561077357600080fd5b506105d3610782366004614d54565b6114f9565b34801561079357600080fd5b50600e544310610573565b3480156107aa57600080fd5b506105d36107b9366004614c8a565b61159a565b3480156107ca57600080fd5b506104e660195481565b3480156107e057600080fd5b506104e66107ef366004614c8a565b60146020526000908152604090205481565b34801561080d57600080fd5b506105d361081c366004614c8a565b61164d565b34801561082d57600080fd5b506104e660075481565b34801561084357600080fd5b506104e6601c5481565b34801561085957600080fd5b506104e660115481565b34801561086f57600080fd5b506104e6601d5481565b34801561088557600080fd5b506012546105739062010000900460ff1681565b3480156108a557600080fd5b506104e66108b4366004614c8a565b611723565b3480156108c557600080fd5b506104e661173e565b3480156108da57600080fd5b506104e6611767565b3480156108ef57600080fd5b506105d3611963565b34801561090457600080fd5b506105d3610913366004614da4565b6119d7565b34801561092457600080fd5b506105d3611b00565b34801561093957600080fd5b506105d3610948366004614ddd565b611b77565b34801561095957600080fd5b506105d3611c3f565b34801561096e57600080fd5b506104e660255481565b34801561098457600080fd5b506105d3610993366004614e16565b611de0565b3480156109a457600080fd5b506105d36109b3366004614cae565b611e9b565b3480156109c457600080fd5b506105736109d3366004614e42565b611f8f565b3480156109e457600080fd5b506105736109f3366004614c8a565b600f6020526000908152604090205460ff1681565b348015610a1457600080fd5b506104e660065481565b348015610a2a57600080fd5b506005546001600160a01b031661053b565b348015610a4857600080fd5b5061050e6121c9565b348015610a5d57600080fd5b50610a666121d8565b6040516104f09190614eb4565b348015610a7f57600080fd5b506105d3610a8e366004614ddd565b612239565b348015610a9f57600080fd5b506104e661271081565b348015610ab557600080fd5b506104e6602b5481565b348015610acb57600080fd5b50610573610ada366004614c5e565b61232d565b348015610aeb57600080fd5b506104e660295481565b348015610b0157600080fd5b506104e6600e5481565b348015610b1757600080fd5b50610573610b26366004614c5e565b6123c6565b348015610b3757600080fd5b506104e660155481565b348015610b4d57600080fd5b506104e6601f5481565b348015610b6357600080fd5b50610573610b72366004614c8a565b60136020526000908152604090205460ff1681565b348015610b9357600080fd5b50610573610ba2366004614c8a565b602e6020526000908152604090205460ff1681565b348015610bc357600080fd5b5060125461057390610100900460ff1681565b348015610be257600080fd5b506105d3610bf1366004614ec7565b6123d3565b348015610c0257600080fd5b506105d3610c11366004614cae565b6124df565b348015610c2257600080fd5b506105d3610c31366004614ddd565b612615565b348015610c4257600080fd5b506105d3610c51366004614e16565b61269e565b348015610c6257600080fd5b50600c5461053b906001600160a01b031681565b348015610c8257600080fd5b506105d3612759565b348015610c9757600080fd5b506017546105739060ff1681565b348015610cb157600080fd5b506104e660205481565b348015610cc757600080fd5b506105d3610cd6366004614cae565b6127c2565b348015610ce757600080fd5b506104e660185481565b348015610cfd57600080fd5b506105d3610d0c366004614cae565b61290d565b348015610d1d57600080fd5b506104e6610d2c366004614e42565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506104e6601b5481565b348015610d8f57600080fd5b506105d3612a1b565b348015610da457600080fd5b506105d3610db3366004614fe9565b612a51565b348015610dc457600080fd5b5061053b610dd3366004614cae565b612fff565b348015610de457600080fd5b506104e6600d5481565b348015610dfa57600080fd5b506104e660235481565b348015610e1057600080fd5b506104e6601a5481565b348015610e2657600080fd5b506105d3610e35366004614c8a565b613029565b348015610e4657600080fd5b506105d3613114565b348015610e5b57600080fd5b506104e6601e5481565b348015610e7157600080fd5b506104e660085481565b348015610e8757600080fd5b506024546105739060ff1681565b348015610ea157600080fd5b506105d3610eb0366004614cae565b613180565b606060038054610ec4906150b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef0906150b4565b8015610f3d5780601f10610f1257610100808354040283529160200191610f3d565b820191906000526020600020905b815481529060010190602001808311610f2057829003601f168201915b5050505050905090565b6000610f5433848461347a565b5060015b92915050565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610f88906150ee565b60405180910390fd5b601254610100900460ff1615610ffb5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f88565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110475760405162461bcd60e51b8152600401610f88906150ee565b600a811015801561105a575061c3508111155b6110a65760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f88565b6110b781662386f26fc10000615139565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610f88906150ee565b6111276012600a61523c565b606461113260025490565b61113d906001615139565b611147919061524b565b611151919061524b565b8110156111b25760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f88565b6111be6012600a61523c565b6111c89082615139565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110e6565b600061120a84848461359e565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561128f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f88565b61129c853385840361347a565b506001949350505050565b6005546001600160a01b031633146112d15760405162461bcd60e51b8152600401610f88906150ee565b6112dd6012600a61523c565b6103e86112e960025490565b6112f4906001615139565b6112fe919061524b565b611308919061524b565b8110156113695760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f88565b6113756012600a61523c565b61137f9082615139565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110e6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f549185906113eb90869061526d565b61347a565b6005546001600160a01b0316331461141a5760405162461bcd60e51b8152600401610f88906150ee565b600b5461142630611723565b101561149c576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f88565b600a805460ff60a01b1916600160a01b1790556114b761434b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146115235760405162461bcd60e51b8152600401610f88906150ee565b60005b81811015611595576000600f600085858581811061154657611546615285565b905060200201602081019061155b9190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061158d8161529b565b915050611526565b505050565b6005546001600160a01b031633146115c45760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166000908152600f602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610f88565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6005546001600160a01b031633146116775760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166116d95760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f88565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156117615760235460225461175c919061526d565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f991906152b4565b8160008151811061180c5761180c615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061184057611840615285565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916118af9186906004016152d1565b600060405180830381865afa1580156118cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f491908101906152f2565b90506064601d54601e54611908919061526d565b8260018151811061191b5761191b615285565b602002602001015161192d9190615139565b611937919061524b565b8160018151811061194a5761194a615285565b602002602001015161195c919061526d565b9250505090565b6005546001600160a01b0316331461198d5760405162461bcd60e51b8152600401610f88906150ee565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611a015760405162461bcd60e51b8152600401610f88906150ee565b610258831015611a6f5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f88565b6103e88211158015611a7f575060015b611ae45760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f88565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b03163314611b2a5760405162461bcd60e51b8152600401610f88906150ee565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611ba15760405162461bcd60e51b8152600401610f88906150ee565b80611c1457600a546001600160a01b0390811690831603611c145760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f88565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c695760405162461bcd60e51b8152600401610f88906150ee565b611c7161173e565b4210158015611c8757506000611c8561173e565b115b611ccc5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f88565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d9190615383565b611d579190615139565b611d61919061524b565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc919061539c565b5050565b6005546001600160a01b03163314611e0a5760405162461bcd60e51b8152600401610f88906150ee565b6019839055601a829055601b81905580611e24838561526d565b611e2e919061526d565b6018556064611e40612710601e615139565b611e4a919061524b565b60185411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b03163314611ec55760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615611f1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f88565b6032811115611f3e5760405162461bcd60e51b8152600401610f88906153b9565b6012805462ffff0019166201010017905543600d819055611f6090829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611fbc5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0383166120125760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f88565b6001600160a01b038316301415806120325750601254610100900460ff16155b61209b5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f88565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156120e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121069190615383565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612159573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217d919061539c565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610ec4906150b4565b60606010805480602002602001604051908101604052809291908181526020018280548015610f3d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612212575050505050905090565b6005546001600160a01b031633146122635760405162461bcd60e51b8152600401610f88906150ee565b600a546001600160a01b03908116908316036122e75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f88565b6122f182826144ad565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156123af5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f88565b6123bc338585840361347a565b5060019392505050565b6000610f5433848461359e565b6005546001600160a01b031633146123fd5760405162461bcd60e51b8152600401610f88906150ee565b60005b828110156124d95781602c600086868581811061241f5761241f615285565b90506020020160208101906124349190614c8a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905583838281811061246e5761246e615285565b90506020020160208101906124839190614c8a565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516124bf911515815260200190565b60405180910390a2806124d18161529b565b915050612400565b50505050565b6005546001600160a01b031633146125095760405162461bcd60e51b8152600401610f88906150ee565b60245460ff16156125765760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f88565b606481111580156125875750600081115b6125d35760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f88565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b0316331461263f5760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146126c85760405162461bcd60e51b8152600401610f88906150ee565b601d839055601e829055601f819055806126e2838561526d565b6126ec919061526d565b601c5560646126fe612710601e615139565b612708919061524b565b601c5411156115955760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f88565b6005546001600160a01b031633146127835760405162461bcd60e51b8152600401610f88906150ee565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b031633146127ec5760405162461bcd60e51b8152600401610f88906150ee565b620186a06127f960025490565b612804906001615139565b61280e919061524b565b81101561287b5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f88565b6103e861288760025490565b612892906001615139565b61289c919061524b565b8111156129085760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f88565b600b55565b6005546001600160a01b031633146129375760405162461bcd60e51b8152600401610f88906150ee565b6129436012600a61523c565b6103e861294f60025490565b61295a906001615139565b612964919061524b565b61296e919061524b565b8110156129d05760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f88565b6129dc6012600a61523c565b6129e69082615139565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110e6565b6005546001600160a01b03163314612a455760405162461bcd60e51b8152600401610f88906150ee565b6017805460ff19169055565b6005546001600160a01b03163314612a7b5760405162461bcd60e51b8152600401610f88906150ee565b601254610100900460ff1615612ae75760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f88565b60328110612b075760405162461bcd60e51b8152600401610f88906153b9565b8151835114612b585760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f88565b61012c835110612bc95760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f88565b60005b8351811015612c96576000848281518110612be957612be9615285565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612c28426201518061526d565b6001600160a01b038216600090815260146020526040812091909155612c506012600a61523c565b858481518110612c6257612c62615285565b6020026020010151612c749190615139565b9050612c813383836144db565b50508080612c8e9061529b565b915050612bcc565b506012805462ffff0019166201010017905543600d819055612cb990829061526d565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5c91906152b4565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de291906152b4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5391906152b4565b600a80546001600160a01b0319166001600160a01b03929092169182179055612e7d906001614630565b600a54612e94906001600160a01b031660016144ad565b60004711612ef05760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f88565b6000612efb30611723565b11612f575760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f88565b600954612f729030906001600160a01b03166113eb82611723565b6009546001600160a01b031663f305d7194730612f8e81611723565b60008030426040518863ffffffff1660e01b8152600401612fb496959493929190615400565b60606040518083038185885af1158015612fd2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ff7919061543b565b505050505050565b6010818154811061300f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b031633146130535760405162461bcd60e51b8152600401610f88906150ee565b6001600160a01b0381166130b85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f88565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461313e5760405162461bcd60e51b8152600401610f88906150ee565b604051600090339047908381818185875af1925050503d80600081146124d9576040519150601f19603f3d011682016040523d82523d6000602084013e6124d9565b6005546001600160a01b031633146131aa5760405162461bcd60e51b8152600401610f88906150ee565b6107d081111561321a5760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f88565b602a546132279042615469565b602b5411156132685760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f88565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d99190615383565b905060006132e630611723565b905060006127106132f78585615139565b613301919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af115801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906133ba9030908690600190819084904290600401615400565b60408051808303816000875af11580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc9190615480565b505060008361340a30611723565b6134149190615469565b90508015613429576134293061dead836144db565b60006134358347615469565b905080156134465761344681614693565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f88565b6001600160a01b03821661353d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f88565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166135c45760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166135ea5760405162461bcd60e51b8152600401610f88906154e9565b6000811161363a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f88565b601254610100900460ff166136cd576001600160a01b0383166000908152602c602052604090205460ff168061368857506001600160a01b0382166000908152602c602052604090205460ff165b6136cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f88565b600e5443101580156136e65750601254610100900460ff165b156137b6576001600160a01b0383166000908152600f602052604090205460ff16158061372057506005546001600160a01b038381169116145b8061373557506001600160a01b03821661dead145b6137b65760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f88565b6001600160a01b03831660009081526013602052604090205460ff161561399d576001600160a01b0382166000908152602e602052604090205460ff16156138f1576001600160a01b0383166000908152601460205260409020544210156138525760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f88565b61385a611767565b8111156138c65760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f88565b6138d3426201518061526d565b6001600160a01b03841660009081526014602052604090205561399d565b6001600160a01b0382166000908152602c602052604090205460ff1661399d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f88565b60125460ff1615613d99576005546001600160a01b038481169116148015906139d457506005546001600160a01b03838116911614155b80156139e857506001600160a01b03821615155b80156139ff57506001600160a01b03821661dead14155b8015613a2457506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a4957506001600160a01b0382166000908152602c602052604090205460ff16155b15613d995760175460ff1615613b62576009546001600160a01b03838116911614801590613a855750600a546001600160a01b03838116911614155b15613b6257613a95600243615469565b32600090815260166020526040902054108015613ad35750613ab8600243615469565b6001600160a01b038316600090815260166020526040902054105b613b3d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f88565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613ba357506001600160a01b0382166000908152602d602052604090205460ff16155b15613c6f57600654811115613c0b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f88565b600854613c1783611723565b613c21908361526d565b1115613c6a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b613d99565b6001600160a01b0382166000908152602e602052604090205460ff168015613cb057506001600160a01b0383166000908152602d602052604090205460ff16155b15613d1a57600754811115613c6a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f88565b6001600160a01b0382166000908152602d602052604090205460ff16613d9957600854613d4683611723565b613d50908361526d565b1115613d995760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f88565b6000613da430611723565b600b5490915081108015908190613dc3575060125462010000900460ff165b8015613dd95750600a54600160a01b900460ff16155b8015613dfe57506001600160a01b0385166000908152602e602052604090205460ff16155b8015613e2357506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e4857506001600160a01b0384166000908152602c602052604090205460ff16155b15613e7657600a805460ff60a01b1916600160a01b179055613e6861434b565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613ea857506001600160a01b0384166000908152602e602052604090205460ff165b8015613eb6575060275460ff165b8015613ed15750602854602954613ecd919061526d565b4210155b8015613ef657506001600160a01b0385166000908152602c602052604090205460ff16155b15613f0357613f036147e6565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f4557506001600160a01b0385166000908152602c602052604090205460ff165b15613f4e575060005b600080821561433657600e5443108015613f8057506001600160a01b0388166000908152602e602052604090205460ff165b8015613fa557506001600160a01b0387166000908152602e602052604090205460ff16155b8015613fca57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fd857506000601854115b1561417e57600e544310613fff57600160066000828254613ff99190615469565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140df576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161405890849061526d565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140f09190615139565b6140fa919061524b565b9150601854601a548361410d9190615139565b614117919061524b565b60216000828254614128919061526d565b909155505060185460195461413d9084615139565b614147919061524b565b60206000828254614158919061526d565b9091555050601854601b5461416d9084615139565b614177919061524b565b9050614305565b6001600160a01b0387166000908152602e602052604090205460ff1680156141a857506000601c54115b1561423b57612710601c54876141be9190615139565b6141c8919061524b565b9150601c54601e54836141db9190615139565b6141e5919061524b565b602160008282546141f6919061526d565b9091555050601c54601d5461420b9084615139565b614215919061524b565b60206000828254614226919061526d565b9091555050601854601f5461416d9084615139565b6001600160a01b0388166000908152602e602052604090205460ff16801561426557506000601854115b15614305576127106018548761427b9190615139565b614285919061524b565b9150601854601a54836142989190615139565b6142a2919061524b565b602160008282546142b3919061526d565b90915550506018546019546142c89084615139565b6142d2919061524b565b602060008282546142e3919061526d565b9091555050601854601b546142f89084615139565b614302919061524b565b90505b8115614329576143168830846144db565b8015614329576143293061dead836144db565b6143338287615469565b95505b6143418888886144db565b5050505050505050565b600061435630611723565b9050600060205460215461436a919061526d565b9050811580614377575080155b15614380575050565b600b5461438e90600a615139565b8211156143a657600b546143a390600a615139565b91505b600080600283602154866143ba9190615139565b6143c4919061524b565b6143ce919061524b565b90506143e26143dd8286615469565b614a00565b602154479081906000906143f89060029061524b565b6144029087615469565b60205461440f9085615139565b614419919061524b565b90506144258183615469565b60006021819055602055915083158015906144405750600082115b1561444f5761444f8483614b52565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461449c576040519150601f19603f3d011682016040523d82523d6000602084013e6144a1565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122f18282614630565b6001600160a01b0383166145015760405162461bcd60e51b8152600401610f88906154a4565b6001600160a01b0382166145275760405162461bcd60e51b8152600401610f88906154e9565b6001600160a01b0383166000908152602081905260409020548181101561459f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f88565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145d690849061526d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161462291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061472191906152b4565b8160008151811061473457614734615285565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061476857614768615285565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906147b090600090869061dead90429060040161552c565b6000604051808303818588803b1580156147c957600080fd5b505af11580156147dd573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061485c9190615383565b9050600061486930611723565b905060006127106026548461487e9190615139565b614888919061524b565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614906919061539c565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec906149419030908690600190819084904290600401615400565b60408051808303816000875af115801561495f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149839190615480565b505060008361499130611723565b61499b9190615469565b905080156149b0576149b03061dead836144db565b60006149bc8347615469565b905080156149cd576149cd81614693565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a3557614a35615285565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ab291906152b4565b81600181518110614ac557614ac5615285565b6001600160a01b039283166020918202929092010152600954614aeb913091168461347a565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614b24908590600090869030904290600401615561565b600060405180830381600087803b158015614b3e57600080fd5b505af1158015612ff7573d6000803e3d6000fd5b600954614b6a9030906001600160a01b03168461347a565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614ba79030908790600090819084904290600401615400565b60606040518083038185885af1158015614bc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bea919061543b565b5050505050565b600060208083528351808285015260005b81811015614c1e57858101830151858201604001528201614c02565b81811115614c30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114614c5b57600080fd5b50565b60008060408385031215614c7157600080fd5b8235614c7c81614c46565b946020939093013593505050565b600060208284031215614c9c57600080fd5b8135614ca781614c46565b9392505050565b600060208284031215614cc057600080fd5b5035919050565b600080600060608486031215614cdc57600080fd5b8335614ce781614c46565b92506020840135614cf781614c46565b929592945050506040919091013590565b60008083601f840112614d1a57600080fd5b50813567ffffffffffffffff811115614d3257600080fd5b6020830191508360208260051b8501011115614d4d57600080fd5b9250929050565b60008060208385031215614d6757600080fd5b823567ffffffffffffffff811115614d7e57600080fd5b614d8a85828601614d08565b90969095509350505050565b8015158114614c5b57600080fd5b600080600060608486031215614db957600080fd5b83359250602084013591506040840135614dd281614d96565b809150509250925092565b60008060408385031215614df057600080fd5b8235614dfb81614c46565b91506020830135614e0b81614d96565b809150509250929050565b600080600060608486031215614e2b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614e5557600080fd5b8235614e6081614c46565b91506020830135614e0b81614c46565b600081518084526020808501945080840160005b83811015614ea95781516001600160a01b031687529582019590820190600101614e84565b509495945050505050565b602081526000614ca76020830184614e70565b600080600060408486031215614edc57600080fd5b833567ffffffffffffffff811115614ef357600080fd5b614eff86828701614d08565b9094509250506020840135614dd281614d96565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f5257614f52614f13565b604052919050565b600067ffffffffffffffff821115614f7457614f74614f13565b5060051b60200190565b600082601f830112614f8f57600080fd5b81356020614fa4614f9f83614f5a565b614f29565b82815260059290921b84018101918181019086841115614fc357600080fd5b8286015b84811015614fde5780358352918301918301614fc7565b509695505050505050565b600080600060608486031215614ffe57600080fd5b833567ffffffffffffffff8082111561501657600080fd5b818601915086601f83011261502a57600080fd5b8135602061503a614f9f83614f5a565b82815260059290921b8401810191818101908a84111561505957600080fd5b948201945b8386101561508057853561507181614c46565b8252948201949082019061505e565b9750508701359250508082111561509657600080fd5b506150a386828701614f7e565b925050604084013590509250925092565b600181811c908216806150c857607f821691505b6020821081036150e857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561515357615153615123565b500290565b600181815b8085111561519357816000190482111561517957615179615123565b8085161561518657918102915b93841c939080029061515d565b509250929050565b6000826151aa57506001610f58565b816151b757506000610f58565b81600181146151cd57600281146151d7576151f3565b6001915050610f58565b60ff8411156151e8576151e8615123565b50506001821b610f58565b5060208310610133831016604e8410600b8410161715615216575081810a610f58565b6152208383615158565b806000190482111561523457615234615123565b029392505050565b6000614ca760ff84168361519b565b60008261526857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561528057615280615123565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016152ad576152ad615123565b5060010190565b6000602082840312156152c657600080fd5b8151614ca781614c46565b8281526040602082015260006152ea6040830184614e70565b949350505050565b6000602080838503121561530557600080fd5b825167ffffffffffffffff81111561531c57600080fd5b8301601f8101851361532d57600080fd5b805161533b614f9f82614f5a565b81815260059190911b8201830190838101908783111561535a57600080fd5b928401925b828410156153785783518252928401929084019061535f565b979650505050505050565b60006020828403121561539557600080fd5b5051919050565b6000602082840312156153ae57600080fd5b8151614ca781614d96565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561545057600080fd5b8351925060208401519150604084015190509250925092565b60008282101561547b5761547b615123565b500390565b6000806040838503121561549357600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006155456080830186614e70565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061558060a0830186614e70565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b044f348070a1e73634feef6abb394fb4425ab467b020f9d605c5bf5821fda7464736f6c634300080f0033

Deployed Bytecode Sourcemap

9737:29047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11243:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;11243:41:0;;;;;;;;4138:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9888:27::-;;;;;;;;;;-1:-1:-1;9888:27:0;;;;-1:-1:-1;;;;;9888:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;9888:27:0;798:221:1;5052:169:0;;;;;;;;;;-1:-1:-1;5052:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;5052:169:0;1480:187:1;11864:64:0;;;;;;;;;;-1:-1:-1;11864:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17012:194;;;;;;;;;;-1:-1:-1;17012:194:0;;;;;:::i;:::-;;:::i;:::-;;4459:108;;;;;;;;;;-1:-1:-1;4547:12:0;;4459:108;;11621:47;;;;;;;;;;;;;;;;31526:247;;;;;;;;;;-1:-1:-1;31526:247:0;;;;;:::i;:::-;;:::i;11433:35::-;;;;;;;;;;;;;;;;11201:33;;;;;;;;;;;;;;;;17996:288;;;;;;;;;;-1:-1:-1;17996:288:0;;;;;:::i;:::-;;:::i;5229:492::-;;;;;;;;;;-1:-1:-1;5229:492:0;;;;;:::i;:::-;;:::i;17381:295::-;;;;;;;;;;-1:-1:-1;17381:295:0;;;;;:::i;:::-;;:::i;11527:45::-;;;;;;;;;;;;;;;;11487:33;;;;;;;;;;-1:-1:-1;11487:33:0;;;;;;;;4358:93;;;;;;;;;;-1:-1:-1;4358:93:0;;4441:2;2712:36:1;;2700:2;2685:18;4358:93:0;2570:184:1;5729:215:0;;;;;;;;;;-1:-1:-1;5729:215:0;;;;;:::i;:::-;;:::i;9922:21::-;;;;;;;;;;-1:-1:-1;9922:21:0;;;;-1:-1:-1;;;;;9922:21:0;;;10298:33;;;;;;;;;;-1:-1:-1;10298:33:0;;;;;;;;30789:312;;;;;;;;;;;;;:::i;16615:200::-;;;;;;;;;;-1:-1:-1;16615:200:0;;;;;:::i;:::-;;:::i;27271:120::-;;;;;;;;;;-1:-1:-1;27365:18:0;;27350:12;:33;27271:120;;16823:181;;;;;;;;;;-1:-1:-1;16823:181:0;;;;;:::i;:::-;;:::i;10858:29::-;;;;;;;;;;;;;;;;10476:61;;;;;;;;;;-1:-1:-1;10476:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;30456:281;;;;;;;;;;-1:-1:-1;30456:281:0;;;;;:::i;:::-;;:::i;9820:28::-;;;;;;;;;;;;;;;;10965;;;;;;;;;;;;;;;;10264:25;;;;;;;;;;;;;;;;11000:30;;;;;;;;;;;;;;;;10378:31;;;;;;;;;;-1:-1:-1;10378:31:0;;;;;;;;;;;4575:127;;;;;;;;;;-1:-1:-1;4575:127:0;;;;;:::i;:::-;;:::i;37777:281::-;;;;;;;;;;;;;:::i;31109:409::-;;;;;;;;;;;;;:::i;8219:150::-;;;;;;;;;;;;;:::i;33805:447::-;;;;;;;;;;-1:-1:-1;33805:447:0;;;;;:::i;:::-;;:::i;16263:233::-;;;;;;;;;;;;;:::i;18932:260::-;;;;;;;;;;-1:-1:-1;18932:260:0;;;;;:::i;:::-;;:::i;38066:487::-;;;;;;;;;;;;;:::i;11393:31::-;;;;;;;;;;;;;;;;19745:389;;;;;;;;;;-1:-1:-1;19745:389:0;;;;;:::i;:::-;;:::i;15780:427::-;;;;;;;;;;-1:-1:-1;15780:427:0;;;;;:::i;:::-;;:::i;29720:498::-;;;;;;;;;;-1:-1:-1;29720:498:0;;;;;:::i;:::-;;:::i;10178:44::-;;;;;;;;;;-1:-1:-1;10178:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9786:27;;;;;;;;;;;;;;;;8005:79;;;;;;;;;;-1:-1:-1;8070:6:0;;-1:-1:-1;;;;;8070:6:0;8005:79;;4246:104;;;;;;;;;;;;;:::i;16504:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19200:293::-;;;;;;;;;;-1:-1:-1;19200:293:0;;;;;:::i;:::-;;:::i;11110:43::-;;;;;;;;;;;;11148:5;11110:43;;11675:35;;;;;;;;;;;;;;;;5952:413;;;;;;;;;;-1:-1:-1;5952:413:0;;;;;:::i;:::-;;:::i;11579:29::-;;;;;;;;;;;;;;;;10138:33;;;;;;;;;;;;;;;;4710:175;;;;;;;;;;-1:-1:-1;4710:175:0;;;;;:::i;:::-;;:::i;10544:40::-;;;;;;;;;;;;;;;;11075:26;;;;;;;;;;;;;;;;10418:51;;;;;;;;;;-1:-1:-1;10418:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12086:58;;;;;;;;;;-1:-1:-1;12086:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10338:33;;;;;;;;;;-1:-1:-1;10338:33:0;;;;;;;;;;;20547:282;;;;;;;;;;-1:-1:-1;20547:282:0;;;;;:::i;:::-;;:::i;37320:449::-;;;;;;;;;;-1:-1:-1;37320:449:0;;;;;:::i;:::-;;:::i;20837:182::-;;;;;;;;;;-1:-1:-1;20837:182:0;;;;;:::i;:::-;;:::i;20142:397::-;;;;;;;;;;-1:-1:-1;20142:397:0;;;;;:::i;:::-;;:::i;10022:30::-;;;;;;;;;;-1:-1:-1;10022:30:0;;;;-1:-1:-1;;;;;10022:30:0;;;38561:220;;;;;;;;;;;;;:::i;10776:39::-;;;;;;;;;;-1:-1:-1;10776:39:0;;;;;;;;11162:32;;;;;;;;;;;;;;;;18354:346;;;;;;;;;;-1:-1:-1;18354:346:0;;;;;:::i;:::-;;:::i;10824:27::-;;;;;;;;;;;;;;;;17688:300;;;;;;;;;;-1:-1:-1;17688:300:0;;;;;:::i;:::-;;:::i;4893:151::-;;;;;;;;;;-1:-1:-1;4893:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5009:18:0;;;4982:7;5009:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4893:151;9980:33;;;;;;;;;;;;;;;;10931:25;;;;;;;;;;;;;;;;17271:98;;;;;;;;;;;;;:::i;31781:2016::-;;;;;;;;;;-1:-1:-1;31781:2016:0;;;;;:::i;:::-;;:::i;10229:28::-;;;;;;;;;;-1:-1:-1;10229:28:0;;;;;:::i;:::-;;:::i;10061:37::-;;;;;;;;;;;;;;;;11291:52;;;;;;;;;;;;;;;;10894:30;;;;;;;;;;;;;;;;8377:244;;;;;;;;;;-1:-1:-1;8377:244:0;;;;;:::i;:::-;;:::i;30288:160::-;;;;;;;;;;;;;:::i;11037:31::-;;;;;;;;;;;;;;;;9855:24;;;;;;;;;;;;;;;;11350:36;;;;;;;;;;-1:-1:-1;11350:36:0;;;;;;;;35524:1398;;;;;;;;;;-1:-1:-1;35524:1398:0;;;;;:::i;:::-;;:::i;4138:100::-;4192:13;4225:5;4218:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4138:100;:::o;5052:169::-;5135:4;5152:39;367:10;5175:7;5184:6;5152:8;:39::i;:::-;-1:-1:-1;5209:4:0;5052:169;;;;;:::o;17012:194::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;;;;;;;;;17098:13:::1;::::0;::::1;::::0;::::1;;;17097:14;17089:68;;;::::0;-1:-1:-1;;;17089:68:0;;10193:2:1;17089:68:0::1;::::0;::::1;10175:21:1::0;10232:2;10212:18;;;10205:30;10271:34;10251:18;;;10244:62;-1:-1:-1;;;10322:18:1;;;10315:39;10371:19;;17089:68:0::1;9991:405:1::0;17089:68:0::1;17168:9;:30:::0;;-1:-1:-1;;;;;;17168:30:0::1;-1:-1:-1::0;;;;;17168:30:0;;;::::1;::::0;;;::::1;::::0;;17012:194::o;31526:247::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;31620:2:::1;31610:6;:12;;:31;;;;;31636:5;31626:6;:15;;31610:31;31602:76;;;::::0;-1:-1:-1;;;31602:76:0;;10603:2:1;31602:76:0::1;::::0;::::1;10585:21:1::0;;;10622:18;;;10615:30;10681:34;10661:18;;;10654:62;10733:18;;31602:76:0::1;10401:356:1::0;31602:76:0::1;31707:13;:6:::0;31716:4:::1;31707:13;:::i;:::-;31689:15;:31:::0;31736:29:::1;::::0;160:25:1;;;31736:29:0::1;::::0;148:2:1;133:18;31736:29:0::1;;;;;;;;31526:247:::0;:::o;17996:288::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;18114:16:::1;4441:2:::0;18114::::1;:16;:::i;:::-;18106:3;18086:13;4547:12:::0;;;4459:108;18086:13:::1;:17;::::0;18102:1:::1;18086:17;:::i;:::-;:23;;;;:::i;:::-;18085:46;;;;:::i;:::-;18075:6;:56;;18067:110;;;::::0;-1:-1:-1;;;18067:110:0;;12874:2:1;18067:110:0::1;::::0;::::1;12856:21:1::0;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:39;13052:19;;18067:110:0::1;12672:405:1::0;18067:110:0::1;18210:16;4441:2:::0;18210::::1;:16;:::i;:::-;18200:27;::::0;:6;:27:::1;:::i;:::-;18188:9;:39:::0;;;18243:33:::1;::::0;160:25:1;;;18243:33:0::1;::::0;148:2:1;133:18;18243:33:0::1;14:177:1::0;5229:492:0;5369:4;5386:36;5396:6;5404:9;5415:6;5386:9;:36::i;:::-;-1:-1:-1;;;;;5462:19:0;;5435:24;5462:19;;;:11;:19;;;;;;;;367:10;5462:33;;;;;;;;5514:26;;;;5506:79;;;;-1:-1:-1;;;5506:79:0;;13284:2:1;5506:79:0;;;13266:21:1;13323:2;13303:18;;;13296:30;13362:34;13342:18;;;13335:62;-1:-1:-1;;;13413:18:1;;;13406:38;13461:19;;5506:79:0;13082:404:1;5506:79:0;5621:57;5630:6;367:10;5671:6;5652:16;:25;5621:8;:57::i;:::-;-1:-1:-1;5709:4:0;;5229:492;-1:-1:-1;;;;5229:492:0:o;17381:295::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;17503:16:::1;4441:2:::0;17503::::1;:16;:::i;:::-;17494:4;17474:13;4547:12:::0;;;4459:108;17474:13:::1;:17;::::0;17490:1:::1;17474:17;:::i;:::-;:24;;;;:::i;:::-;17473:47;;;;:::i;:::-;17463:6;:57;;17455:111;;;::::0;-1:-1:-1;;;17455:111:0;;13693:2:1;17455:111:0::1;::::0;::::1;13675:21:1::0;13732:2;13712:18;;;13705:30;13771:34;13751:18;;;13744:62;-1:-1:-1;;;13822:18:1;;;13815:39;13871:19;;17455:111:0::1;13491:405:1::0;17455:111:0::1;17602:16;4441:2:::0;17602::::1;:16;:::i;:::-;17592:27;::::0;:6;:27:::1;:::i;:::-;17577:12;:42:::0;;;17635:33:::1;::::0;160:25:1;;;17635:33:0::1;::::0;148:2:1;133:18;17635:33:0::1;14:177:1::0;5729:215:0;367:10;5817:4;5866:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5866:34:0;;;;;;;;;;5817:4;;5834:80;;5857:7;;5866:47;;5903:10;;5866:47;:::i;:::-;5834:8;:80::i;30789:312::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;30880:18:::1;;30852:24;30870:4;30852:9;:24::i;:::-;:46;;30844:123;;;::::0;;-1:-1:-1;;;30844:123:0;;14236:2:1;30844:123:0::1;::::0;::::1;14218:21:1::0;14255:18;;;14248:30;;;;14314:34;14294:18;;;14287:62;14385:34;14365:18;;;14358:62;14437:19;;30844:123:0::1;14034:428:1::0;30844:123:0::1;30978:8;:15:::0;;-1:-1:-1;;;;30978:15:0::1;-1:-1:-1::0;;;30978:15:0::1;::::0;;31004:10:::1;:8;:10::i;:::-;31025:8;:16:::0;;-1:-1:-1;;;;31025:16:0::1;::::0;;31057:36:::1;::::0;31077:15:::1;160:25:1::0;;31057:36:0::1;::::0;148:2:1;133:18;31057:36:0::1;;;;;;;30789:312::o:0;16615:200::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;16709:9:::1;16705:103;16724:19:::0;;::::1;16705:103;;;16791:5;16764:11;:24;16776:8;;16785:1;16776:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16764:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16764:24:0;:32;;-1:-1:-1;;16764:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16745:3;::::1;::::0;::::1;:::i;:::-;;;;16705:103;;;;16615:200:::0;;:::o;16823:181::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16904:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;::::1;;16896:62;;;::::0;-1:-1:-1;;;16896:62:0;;14941:2:1;16896:62:0::1;::::0;::::1;14923:21:1::0;14980:2;14960:18;;;14953:30;15019:32;14999:18;;;14992:60;15069:18;;16896:62:0::1;14739:354:1::0;16896:62:0::1;-1:-1:-1::0;;;;;16969:19:0::1;16991:5;16969:19:::0;;;:11:::1;:19;::::0;;;;:27;;-1:-1:-1;;16969:27:0::1;::::0;;16823:181::o;30456:281::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30548:30:0;::::1;30540:79;;;::::0;-1:-1:-1;;;30540:79:0;;15300:2:1;30540:79:0::1;::::0;::::1;15282:21:1::0;15339:2;15319:18;;;15312:30;15378:34;15358:18;;;15351:62;-1:-1:-1;;;15429:18:1;;;15422:34;15473:19;;30540:79:0::1;15098:400:1::0;30540:79:0::1;30630:15;:43:::0;;-1:-1:-1;;;;;;30630:43:0::1;-1:-1:-1::0;;;;;30630:43:0;::::1;::::0;;::::1;::::0;;;30689:40:::1;::::0;::::1;::::0;-1:-1:-1;;30689:40:0::1;30456:281:::0;:::o;4575:127::-;-1:-1:-1;;;;;4676:18:0;4649:7;4676:18;;;;;;;;;;;;4575:127::o;37777:281::-;37859:24;;37837:7;;37859:24;;37856:195;;;37935:25;;37906:26;;:54;;;;:::i;:::-;37899:61;;37777:281;:::o;37856:195::-;-1:-1:-1;38009:1:0;;37777:281::o;31109:409::-;31206:16;;;31220:1;31206:16;;;;;;;;31163:7;;;;31206:16;31220:1;31206:16;;;;;;;;-1:-1:-1;;31243:9:0;;:16;;;-1:-1:-1;;;31243:16:0;;;;31182:40;;-1:-1:-1;;;;;;31243:9:0;;;;:14;;-1:-1:-1;31243:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31233:4;31238:1;31233:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;31233:26:0;;;-1:-1:-1;;;;;31233:26:0;;;;;31288:4;31270;31275:1;31270:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31270:23:0;;;;:7;;;;;;;;;;:23;31341:16;;;31355:1;31341:16;;;;;;;;31314:24;;31341:16;;31355:1;;31341:16;;;;;;;;;-1:-1:-1;;31378:9:0;;31402:15;;31378:46;;-1:-1:-1;;;31378:46:0;;31314:43;;-1:-1:-1;;;;;;31378:9:0;;;;:23;;:46;;31419:4;;31378:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31378:46:0;;;;;;;;;;;;:::i;:::-;31368:56;;31507:3;31489:15;;31470:16;;:34;;;;:::i;:::-;31456:7;31464:1;31456:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;31455:55;;;;:::i;:::-;31442:7;31450:1;31442:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;31435:75;;;;31109:409;:::o;8219:150::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;8312:6:::1;::::0;8291:40:::1;::::0;8328:1:::1;::::0;-1:-1:-1;;;;;8312:6:0::1;::::0;8291:40:::1;::::0;8328:1;;8291:40:::1;8342:6;:19:::0;;-1:-1:-1;;;;;;8342:19:0::1;::::0;;8219:150::o;33805:447::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;33959:3:::1;33936:19;:26;;33928:90;;;::::0;-1:-1:-1;;;33928:90:0;;17184:2:1;33928:90:0::1;::::0;::::1;17166:21:1::0;17223:2;17203:18;;;17196:30;17262:34;17242:18;;;17235:62;-1:-1:-1;;;17313:18:1;;;17306:49;17372:19;;33928:90:0::1;16982:415:1::0;33928:90:0::1;34049:4;34037:8;:16;;:33;;;;-1:-1:-1::0;34057:13:0;34037:33:::1;34029:94;;;::::0;-1:-1:-1;;;34029:94:0;;17604:2:1;34029:94:0::1;::::0;::::1;17586:21:1::0;17643:2;17623:18;;;17616:30;17682:34;17662:18;;;17655:62;-1:-1:-1;;;17733:18:1;;;17726:46;17789:19;;34029:94:0::1;17402:412:1::0;34029:94:0::1;34134:15;:37:::0;;;;34182:16:::1;:27:::0;34220:13:::1;:24:::0;;-1:-1:-1;;34220:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33805:447::o;16263:233::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;16317:14:::1;:22:::0;;-1:-1:-1;;16317:22:0;;::::1;::::0;;;16350:20:::1;:28:::0;;;;::::1;::::0;;4547:12;;16389::::1;:28:::0;4547:12;;16428:13:::1;:29:::0;16473:15:::1;::::0;::::1;::::0;;;::::1;16263:233::o:0;18932:260::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;19028:4:::1;19024:104;;19066:6;::::0;-1:-1:-1;;;;;19066:6:0;;::::1;19056:16:::0;;::::1;::::0;19048:68:::1;;;::::0;-1:-1:-1;;;19048:68:0;;18021:2:1;19048:68:0::1;::::0;::::1;18003:21:1::0;18060:2;18040:18;;;18033:30;18099:34;18079:18;;;18072:62;-1:-1:-1;;;18150:18:1;;;18143:37;18197:19;;19048:68:0::1;17819:403:1::0;19048:68:0::1;-1:-1:-1::0;;;;;19138:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19138:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18932:260::o;38066:487::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;38154:29:::1;:27;:29::i;:::-;38135:15;:48;;:85;;;;;38219:1;38187:29;:27;:29::i;:::-;:33;38135:85;38127:120;;;::::0;-1:-1:-1;;;38127:120:0;;18429:2:1;38127:120:0::1;::::0;::::1;18411:21:1::0;18468:2;18448:18;;;18441:30;-1:-1:-1;;;18487:18:1;;;18480:52;18549:18;;38127:120:0::1;18227:346:1::0;38127:120:0::1;38287:1;38258:26;:30:::0;;;38299:24:::1;:32:::0;;-1:-1:-1;;38299:32:0::1;::::0;;38419:16:::1;::::0;38383:6:::1;::::0;38368:48:::1;::::0;-1:-1:-1;;;38368:48:0;;38410:4:::1;38368:48;::::0;::::1;962:51:1::0;38438:3:0::1;::::0;-1:-1:-1;;;;;38383:6:0;;::::1;::::0;38368:33:::1;::::0;935:18:1;38368:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;38481:1;38462:16;:20:::0;38502:6:::1;::::0;38495:50:::1;::::0;-1:-1:-1;;;38495:50:0;;38519:10:::1;38495:50;::::0;::::1;18941:51:1::0;19008:18;;;19001:34;;;38344:97:0;;-1:-1:-1;;;;;;38502:6:0::1;::::0;38495:23:::1;::::0;18914:18:1;;38495:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38116:437;38066:487::o:0;19745:389::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;19861:14:::1;:29:::0;;;19901:15:::1;:31:::0;;;19943:10:::1;:21:::0;;;19956:8;19990:32:::1;19919:13:::0;19878:12;19990:32:::1;:::i;:::-;:45;;;;:::i;:::-;19975:12;:60:::0;20089:3:::1;20070:16;11148:5;20070:2;:16;:::i;:::-;:22;;;;:::i;:::-;20054:12;;:38;;20046:80;;;::::0;-1:-1:-1;;;20046:80:0;;19498:2:1;20046:80:0::1;::::0;::::1;19480:21:1::0;19537:2;19517:18;;;19510:30;19576:31;19556:18;;;19549:59;19625:18;;20046:80:0::1;19296:353:1::0;15780:427:0;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;15868:13:::1;::::0;::::1;::::0;::::1;;;15867:14;15859:50;;;::::0;-1:-1:-1;;;15859:50:0;;19856:2:1;15859:50:0::1;::::0;::::1;19838:21:1::0;19895:2;19875:18;;;19868:30;19934:25;19914:18;;;19907:53;19977:18;;15859:50:0::1;19654:347:1::0;15859:50:0::1;15948:2;15928:16;:22;;15920:74;;;;-1:-1:-1::0;;;15920:74:0::1;;;;;;;:::i;:::-;16005:13;:20:::0;;-1:-1:-1;;16036:18:0;;;;;16086:12:::1;16065:18;:33:::0;;;16130:37:::1;::::0;16151:16;;16130:37:::1;:::i;:::-;16109:18;:58:::0;16183:16:::1;::::0;::::1;::::0;;;::::1;15780:427:::0;:::o;29720:498::-;8132:6;;29807:10;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29838:20:0;::::1;29830:59;;;::::0;-1:-1:-1;;;29830:59:0;;20616:2:1;29830:59:0::1;::::0;::::1;20598:21:1::0;20655:2;20635:18;;;20628:30;20694:28;20674:18;;;20667:56;20740:18;;29830:59:0::1;20414:350:1::0;29830:59:0::1;-1:-1:-1::0;;;;;29908:23:0;::::1;29926:4;29908:23;;::::0;:41:::1;;-1:-1:-1::0;29936:13:0::1;::::0;::::1;::::0;::::1;;;29935:14;29908:41;29900:106;;;::::0;-1:-1:-1;;;29900:106:0;;20971:2:1;29900:106:0::1;::::0;::::1;20953:21:1::0;21010:2;20990:18;;;20983:30;21049:34;21029:18;;;21022:62;-1:-1:-1;;;21100:18:1;;;21093:50;21160:19;;29900:106:0::1;20769:416:1::0;29900:106:0::1;30044:39;::::0;-1:-1:-1;;;30044:39:0;;30077:4:::1;30044:39;::::0;::::1;962:51:1::0;30017:24:0::1;::::0;-1:-1:-1;;;;;30044:24:0;::::1;::::0;::::1;::::0;935:18:1;;30044:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30102:46;::::0;-1:-1:-1;;;30102:46:0;;-1:-1:-1;;;;;18959:32:1;;;30102:46:0::1;::::0;::::1;18941:51:1::0;19008:18;;;19001:34;;;30017:66:0;;-1:-1:-1;30102:23:0;;::::1;::::0;::::1;::::0;18914:18:1;;30102:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30164;::::0;;-1:-1:-1;;;;;18959:32:1;;18941:51;;19023:2;19008:18;;19001:34;;;30094:54:0;;-1:-1:-1;30164:46:0::1;::::0;18914:18:1;30164:46:0::1;;;;;;;29819:399;29720:498:::0;;;;:::o;4246:104::-;4302:13;4335:7;4328:14;;;;;:::i;16504:103::-;16553:16;16588:11;16581:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16581:18:0;;;;;;;;;;;;;;;;;;;;;;16504:103;:::o;19200:293::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;19309:6:::1;::::0;-1:-1:-1;;;;;19309:6:0;;::::1;19301:14:::0;;::::1;::::0;19293:84:::1;;;::::0;-1:-1:-1;;;19293:84:0;;21392:2:1;19293:84:0::1;::::0;::::1;21374:21:1::0;21431:2;21411:18;;;21404:30;21470:34;21450:18;;;21443:62;21541:27;21521:18;;;21514:55;21586:19;;19293:84:0::1;21190:421:1::0;19293:84:0::1;19388:41;19417:4;19423:5;19388:28;:41::i;:::-;19445:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19445:40:0;::::1;::::0;::::1;::::0;;;::::1;19200:293:::0;;:::o;5952:413::-;367:10;6045:4;6089:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6089:34:0;;;;;;;;;;6142:35;;;;6134:85;;;;-1:-1:-1;;;6134:85:0;;21818:2:1;6134:85:0;;;21800:21:1;21857:2;21837:18;;;21830:30;21896:34;21876:18;;;21869:62;-1:-1:-1;;;21947:18:1;;;21940:35;21992:19;;6134:85:0;21616:401:1;6134:85:0;6255:67;367:10;6278:7;6306:15;6287:16;:34;6255:8;:67::i;:::-;-1:-1:-1;6353:4:0;;5952:413;-1:-1:-1;;;5952:413:0:o;4710:175::-;4796:4;4813:42;367:10;4837:9;4848:6;4813:9;:42::i;20547:282::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;20654:9:::1;20650:172;20669:19:::0;;::::1;20650:172;;;20744:8;20709:19;:32;20729:8;;20738:1;20729:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20709:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20709:32:0;:43;;-1:-1:-1;;20709:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20788:8;;20797:1;20788:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20772:38:0::1;;20801:8;20772:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;20772:38:0::1;;;;;;;;20690:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20650:172;;;;20547:282:::0;;;:::o;37320:449::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;37412:24:::1;::::0;::::1;;37411:25;37403:87;;;::::0;-1:-1:-1;;;37403:87:0;;22224:2:1;37403:87:0::1;::::0;::::1;22206:21:1::0;22263:2;22243:18;;;22236:30;22302:34;22282:18;;;22275:62;-1:-1:-1;;;22353:18:1;;;22346:47;22410:19;;37403:87:0::1;22022:413:1::0;37403:87:0::1;37527:3;37509:14;:21;;:43;;;;;37551:1;37534:14;:18;37509:43;37501:82;;;::::0;-1:-1:-1;;;37501:82:0;;22642:2:1;37501:82:0::1;::::0;::::1;22624:21:1::0;22681:2;22661:18;;;22654:30;22720:28;22700:18;;;22693:56;22766:18;;37501:82:0::1;22440:350:1::0;37501:82:0::1;37623:15;37594:26;:44:::0;37649:24:::1;:31:::0;;-1:-1:-1;;37649:31:0::1;37676:4;37649:31;::::0;;37691:16:::1;:33:::0;;;37740:21:::1;::::0;::::1;::::0;37649:24:::1;::::0;37740:21:::1;37320:449:::0;:::o;20837:182::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20922:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20922:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20977:34;;1620:41:1;;;20977:34:0::1;::::0;1593:18:1;20977:34:0::1;;;;;;;20837:182:::0;;:::o;20142:397::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;20258:15:::1;:30:::0;;;20299:16:::1;:32:::0;;;20342:11:::1;:22:::0;;;20356:8;20391:34:::1;20318:13:::0;20276:12;20391:34:::1;:::i;:::-;:48;;;;:::i;:::-;20375:13;:64:::0;20494:3:::1;20475:16;11148:5;20475:2;:16;:::i;:::-;:22;;;;:::i;:::-;20458:13;;:39;;20450:81;;;::::0;-1:-1:-1;;;20450:81:0;;22997:2:1;20450:81:0::1;::::0;::::1;22979:21:1::0;23036:2;23016:18;;;23009:30;23075:31;23055:18;;;23048:59;23124:18;;20450:81:0::1;22795:353:1::0;38561:220:0;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;38626:24:::1;:32:::0;;-1:-1:-1;;38626:32:0::1;::::0;;38653:5:::1;38669:16;:20:::0;;;38700:26:::1;:30:::0;;;38746:27:::1;::::0;::::1;::::0;38653:5;38746:27:::1;38561:220::o:0;18354:346::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;18477:6:::1;18457:13;4547:12:::0;;;4459:108;18457:13:::1;:17;::::0;18473:1:::1;18457:17;:::i;:::-;:26;;;;:::i;:::-;18444:9;:39;;18436:105;;;::::0;-1:-1:-1;;;18436:105:0;;23355:2:1;18436:105:0::1;::::0;::::1;23337:21:1::0;23394:2;23374:18;;;23367:30;23433:34;23413:18;;;23406:62;-1:-1:-1;;;23484:18:1;;;23477:51;23545:19;;18436:105:0::1;23153:417:1::0;18436:105:0::1;18592:4;18572:13;4547:12:::0;;;4459:108;18572:13:::1;:17;::::0;18588:1:::1;18572:17;:::i;:::-;:24;;;;:::i;:::-;18559:9;:37;;18551:102;;;::::0;-1:-1:-1;;;18551:102:0;;23777:2:1;18551:102:0::1;::::0;::::1;23759:21:1::0;23816:2;23796:18;;;23789:30;23855:34;23835:18;;;23828:62;-1:-1:-1;;;23906:18:1;;;23899:50;23966:19;;18551:102:0::1;23575:416:1::0;18551:102:0::1;18663:18;:30:::0;18354:346::o;17688:300::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;17811:16:::1;4441:2:::0;17811::::1;:16;:::i;:::-;17802:4;17782:13;4547:12:::0;;;4459:108;17782:13:::1;:17;::::0;17798:1:::1;17782:17;:::i;:::-;:24;;;;:::i;:::-;17781:47;;;;:::i;:::-;17771:6;:57;;17763:112;;;::::0;-1:-1:-1;;;17763:112:0;;24198:2:1;17763:112:0::1;::::0;::::1;24180:21:1::0;24237:2;24217:18;;;24210:30;24276:34;24256:18;;;24249:62;-1:-1:-1;;;24327:18:1;;;24320:40;24377:19;;17763:112:0::1;23996:406:1::0;17763:112:0::1;17912:16;4441:2:::0;17912::::1;:16;:::i;:::-;17902:27;::::0;:6;:27:::1;:::i;:::-;17886:13;:43:::0;;;17945:35:::1;::::0;160:25:1;;;17945:35:0::1;::::0;148:2:1;133:18;17945:35:0::1;14:177:1::0;17271:98:0;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;17333:20:::1;:28:::0;;-1:-1:-1;;17333:28:0::1;::::0;;17271:98::o;31781:2016::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;31922:13:::1;::::0;::::1;::::0;::::1;;;31921:14;31913:70;;;::::0;-1:-1:-1;;;31913:70:0;;24609:2:1;31913:70:0::1;::::0;::::1;24591:21:1::0;24648:2;24628:18;;;24621:30;24687:34;24667:18;;;24660:62;-1:-1:-1;;;24738:18:1;;;24731:41;24789:19;;31913:70:0::1;24407:407:1::0;31913:70:0::1;32021:2;32002:16;:21;31994:73;;;;-1:-1:-1::0;;;31994:73:0::1;;;;;;;:::i;:::-;32106:15;:22;32088:7;:14;:40;32080:83;;;::::0;-1:-1:-1;;;32080:83:0;;25021:2:1;32080:83:0::1;::::0;::::1;25003:21:1::0;25060:2;25040:18;;;25033:30;25099:32;25079:18;;;25072:60;25149:18;;32080:83:0::1;24819:354:1::0;32080:83:0::1;32199:3;32182:7;:14;:20;32174:87;;;::::0;-1:-1:-1;;;32174:87:0;;25380:2:1;32174:87:0::1;::::0;::::1;25362:21:1::0;25419:2;25399:18;;;25392:30;25458:34;25438:18;;;25431:62;-1:-1:-1;;;25509:18:1;;;25502:52;25571:19;;32174:87:0::1;25178:418:1::0;32174:87:0::1;32374:9;32370:351;32393:7;:14;32389:1;:18;32370:351;;;32428:14;32445:7;32453:1;32445:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32470:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;32470:33:0::1;32499:4;32470:33;::::0;;32445:10;-1:-1:-1;32554:26:0::1;:15;32572:8;32554:26;:::i;:::-;-1:-1:-1::0;;;;;32518:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;32634:16:::1;4441:2:::0;32634::::1;:16;:::i;:::-;32612:15;32628:1;32612:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;32595:56;;32666:43;32682:10;32694:6;32702;32666:15;:43::i;:::-;32413:308;;32409:3;;;;;:::i;:::-;;;;32370:351;;;-1:-1:-1::0;32768:13:0::1;:20:::0;;-1:-1:-1;;32799:18:0;;;;;32849:12:::1;32828:18;:33:::0;;;32893:37:::1;::::0;32914:16;;32893:37:::1;:::i;:::-;32872:18;:58:::0;32946:16:::1;::::0;::::1;::::0;;;::::1;33020:9;;;;;;;;;-1:-1:-1::0;;;;;33020:9:0::1;-1:-1:-1::0;;;;;33020:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33008:43:0::1;;33060:4;33067:9;;;;;;;;;-1:-1:-1::0;;;;;33067:9:0::1;-1:-1:-1::0;;;;;33067:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33008:76;::::0;-1:-1:-1;;;;;;33008:76:0::1;::::0;;;;;;-1:-1:-1;;;;;25831:15:1;;;33008:76:0::1;::::0;::::1;25813:34:1::0;25883:15;;25863:18;;;25856:43;25748:18;;33008:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32999:6;:85:::0;;-1:-1:-1;;;;;;32999:85:0::1;-1:-1:-1::0;;;;;32999:85:0;;;::::1;::::0;;::::1;::::0;;33095:49:::1;::::0;-1:-1:-1;33095:26:0::1;:49::i;:::-;33192:6;::::0;33155:51:::1;::::0;-1:-1:-1;;;;;33192:6:0::1;::::0;33155:28:::1;:51::i;:::-;33286:1;33262:21;:25;33254:73;;;::::0;-1:-1:-1;;;33254:73:0;;26112:2:1;33254:73:0::1;::::0;::::1;26094:21:1::0;26151:2;26131:18;;;26124:30;26190:34;26170:18;;;26163:62;-1:-1:-1;;;26241:18:1;;;26234:33;26284:19;;33254:73:0::1;25910:399:1::0;33254:73:0::1;33375:1;33348:24;33366:4;33348:9;:24::i;:::-;:28;33340:79;;;::::0;-1:-1:-1;;;33340:79:0;;26516:2:1;33340:79:0::1;::::0;::::1;26498:21:1::0;26555:2;26535:18;;;26528:30;26594:34;26574:18;;;26567:62;-1:-1:-1;;;26645:18:1;;;26638:36;26691:19;;33340:79:0::1;26314:402:1::0;33340:79:0::1;33464:9;::::0;33432:69:::1;::::0;33449:4:::1;::::0;-1:-1:-1;;;;;33464:9:0::1;33476:24;33449:4:::0;33476:9:::1;:24::i;33432:69::-;33512:9;::::0;-1:-1:-1;;;;;33512:9:0::1;:25;33545:21;33590:4;33610:24;33590:4:::0;33610:9:::1;:24::i;:::-;33649:1;33692::::0;33743:4:::1;33763:15;33512:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31781:2016:::0;;;:::o;10229:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10229:28:0;;-1:-1:-1;10229:28:0;:::o;8377:244::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8466:22:0;::::1;8458:73;;;::::0;-1:-1:-1;;;8458:73:0;;27846:2:1;8458:73:0::1;::::0;::::1;27828:21:1::0;27885:2;27865:18;;;27858:30;27924:34;27904:18;;;27897:62;-1:-1:-1;;;27975:18:1;;;27968:36;28021:19;;8458:73:0::1;27644:402:1::0;8458:73:0::1;8568:6;::::0;8547:38:::1;::::0;-1:-1:-1;;;;;8547:38:0;;::::1;::::0;8568:6:::1;::::0;8547:38:::1;::::0;8568:6:::1;::::0;8547:38:::1;8596:6;:17:::0;;-1:-1:-1;;;;;;8596:17:0::1;-1:-1:-1::0;;;;;8596:17:0;;;::::1;::::0;;;::::1;::::0;;8377:244::o;30288:160::-;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;30382:58:::1;::::0;30346:12:::1;::::0;30390:10:::1;::::0;30414:21:::1;::::0;30346:12;30382:58;30346:12;30382:58;30414:21;30390:10;30382:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35524:1398:::0;8132:6;;-1:-1:-1;;;;;8132:6:0;367:10;8132:22;8124:67;;;;-1:-1:-1;;;8124:67:0;;;;;;;:::i;:::-;35628:4:::1;35618:7;:14;;35610:80;;;::::0;-1:-1:-1;;;35610:80:0;;28463:2:1;35610:80:0::1;::::0;::::1;28445:21:1::0;28502:2;28482:18;;;28475:30;28541:34;28521:18;;;28514:62;-1:-1:-1;;;28592:18:1;;;28585:51;28653:19;;35610:80:0::1;28261:417:1::0;35610:80:0::1;35751:19;::::0;35733:37:::1;::::0;:15:::1;:37;:::i;:::-;35709:20;;:61;;35701:87;;;::::0;-1:-1:-1;;;35701:87:0;;29015:2:1;35701:87:0::1;::::0;::::1;28997:21:1::0;29054:2;29034:18;;;29027:30;-1:-1:-1;;;29073:18:1;;;29066:43;29126:18;;35701:87:0::1;28813:337:1::0;35701:87:0::1;35822:15;35799:20;:38:::0;35875:6:::1;::::0;35868:39:::1;::::0;-1:-1:-1;;;35868:39:0;;35901:4:::1;35868:39;::::0;::::1;962:51:1::0;35848:17:0::1;::::0;-1:-1:-1;;;;;35875:6:0::1;::::0;35868:24:::1;::::0;935:18:1;;35868:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35848:59;;35918:20;35941:24;35959:4;35941:9;:24::i;:::-;35918:47:::0;-1:-1:-1;35976:16:0::1;36017:5;35995:19;36007:7:::0;35995:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;36169:6;::::0;36193:9:::1;::::0;36162:52:::1;::::0;-1:-1:-1;;;36162:52:0;;-1:-1:-1;;;;;36193:9:0;;::::1;36162:52;::::0;::::1;18941:51:1::0;19008:18;;;19001:34;;;35976:46:0;;-1:-1:-1;36061:21:0::1;::::0;36169:6;::::1;::::0;36162:22:::1;::::0;18914:18:1;;36162:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36260:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;36260:234:0;;-1:-1:-1;;;;;36260:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36311:4:::1;::::0;36331:8;;36260:9;;;;36311:4;;36468:15:::1;::::0;36260:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36507:25;36562:12;36535:24;36553:4;36535:9;:24::i;:::-;:39;;;;:::i;:::-;36507:67:::0;-1:-1:-1;36588:21:0;;36585:118:::1;;36625:66;36649:4;36664:6;36673:17;36625:15;:66::i;:::-;36715:23;36741:41;36765:17:::0;36741:21:::1;:41;:::i;:::-;36715:67:::0;-1:-1:-1;36798:19:0;;36795:80:::1;;36833:30;36847:15;36833:13;:30::i;:::-;36892:22;::::0;36905:8;;36892:22:::1;::::0;;;::::1;35599:1323;;;;;;35524:1398:::0;:::o;7294:380::-;-1:-1:-1;;;;;7430:19:0;;7422:68;;;;-1:-1:-1;;;7422:68:0;;30219:2:1;7422:68:0;;;30201:21:1;30258:2;30238:18;;;30231:30;30297:34;30277:18;;;30270:62;-1:-1:-1;;;30348:18:1;;;30341:34;30392:19;;7422:68:0;30017:400:1;7422:68:0;-1:-1:-1;;;;;7509:21:0;;7501:68;;;;-1:-1:-1;;;7501:68:0;;30624:2:1;7501:68:0;;;30606:21:1;30663:2;30643:18;;;30636:30;30702:34;30682:18;;;30675:62;-1:-1:-1;;;30753:18:1;;;30746:32;30795:19;;7501:68:0;30422:398:1;7501:68:0;-1:-1:-1;;;;;7582:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7634:32;;160:25:1;;;7634:32:0;;133:18:1;7634:32:0;;;;;;;7294:380;;;:::o;21027:6236::-;-1:-1:-1;;;;;21127:18:0;;21119:68;;;;-1:-1:-1;;;21119:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21206:16:0;;21198:64;;;;-1:-1:-1;;;21198:64:0;;;;;;;:::i;:::-;21290:1;21281:6;:10;21273:52;;;;-1:-1:-1;;;21273:52:0;;31837:2:1;21273:52:0;;;31819:21:1;31876:2;31856:18;;;31849:30;31915:31;31895:18;;;31888:59;31964:18;;21273:52:0;31635:353:1;21273:52:0;21350:13;;;;;;;21346:132;;-1:-1:-1;;;;;21387:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21416:23:0;;;;;;:19;:23;;;;;;;;21387:52;21379:87;;;;-1:-1:-1;;;21379:87:0;;32195:2:1;21379:87:0;;;32177:21:1;32234:2;32214:18;;;32207:30;-1:-1:-1;;;32253:18:1;;;32246:52;32315:18;;21379:87:0;31993:346:1;21379:87:0;27365:18;;27350:12;:33;21493:26;:43;;;;-1:-1:-1;21523:13:0;;;;;;;21493:43;21490:217;;;-1:-1:-1;;;;;21561:17:0;;;;;;:11;:17;;;;;;;;21560:18;;:35;;-1:-1:-1;8070:6:0;;-1:-1:-1;;;;;21582:13:0;;;8070:6;;21582:13;21560:35;:60;;;-1:-1:-1;;;;;;21599:21:0;;21613:6;21599:21;21560:60;21552:143;;;;-1:-1:-1;;;21552:143:0;;32546:2:1;21552:143:0;;;32528:21:1;32585:2;32565:18;;;32558:30;32624:34;32604:18;;;32597:62;32695:34;32675:18;;;32668:62;-1:-1:-1;;;32746:19:1;;;32739:37;32793:19;;21552:143:0;32344:474:1;21552:143:0;-1:-1:-1;;;;;21722:24:0;;;;;;:18;:24;;;;;;;;21719:610;;;-1:-1:-1;;;;;21765:29:0;;;;;;:25;:29;;;;;;;;21762:556;;;-1:-1:-1;;;;;21872:31:0;;;;;;:25;:31;;;;;;21907:15;-1:-1:-1;21872:50:0;21864:78;;;;-1:-1:-1;;;21864:78:0;;33025:2:1;21864:78:0;;;33007:21:1;33064:2;33044:18;;;33037:30;-1:-1:-1;;;33083:18:1;;;33076:45;33138:18;;21864:78:0;32823:339:1;21864:78:0;21979:23;:21;:23::i;:::-;21969:6;:33;;21961:98;;;;-1:-1:-1;;;21961:98:0;;33369:2:1;21961:98:0;;;33351:21:1;33408:2;33388:18;;;33381:30;33447:34;33427:18;;;33420:62;-1:-1:-1;;;33498:18:1;;;33491:50;33558:19;;21961:98:0;33167:416:1;21961:98:0;22112:26;:15;22130:8;22112:26;:::i;:::-;-1:-1:-1;;;;;22078:31:0;;;;;;:25;:31;;;;;:60;21762:556;;;-1:-1:-1;;;;;22164:23:0;;;;;;:19;:23;;;;;;;;22160:158;;22207:95;;-1:-1:-1;;;22207:95:0;;33790:2:1;22207:95:0;;;33772:21:1;33829:2;33809:18;;;33802:30;33868:34;33848:18;;;33841:62;33939:34;33919:18;;;33912:62;-1:-1:-1;;;33990:19:1;;;33983:52;34052:19;;22207:95:0;33588:489:1;22160:158:0;22352:14;;;;22349:1662;;;8070:6;;-1:-1:-1;;;;;22386:15:0;;;8070:6;;22386:15;;;;:32;;-1:-1:-1;8070:6:0;;-1:-1:-1;;;;;22405:13:0;;;8070:6;;22405:13;;22386:32;:52;;;;-1:-1:-1;;;;;;22422:16:0;;;;22386:52;:77;;;;-1:-1:-1;;;;;;22442:21:0;;22456:6;22442:21;;22386:77;:107;;;;-1:-1:-1;;;;;;22468:25:0;;;;;;:19;:25;;;;;;;;22467:26;22386:107;:135;;;;-1:-1:-1;;;;;;22498:23:0;;;;;;:19;:23;;;;;;;;22497:24;22386:135;22382:1618;;;22697:20;;;;22693:506;;;22759:9;;-1:-1:-1;;;;;22745:24:0;;;22759:9;;22745:24;;;;:49;;-1:-1:-1;22787:6:0;;-1:-1:-1;;;;;22773:21:0;;;22787:6;;22773:21;;22745:49;22741:439;;;22872:16;22887:1;22872:12;:16;:::i;:::-;22859:9;22830:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;22927:16:0;22942:1;22927:12;:16;:::i;:::-;-1:-1:-1;;;;;22892:32:0;;;;;;:28;:32;;;;;;:51;22830:113;22822:179;;;;-1:-1:-1;;;22822:179:0;;34284:2:1;22822:179:0;;;34266:21:1;34323:2;34303:18;;;34296:30;34362:34;34342:18;;;34335:62;-1:-1:-1;;;34413:18:1;;;34406:51;34474:19;;22822:179:0;34082:417:1;22822:179:0;23057:9;23028:39;;;;:28;:39;;;;;;23070:12;23028:54;;;;-1:-1:-1;;;;;23109:32:0;;;;;;:47;22741:439;-1:-1:-1;;;;;23268:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23304:35:0;;;;;;:31;:35;;;;;;;;23303:36;23268:71;23264:721;;;23382:12;;23372:6;:22;;23364:75;;;;-1:-1:-1;;;23364:75:0;;34706:2:1;23364:75:0;;;34688:21:1;34745:2;34725:18;;;34718:30;34784:34;34764:18;;;34757:62;-1:-1:-1;;;34835:18:1;;;34828:38;34883:19;;23364:75:0;34504:404:1;23364:75:0;23496:9;;23479:13;23489:2;23479:9;:13::i;:::-;23470:22;;:6;:22;:::i;:::-;:35;;23462:72;;;;-1:-1:-1;;;23462:72:0;;35115:2:1;23462:72:0;;;35097:21:1;35154:2;35134:18;;;35127:30;-1:-1:-1;;;35173:18:1;;;35166:54;35237:18;;23462:72:0;34913:348:1;23462:72:0;23264:721;;;-1:-1:-1;;;;;23611:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23645:37:0;;;;;;:31;:37;;;;;;;;23644:38;23611:71;23607:378;;;23725:13;;23715:6;:23;;23707:78;;;;-1:-1:-1;;;23707:78:0;;35468:2:1;23707:78:0;;;35450:21:1;35507:2;35487:18;;;35480:30;35546:34;35526:18;;;35519:62;-1:-1:-1;;;35597:18:1;;;35590:40;35647:19;;23707:78:0;35266:406:1;23607:378:0;-1:-1:-1;;;;;23833:35:0;;;;;;:31;:35;;;;;;;;23828:157;;23927:9;;23910:13;23920:2;23910:9;:13::i;:::-;23901:22;;:6;:22;:::i;:::-;:35;;23893:72;;;;-1:-1:-1;;;23893:72:0;;35115:2:1;23893:72:0;;;35097:21:1;35154:2;35134:18;;;35127:30;-1:-1:-1;;;35173:18:1;;;35166:54;35237:18;;23893:72:0;34913:348:1;23893:72:0;24023:28;24054:24;24072:4;24054:9;:24::i;:::-;24138:18;;24023:55;;-1:-1:-1;24114:42:0;;;;;;;24172:22;;-1:-1:-1;24183:11:0;;;;;;;24172:22;:35;;;;-1:-1:-1;24199:8:0;;-1:-1:-1;;;24199:8:0;;;;24198:9;24172:35;:71;;;;-1:-1:-1;;;;;;24212:31:0;;;;;;:25;:31;;;;;;;;24211:32;24172:71;:101;;;;-1:-1:-1;;;;;;24248:25:0;;;;;;:19;:25;;;;;;;;24247:26;24172:101;:129;;;;-1:-1:-1;;;;;;24278:23:0;;;;;;:19;:23;;;;;;;;24277:24;24172:129;24169:232;;;24318:8;:15;;-1:-1:-1;;;;24318:15:0;-1:-1:-1;;;24318:15:0;;;24348:10;:8;:10::i;:::-;24373:8;:16;;-1:-1:-1;;;;24373:16:0;;;24169:232;24417:8;;-1:-1:-1;;;24417:8:0;;;;24416:9;:42;;;;-1:-1:-1;;;;;;24429:29:0;;;;;;:25;:29;;;;;;;;24416:42;:59;;;;-1:-1:-1;24462:13:0;;;;24416:59;:114;;;;;24515:15;;24498:14;;:32;;;;:::i;:::-;24479:15;:51;;24416:114;:144;;;;-1:-1:-1;;;;;;24535:25:0;;;;;;:19;:25;;;;;;;;24534:26;24416:144;24413:204;;;24576:29;:27;:29::i;:::-;-1:-1:-1;;;;;24747:25:0;;24629:12;24747:25;;;:19;:25;;;;;;24644:4;;24747:25;;;:52;;-1:-1:-1;;;;;;24776:23:0;;;;;;:19;:23;;;;;;;;24747:52;24744:99;;;-1:-1:-1;24826:5:0;24744:99;24863:12;24890:20;25004:7;25001:2209;;;27365:18;;27350:12;:33;25066:60;;;;-1:-1:-1;;;;;;25095:31:0;;;;;;:25;:31;;;;;;;;25066:60;:94;;;;-1:-1:-1;;;;;;25131:29:0;;;;;;:25;:29;;;;;;;;25130:30;25066:94;:122;;;;-1:-1:-1;;;;;;25165:23:0;;;;;;:19;:23;;;;;;;;25164:24;25066:122;:142;;;;;25207:1;25192:12;;:16;25066:142;25063:1836;;;27365:18;;27350:12;:33;25246:330;;25555:1;25539:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25246:330:0;-1:-1:-1;;;;;25600:15:0;;;;;;:11;:15;;;;;;;;25596:214;;-1:-1:-1;;;;;25639:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;25639:22:0;25657:4;25639:22;;;;;;25684:10;:15;;25657:4;;25684:10;;:15;;25657:4;;25684:15;:::i;:::-;;;;-1:-1:-1;;25722:11:0;:20;;;;;;;-1:-1:-1;25722:20:0;;;;;;;;-1:-1:-1;;;;;;25722:20:0;-1:-1:-1;;;;;25722:20:0;;;;;;;;25770;;962:51:1;;;25770:20:0;;950:2:1;935:18;25770:20:0;;;;;;;25596:214;11148:5;25846:12;;25837:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;25830:42;;25935:12;;25917:15;;25910:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25888:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26011:12:0;;25994:14;;25987:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;25966:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;26077:12:0;;26064:10;;26057:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;26042:47;;25063:1836;;;-1:-1:-1;;;;;26154:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26203:1;26187:13;;:17;26154:50;26150:749;;;11148:5;26240:13;;26231:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;26224:43;;26334:13;;26315:16;;26308:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;26286:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26412:13:0;;26394:15;;26387:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;26366:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26480:12:0;;26466:11;;26459:18;;:4;:18;:::i;26150:749::-;-1:-1:-1;;;;;26555:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26605:1;26590:12;;:16;26555:51;26552:347;;;11148:5;26640:12;;26631:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;26624:42;;26729:12;;26711:15;;26704:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26682:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26805:12:0;;26788:14;;26781:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;26760:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;26871:12:0;;26858:10;;26851:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;26836:47;;26552:347;26930:8;;26927:235;;26962:42;26978:4;26992;26999;26962:15;:42::i;:::-;27026:16;;27023:124;;27066:61;27090:4;27105:6;27114:12;27066:15;:61::i;:::-;27184:14;27194:4;27184:14;;:::i;:::-;;;25001:2209;27222:33;27238:4;27244:2;27248:6;27222:15;:33::i;:::-;21106:6157;;;;;21027:6236;;;:::o;28499:1213::-;28540:23;28566:24;28584:4;28566:9;:24::i;:::-;28540:50;;28601:25;28650:17;;28629:18;;:38;;;;:::i;:::-;28601:66;-1:-1:-1;28691:20:0;;;:46;;-1:-1:-1;28715:22:0;;28691:46;28688:60;;;28740:7;;28499:1213::o;28688:60::-;28781:18;;:23;;28802:2;28781:23;:::i;:::-;28763:15;:41;28760:113;;;28838:18;;:23;;28859:2;28838:23;:::i;:::-;28820:41;;28760:113;28885:12;28967:23;29052:1;29032:17;29011:18;;28993:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28967:86;-1:-1:-1;29074:51:0;29091:33;28967:86;29091:15;:33;:::i;:::-;29074:16;:51::i;:::-;29329:18;;29168:21;;;;29147:18;;29329:20;;29348:1;;29329:20;:::i;:::-;29308:42;;:17;:42;:::i;:::-;29287:17;;29274:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;29249:102;-1:-1:-1;29364:33:0;29249:102;29364:33;;:::i;:::-;29443:1;29422:18;:22;;;29455:17;:21;29364:33;-1:-1:-1;29500:19:0;;;;;:42;;;29541:1;29523:15;:19;29500:42;29497:119;;;29558:46;29571:15;29588;29558:12;:46::i;:::-;29649:15;;29641:63;;-1:-1:-1;;;;;29649:15:0;;;;29678:21;;29641:63;;;;29678:21;29649:15;29641:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;28499:1213:0:o;19501:236::-;-1:-1:-1;;;;;19584:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19584:39:0;;;;;;;19634;19584:31;:39;19634:26;:39::i;6373:614::-;-1:-1:-1;;;;;6513:20:0;;6505:70;;;;-1:-1:-1;;;6505:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6594:23:0;;6586:71;;;;-1:-1:-1;;;6586:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6694:17:0;;6670:21;6694:17;;;;;;;;;;;6730:23;;;;6722:74;;;;-1:-1:-1;;;6722:74:0;;35879:2:1;6722:74:0;;;35861:21:1;35918:2;35898:18;;;35891:30;35957:34;35937:18;;;35930:62;-1:-1:-1;;;36008:18:1;;;36001:36;36054:19;;6722:74:0;35677:402:1;6722:74:0;-1:-1:-1;;;;;6832:17:0;;;:9;:17;;;;;;;;;;;6852:22;;;6832:42;;6896:20;;;;;;;;:30;;6868:6;;6832:9;6896:30;;6868:6;;6896:30;:::i;:::-;;;;;;;;6961:9;-1:-1:-1;;;;;6944:35:0;6953:6;-1:-1:-1;;;;;6944:35:0;;6972:6;6944:35;;;;160:25:1;;148:2;133:18;;14:177;6944:35:0;;;;;;;;6494:493;6373:614;;;:::o;18712:207::-;-1:-1:-1;;;;;18800:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18800:52:0;;;;;;;;;;18868:43;;36252:51:1;;;36319:18;;;36312:50;18868:43:0;;36225:18:1;18868:43:0;;;;;;;18712:207;;:::o;36930:382::-;37018:16;;;37032:1;37018:16;;;;;;;;36994:21;;37018:16;;;;;;;;-1:-1:-1;;37055:9:0;;:16;;;-1:-1:-1;;;37055:16:0;;;;36994:40;;-1:-1:-1;;;;;;37055:9:0;;;;:14;;-1:-1:-1;37055:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37045:4;37050:1;37045:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;37045:26:0;;;-1:-1:-1;;;;;37045:26:0;;;;;37100:4;37082;37087:1;37082:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37082:23:0;;;:7;;;;;;;;;:23;37118:9;;:186;;-1:-1:-1;;;37118:186:0;;:9;;;:60;;37186:11;;37118:186;;:9;;37229:4;;37256:6;;37278:15;;37118:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36983:329;36930:382;:::o;34264:1252::-;34350:15;34333:14;:32;;;34386:20;:38;34462:6;;34455:39;;-1:-1:-1;;;34455:39:0;;34488:4;34455:39;;;962:51:1;-1:-1:-1;;;;;;;34462:6:0;;34455:24;;935:18:1;;34455:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34435:59;;34505:20;34528:24;34546:4;34528:9;:24::i;:::-;34505:47;;34563:16;34613:5;34594:16;;34582:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;34765:6;;34789:9;;34758:52;;-1:-1:-1;;;34758:52:0;;-1:-1:-1;;;;;34789:9:0;;;34758:52;;;18941:51:1;19008:18;;;19001:34;;;34563:55:0;;-1:-1:-1;34657:21:0;;34765:6;;;34758:22;;18914:18:1;;34758:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34856:9:0;;:234;;-1:-1:-1;;;34856:234:0;;-1:-1:-1;;;;;34856:9:0;;;;:28;;:234;;34907:4;;34927:8;;34856:9;;;;34907:4;;35064:15;;34856:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35103:25;35158:12;35131:24;35149:4;35131:9;:24::i;:::-;:39;;;;:::i;:::-;35103:67;-1:-1:-1;35184:21:0;;35181:118;;35221:66;35245:4;35260:6;35269:17;35221:15;:66::i;:::-;35311:23;35337:41;35361:17;35337:21;:41;:::i;:::-;35311:67;-1:-1:-1;35394:19:0;;35391:80;;35429:30;35443:15;35429:13;:30::i;:::-;35488:20;;35499:8;;35488:20;;;;;34312:1204;;;;;;34264:1252::o;27399:573::-;27551:16;;;27565:1;27551:16;;;;;;;;27527:21;;27551:16;;;;;;;;;;-1:-1:-1;27551:16:0;27527:40;;27596:4;27578;27583:1;27578:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27578:23:0;;;:7;;;;;;;;;;:23;;;;27622:9;;:16;;;-1:-1:-1;;;27622:16:0;;;;:9;;;;;:14;;:16;;;;;27578:7;;27622:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27612:4;27617:1;27612:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27612:26:0;;;:7;;;;;;;;;:26;27683:9;;27651:56;;27668:4;;27683:9;27695:11;27651:8;:56::i;:::-;27746:9;;:218;;-1:-1:-1;;;27746:218:0;;-1:-1:-1;;;;;27746:9:0;;;;:60;;:218;;27821:11;;27746:9;;27891:4;;27918;;27938:15;;27746:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27984:507;28164:9;;28132:56;;28149:4;;-1:-1:-1;;;;;28164:9:0;28176:11;28132:8;:56::i;:::-;28231:9;;:252;;-1:-1:-1;;;28231:252:0;;-1:-1:-1;;;;;28231:9:0;;;;:25;;28264:9;;28231:252;;28297:4;;28317:11;;28231:9;;;;28297:4;;28457:15;;28231:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27984:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:247::-;1731:6;1784:2;1772:9;1763:7;1759:23;1755:32;1752:52;;;1800:1;1797;1790:12;1752:52;1839:9;1826:23;1858:31;1883:5;1858:31;:::i;:::-;1908:5;1672:247;-1:-1:-1;;;1672:247:1:o;1924:180::-;1983:6;2036:2;2024:9;2015:7;2011:23;2007:32;2004:52;;;2052:1;2049;2042:12;2004:52;-1:-1:-1;2075:23:1;;1924:180;-1:-1:-1;1924:180:1:o;2109:456::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;2310:9;2297:23;2329:31;2354:5;2329:31;:::i;:::-;2379:5;-1:-1:-1;2436:2:1;2421:18;;2408:32;2449:33;2408:32;2449:33;:::i;:::-;2109:456;;2501:7;;-1:-1:-1;;;2555:2:1;2540:18;;;;2527:32;;2109:456::o;2967:367::-;3030:8;3040:6;3094:3;3087:4;3079:6;3075:17;3071:27;3061:55;;3112:1;3109;3102:12;3061:55;-1:-1:-1;3135:20:1;;3178:18;3167:30;;3164:50;;;3210:1;3207;3200:12;3164:50;3247:4;3239:6;3235:17;3223:29;;3307:3;3300:4;3290:6;3287:1;3283:14;3275:6;3271:27;3267:38;3264:47;3261:67;;;3324:1;3321;3314:12;3261:67;2967:367;;;;;:::o;3339:437::-;3425:6;3433;3486:2;3474:9;3465:7;3461:23;3457:32;3454:52;;;3502:1;3499;3492:12;3454:52;3542:9;3529:23;3575:18;3567:6;3564:30;3561:50;;;3607:1;3604;3597:12;3561:50;3646:70;3708:7;3699:6;3688:9;3684:22;3646:70;:::i;:::-;3735:8;;3620:96;;-1:-1:-1;3339:437:1;-1:-1:-1;;;;3339:437:1:o;3781:118::-;3867:5;3860:13;3853:21;3846:5;3843:32;3833:60;;3889:1;3886;3879:12;3904:377;3978:6;3986;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4099:9;4086:23;4076:33;;4156:2;4145:9;4141:18;4128:32;4118:42;;4210:2;4199:9;4195:18;4182:32;4223:28;4245:5;4223:28;:::i;:::-;4270:5;4260:15;;;3904:377;;;;;:::o;4286:382::-;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4467:9;4454:23;4486:31;4511:5;4486:31;:::i;:::-;4536:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;4606:30;4565:32;4606:30;:::i;:::-;4655:7;4645:17;;;4286:382;;;;;:::o;4673:316::-;4750:6;4758;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;-1:-1:-1;;4858:23:1;;;4928:2;4913:18;;4900:32;;-1:-1:-1;4979:2:1;4964:18;;;4951:32;;4673:316;-1:-1:-1;4673:316:1:o;4994:388::-;5062:6;5070;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5178:9;5165:23;5197:31;5222:5;5197:31;:::i;:::-;5247:5;-1:-1:-1;5304:2:1;5289:18;;5276:32;5317:33;5276:32;5317:33;:::i;5387:461::-;5440:3;5478:5;5472:12;5505:6;5500:3;5493:19;5531:4;5560:2;5555:3;5551:12;5544:19;;5597:2;5590:5;5586:14;5618:1;5628:195;5642:6;5639:1;5636:13;5628:195;;;5707:13;;-1:-1:-1;;;;;5703:39:1;5691:52;;5763:12;;;;5798:15;;;;5739:1;5657:9;5628:195;;;-1:-1:-1;5839:3:1;;5387:461;-1:-1:-1;;;;;5387:461:1:o;5853:261::-;6032:2;6021:9;6014:21;5995:4;6052:56;6104:2;6093:9;6089:18;6081:6;6052:56;:::i;6119:566::-;6211:6;6219;6227;6280:2;6268:9;6259:7;6255:23;6251:32;6248:52;;;6296:1;6293;6286:12;6248:52;6336:9;6323:23;6369:18;6361:6;6358:30;6355:50;;;6401:1;6398;6391:12;6355:50;6440:70;6502:7;6493:6;6482:9;6478:22;6440:70;:::i;:::-;6529:8;;-1:-1:-1;6414:96:1;-1:-1:-1;;6614:2:1;6599:18;;6586:32;6627:28;6586:32;6627:28;:::i;6690:127::-;6751:10;6746:3;6742:20;6739:1;6732:31;6782:4;6779:1;6772:15;6806:4;6803:1;6796:15;6822:275;6893:2;6887:9;6958:2;6939:13;;-1:-1:-1;;6935:27:1;6923:40;;6993:18;6978:34;;7014:22;;;6975:62;6972:88;;;7040:18;;:::i;:::-;7076:2;7069:22;6822:275;;-1:-1:-1;6822:275:1:o;7102:183::-;7162:4;7195:18;7187:6;7184:30;7181:56;;;7217:18;;:::i;:::-;-1:-1:-1;7262:1:1;7258:14;7274:4;7254:25;;7102:183::o;7290:662::-;7344:5;7397:3;7390:4;7382:6;7378:17;7374:27;7364:55;;7415:1;7412;7405:12;7364:55;7451:6;7438:20;7477:4;7501:60;7517:43;7557:2;7517:43;:::i;:::-;7501:60;:::i;:::-;7595:15;;;7681:1;7677:10;;;;7665:23;;7661:32;;;7626:12;;;;7705:15;;;7702:35;;;7733:1;7730;7723:12;7702:35;7769:2;7761:6;7757:15;7781:142;7797:6;7792:3;7789:15;7781:142;;;7863:17;;7851:30;;7901:12;;;;7814;;7781:142;;;-1:-1:-1;7941:5:1;7290:662;-1:-1:-1;;;;;;7290:662:1:o;7957:1283::-;8084:6;8092;8100;8153:2;8141:9;8132:7;8128:23;8124:32;8121:52;;;8169:1;8166;8159:12;8121:52;8209:9;8196:23;8238:18;8279:2;8271:6;8268:14;8265:34;;;8295:1;8292;8285:12;8265:34;8333:6;8322:9;8318:22;8308:32;;8378:7;8371:4;8367:2;8363:13;8359:27;8349:55;;8400:1;8397;8390:12;8349:55;8436:2;8423:16;8458:4;8482:60;8498:43;8538:2;8498:43;:::i;8482:60::-;8576:15;;;8658:1;8654:10;;;;8646:19;;8642:28;;;8607:12;;;;8682:19;;;8679:39;;;8714:1;8711;8704:12;8679:39;8738:11;;;;8758:217;8774:6;8769:3;8766:15;8758:217;;;8854:3;8841:17;8871:31;8896:5;8871:31;:::i;:::-;8915:18;;8791:12;;;;8953;;;;8758:217;;;8994:5;-1:-1:-1;;9037:18:1;;9024:32;;-1:-1:-1;;9068:16:1;;;9065:36;;;9097:1;9094;9087:12;9065:36;;9120:63;9175:7;9164:8;9153:9;9149:24;9120:63;:::i;:::-;9110:73;;;9230:2;9219:9;9215:18;9202:32;9192:42;;7957:1283;;;;;:::o;9245:380::-;9324:1;9320:12;;;;9367;;;9388:61;;9442:4;9434:6;9430:17;9420:27;;9388:61;9495:2;9487:6;9484:14;9464:18;9461:38;9458:161;;9541:10;9536:3;9532:20;9529:1;9522:31;9576:4;9573:1;9566:15;9604:4;9601:1;9594:15;9458:161;;9245:380;;;:::o;9630:356::-;9832:2;9814:21;;;9851:18;;;9844:30;9910:34;9905:2;9890:18;;9883:62;9977:2;9962:18;;9630:356::o;10762:127::-;10823:10;10818:3;10814:20;10811:1;10804:31;10854:4;10851:1;10844:15;10878:4;10875:1;10868:15;10894:168;10934:7;11000:1;10996;10992:6;10988:14;10985:1;10982:21;10977:1;10970:9;10963:17;10959:45;10956:71;;;11007:18;;:::i;:::-;-1:-1:-1;11047:9:1;;10894:168::o;11067:422::-;11156:1;11199:5;11156:1;11213:270;11234:7;11224:8;11221:21;11213:270;;;11293:4;11289:1;11285:6;11281:17;11275:4;11272:27;11269:53;;;11302:18;;:::i;:::-;11352:7;11342:8;11338:22;11335:55;;;11372:16;;;;11335:55;11451:22;;;;11411:15;;;;11213:270;;;11217:3;11067:422;;;;;:::o;11494:806::-;11543:5;11573:8;11563:80;;-1:-1:-1;11614:1:1;11628:5;;11563:80;11662:4;11652:76;;-1:-1:-1;11699:1:1;11713:5;;11652:76;11744:4;11762:1;11757:59;;;;11830:1;11825:130;;;;11737:218;;11757:59;11787:1;11778:10;;11801:5;;;11825:130;11862:3;11852:8;11849:17;11846:43;;;11869:18;;:::i;:::-;-1:-1:-1;;11925:1:1;11911:16;;11940:5;;11737:218;;12039:2;12029:8;12026:16;12020:3;12014:4;12011:13;12007:36;12001:2;11991:8;11988:16;11983:2;11977:4;11974:12;11970:35;11967:77;11964:159;;;-1:-1:-1;12076:19:1;;;12108:5;;11964:159;12155:34;12180:8;12174:4;12155:34;:::i;:::-;12225:6;12221:1;12217:6;12213:19;12204:7;12201:32;12198:58;;;12236:18;;:::i;:::-;12274:20;;11494:806;-1:-1:-1;;;11494:806:1:o;12305:140::-;12363:5;12392:47;12433:4;12423:8;12419:19;12413:4;12392:47;:::i;12450:217::-;12490:1;12516;12506:132;;12560:10;12555:3;12551:20;12548:1;12541:31;12595:4;12592:1;12585:15;12623:4;12620:1;12613:15;12506:132;-1:-1:-1;12652:9:1;;12450:217::o;13901:128::-;13941:3;13972:1;13968:6;13965:1;13962:13;13959:39;;;13978:18;;:::i;:::-;-1:-1:-1;14014:9:1;;13901:128::o;14467:127::-;14528:10;14523:3;14519:20;14516:1;14509:31;14559:4;14556:1;14549:15;14583:4;14580:1;14573:15;14599:135;14638:3;14659:17;;;14656:43;;14679:18;;:::i;:::-;-1:-1:-1;14726:1:1;14715:13;;14599:135::o;15503:251::-;15573:6;15626:2;15614:9;15605:7;15601:23;15597:32;15594:52;;;15642:1;15639;15632:12;15594:52;15674:9;15668:16;15693:31;15718:5;15693:31;:::i;15759:332::-;15966:6;15955:9;15948:25;16009:2;16004;15993:9;15989:18;15982:30;15929:4;16029:56;16081:2;16070:9;16066:18;16058:6;16029:56;:::i;:::-;16021:64;15759:332;-1:-1:-1;;;;15759:332:1:o;16096:881::-;16191:6;16222:2;16265;16253:9;16244:7;16240:23;16236:32;16233:52;;;16281:1;16278;16271:12;16233:52;16314:9;16308:16;16347:18;16339:6;16336:30;16333:50;;;16379:1;16376;16369:12;16333:50;16402:22;;16455:4;16447:13;;16443:27;-1:-1:-1;16433:55:1;;16484:1;16481;16474:12;16433:55;16513:2;16507:9;16536:60;16552:43;16592:2;16552:43;:::i;16536:60::-;16630:15;;;16712:1;16708:10;;;;16700:19;;16696:28;;;16661:12;;;;16736:19;;;16733:39;;;16768:1;16765;16758:12;16733:39;16792:11;;;;16812:135;16828:6;16823:3;16820:15;16812:135;;;16894:10;;16882:23;;16845:12;;;;16925;;;;16812:135;;;16966:5;16096:881;-1:-1:-1;;;;;;;16096:881:1:o;18578:184::-;18648:6;18701:2;18689:9;18680:7;18676:23;18672:32;18669:52;;;18717:1;18714;18707:12;18669:52;-1:-1:-1;18740:16:1;;18578:184;-1:-1:-1;18578:184:1:o;19046:245::-;19113:6;19166:2;19154:9;19145:7;19141:23;19137:32;19134:52;;;19182:1;19179;19172:12;19134:52;19214:9;19208:16;19233:28;19255:5;19233:28;:::i;20006:403::-;20208:2;20190:21;;;20247:2;20227:18;;;20220:30;20286:34;20281:2;20266:18;;20259:62;-1:-1:-1;;;20352:2:1;20337:18;;20330:37;20399:3;20384:19;;20006:403::o;26721:607::-;-1:-1:-1;;;;;27080:15:1;;;27062:34;;27127:2;27112:18;;27105:34;;;;27170:2;27155:18;;27148:34;;;;27213:2;27198:18;;27191:34;;;;27262:15;;;27256:3;27241:19;;27234:44;27042:3;27294:19;;27287:35;;;;27011:3;26996:19;;26721:607::o;27333:306::-;27421:6;27429;27437;27490:2;27478:9;27469:7;27465:23;27461:32;27458:52;;;27506:1;27503;27496:12;27458:52;27535:9;27529:16;27519:26;;27585:2;27574:9;27570:18;27564:25;27554:35;;27629:2;27618:9;27614:18;27608:25;27598:35;;27333:306;;;;;:::o;28683:125::-;28723:4;28751:1;28748;28745:8;28742:34;;;28756:18;;:::i;:::-;-1:-1:-1;28793:9:1;;28683:125::o;29767:245::-;29846:6;29854;29907:2;29895:9;29886:7;29882:23;29878:32;29875:52;;;29923:1;29920;29913:12;29875:52;-1:-1:-1;;29946:16:1;;30002:2;29987:18;;;29981:25;29946:16;;29981:25;;-1:-1:-1;29767:245:1:o;30825:401::-;31027:2;31009:21;;;31066:2;31046:18;;;31039:30;31105:34;31100:2;31085:18;;31078:62;-1:-1:-1;;;31171:2:1;31156:18;;31149:35;31216:3;31201:19;;30825:401::o;31231:399::-;31433:2;31415:21;;;31472:2;31452:18;;;31445:30;31511:34;31506:2;31491:18;;31484:62;-1:-1:-1;;;31577:2:1;31562:18;;31555:33;31620:3;31605:19;;31231:399::o;36373:510::-;36644:6;36633:9;36626:25;36687:3;36682:2;36671:9;36667:18;36660:31;36607:4;36708:57;36760:3;36749:9;36745:19;36737:6;36708:57;:::i;:::-;-1:-1:-1;;;;;36801:32:1;;;;36796:2;36781:18;;36774:60;-1:-1:-1;36865:2:1;36850:18;36843:34;36700:65;36373:510;-1:-1:-1;;36373:510:1:o;36888:582::-;37187:6;37176:9;37169:25;37230:6;37225:2;37214:9;37210:18;37203:34;37273:3;37268:2;37257:9;37253:18;37246:31;37150:4;37294:57;37346:3;37335:9;37331:19;37323:6;37294:57;:::i;:::-;-1:-1:-1;;;;;37387:32:1;;;;37382:2;37367:18;;37360:60;-1:-1:-1;37451:3:1;37436:19;37429:35;37286:65;36888:582;-1:-1:-1;;;36888:582:1:o

Swarm Source

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