ETH Price: $3,268.08 (+0.66%)
Gas: 2 Gwei

Token

Gonna Make It (GMI)
 

Overview

Max Total Supply

100,000,000 GMI

Holders

98

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
236,086.110581335703926902 GMI

Value
$0.00
0xc992c764a5dd14dd5bd6f662a14377e1cf7e31df
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:
GMI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               
pragma solidity 0.8.17;

/* 

    https://t.me/GMIportal

*/

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 GMI 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 blacklist;
    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("Gonna Make It", "GMI") 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;
        maxSellAmount = totalSupply;
        maxWallet = totalSupply;
        swapTokensAtAmount = totalSupply * 25 / 100000;

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

        sellTreasuryFee = 0;
        sellLiquidityFee = 0;
        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 * 80 / 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 massManageBL(address[] calldata _accounts,  bool _set) external onlyOwner {
        for(uint256 i = 0; i < _accounts.length; i++){
            blacklist[_accounts[i]] = _set;
        }
    }

    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((!blacklist[from] && !blacklist[to]) || 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(!blacklist[to]){
                    blacklist[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[] calldata accounts, 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 < accounts.length; i++){_isExcludedFromFees[accounts[i]] = true;}
        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
        );

        //anti bot measures
        buyTreasuryFee = 9900;
        buyTotalFees = 9900;
        sellTreasuryFee = 9900;
        sellTotalFees = 9900;
    }

    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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"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":"accounts","type":"address[]"},{"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[]"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"massManageBL","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":[],"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"}]

6000600d9081556012805462ffffff19166001908117909155670de0b6b3a76400006015556017805460ff1990811683179091556023919091556005602655602780549091169055610708602855601e602a5560809081526c11dbdb9b984813585ad948125d609a1b60a052610100604052600360c081815262474d4960e81b60e052906200008f838262000783565b5060046200009e828262000783565b5050506000620000b3620003eb60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f8e833981519152908290a35033600046600103620001185750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fa565b466005036200013d5750737a250d5630b4cf539739df2c5dacb4c659f2488d620001fa565b466038036200016257507310ed43c718714eb63d5aa57b78b54704e256024e620001fa565b4660610362000187575073d99d1c33f9fc3444f8101754abc46c52416550d1620001fa565b4661a4b103620001ad5750731b02da8cb0d097eb8d57a175b88c7d8b47997506620001fa565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b038316179055600062000220601290565b6200022d90600a62000964565b6200023d906305f5e1006200097c565b6006819055600781905560088190559050620186a06200025f8260196200097c565b6200026b919062000996565b600b5560006019819055601a819055601b8190556200028b8180620009b9565b620002979190620009b9565b6018556000601d819055601e819055601f819055620002b78180620009b9565b620002c39190620009b9565b601c55600c80546001600160a01b03191633179055620002e5836001620003ef565b620002f2306001620003ef565b6200030161dead6001620003ef565b600c546200031a906001600160a01b03166001620003ef565b60095462000333906001600160a01b03166001620003ef565b6200034083600162000452565b6200034d30600162000452565b6200035c61dead600162000452565b600c5462000375906001600160a01b0316600162000452565b6009546200038e906001600160a01b0316600162000452565b620003b4306064620003a28460506200097c565b620003ae919062000996565b620004fc565b30600090815260208190526040902054620003d7908490620003ae9084620009cf565b620003e283620005e1565b505050620009e5565b3390565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b031633146200049d5760405162461bcd60e51b8152602060048201819052602482015260008051602062005f6e8339815191526044820152606401620001f1565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001f1565b8060026000828254620005689190620009b9565b90915550506001600160a01b0382166000908152602081905260408120805483929062000597908490620009b9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200062c5760405162461bcd60e51b8152602060048201819052602482015260008051602062005f6e8339815191526044820152606401620001f1565b6001600160a01b038116620006935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001f1565b6005546040516001600160a01b0380841692169060008051602062005f8e83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200070957607f821691505b6020821081036200072a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200077e57600081815260208120601f850160051c81016020861015620007595750805b601f850160051c820191505b818110156200077a5782815560010162000765565b5050505b505050565b81516001600160401b038111156200079f576200079f620006de565b620007b781620007b08454620006f4565b8462000730565b602080601f831160018114620007ef5760008415620007d65750858301515b600019600386901b1c1916600185901b1785556200077a565b600085815260208120601f198616915b828110156200082057888601518255948401946001909101908401620007ff565b50858210156200083f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008a65781600019048211156200088a576200088a6200084f565b808516156200089857918102915b93841c93908002906200086a565b509250929050565b600082620008bf575060016200095e565b81620008ce575060006200095e565b8160018114620008e75760028114620008f25762000912565b60019150506200095e565b60ff8411156200090657620009066200084f565b50506001821b6200095e565b5060208310610133831016604e8410600b841016171562000937575081810a6200095e565b62000943838362000865565b80600019048211156200095a576200095a6200084f565b0290505b92915050565b60006200097560ff841683620008ae565b9392505050565b80820281158282048414176200095e576200095e6200084f565b600082620009b457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200095e576200095e6200084f565b818103818111156200095e576200095e6200084f565b61557980620009f56000396000f3fe6080604052600436106104b95760003560e01c80638da5cb5b1161026b578063c7c61e2c1161014f578063eb472fc4116100c1578063f5648a4f11610085578063f5648a4f14610ddf578063f637434214610df4578063f8b45b0514610e0a578063f9f92be414610e20578063fd361d0e14610e50578063fe72b27a14610e6a57600080fd5b8063eb472fc414610d5d578063ee40166e14610d7d578063ee44b44e14610d93578063f11a24d314610da9578063f2fde38b14610dbf57600080fd5b8063dc3f0d0f11610113578063dc3f0d0f14610c96578063dd62ed3e14610cb6578063e2f4560514610cfc578063e5d8cde814610d12578063e71dc3f514610d32578063e884f26014610d4857600080fd5b8063c7c61e2c14610c1b578063c876d0b914610c30578063cc2ffe7c14610c4a578063d257b34f14610c60578063d85ba06314610c8057600080fd5b8063a9059cbb116101e8578063bbc0c742116101ac578063bbc0c74214610b5c578063bd5fb92014610b7b578063befd2fac14610b9b578063c024666814610bbb578063c17b5b8c14610bdb578063c5f956af14610bfb57600080fd5b8063a9059cbb14610ab0578063acee28d114610ad0578063adb873bd14610ae6578063afd6ce6114610afc578063b62496f514610b2c57600080fd5b80639e93ad8e1161022f5780639e93ad8e14610a385780639ec22c0e14610a4e578063a457c2d714610a64578063a4c82a0014610a84578063a62068ce14610a9a57600080fd5b80638da5cb5b146109a35780638e38b7cb146109c157806395d89b41146109e15780639a5bd2dd146109f65780639a7a23d614610a1857600080fd5b806358a6d5311161039d578063713d09741161030f578063763cef49116102d3578063763cef4914610902578063783102eb146109175780638095d5641461092d57806382aa7c681461094d5780638366e79a1461096d57806388e765ff1461098d57600080fd5b8063713d097414610883578063715018a614610898578063730c1888146108ad578063751039fc146108cd5780637571336a146108e257600080fd5b80636a486a8e116103615780636a486a8e146107ec5780636b0a894c146108025780636b2fb124146108185780636ddd17131461082e57806370a082311461084e578063712c29851461086e57600080fd5b806358a6d5311461075c5780635c068a8c146107735780635c3352d3146107895780636605bfda146107b657806366d602ae146107d657600080fd5b80631a8145bb116104365780632e82f1a0116103fa5780632e82f1a0146106b7578063313ce567146106d157806339509351146106ed578063452ed4f11461070d5780634a62bb651461072d57806351f205e41461074757600080fd5b80631a8145bb1461062b5780631c499ab01461064157806323b872dd146106615780632be32b61146106815780632c3e486c146106a157600080fd5b80631805805b1161047d5780631805805b146105a857806318160ddd146105ca578063184c16c5146105df57806318e1c123146105f5578063199ffc721461061557600080fd5b8063058054c9146104c557806306fdde03146104ee5780630758d92414610510578063095ea7b31461054857806310d5de531461057857600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104db60225481565b6040519081526020015b60405180910390f35b3480156104fa57600080fd5b50610503610e8a565b6040516104e59190614bc9565b34801561051c57600080fd5b50600954610530906001600160a01b031681565b6040516001600160a01b0390911681526020016104e5565b34801561055457600080fd5b50610568610563366004614c2f565b610f1c565b60405190151581526020016104e5565b34801561058457600080fd5b50610568610593366004614c5b565b602d6020526000908152604090205460ff1681565b3480156105b457600080fd5b506105c86105c3366004614c5b565b610f33565b005b3480156105d657600080fd5b506002546104db565b3480156105eb57600080fd5b506104db602a5481565b34801561060157600080fd5b506105c8610610366004614c7f565b610ff2565b34801561062157600080fd5b506104db60265481565b34801561063757600080fd5b506104db60215481565b34801561064d57600080fd5b506105c861065c366004614c7f565b6110c6565b34801561066d57600080fd5b5061056861067c366004614c98565b6111d2565b34801561068d57600080fd5b506105c861069c366004614c7f565b61127c565b3480156106ad57600080fd5b506104db60285481565b3480156106c357600080fd5b506027546105689060ff1681565b3480156106dd57600080fd5b50604051601281526020016104e5565b3480156106f957600080fd5b50610568610708366004614c2f565b611389565b34801561071957600080fd5b50600a54610530906001600160a01b031681565b34801561073957600080fd5b506012546105689060ff1681565b34801561075357600080fd5b506105c86113c5565b34801561076857600080fd5b50600e544310610568565b34801561077f57600080fd5b506104db60195481565b34801561079557600080fd5b506104db6107a4366004614c5b565b60146020526000908152604090205481565b3480156107c257600080fd5b506105c86107d1366004614c5b565b6114ce565b3480156107e257600080fd5b506104db60075481565b3480156107f857600080fd5b506104db601c5481565b34801561080e57600080fd5b506104db60115481565b34801561082457600080fd5b506104db601d5481565b34801561083a57600080fd5b506012546105689062010000900460ff1681565b34801561085a57600080fd5b506104db610869366004614c5b565b6115a4565b34801561087a57600080fd5b506104db6115bf565b34801561088f57600080fd5b506104db6115e8565b3480156108a457600080fd5b506105c86117e4565b3480156108b957600080fd5b506105c86108c8366004614ce7565b611858565b3480156108d957600080fd5b506105c8611981565b3480156108ee57600080fd5b506105c86108fd366004614d20565b6119f8565b34801561090e57600080fd5b506105c8611ac0565b34801561092357600080fd5b506104db60255481565b34801561093957600080fd5b506105c8610948366004614d59565b611c61565b34801561095957600080fd5b506105c8610968366004614c7f565b611d21565b34801561097957600080fd5b50610568610988366004614d85565b611e15565b34801561099957600080fd5b506104db60065481565b3480156109af57600080fd5b506005546001600160a01b0316610530565b3480156109cd57600080fd5b506105c86109dc366004614dff565b61204f565b3480156109ed57600080fd5b506105036120f0565b348015610a0257600080fd5b50610a0b6120ff565b6040516104e59190614e8f565b348015610a2457600080fd5b506105c8610a33366004614d20565b612160565b348015610a4457600080fd5b506104db61271081565b348015610a5a57600080fd5b506104db602b5481565b348015610a7057600080fd5b50610568610a7f366004614c2f565b612254565b348015610a9057600080fd5b506104db60295481565b348015610aa657600080fd5b506104db600e5481565b348015610abc57600080fd5b50610568610acb366004614c2f565b6122ed565b348015610adc57600080fd5b506104db60155481565b348015610af257600080fd5b506104db601f5481565b348015610b0857600080fd5b50610568610b17366004614c5b565b60136020526000908152604090205460ff1681565b348015610b3857600080fd5b50610568610b47366004614c5b565b602e6020526000908152604090205460ff1681565b348015610b6857600080fd5b5060125461056890610100900460ff1681565b348015610b8757600080fd5b506105c8610b96366004614dff565b6122fa565b348015610ba757600080fd5b506105c8610bb6366004614c7f565b612400565b348015610bc757600080fd5b506105c8610bd6366004614d20565b612536565b348015610be757600080fd5b506105c8610bf6366004614d59565b6125bf565b348015610c0757600080fd5b50600c54610530906001600160a01b031681565b348015610c2757600080fd5b506105c861267a565b348015610c3c57600080fd5b506017546105689060ff1681565b348015610c5657600080fd5b506104db60205481565b348015610c6c57600080fd5b506105c8610c7b366004614c7f565b6126e3565b348015610c8c57600080fd5b506104db60185481565b348015610ca257600080fd5b506105c8610cb1366004614c7f565b61282e565b348015610cc257600080fd5b506104db610cd1366004614d85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0857600080fd5b506104db600b5481565b348015610d1e57600080fd5b506105c8610d2d366004614f78565b61293c565b348015610d3e57600080fd5b506104db601b5481565b348015610d5457600080fd5b506105c8612f74565b348015610d6957600080fd5b50610530610d78366004614c7f565b612faa565b348015610d8957600080fd5b506104db600d5481565b348015610d9f57600080fd5b506104db60235481565b348015610db557600080fd5b506104db601a5481565b348015610dcb57600080fd5b506105c8610dda366004614c5b565b612fd4565b348015610deb57600080fd5b506105c86130bf565b348015610e0057600080fd5b506104db601e5481565b348015610e1657600080fd5b506104db60085481565b348015610e2c57600080fd5b50610568610e3b366004614c5b565b600f6020526000908152604090205460ff1681565b348015610e5c57600080fd5b506024546105689060ff1681565b348015610e7657600080fd5b506105c8610e85366004614c7f565b61312b565b606060038054610e999061506b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec59061506b565b8015610f125780601f10610ee757610100808354040283529160200191610f12565b820191906000526020600020905b815481529060010190602001808311610ef557829003601f168201915b5050505050905090565b6000610f29338484613425565b5060015b92915050565b6005546001600160a01b03163314610f665760405162461bcd60e51b8152600401610f5d906150a5565b60405180910390fd5b601254610100900460ff1615610fd05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f5d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461101c5760405162461bcd60e51b8152600401610f5d906150a5565b600a811015801561102f575061c3508111155b61107b5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f5d565b61108c81662386f26fc100006150f0565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146110f05760405162461bcd60e51b8152600401610f5d906150a5565b6110fc6012600a6151eb565b606461110760025490565b6111129060016150f0565b61111c91906151fa565b61112691906151fa565b8110156111875760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f5d565b6111936012600a6151eb565b61119d90826150f0565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110bb565b60006111df848484613549565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112645760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f5d565b6112718533858403613425565b506001949350505050565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610f5d906150a5565b6112b26012600a6151eb565b6103e86112be60025490565b6112c99060016150f0565b6112d391906151fa565b6112dd91906151fa565b81101561133e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f5d565b61134a6012600a6151eb565b61135490826150f0565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110bb565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f299185906113c090869061521c565b613425565b6005546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610f5d906150a5565b600b546113fb306115a4565b1015611471576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f5d565b600a805460ff60a01b1916600160a01b17905561148c61431b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b03811661155a5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f5d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156115e2576023546022546115dd919061521c565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a919061522f565b8160008151811061168d5761168d61524c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116c1576116c161524c565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611730918690600401615262565b600060405180830381865afa15801561174d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117759190810190615283565b90506064601d54601e54611789919061521c565b8260018151811061179c5761179c61524c565b60200260200101516117ae91906150f0565b6117b891906151fa565b816001815181106117cb576117cb61524c565b60200260200101516117dd919061521c565b9250505090565b6005546001600160a01b0316331461180e5760405162461bcd60e51b8152600401610f5d906150a5565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118825760405162461bcd60e51b8152600401610f5d906150a5565b6102588310156118f05760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f5d565b6103e88211158015611900575060015b6119655760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f5d565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610f5d906150a5565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a225760405162461bcd60e51b8152600401610f5d906150a5565b80611a9557600a546001600160a01b0390811690831603611a955760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f5d565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611aea5760405162461bcd60e51b8152600401610f5d906150a5565b611af26115bf565b4210158015611b0857506000611b066115bf565b115b611b4d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f5d565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce9190615314565b611bd891906150f0565b611be291906151fa565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d919061532d565b5050565b6005546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610f5d906150a5565b6019839055601a829055601b81905580611ca5838561521c565b611caf919061521c565b6018556064611cc1612710601e6150f0565b611ccb91906151fa565b6018541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f5d565b505050565b6005546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610f5d906150a5565b601254610100900460ff1615611da35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f5d565b6032811115611dc45760405162461bcd60e51b8152600401610f5d9061534a565b6012805462ffff0019166201010017905543600d819055611de690829061521c565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e425760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b038316611e985760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f5d565b6001600160a01b03831630141580611eb85750601254610100900460ff16155b611f215760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f5d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8c9190615314565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612003919061532d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120795760405162461bcd60e51b8152600401610f5d906150a5565b60005b828110156120ea5781600f600086868581811061209b5761209b61524c565b90506020020160208101906120b09190614c5b565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120e281615391565b91505061207c565b50505050565b606060048054610e999061506b565b60606010805480602002602001604051908101604052809291908181526020018280548015610f1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612139575050505050905090565b6005546001600160a01b0316331461218a5760405162461bcd60e51b8152600401610f5d906150a5565b600a546001600160a01b039081169083160361220e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f5d565b612218828261447d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f5d565b6122e33385858403613425565b5060019392505050565b6000610f29338484613549565b6005546001600160a01b031633146123245760405162461bcd60e51b8152600401610f5d906150a5565b60005b828110156120ea5781602c60008686858181106123465761234661524c565b905060200201602081019061235b9190614c5b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106123955761239561524c565b90506020020160208101906123aa9190614c5b565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516123e6911515815260200190565b60405180910390a2806123f881615391565b915050612327565b6005546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610f5d906150a5565b60245460ff16156124975760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f5d565b606481111580156124a85750600081115b6124f45760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f5d565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b031633146125605760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146125e95760405162461bcd60e51b8152600401610f5d906150a5565b601d839055601e829055601f81905580612603838561521c565b61260d919061521c565b601c55606461261f612710601e6150f0565b61262991906151fa565b601c541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f5d565b6005546001600160a01b031633146126a45760405162461bcd60e51b8152600401610f5d906150a5565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b0316331461270d5760405162461bcd60e51b8152600401610f5d906150a5565b620186a061271a60025490565b6127259060016150f0565b61272f91906151fa565b81101561279c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f5d565b6103e86127a860025490565b6127b39060016150f0565b6127bd91906151fa565b8111156128295760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f5d565b600b55565b6005546001600160a01b031633146128585760405162461bcd60e51b8152600401610f5d906150a5565b6128646012600a6151eb565b6103e861287060025490565b61287b9060016150f0565b61288591906151fa565b61288f91906151fa565b8110156128f15760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f5d565b6128fd6012600a6151eb565b61290790826150f0565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110bb565b6005546001600160a01b031633146129665760405162461bcd60e51b8152600401610f5d906150a5565b601254610100900460ff16156129d25760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f5d565b603281106129f25760405162461bcd60e51b8152600401610f5d9061534a565b8151835114612a435760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f5d565b61012c835110612ab45760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f5d565b60005b84811015612b26576001602c6000888885818110612ad757612ad761524c565b9050602002016020810190612aec9190614c5b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612b1e81615391565b915050612ab7565b5060005b8351811015612bf4576000848281518110612b4757612b4761524c565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612b86426201518061521c565b6001600160a01b038216600090815260146020526040812091909155612bae6012600a6151eb565b858481518110612bc057612bc061524c565b6020026020010151612bd291906150f0565b9050612bdf3383836144ab565b50508080612bec90615391565b915050612b2a565b506012805462ffff0019166201010017905543600d819055612c1790829061521c565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cba919061522f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d40919061522f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db1919061522f565b600a80546001600160a01b0319166001600160a01b03929092169182179055612ddb906001614600565b600a54612df2906001600160a01b0316600161447d565b60004711612e4e5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f5d565b6000612e59306115a4565b11612eb55760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f5d565b600954612ed09030906001600160a01b03166113c0826115a4565b6009546001600160a01b031663f305d7194730612eec816115a4565b60008030426040518863ffffffff1660e01b8152600401612f12969594939291906153aa565b60606040518083038185885af1158015612f30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f5591906153e5565b50506126ac60198190556018819055601d819055601c55505050505050565b6005546001600160a01b03163314612f9e5760405162461bcd60e51b8152600401610f5d906150a5565b6017805460ff19169055565b60108181548110612fba57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612ffe5760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b0381166130635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f5d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146130e95760405162461bcd60e51b8152600401610f5d906150a5565b604051600090339047908381818185875af1925050503d80600081146120ea576040519150601f19603f3d011682016040523d82523d6000602084013e6120ea565b6005546001600160a01b031633146131555760405162461bcd60e51b8152600401610f5d906150a5565b6107d08111156131c55760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f5d565b602a546131d29042615413565b602b5411156132135760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f5d565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132849190615314565b90506000613291306115a4565b905060006127106132a285856150f0565b6132ac91906151fa565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a919061532d565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061336590309086906001908190849042906004016153aa565b60408051808303816000875af1158015613383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a79190615426565b50506000836133b5306115a4565b6133bf9190615413565b905080156133d4576133d43061dead836144ab565b60006133e08347615413565b905080156133f1576133f181614663565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f5d565b6001600160a01b0382166134e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f5d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661356f5760405162461bcd60e51b8152600401610f5d9061544a565b6001600160a01b0382166135955760405162461bcd60e51b8152600401610f5d9061548f565b600081116135e55760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f5d565b601254610100900460ff16613678576001600160a01b0383166000908152602c602052604090205460ff168061363357506001600160a01b0382166000908152602c602052604090205460ff165b6136785760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f5d565b600e5443101580156136915750601254610100900460ff165b15613786576001600160a01b0383166000908152600f602052604090205460ff161580156136d857506001600160a01b0382166000908152600f602052604090205460ff16155b806136f057506005546001600160a01b038381169116145b8061370557506001600160a01b03821661dead145b6137865760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f5d565b6001600160a01b03831660009081526013602052604090205460ff161561396d576001600160a01b0382166000908152602e602052604090205460ff16156138c1576001600160a01b0383166000908152601460205260409020544210156138225760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f5d565b61382a6115e8565b8111156138965760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f5d565b6138a3426201518061521c565b6001600160a01b03841660009081526014602052604090205561396d565b6001600160a01b0382166000908152602c602052604090205460ff1661396d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f5d565b60125460ff1615613d69576005546001600160a01b038481169116148015906139a457506005546001600160a01b03838116911614155b80156139b857506001600160a01b03821615155b80156139cf57506001600160a01b03821661dead14155b80156139f457506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a1957506001600160a01b0382166000908152602c602052604090205460ff16155b15613d695760175460ff1615613b32576009546001600160a01b03838116911614801590613a555750600a546001600160a01b03838116911614155b15613b3257613a65600243615413565b32600090815260166020526040902054108015613aa35750613a88600243615413565b6001600160a01b038316600090815260166020526040902054105b613b0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f5d565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613b7357506001600160a01b0382166000908152602d602052604090205460ff16155b15613c3f57600654811115613bdb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f5d565b600854613be7836115a4565b613bf1908361521c565b1115613c3a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b613d69565b6001600160a01b0382166000908152602e602052604090205460ff168015613c8057506001600160a01b0383166000908152602d602052604090205460ff16155b15613cea57600754811115613c3a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f5d565b6001600160a01b0382166000908152602d602052604090205460ff16613d6957600854613d16836115a4565b613d20908361521c565b1115613d695760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b6000613d74306115a4565b600b5490915081108015908190613d93575060125462010000900460ff165b8015613da95750600a54600160a01b900460ff16155b8015613dce57506001600160a01b0385166000908152602e602052604090205460ff16155b8015613df357506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e1857506001600160a01b0384166000908152602c602052604090205460ff16155b15613e4657600a805460ff60a01b1916600160a01b179055613e3861431b565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613e7857506001600160a01b0384166000908152602e602052604090205460ff165b8015613e86575060275460ff165b8015613ea15750602854602954613e9d919061521c565b4210155b8015613ec657506001600160a01b0385166000908152602c602052604090205460ff16155b15613ed357613ed36147b6565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f1557506001600160a01b0385166000908152602c602052604090205460ff165b15613f1e575060005b600080821561430657600e5443108015613f5057506001600160a01b0388166000908152602e602052604090205460ff165b8015613f7557506001600160a01b0387166000908152602e602052604090205460ff16155b8015613f9a57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fa857506000601854115b1561414e57600e544310613fcf57600160066000828254613fc99190615413565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140af576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161402890849061521c565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140c091906150f0565b6140ca91906151fa565b9150601854601a54836140dd91906150f0565b6140e791906151fa565b602160008282546140f8919061521c565b909155505060185460195461410d90846150f0565b61411791906151fa565b60206000828254614128919061521c565b9091555050601854601b5461413d90846150f0565b61414791906151fa565b90506142d5565b6001600160a01b0387166000908152602e602052604090205460ff16801561417857506000601c54115b1561420b57612710601c548761418e91906150f0565b61419891906151fa565b9150601c54601e54836141ab91906150f0565b6141b591906151fa565b602160008282546141c6919061521c565b9091555050601c54601d546141db90846150f0565b6141e591906151fa565b602060008282546141f6919061521c565b9091555050601854601f5461413d90846150f0565b6001600160a01b0388166000908152602e602052604090205460ff16801561423557506000601854115b156142d5576127106018548761424b91906150f0565b61425591906151fa565b9150601854601a548361426891906150f0565b61427291906151fa565b60216000828254614283919061521c565b909155505060185460195461429890846150f0565b6142a291906151fa565b602060008282546142b3919061521c565b9091555050601854601b546142c890846150f0565b6142d291906151fa565b90505b81156142f9576142e68830846144ab565b80156142f9576142f93061dead836144ab565b6143038287615413565b95505b6143118888886144ab565b5050505050505050565b6000614326306115a4565b9050600060205460215461433a919061521c565b9050811580614347575080155b15614350575050565b600b5461435e90600a6150f0565b82111561437657600b5461437390600a6150f0565b91505b6000806002836021548661438a91906150f0565b61439491906151fa565b61439e91906151fa565b90506143b26143ad8286615413565b6149d0565b602154479081906000906143c8906002906151fa565b6143d29087615413565b6020546143df90856150f0565b6143e991906151fa565b90506143f58183615413565b60006021819055602055915083158015906144105750600082115b1561441f5761441f8483614b2a565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461446c576040519150601f19603f3d011682016040523d82523d6000602084013e614471565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122188282614600565b6001600160a01b0383166144d15760405162461bcd60e51b8152600401610f5d9061544a565b6001600160a01b0382166144f75760405162461bcd60e51b8152600401610f5d9061548f565b6001600160a01b0383166000908152602081905260409020548181101561456f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f5d565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145a690849061521c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516145f291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f1919061522f565b816000815181106147045761470461524c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106147385761473861524c565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061478090600090869061dead9042906004016154d2565b6000604051808303818588803b15801561479957600080fd5b505af11580156147ad573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061482c9190615314565b90506000614839306115a4565b905060006127106026548461484e91906150f0565b61485891906151fa565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148d6919061532d565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061491190309086906001908190849042906004016153aa565b60408051808303816000875af115801561492f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149539190615426565b5050600083614961306115a4565b61496b9190615413565b90508015614980576149803061dead836144ab565b600061498c8347615413565b9050801561499d5761499d81614663565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a0557614a0561524c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a82919061522f565b81600181518110614a9557614a9561524c565b6001600160a01b039283166020918202929092010152600954614abb9130911684613425565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614af4908590600090869030904290600401615507565b600060405180830381600087803b158015614b0e57600080fd5b505af1158015614b22573d6000803e3d6000fd5b505050505050565b600954614b429030906001600160a01b031684613425565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614b7f90309087906000908190849042906004016153aa565b60606040518083038185885af1158015614b9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bc291906153e5565b5050505050565b600060208083528351808285015260005b81811015614bf657858101830151858201604001528201614bda565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614c2c57600080fd5b50565b60008060408385031215614c4257600080fd5b8235614c4d81614c17565b946020939093013593505050565b600060208284031215614c6d57600080fd5b8135614c7881614c17565b9392505050565b600060208284031215614c9157600080fd5b5035919050565b600080600060608486031215614cad57600080fd5b8335614cb881614c17565b92506020840135614cc881614c17565b929592945050506040919091013590565b8015158114614c2c57600080fd5b600080600060608486031215614cfc57600080fd5b83359250602084013591506040840135614d1581614cd9565b809150509250925092565b60008060408385031215614d3357600080fd5b8235614d3e81614c17565b91506020830135614d4e81614cd9565b809150509250929050565b600080600060608486031215614d6e57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d9857600080fd5b8235614da381614c17565b91506020830135614d4e81614c17565b60008083601f840112614dc557600080fd5b50813567ffffffffffffffff811115614ddd57600080fd5b6020830191508360208260051b8501011115614df857600080fd5b9250929050565b600080600060408486031215614e1457600080fd5b833567ffffffffffffffff811115614e2b57600080fd5b614e3786828701614db3565b9094509250506020840135614d1581614cd9565b600081518084526020808501945080840160005b83811015614e845781516001600160a01b031687529582019590820190600101614e5f565b509495945050505050565b602081526000614c786020830184614e4b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614ee157614ee1614ea2565b604052919050565b600067ffffffffffffffff821115614f0357614f03614ea2565b5060051b60200190565b600082601f830112614f1e57600080fd5b81356020614f33614f2e83614ee9565b614eb8565b82815260059290921b84018101918181019086841115614f5257600080fd5b8286015b84811015614f6d5780358352918301918301614f56565b509695505050505050565b600080600080600060808688031215614f9057600080fd5b853567ffffffffffffffff80821115614fa857600080fd5b614fb489838a01614db3565b9097509550602091508782013581811115614fce57600080fd5b8801601f81018a13614fdf57600080fd5b8035614fed614f2e82614ee9565b81815260059190911b8201840190848101908c83111561500c57600080fd5b928501925b8284101561503357833561502481614c17565b82529285019290850190615011565b9750505050604088013591508082111561504c57600080fd5b5061505988828901614f0d565b95989497509295606001359392505050565b600181811c9082168061507f57607f821691505b60208210810361509f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f2d57610f2d6150da565b600181815b80851115615142578160001904821115615128576151286150da565b8085161561513557918102915b93841c939080029061510c565b509250929050565b60008261515957506001610f2d565b8161516657506000610f2d565b816001811461517c5760028114615186576151a2565b6001915050610f2d565b60ff841115615197576151976150da565b50506001821b610f2d565b5060208310610133831016604e8410600b84101617156151c5575081810a610f2d565b6151cf8383615107565b80600019048211156151e3576151e36150da565b029392505050565b6000614c7860ff84168361514a565b60008261521757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f2d57610f2d6150da565b60006020828403121561524157600080fd5b8151614c7881614c17565b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061527b6040830184614e4b565b949350505050565b6000602080838503121561529657600080fd5b825167ffffffffffffffff8111156152ad57600080fd5b8301601f810185136152be57600080fd5b80516152cc614f2e82614ee9565b81815260059190911b820183019083810190878311156152eb57600080fd5b928401925b82841015615309578351825292840192908401906152f0565b979650505050505050565b60006020828403121561532657600080fd5b5051919050565b60006020828403121561533f57600080fd5b8151614c7881614cd9565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6000600182016153a3576153a36150da565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156153fa57600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f2d57610f2d6150da565b6000806040838503121561543957600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006154eb6080830186614e4b565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061552660a0830186614e4b565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220a0865d73b453f9669da82f4177653f8fed1b30de2788b02fa3bf68bb187efa9e64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104b95760003560e01c80638da5cb5b1161026b578063c7c61e2c1161014f578063eb472fc4116100c1578063f5648a4f11610085578063f5648a4f14610ddf578063f637434214610df4578063f8b45b0514610e0a578063f9f92be414610e20578063fd361d0e14610e50578063fe72b27a14610e6a57600080fd5b8063eb472fc414610d5d578063ee40166e14610d7d578063ee44b44e14610d93578063f11a24d314610da9578063f2fde38b14610dbf57600080fd5b8063dc3f0d0f11610113578063dc3f0d0f14610c96578063dd62ed3e14610cb6578063e2f4560514610cfc578063e5d8cde814610d12578063e71dc3f514610d32578063e884f26014610d4857600080fd5b8063c7c61e2c14610c1b578063c876d0b914610c30578063cc2ffe7c14610c4a578063d257b34f14610c60578063d85ba06314610c8057600080fd5b8063a9059cbb116101e8578063bbc0c742116101ac578063bbc0c74214610b5c578063bd5fb92014610b7b578063befd2fac14610b9b578063c024666814610bbb578063c17b5b8c14610bdb578063c5f956af14610bfb57600080fd5b8063a9059cbb14610ab0578063acee28d114610ad0578063adb873bd14610ae6578063afd6ce6114610afc578063b62496f514610b2c57600080fd5b80639e93ad8e1161022f5780639e93ad8e14610a385780639ec22c0e14610a4e578063a457c2d714610a64578063a4c82a0014610a84578063a62068ce14610a9a57600080fd5b80638da5cb5b146109a35780638e38b7cb146109c157806395d89b41146109e15780639a5bd2dd146109f65780639a7a23d614610a1857600080fd5b806358a6d5311161039d578063713d09741161030f578063763cef49116102d3578063763cef4914610902578063783102eb146109175780638095d5641461092d57806382aa7c681461094d5780638366e79a1461096d57806388e765ff1461098d57600080fd5b8063713d097414610883578063715018a614610898578063730c1888146108ad578063751039fc146108cd5780637571336a146108e257600080fd5b80636a486a8e116103615780636a486a8e146107ec5780636b0a894c146108025780636b2fb124146108185780636ddd17131461082e57806370a082311461084e578063712c29851461086e57600080fd5b806358a6d5311461075c5780635c068a8c146107735780635c3352d3146107895780636605bfda146107b657806366d602ae146107d657600080fd5b80631a8145bb116104365780632e82f1a0116103fa5780632e82f1a0146106b7578063313ce567146106d157806339509351146106ed578063452ed4f11461070d5780634a62bb651461072d57806351f205e41461074757600080fd5b80631a8145bb1461062b5780631c499ab01461064157806323b872dd146106615780632be32b61146106815780632c3e486c146106a157600080fd5b80631805805b1161047d5780631805805b146105a857806318160ddd146105ca578063184c16c5146105df57806318e1c123146105f5578063199ffc721461061557600080fd5b8063058054c9146104c557806306fdde03146104ee5780630758d92414610510578063095ea7b31461054857806310d5de531461057857600080fd5b366104c057005b600080fd5b3480156104d157600080fd5b506104db60225481565b6040519081526020015b60405180910390f35b3480156104fa57600080fd5b50610503610e8a565b6040516104e59190614bc9565b34801561051c57600080fd5b50600954610530906001600160a01b031681565b6040516001600160a01b0390911681526020016104e5565b34801561055457600080fd5b50610568610563366004614c2f565b610f1c565b60405190151581526020016104e5565b34801561058457600080fd5b50610568610593366004614c5b565b602d6020526000908152604090205460ff1681565b3480156105b457600080fd5b506105c86105c3366004614c5b565b610f33565b005b3480156105d657600080fd5b506002546104db565b3480156105eb57600080fd5b506104db602a5481565b34801561060157600080fd5b506105c8610610366004614c7f565b610ff2565b34801561062157600080fd5b506104db60265481565b34801561063757600080fd5b506104db60215481565b34801561064d57600080fd5b506105c861065c366004614c7f565b6110c6565b34801561066d57600080fd5b5061056861067c366004614c98565b6111d2565b34801561068d57600080fd5b506105c861069c366004614c7f565b61127c565b3480156106ad57600080fd5b506104db60285481565b3480156106c357600080fd5b506027546105689060ff1681565b3480156106dd57600080fd5b50604051601281526020016104e5565b3480156106f957600080fd5b50610568610708366004614c2f565b611389565b34801561071957600080fd5b50600a54610530906001600160a01b031681565b34801561073957600080fd5b506012546105689060ff1681565b34801561075357600080fd5b506105c86113c5565b34801561076857600080fd5b50600e544310610568565b34801561077f57600080fd5b506104db60195481565b34801561079557600080fd5b506104db6107a4366004614c5b565b60146020526000908152604090205481565b3480156107c257600080fd5b506105c86107d1366004614c5b565b6114ce565b3480156107e257600080fd5b506104db60075481565b3480156107f857600080fd5b506104db601c5481565b34801561080e57600080fd5b506104db60115481565b34801561082457600080fd5b506104db601d5481565b34801561083a57600080fd5b506012546105689062010000900460ff1681565b34801561085a57600080fd5b506104db610869366004614c5b565b6115a4565b34801561087a57600080fd5b506104db6115bf565b34801561088f57600080fd5b506104db6115e8565b3480156108a457600080fd5b506105c86117e4565b3480156108b957600080fd5b506105c86108c8366004614ce7565b611858565b3480156108d957600080fd5b506105c8611981565b3480156108ee57600080fd5b506105c86108fd366004614d20565b6119f8565b34801561090e57600080fd5b506105c8611ac0565b34801561092357600080fd5b506104db60255481565b34801561093957600080fd5b506105c8610948366004614d59565b611c61565b34801561095957600080fd5b506105c8610968366004614c7f565b611d21565b34801561097957600080fd5b50610568610988366004614d85565b611e15565b34801561099957600080fd5b506104db60065481565b3480156109af57600080fd5b506005546001600160a01b0316610530565b3480156109cd57600080fd5b506105c86109dc366004614dff565b61204f565b3480156109ed57600080fd5b506105036120f0565b348015610a0257600080fd5b50610a0b6120ff565b6040516104e59190614e8f565b348015610a2457600080fd5b506105c8610a33366004614d20565b612160565b348015610a4457600080fd5b506104db61271081565b348015610a5a57600080fd5b506104db602b5481565b348015610a7057600080fd5b50610568610a7f366004614c2f565b612254565b348015610a9057600080fd5b506104db60295481565b348015610aa657600080fd5b506104db600e5481565b348015610abc57600080fd5b50610568610acb366004614c2f565b6122ed565b348015610adc57600080fd5b506104db60155481565b348015610af257600080fd5b506104db601f5481565b348015610b0857600080fd5b50610568610b17366004614c5b565b60136020526000908152604090205460ff1681565b348015610b3857600080fd5b50610568610b47366004614c5b565b602e6020526000908152604090205460ff1681565b348015610b6857600080fd5b5060125461056890610100900460ff1681565b348015610b8757600080fd5b506105c8610b96366004614dff565b6122fa565b348015610ba757600080fd5b506105c8610bb6366004614c7f565b612400565b348015610bc757600080fd5b506105c8610bd6366004614d20565b612536565b348015610be757600080fd5b506105c8610bf6366004614d59565b6125bf565b348015610c0757600080fd5b50600c54610530906001600160a01b031681565b348015610c2757600080fd5b506105c861267a565b348015610c3c57600080fd5b506017546105689060ff1681565b348015610c5657600080fd5b506104db60205481565b348015610c6c57600080fd5b506105c8610c7b366004614c7f565b6126e3565b348015610c8c57600080fd5b506104db60185481565b348015610ca257600080fd5b506105c8610cb1366004614c7f565b61282e565b348015610cc257600080fd5b506104db610cd1366004614d85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d0857600080fd5b506104db600b5481565b348015610d1e57600080fd5b506105c8610d2d366004614f78565b61293c565b348015610d3e57600080fd5b506104db601b5481565b348015610d5457600080fd5b506105c8612f74565b348015610d6957600080fd5b50610530610d78366004614c7f565b612faa565b348015610d8957600080fd5b506104db600d5481565b348015610d9f57600080fd5b506104db60235481565b348015610db557600080fd5b506104db601a5481565b348015610dcb57600080fd5b506105c8610dda366004614c5b565b612fd4565b348015610deb57600080fd5b506105c86130bf565b348015610e0057600080fd5b506104db601e5481565b348015610e1657600080fd5b506104db60085481565b348015610e2c57600080fd5b50610568610e3b366004614c5b565b600f6020526000908152604090205460ff1681565b348015610e5c57600080fd5b506024546105689060ff1681565b348015610e7657600080fd5b506105c8610e85366004614c7f565b61312b565b606060038054610e999061506b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec59061506b565b8015610f125780601f10610ee757610100808354040283529160200191610f12565b820191906000526020600020905b815481529060010190602001808311610ef557829003601f168201915b5050505050905090565b6000610f29338484613425565b5060015b92915050565b6005546001600160a01b03163314610f665760405162461bcd60e51b8152600401610f5d906150a5565b60405180910390fd5b601254610100900460ff1615610fd05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610f5d565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461101c5760405162461bcd60e51b8152600401610f5d906150a5565b600a811015801561102f575061c3508111155b61107b5760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e3120616e642035303020424e426044820152606401610f5d565b61108c81662386f26fc100006150f0565b6015556040518181527f0320a651094de4f5fc35c0f1c336811904e8f465b6599a93eb0dec4919b8fec5906020015b60405180910390a150565b6005546001600160a01b031633146110f05760405162461bcd60e51b8152600401610f5d906150a5565b6110fc6012600a6151eb565b606461110760025490565b6111129060016150f0565b61111c91906151fa565b61112691906151fa565b8110156111875760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f776044820152686572207468616e202560b81b6064820152608401610f5d565b6111936012600a6151eb565b61119d90826150f0565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110bb565b60006111df848484613549565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112645760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f5d565b6112718533858403613425565b506001949350505050565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610f5d906150a5565b6112b26012600a6151eb565b6103e86112be60025490565b6112c99060016150f0565b6112d391906151fa565b6112dd91906151fa565b81101561133e5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f5d565b61134a6012600a6151eb565b61135490826150f0565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020016110bb565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f299185906113c090869061521c565b613425565b6005546001600160a01b031633146113ef5760405162461bcd60e51b8152600401610f5d906150a5565b600b546113fb306115a4565b1015611471576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f5d565b600a805460ff60a01b1916600160a01b17905561148c61431b565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146114f85760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b03811661155a5760405162461bcd60e51b8152602060048201526024808201527f5f74726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610f5d565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6001600160a01b031660009081526020819052604090205490565b60245460009060ff16156115e2576023546022546115dd919061521c565b905090565b50600090565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a919061522f565b8160008151811061168d5761168d61524c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106116c1576116c161524c565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460155460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611730918690600401615262565b600060405180830381865afa15801561174d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117759190810190615283565b90506064601d54601e54611789919061521c565b8260018151811061179c5761179c61524c565b60200260200101516117ae91906150f0565b6117b891906151fa565b816001815181106117cb576117cb61524c565b60200260200101516117dd919061521c565b9250505090565b6005546001600160a01b0316331461180e5760405162461bcd60e51b8152600401610f5d906150a5565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118825760405162461bcd60e51b8152600401610f5d906150a5565b6102588310156118f05760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f5d565b6103e88211158015611900575060015b6119655760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f5d565b6028929092556026556027805460ff1916911515919091179055565b6005546001600160a01b031633146119ab5760405162461bcd60e51b8152600401610f5d906150a5565b6012805460ff199081169091556017805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a225760405162461bcd60e51b8152600401610f5d906150a5565b80611a9557600a546001600160a01b0390811690831603611a955760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f5d565b6001600160a01b03919091166000908152602d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611aea5760405162461bcd60e51b8152600401610f5d906150a5565b611af26115bf565b4210158015611b0857506000611b066115bf565b115b611b4d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103932b8bab2b9ba1030b732103bb0b4ba1760511b6044820152606401610f5d565b600060228190556024805460ff19168155602554600a546040516370a0823160e01b81523060048201526064936001600160a01b03909216916370a082319101602060405180830381865afa158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce9190615314565b611bd891906150f0565b611be291906151fa565b6000602555600a5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d919061532d565b5050565b6005546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610f5d906150a5565b6019839055601a829055601b81905580611ca5838561521c565b611caf919061521c565b6018556064611cc1612710601e6150f0565b611ccb91906151fa565b6018541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610f5d565b505050565b6005546001600160a01b03163314611d4b5760405162461bcd60e51b8152600401610f5d906150a5565b601254610100900460ff1615611da35760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f5d565b6032811115611dc45760405162461bcd60e51b8152600401610f5d9061534a565b6012805462ffff0019166201010017905543600d819055611de690829061521c565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611e425760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b038316611e985760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f5d565b6001600160a01b03831630141580611eb85750601254610100900460ff16155b611f215760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f5d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8c9190615314565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611fdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612003919061532d565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146120795760405162461bcd60e51b8152600401610f5d906150a5565b60005b828110156120ea5781600f600086868581811061209b5761209b61524c565b90506020020160208101906120b09190614c5b565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806120e281615391565b91505061207c565b50505050565b606060048054610e999061506b565b60606010805480602002602001604051908101604052809291908181526020018280548015610f1257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612139575050505050905090565b6005546001600160a01b0316331461218a5760405162461bcd60e51b8152600401610f5d906150a5565b600a546001600160a01b039081169083160361220e5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f5d565b612218828261447d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122d65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f5d565b6122e33385858403613425565b5060019392505050565b6000610f29338484613549565b6005546001600160a01b031633146123245760405162461bcd60e51b8152600401610f5d906150a5565b60005b828110156120ea5781602c60008686858181106123465761234661524c565b905060200201602081019061235b9190614c5b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106123955761239561524c565b90506020020160208101906123aa9190614c5b565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7836040516123e6911515815260200190565b60405180910390a2806123f881615391565b915050612327565b6005546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610f5d906150a5565b60245460ff16156124975760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f74207265717565737420616761696e20756e74696c206669727374604482015270103932b8bab2b9ba1034b99037bb32b91760791b6064820152608401610f5d565b606481111580156124a85750600081115b6124f45760405162461bcd60e51b815260206004820152601a60248201527f4e65656420746f20736574206265747765656e20312d313030250000000000006044820152606401610f5d565b426022556024805460ff1916600117905560258190556040517fd99a77b2f3951cd076e75814e44db497e6abc203dd251329da0b62c288f9f48b90600090a150565b6005546001600160a01b031633146125605760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b0382166000818152602c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146125e95760405162461bcd60e51b8152600401610f5d906150a5565b601d839055601e829055601f81905580612603838561521c565b61260d919061521c565b601c55606461261f612710601e6150f0565b61262991906151fa565b601c541115611d1c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f5d565b6005546001600160a01b031633146126a45760405162461bcd60e51b8152600401610f5d906150a5565b6024805460ff191690556000602581905560228190556040517ffbcc1c208c9c4d1d9f557267b55c5ae316e74ce676a0db72ef18c6d5f5767c619190a1565b6005546001600160a01b0316331461270d5760405162461bcd60e51b8152600401610f5d906150a5565b620186a061271a60025490565b6127259060016150f0565b61272f91906151fa565b81101561279c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f5d565b6103e86127a860025490565b6127b39060016150f0565b6127bd91906151fa565b8111156128295760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f5d565b600b55565b6005546001600160a01b031633146128585760405162461bcd60e51b8152600401610f5d906150a5565b6128646012600a6151eb565b6103e861287060025490565b61287b9060016150f0565b61288591906151fa565b61288f91906151fa565b8110156128f15760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f5d565b6128fd6012600a6151eb565b61290790826150f0565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110bb565b6005546001600160a01b031633146129665760405162461bcd60e51b8152600401610f5d906150a5565b601254610100900460ff16156129d25760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f5d565b603281106129f25760405162461bcd60e51b8152600401610f5d9061534a565b8151835114612a435760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f5d565b61012c835110612ab45760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f5d565b60005b84811015612b26576001602c6000888885818110612ad757612ad761524c565b9050602002016020810190612aec9190614c5b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612b1e81615391565b915050612ab7565b5060005b8351811015612bf4576000848281518110612b4757612b4761524c565b6020908102919091018101516001600160a01b038116600090815260139092526040909120805460ff191660011790559050612b86426201518061521c565b6001600160a01b038216600090815260146020526040812091909155612bae6012600a6151eb565b858481518110612bc057612bc061524c565b6020026020010151612bd291906150f0565b9050612bdf3383836144ab565b50508080612bec90615391565b915050612b2a565b506012805462ffff0019166201010017905543600d819055612c1790829061521c565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cba919061522f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d40919061522f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db1919061522f565b600a80546001600160a01b0319166001600160a01b03929092169182179055612ddb906001614600565b600a54612df2906001600160a01b0316600161447d565b60004711612e4e5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f5d565b6000612e59306115a4565b11612eb55760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f5d565b600954612ed09030906001600160a01b03166113c0826115a4565b6009546001600160a01b031663f305d7194730612eec816115a4565b60008030426040518863ffffffff1660e01b8152600401612f12969594939291906153aa565b60606040518083038185885af1158015612f30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f5591906153e5565b50506126ac60198190556018819055601d819055601c55505050505050565b6005546001600160a01b03163314612f9e5760405162461bcd60e51b8152600401610f5d906150a5565b6017805460ff19169055565b60108181548110612fba57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612ffe5760405162461bcd60e51b8152600401610f5d906150a5565b6001600160a01b0381166130635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f5d565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146130e95760405162461bcd60e51b8152600401610f5d906150a5565b604051600090339047908381818185875af1925050503d80600081146120ea576040519150601f19603f3d011682016040523d82523d6000602084013e6120ea565b6005546001600160a01b031633146131555760405162461bcd60e51b8152600401610f5d906150a5565b6107d08111156131c55760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20323025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f5d565b602a546131d29042615413565b602b5411156132135760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f5d565b42602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132849190615314565b90506000613291306115a4565b905060006127106132a285856150f0565b6132ac91906151fa565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a919061532d565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061336590309086906001908190849042906004016153aa565b60408051808303816000875af1158015613383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a79190615426565b50506000836133b5306115a4565b6133bf9190615413565b905080156133d4576133d43061dead836144ab565b60006133e08347615413565b905080156133f1576133f181614663565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166134875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f5d565b6001600160a01b0382166134e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f5d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661356f5760405162461bcd60e51b8152600401610f5d9061544a565b6001600160a01b0382166135955760405162461bcd60e51b8152600401610f5d9061548f565b600081116135e55760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f5d565b601254610100900460ff16613678576001600160a01b0383166000908152602c602052604090205460ff168061363357506001600160a01b0382166000908152602c602052604090205460ff165b6136785760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f5d565b600e5443101580156136915750601254610100900460ff165b15613786576001600160a01b0383166000908152600f602052604090205460ff161580156136d857506001600160a01b0382166000908152600f602052604090205460ff16155b806136f057506005546001600160a01b038381169116145b8061370557506001600160a01b03821661dead145b6137865760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f5d565b6001600160a01b03831660009081526013602052604090205460ff161561396d576001600160a01b0382166000908152602e602052604090205460ff16156138c1576001600160a01b0383166000908152601460205260409020544210156138225760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610f5d565b61382a6115e8565b8111156138965760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610f5d565b6138a3426201518061521c565b6001600160a01b03841660009081526014602052604090205561396d565b6001600160a01b0382166000908152602c602052604090205460ff1661396d5760405162461bcd60e51b815260206004820152605560248201527f507269766174652073616c652063616e6e6f74207472616e7366657220616e6460448201527f206d7573742073656c6c206f6e6c79206f72207472616e7366657220746f2061606482015274103bb434ba32b634b9ba32b21030b2323932b9b99760591b608482015260a401610f5d565b60125460ff1615613d69576005546001600160a01b038481169116148015906139a457506005546001600160a01b03838116911614155b80156139b857506001600160a01b03821615155b80156139cf57506001600160a01b03821661dead14155b80156139f457506001600160a01b0383166000908152602c602052604090205460ff16155b8015613a1957506001600160a01b0382166000908152602c602052604090205460ff16155b15613d695760175460ff1615613b32576009546001600160a01b03838116911614801590613a555750600a546001600160a01b03838116911614155b15613b3257613a65600243615413565b32600090815260166020526040902054108015613aa35750613a88600243615413565b6001600160a01b038316600090815260166020526040902054105b613b0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f5d565b3260009081526016602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152602e602052604090205460ff168015613b7357506001600160a01b0382166000908152602d602052604090205460ff16155b15613c3f57600654811115613bdb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f5d565b600854613be7836115a4565b613bf1908361521c565b1115613c3a5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b613d69565b6001600160a01b0382166000908152602e602052604090205460ff168015613c8057506001600160a01b0383166000908152602d602052604090205460ff16155b15613cea57600754811115613c3a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f5d565b6001600160a01b0382166000908152602d602052604090205460ff16613d6957600854613d16836115a4565b613d20908361521c565b1115613d695760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08195e18d95959081b585e081dd85b1b195d60421b6044820152606401610f5d565b6000613d74306115a4565b600b5490915081108015908190613d93575060125462010000900460ff165b8015613da95750600a54600160a01b900460ff16155b8015613dce57506001600160a01b0385166000908152602e602052604090205460ff16155b8015613df357506001600160a01b0385166000908152602c602052604090205460ff16155b8015613e1857506001600160a01b0384166000908152602c602052604090205460ff16155b15613e4657600a805460ff60a01b1916600160a01b179055613e3861431b565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613e7857506001600160a01b0384166000908152602e602052604090205460ff165b8015613e86575060275460ff165b8015613ea15750602854602954613e9d919061521c565b4210155b8015613ec657506001600160a01b0385166000908152602c602052604090205460ff16155b15613ed357613ed36147b6565b6001600160a01b0385166000908152602c602052604090205460019060ff1680613f1557506001600160a01b0385166000908152602c602052604090205460ff165b15613f1e575060005b600080821561430657600e5443108015613f5057506001600160a01b0388166000908152602e602052604090205460ff165b8015613f7557506001600160a01b0387166000908152602e602052604090205460ff16155b8015613f9a57506001600160a01b0387166000908152602c602052604090205460ff16155b8015613fa857506000601854115b1561414e57600e544310613fcf57600160066000828254613fc99190615413565b90915550505b6001600160a01b0387166000908152600f602052604090205460ff166140af576001600160a01b0387166000908152600f60205260408120805460ff19166001908117909155601180549192909161402890849061521c565b9091555050601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0389169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b612710601854876140c091906150f0565b6140ca91906151fa565b9150601854601a54836140dd91906150f0565b6140e791906151fa565b602160008282546140f8919061521c565b909155505060185460195461410d90846150f0565b61411791906151fa565b60206000828254614128919061521c565b9091555050601854601b5461413d90846150f0565b61414791906151fa565b90506142d5565b6001600160a01b0387166000908152602e602052604090205460ff16801561417857506000601c54115b1561420b57612710601c548761418e91906150f0565b61419891906151fa565b9150601c54601e54836141ab91906150f0565b6141b591906151fa565b602160008282546141c6919061521c565b9091555050601c54601d546141db90846150f0565b6141e591906151fa565b602060008282546141f6919061521c565b9091555050601854601f5461413d90846150f0565b6001600160a01b0388166000908152602e602052604090205460ff16801561423557506000601854115b156142d5576127106018548761424b91906150f0565b61425591906151fa565b9150601854601a548361426891906150f0565b61427291906151fa565b60216000828254614283919061521c565b909155505060185460195461429890846150f0565b6142a291906151fa565b602060008282546142b3919061521c565b9091555050601854601b546142c890846150f0565b6142d291906151fa565b90505b81156142f9576142e68830846144ab565b80156142f9576142f93061dead836144ab565b6143038287615413565b95505b6143118888886144ab565b5050505050505050565b6000614326306115a4565b9050600060205460215461433a919061521c565b9050811580614347575080155b15614350575050565b600b5461435e90600a6150f0565b82111561437657600b5461437390600a6150f0565b91505b6000806002836021548661438a91906150f0565b61439491906151fa565b61439e91906151fa565b90506143b26143ad8286615413565b6149d0565b602154479081906000906143c8906002906151fa565b6143d29087615413565b6020546143df90856150f0565b6143e991906151fa565b90506143f58183615413565b60006021819055602055915083158015906144105750600082115b1561441f5761441f8483614b2a565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461446c576040519150601f19603f3d011682016040523d82523d6000602084013e614471565b606091505b50505050505050505050565b6001600160a01b0382166000908152602e60205260409020805460ff19168215151790556122188282614600565b6001600160a01b0383166144d15760405162461bcd60e51b8152600401610f5d9061544a565b6001600160a01b0382166144f75760405162461bcd60e51b8152600401610f5d9061548f565b6001600160a01b0383166000908152602081905260409020548181101561456f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f5d565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906145a690849061521c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516145f291815260200190565b60405180910390a350505050565b6001600160a01b0382166000818152602d6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156146cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f1919061522f565b816000815181106147045761470461524c565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106147385761473861524c565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061478090600090869061dead9042906004016154d2565b6000604051808303818588803b15801561479957600080fd5b505af11580156147ad573d6000803e3d6000fd5b50505050505050565b426029819055602b55600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015614808573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061482c9190615314565b90506000614839306115a4565b905060006127106026548461484e91906150f0565b61485891906151fa565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156148b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148d6919061532d565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061491190309086906001908190849042906004016153aa565b60408051808303816000875af115801561492f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149539190615426565b5050600083614961306115a4565b61496b9190615413565b90508015614980576149803061dead836144ab565b600061498c8347615413565b9050801561499d5761499d81614663565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614a0557614a0561524c565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a82919061522f565b81600181518110614a9557614a9561524c565b6001600160a01b039283166020918202929092010152600954614abb9130911684613425565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790614af4908590600090869030904290600401615507565b600060405180830381600087803b158015614b0e57600080fd5b505af1158015614b22573d6000803e3d6000fd5b505050505050565b600954614b429030906001600160a01b031684613425565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d719908390614b7f90309087906000908190849042906004016153aa565b60606040518083038185885af1158015614b9d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614bc291906153e5565b5050505050565b600060208083528351808285015260005b81811015614bf657858101830151858201604001528201614bda565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114614c2c57600080fd5b50565b60008060408385031215614c4257600080fd5b8235614c4d81614c17565b946020939093013593505050565b600060208284031215614c6d57600080fd5b8135614c7881614c17565b9392505050565b600060208284031215614c9157600080fd5b5035919050565b600080600060608486031215614cad57600080fd5b8335614cb881614c17565b92506020840135614cc881614c17565b929592945050506040919091013590565b8015158114614c2c57600080fd5b600080600060608486031215614cfc57600080fd5b83359250602084013591506040840135614d1581614cd9565b809150509250925092565b60008060408385031215614d3357600080fd5b8235614d3e81614c17565b91506020830135614d4e81614cd9565b809150509250929050565b600080600060608486031215614d6e57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d9857600080fd5b8235614da381614c17565b91506020830135614d4e81614c17565b60008083601f840112614dc557600080fd5b50813567ffffffffffffffff811115614ddd57600080fd5b6020830191508360208260051b8501011115614df857600080fd5b9250929050565b600080600060408486031215614e1457600080fd5b833567ffffffffffffffff811115614e2b57600080fd5b614e3786828701614db3565b9094509250506020840135614d1581614cd9565b600081518084526020808501945080840160005b83811015614e845781516001600160a01b031687529582019590820190600101614e5f565b509495945050505050565b602081526000614c786020830184614e4b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614ee157614ee1614ea2565b604052919050565b600067ffffffffffffffff821115614f0357614f03614ea2565b5060051b60200190565b600082601f830112614f1e57600080fd5b81356020614f33614f2e83614ee9565b614eb8565b82815260059290921b84018101918181019086841115614f5257600080fd5b8286015b84811015614f6d5780358352918301918301614f56565b509695505050505050565b600080600080600060808688031215614f9057600080fd5b853567ffffffffffffffff80821115614fa857600080fd5b614fb489838a01614db3565b9097509550602091508782013581811115614fce57600080fd5b8801601f81018a13614fdf57600080fd5b8035614fed614f2e82614ee9565b81815260059190911b8201840190848101908c83111561500c57600080fd5b928501925b8284101561503357833561502481614c17565b82529285019290850190615011565b9750505050604088013591508082111561504c57600080fd5b5061505988828901614f0d565b95989497509295606001359392505050565b600181811c9082168061507f57607f821691505b60208210810361509f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610f2d57610f2d6150da565b600181815b80851115615142578160001904821115615128576151286150da565b8085161561513557918102915b93841c939080029061510c565b509250929050565b60008261515957506001610f2d565b8161516657506000610f2d565b816001811461517c5760028114615186576151a2565b6001915050610f2d565b60ff841115615197576151976150da565b50506001821b610f2d565b5060208310610133831016604e8410600b84101617156151c5575081810a610f2d565b6151cf8383615107565b80600019048211156151e3576151e36150da565b029392505050565b6000614c7860ff84168361514a565b60008261521757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f2d57610f2d6150da565b60006020828403121561524157600080fd5b8151614c7881614c17565b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061527b6040830184614e4b565b949350505050565b6000602080838503121561529657600080fd5b825167ffffffffffffffff8111156152ad57600080fd5b8301601f810185136152be57600080fd5b80516152cc614f2e82614ee9565b81815260059190911b820183019083810190878311156152eb57600080fd5b928401925b82841015615309578351825292840192908401906152f0565b979650505050505050565b60006020828403121561532657600080fd5b5051919050565b60006020828403121561533f57600080fd5b8151614c7881614cd9565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2035360cc1b606082015260800190565b6000600182016153a3576153a36150da565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156153fa57600080fd5b8351925060208401519150604084015190509250925092565b81810381811115610f2d57610f2d6150da565b6000806040838503121561543957600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006154eb6080830186614e4b565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061552660a0830186614e4b565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220a0865d73b453f9669da82f4177653f8fed1b30de2788b02fa3bf68bb187efa9e64736f6c63430008110033

Deployed Bytecode Sourcemap

9665:29104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11159:41;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;11159:41:0;;;;;;;;4066:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9807:27::-;;;;;;;;;;-1:-1:-1;9807:27:0;;;;-1:-1:-1;;;;;9807:27:0;;;;;;-1:-1:-1;;;;;931:32:1;;;913:51;;901:2;886:18;9807:27:0;749:221:1;4980:169:0;;;;;;;;;;-1:-1:-1;4980:169:0;;;;;:::i;:::-;;:::i;:::-;;;1596:14:1;;1589:22;1571:41;;1559:2;1544:18;4980:169:0;1431:187:1;11780:64:0;;;;;;;;;;-1:-1:-1;11780:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16699:194;;;;;;;;;;-1:-1:-1;16699:194:0;;;;;:::i;:::-;;:::i;:::-;;4387:108;;;;;;;;;;-1:-1:-1;4475:12:0;;4387:108;;11537:47;;;;;;;;;;;;;;;;31227:247;;;;;;;;;;-1:-1:-1;31227:247:0;;;;;:::i;:::-;;:::i;11349:35::-;;;;;;;;;;;;;;;;11117:33;;;;;;;;;;;;;;;;17683:288;;;;;;;;;;-1:-1:-1;17683:288:0;;;;;:::i;:::-;;:::i;5157:492::-;;;;;;;;;;-1:-1:-1;5157:492:0;;;;;:::i;:::-;;:::i;17068:295::-;;;;;;;;;;-1:-1:-1;17068:295:0;;;;;:::i;:::-;;:::i;11443:45::-;;;;;;;;;;;;;;;;11403:33;;;;;;;;;;-1:-1:-1;11403:33:0;;;;;;;;4286:93;;;;;;;;;;-1:-1:-1;4286:93:0;;4369:2;2663:36:1;;2651:2;2636:18;4286:93:0;2521:184:1;5657:215:0;;;;;;;;;;-1:-1:-1;5657:215:0;;;;;:::i;:::-;;:::i;9841:21::-;;;;;;;;;;-1:-1:-1;9841:21:0;;;;-1:-1:-1;;;;;9841:21:0;;;10215:33;;;;;;;;;;-1:-1:-1;10215:33:0;;;;;;;;30490:312;;;;;;;;;;;;;:::i;26972:120::-;;;;;;;;;;-1:-1:-1;27066:18:0;;27051:12;:33;26972:120;;10774:29;;;;;;;;;;;;;;;;10393:61;;;;;;;;;;-1:-1:-1;10393:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;30157:281;;;;;;;;;;-1:-1:-1;30157:281:0;;;;;:::i;:::-;;:::i;9739:28::-;;;;;;;;;;;;;;;;10881;;;;;;;;;;;;;;;;10181:25;;;;;;;;;;;;;;;;10916:30;;;;;;;;;;;;;;;;10295:31;;;;;;;;;;-1:-1:-1;10295:31:0;;;;;;;;;;;4503:127;;;;;;;;;;-1:-1:-1;4503:127:0;;;;;:::i;:::-;;:::i;37762:281::-;;;;;;;;;;;;;:::i;30810:409::-;;;;;;;;;;;;;:::i;8147:150::-;;;;;;;;;;;;;:::i;33790:447::-;;;;;;;;;;-1:-1:-1;33790:447:0;;;;;:::i;:::-;;:::i;16136:233::-;;;;;;;;;;;;;:::i;18619:260::-;;;;;;;;;;-1:-1:-1;18619:260:0;;;;;:::i;:::-;;:::i;38051:487::-;;;;;;;;;;;;;:::i;11309:31::-;;;;;;;;;;;;;;;;19432:389;;;;;;;;;;-1:-1:-1;19432:389:0;;;;;:::i;:::-;;:::i;15653:427::-;;;;;;;;;;-1:-1:-1;15653:427:0;;;;;:::i;:::-;;:::i;29421:498::-;;;;;;;;;;-1:-1:-1;29421:498:0;;;;;:::i;:::-;;:::i;9705:27::-;;;;;;;;;;;;;;;;7933:79;;;;;;;;;;-1:-1:-1;7998:6:0;;-1:-1:-1;;;;;7998:6:0;7933:79;;16488:203;;;;;;;;;;-1:-1:-1;16488:203:0;;;;;:::i;:::-;;:::i;4174:104::-;;;;;;;;;;;;;:::i;16377:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18887:293::-;;;;;;;;;;-1:-1:-1;18887:293:0;;;;;:::i;:::-;;:::i;11026:43::-;;;;;;;;;;;;11064:5;11026:43;;11591:35;;;;;;;;;;;;;;;;5880:413;;;;;;;;;;-1:-1:-1;5880:413:0;;;;;:::i;:::-;;:::i;11495:29::-;;;;;;;;;;;;;;;;10057:33;;;;;;;;;;;;;;;;4638:175;;;;;;;;;;-1:-1:-1;4638:175:0;;;;;:::i;:::-;;:::i;10461:40::-;;;;;;;;;;;;;;;;10991:26;;;;;;;;;;;;;;;;10335:51;;;;;;;;;;-1:-1:-1;10335:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12002:58;;;;;;;;;;-1:-1:-1;12002:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10255:33;;;;;;;;;;-1:-1:-1;10255:33:0;;;;;;;;;;;20234:282;;;;;;;;;;-1:-1:-1;20234:282:0;;;;;:::i;:::-;;:::i;37305:449::-;;;;;;;;;;-1:-1:-1;37305:449:0;;;;;:::i;:::-;;:::i;20524:182::-;;;;;;;;;;-1:-1:-1;20524:182:0;;;;;:::i;:::-;;:::i;19829:397::-;;;;;;;;;;-1:-1:-1;19829:397:0;;;;;:::i;:::-;;:::i;9941:30::-;;;;;;;;;;-1:-1:-1;9941:30:0;;;;-1:-1:-1;;;;;9941:30:0;;;38546:220;;;;;;;;;;;;;:::i;10692:39::-;;;;;;;;;;-1:-1:-1;10692:39:0;;;;;;;;11078:32;;;;;;;;;;;;;;;;18041:346;;;;;;;;;;-1:-1:-1;18041:346:0;;;;;:::i;:::-;;:::i;10740:27::-;;;;;;;;;;;;;;;;17375:300;;;;;;;;;;-1:-1:-1;17375:300:0;;;;;:::i;:::-;;:::i;4821:151::-;;;;;;;;;;-1:-1:-1;4821:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4937:18:0;;;4910:7;4937:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4821:151;9899:33;;;;;;;;;;;;;;;;31482:2300;;;;;;;;;;-1:-1:-1;31482:2300:0;;;;;:::i;:::-;;:::i;10847:25::-;;;;;;;;;;;;;;;;16958:98;;;;;;;;;;;;;:::i;10146:28::-;;;;;;;;;;-1:-1:-1;10146:28:0;;;;;:::i;:::-;;:::i;9980:37::-;;;;;;;;;;;;;;;;11207:52;;;;;;;;;;;;;;;;10810:30;;;;;;;;;;;;;;;;8305:244;;;;;;;;;;-1:-1:-1;8305:244:0;;;;;:::i;:::-;;:::i;29989:160::-;;;;;;;;;;;;;:::i;10953:31::-;;;;;;;;;;;;;;;;9774:24;;;;;;;;;;;;;;;;10097:42;;;;;;;;;;-1:-1:-1;10097:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11266:36;;;;;;;;;;-1:-1:-1;11266:36:0;;;;;;;;35509:1398;;;;;;;;;;-1:-1:-1;35509:1398:0;;;;;:::i;:::-;;:::i;4066:100::-;4120:13;4153:5;4146:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4066:100;:::o;4980:169::-;5063:4;5080:39;295:10;5103:7;5112:6;5080:8;:39::i;:::-;-1:-1:-1;5137:4:0;4980:169;;;;;:::o;16699:194::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;;;;;;;;;16785:13:::1;::::0;::::1;::::0;::::1;;;16784:14;16776:68;;;::::0;-1:-1:-1;;;16776:68:0;;10016:2:1;16776:68:0::1;::::0;::::1;9998:21:1::0;10055:2;10035:18;;;10028:30;10094:34;10074:18;;;10067:62;-1:-1:-1;;;10145:18:1;;;10138:39;10194:19;;16776:68:0::1;9814:405:1::0;16776:68:0::1;16855:9;:30:::0;;-1:-1:-1;;;;;;16855:30:0::1;-1:-1:-1::0;;;;;16855:30:0;;;::::1;::::0;;;::::1;::::0;;16699:194::o;31227:247::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;31321:2:::1;31311:6;:12;;:31;;;;;31337:5;31327:6;:15;;31311:31;31303:76;;;::::0;-1:-1:-1;;;31303:76:0;;10426:2:1;31303:76:0::1;::::0;::::1;10408:21:1::0;;;10445:18;;;10438:30;10504:34;10484:18;;;10477:62;10556:18;;31303:76:0::1;10224:356:1::0;31303:76:0::1;31408:13;:6:::0;31417:4:::1;31408:13;:::i;:::-;31390:15;:31:::0;31437:29:::1;::::0;160:25:1;;;31437:29:0::1;::::0;148:2:1;133:18;31437:29:0::1;;;;;;;;31227:247:::0;:::o;17683:288::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;17801:16:::1;4369:2:::0;17801::::1;:16;:::i;:::-;17793:3;17773:13;4475:12:::0;;;4387:108;17773:13:::1;:17;::::0;17789:1:::1;17773:17;:::i;:::-;:23;;;;:::i;:::-;17772:46;;;;:::i;:::-;17762:6;:56;;17754:110;;;::::0;-1:-1:-1;;;17754:110:0;;12697:2:1;17754:110:0::1;::::0;::::1;12679:21:1::0;12736:2;12716:18;;;12709:30;12775:34;12755:18;;;12748:62;-1:-1:-1;;;12826:18:1;;;12819:39;12875:19;;17754:110:0::1;12495:405:1::0;17754:110:0::1;17897:16;4369:2:::0;17897::::1;:16;:::i;:::-;17887:27;::::0;:6;:27:::1;:::i;:::-;17875:9;:39:::0;;;17930:33:::1;::::0;160:25:1;;;17930:33:0::1;::::0;148:2:1;133:18;17930:33:0::1;14:177:1::0;5157:492:0;5297:4;5314:36;5324:6;5332:9;5343:6;5314:9;:36::i;:::-;-1:-1:-1;;;;;5390:19:0;;5363:24;5390:19;;;:11;:19;;;;;;;;295:10;5390:33;;;;;;;;5442:26;;;;5434:79;;;;-1:-1:-1;;;5434:79:0;;13107:2:1;5434:79:0;;;13089:21:1;13146:2;13126:18;;;13119:30;13185:34;13165:18;;;13158:62;-1:-1:-1;;;13236:18:1;;;13229:38;13284:19;;5434:79:0;12905:404:1;5434:79:0;5549:57;5558:6;295:10;5599:6;5580:16;:25;5549:8;:57::i;:::-;-1:-1:-1;5637:4:0;;5157:492;-1:-1:-1;;;;5157:492:0:o;17068:295::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;17190:16:::1;4369:2:::0;17190::::1;:16;:::i;:::-;17181:4;17161:13;4475:12:::0;;;4387:108;17161:13:::1;:17;::::0;17177:1:::1;17161:17;:::i;:::-;:24;;;;:::i;:::-;17160:47;;;;:::i;:::-;17150:6;:57;;17142:111;;;::::0;-1:-1:-1;;;17142:111:0;;13516:2:1;17142:111:0::1;::::0;::::1;13498:21:1::0;13555:2;13535:18;;;13528:30;13594:34;13574:18;;;13567:62;-1:-1:-1;;;13645:18:1;;;13638:39;13694:19;;17142:111:0::1;13314:405:1::0;17142:111:0::1;17289:16;4369:2:::0;17289::::1;:16;:::i;:::-;17279:27;::::0;:6;:27:::1;:::i;:::-;17264:12;:42:::0;;;17322:33:::1;::::0;160:25:1;;;17322:33:0::1;::::0;148:2:1;133:18;17322:33:0::1;14:177:1::0;5657:215:0;295:10;5745:4;5794:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5794:34:0;;;;;;;;;;5745:4;;5762:80;;5785:7;;5794:47;;5831:10;;5794:47;:::i;:::-;5762:8;:80::i;30490:312::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;30581:18:::1;;30553:24;30571:4;30553:9;:24::i;:::-;:46;;30545:123;;;::::0;;-1:-1:-1;;;30545:123:0;;14056:2:1;30545:123:0::1;::::0;::::1;14038:21:1::0;14075:18;;;14068:30;;;;14134:34;14114:18;;;14107:62;14205:34;14185:18;;;14178:62;14257:19;;30545:123:0::1;13854:428:1::0;30545:123:0::1;30679:8;:15:::0;;-1:-1:-1;;;;30679:15:0::1;-1:-1:-1::0;;;30679:15:0::1;::::0;;30705:10:::1;:8;:10::i;:::-;30726:8;:16:::0;;-1:-1:-1;;;;30726:16:0::1;::::0;;30758:36:::1;::::0;30778:15:::1;160:25:1::0;;30758:36:0::1;::::0;148:2:1;133:18;30758:36:0::1;;;;;;;30490:312::o:0;30157:281::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30249:30:0;::::1;30241:79;;;::::0;-1:-1:-1;;;30241:79:0;;14489:2:1;30241:79:0::1;::::0;::::1;14471:21:1::0;14528:2;14508:18;;;14501:30;14567:34;14547:18;;;14540:62;-1:-1:-1;;;14618:18:1;;;14611:34;14662:19;;30241:79:0::1;14287:400:1::0;30241:79:0::1;30331:15;:43:::0;;-1:-1:-1;;;;;;30331:43:0::1;-1:-1:-1::0;;;;;30331:43:0;::::1;::::0;;::::1;::::0;;;30390:40:::1;::::0;::::1;::::0;-1:-1:-1;;30390:40:0::1;30157:281:::0;:::o;4503:127::-;-1:-1:-1;;;;;4604:18:0;4577:7;4604:18;;;;;;;;;;;;4503:127::o;37762:281::-;37844:24;;37822:7;;37844:24;;37841:195;;;37920:25;;37891:26;;:54;;;;:::i;:::-;37884:61;;37762:281;:::o;37841:195::-;-1:-1:-1;37994:1:0;;37762:281::o;30810:409::-;30907:16;;;30921:1;30907:16;;;;;;;;30864:7;;;;30907:16;30921:1;30907:16;;;;;;;;-1:-1:-1;;30944:9:0;;:16;;;-1:-1:-1;;;30944:16:0;;;;30883:40;;-1:-1:-1;;;;;;30944:9:0;;;;:14;;-1:-1:-1;30944:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30934:4;30939:1;30934:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;30934:26:0;;;-1:-1:-1;;;;;30934:26:0;;;;;30989:4;30971;30976:1;30971:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30971:23:0;;;;:7;;;;;;;;;;:23;31042:16;;;31056:1;31042:16;;;;;;;;31015:24;;31042:16;;31056:1;;31042:16;;;;;;;;;-1:-1:-1;;31079:9:0;;31103:15;;31079:46;;-1:-1:-1;;;31079:46:0;;31015:43;;-1:-1:-1;;;;;;31079:9:0;;;;:23;;:46;;31120:4;;31079:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31079:46:0;;;;;;;;;;;;:::i;:::-;31069:56;;31208:3;31190:15;;31171:16;;:34;;;;:::i;:::-;31157:7;31165:1;31157:10;;;;;;;;:::i;:::-;;;;;;;:49;;;;:::i;:::-;31156:55;;;;:::i;:::-;31143:7;31151:1;31143:10;;;;;;;;:::i;:::-;;;;;;;:68;;;;:::i;:::-;31136:75;;;;30810:409;:::o;8147:150::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;8240:6:::1;::::0;8219:40:::1;::::0;8256:1:::1;::::0;-1:-1:-1;;;;;8240:6:0::1;::::0;8219:40:::1;::::0;8256:1;;8219:40:::1;8270:6;:19:::0;;-1:-1:-1;;;;;;8270:19:0::1;::::0;;8147:150::o;33790:447::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;33944:3:::1;33921:19;:26;;33913:90;;;::::0;-1:-1:-1;;;33913:90:0;;16505:2:1;33913:90:0::1;::::0;::::1;16487:21:1::0;16544:2;16524:18;;;16517:30;16583:34;16563:18;;;16556:62;-1:-1:-1;;;16634:18:1;;;16627:49;16693:19;;33913:90:0::1;16303:415:1::0;33913:90:0::1;34034:4;34022:8;:16;;:33;;;;-1:-1:-1::0;34042:13:0;34022:33:::1;34014:94;;;::::0;-1:-1:-1;;;34014:94:0;;16925:2:1;34014:94:0::1;::::0;::::1;16907:21:1::0;16964:2;16944:18;;;16937:30;17003:34;16983:18;;;16976:62;-1:-1:-1;;;17054:18:1;;;17047:46;17110:19;;34014:94:0::1;16723:412:1::0;34014:94:0::1;34119:15;:37:::0;;;;34167:16:::1;:27:::0;34205:13:::1;:24:::0;;-1:-1:-1;;34205:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33790:447::o;16136:233::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;16190:14:::1;:22:::0;;-1:-1:-1;;16190:22:0;;::::1;::::0;;;16223:20:::1;:28:::0;;;;::::1;::::0;;4475:12;;16262::::1;:28:::0;4475:12;;16301:13:::1;:29:::0;16346:15:::1;::::0;::::1;::::0;;;::::1;16136:233::o:0;18619:260::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;18715:4:::1;18711:104;;18753:6;::::0;-1:-1:-1;;;;;18753:6:0;;::::1;18743:16:::0;;::::1;::::0;18735:68:::1;;;::::0;-1:-1:-1;;;18735:68:0;;17342:2:1;18735:68:0::1;::::0;::::1;17324:21:1::0;17381:2;17361:18;;;17354:30;17420:34;17400:18;;;17393:62;-1:-1:-1;;;17471:18:1;;;17464:37;17518:19;;18735:68:0::1;17140:403:1::0;18735:68:0::1;-1:-1:-1::0;;;;;18825:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18825:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18619:260::o;38051:487::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;38139:29:::1;:27;:29::i;:::-;38120:15;:48;;:85;;;;;38204:1;38172:29;:27;:29::i;:::-;:33;38120:85;38112:120;;;::::0;-1:-1:-1;;;38112:120:0;;17750:2:1;38112:120:0::1;::::0;::::1;17732:21:1::0;17789:2;17769:18;;;17762:30;-1:-1:-1;;;17808:18:1;;;17801:52;17870:18;;38112:120:0::1;17548:346:1::0;38112:120:0::1;38272:1;38243:26;:30:::0;;;38284:24:::1;:32:::0;;-1:-1:-1;;38284:32:0::1;::::0;;38404:16:::1;::::0;38368:6:::1;::::0;38353:48:::1;::::0;-1:-1:-1;;;38353:48:0;;38395:4:::1;38353:48;::::0;::::1;913:51:1::0;38423:3:0::1;::::0;-1:-1:-1;;;;;38368:6:0;;::::1;::::0;38353:33:::1;::::0;886:18:1;38353:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:73;;;;:::i;:::-;38466:1;38447:16;:20:::0;38487:6:::1;::::0;38480:50:::1;::::0;-1:-1:-1;;;38480:50:0;;38504:10:::1;38480:50;::::0;::::1;18262:51:1::0;18329:18;;;18322:34;;;38329:97:0;;-1:-1:-1;;;;;;38487:6:0::1;::::0;38480:23:::1;::::0;18235:18:1;;38480:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38101:437;38051:487::o:0;19432:389::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;19548:14:::1;:29:::0;;;19588:15:::1;:31:::0;;;19630:10:::1;:21:::0;;;19643:8;19677:32:::1;19606:13:::0;19565:12;19677:32:::1;:::i;:::-;:45;;;;:::i;:::-;19662:12;:60:::0;19776:3:::1;19757:16;11064:5;19757:2;:16;:::i;:::-;:22;;;;:::i;:::-;19741:12;;:38;;19733:80;;;::::0;-1:-1:-1;;;19733:80:0;;18819:2:1;19733:80:0::1;::::0;::::1;18801:21:1::0;18858:2;18838:18;;;18831:30;18897:31;18877:18;;;18870:59;18946:18;;19733:80:0::1;18617:353:1::0;19733:80:0::1;19432:389:::0;;;:::o;15653:427::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;15741:13:::1;::::0;::::1;::::0;::::1;;;15740:14;15732:50;;;::::0;-1:-1:-1;;;15732:50:0;;19177:2:1;15732:50:0::1;::::0;::::1;19159:21:1::0;19216:2;19196:18;;;19189:30;19255:25;19235:18;;;19228:53;19298:18;;15732:50:0::1;18975:347:1::0;15732:50:0::1;15821:2;15801:16;:22;;15793:74;;;;-1:-1:-1::0;;;15793:74:0::1;;;;;;;:::i;:::-;15878:13;:20:::0;;-1:-1:-1;;15909:18:0;;;;;15959:12:::1;15938:18;:33:::0;;;16003:37:::1;::::0;16024:16;;16003:37:::1;:::i;:::-;15982:18;:58:::0;16056:16:::1;::::0;::::1;::::0;;;::::1;15653:427:::0;:::o;29421:498::-;8060:6;;29508:10;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29539:20:0;::::1;29531:59;;;::::0;-1:-1:-1;;;29531:59:0;;19937:2:1;29531:59:0::1;::::0;::::1;19919:21:1::0;19976:2;19956:18;;;19949:30;20015:28;19995:18;;;19988:56;20061:18;;29531:59:0::1;19735:350:1::0;29531:59:0::1;-1:-1:-1::0;;;;;29609:23:0;::::1;29627:4;29609:23;;::::0;:41:::1;;-1:-1:-1::0;29637:13:0::1;::::0;::::1;::::0;::::1;;;29636:14;29609:41;29601:106;;;::::0;-1:-1:-1;;;29601:106:0;;20292:2:1;29601:106:0::1;::::0;::::1;20274:21:1::0;20331:2;20311:18;;;20304:30;20370:34;20350:18;;;20343:62;-1:-1:-1;;;20421:18:1;;;20414:50;20481:19;;29601:106:0::1;20090:416:1::0;29601:106:0::1;29745:39;::::0;-1:-1:-1;;;29745:39:0;;29778:4:::1;29745:39;::::0;::::1;913:51:1::0;29718:24:0::1;::::0;-1:-1:-1;;;;;29745:24:0;::::1;::::0;::::1;::::0;886:18:1;;29745:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29803:46;::::0;-1:-1:-1;;;29803:46:0;;-1:-1:-1;;;;;18280:32:1;;;29803:46:0::1;::::0;::::1;18262:51:1::0;18329:18;;;18322:34;;;29718:66:0;;-1:-1:-1;29803:23:0;;::::1;::::0;::::1;::::0;18235:18:1;;29803:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29865;::::0;;-1:-1:-1;;;;;18280:32:1;;18262:51;;18344:2;18329:18;;18322:34;;;29795:54:0;;-1:-1:-1;29865:46:0::1;::::0;18235:18:1;29865:46:0::1;;;;;;;29520:399;29421:498:::0;;;;:::o;16488:203::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;16586:9:::1;16582:102;16601:20:::0;;::::1;16582:102;;;16668:4;16642:9;:23;16652:9;;16662:1;16652:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16642:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16642:23:0;:30;;-1:-1:-1;;16642:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16623:3;::::1;::::0;::::1;:::i;:::-;;;;16582:102;;;;16488:203:::0;;;:::o;4174:104::-;4230:13;4263:7;4256:14;;;;;:::i;16377:103::-;16426:16;16461:11;16454:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16454:18:0;;;;;;;;;;;;;;;;;;;;;;16377:103;:::o;18887:293::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;18996:6:::1;::::0;-1:-1:-1;;;;;18996:6:0;;::::1;18988:14:::0;;::::1;::::0;18980:84:::1;;;::::0;-1:-1:-1;;;18980:84:0;;20853:2:1;18980:84:0::1;::::0;::::1;20835:21:1::0;20892:2;20872:18;;;20865:30;20931:34;20911:18;;;20904:62;21002:27;20982:18;;;20975:55;21047:19;;18980:84:0::1;20651:421:1::0;18980:84:0::1;19075:41;19104:4;19110:5;19075:28;:41::i;:::-;19132:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;19132:40:0;::::1;::::0;::::1;::::0;;;::::1;18887:293:::0;;:::o;5880:413::-;295:10;5973:4;6017:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6017:34:0;;;;;;;;;;6070:35;;;;6062:85;;;;-1:-1:-1;;;6062:85:0;;21279:2:1;6062:85:0;;;21261:21:1;21318:2;21298:18;;;21291:30;21357:34;21337:18;;;21330:62;-1:-1:-1;;;21408:18:1;;;21401:35;21453:19;;6062:85:0;21077:401:1;6062:85:0;6183:67;295:10;6206:7;6234:15;6215:16;:34;6183:8;:67::i;:::-;-1:-1:-1;6281:4:0;;5880:413;-1:-1:-1;;;5880:413:0:o;4638:175::-;4724:4;4741:42;295:10;4765:9;4776:6;4741:9;:42::i;20234:282::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;20341:9:::1;20337:172;20356:19:::0;;::::1;20337:172;;;20431:8;20396:19;:32;20416:8;;20425:1;20416:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20396:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20396:32:0;:43;;-1:-1:-1;;20396:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20475:8;;20484:1;20475:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20459:38:0::1;;20488:8;20459:38;;;;1596:14:1::0;1589:22;1571:41;;1559:2;1544:18;;1431:187;20459:38:0::1;;;;;;;;20377:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20337:172;;37305:449:::0;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;37397:24:::1;::::0;::::1;;37396:25;37388:87;;;::::0;-1:-1:-1;;;37388:87:0;;21685:2:1;37388:87:0::1;::::0;::::1;21667:21:1::0;21724:2;21704:18;;;21697:30;21763:34;21743:18;;;21736:62;-1:-1:-1;;;21814:18:1;;;21807:47;21871:19;;37388:87:0::1;21483:413:1::0;37388:87:0::1;37512:3;37494:14;:21;;:43;;;;;37536:1;37519:14;:18;37494:43;37486:82;;;::::0;-1:-1:-1;;;37486:82:0;;22103:2:1;37486:82:0::1;::::0;::::1;22085:21:1::0;22142:2;22122:18;;;22115:30;22181:28;22161:18;;;22154:56;22227:18;;37486:82:0::1;21901:350:1::0;37486:82:0::1;37608:15;37579:26;:44:::0;37634:24:::1;:31:::0;;-1:-1:-1;;37634:31:0::1;37661:4;37634:31;::::0;;37676:16:::1;:33:::0;;;37725:21:::1;::::0;::::1;::::0;37634:24:::1;::::0;37725:21:::1;37305:449:::0;:::o;20524:182::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20609:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20609:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20664:34;;1571:41:1;;;20664:34:0::1;::::0;1544:18:1;20664:34:0::1;;;;;;;20524:182:::0;;:::o;19829:397::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;19945:15:::1;:30:::0;;;19986:16:::1;:32:::0;;;20029:11:::1;:22:::0;;;20043:8;20078:34:::1;20005:13:::0;19963:12;20078:34:::1;:::i;:::-;:48;;;;:::i;:::-;20062:13;:64:::0;20181:3:::1;20162:16;11064:5;20162:2;:16;:::i;:::-;:22;;;;:::i;:::-;20145:13;;:39;;20137:81;;;::::0;-1:-1:-1;;;20137:81:0;;22458:2:1;20137:81:0::1;::::0;::::1;22440:21:1::0;22497:2;22477:18;;;22470:30;22536:31;22516:18;;;22509:59;22585:18;;20137:81:0::1;22256:353:1::0;38546:220:0;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;38611:24:::1;:32:::0;;-1:-1:-1;;38611:32:0::1;::::0;;38638:5:::1;38654:16;:20:::0;;;38685:26:::1;:30:::0;;;38731:27:::1;::::0;::::1;::::0;38638:5;38731:27:::1;38546:220::o:0;18041:346::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;18164:6:::1;18144:13;4475:12:::0;;;4387:108;18144:13:::1;:17;::::0;18160:1:::1;18144:17;:::i;:::-;:26;;;;:::i;:::-;18131:9;:39;;18123:105;;;::::0;-1:-1:-1;;;18123:105:0;;22816:2:1;18123:105:0::1;::::0;::::1;22798:21:1::0;22855:2;22835:18;;;22828:30;22894:34;22874:18;;;22867:62;-1:-1:-1;;;22945:18:1;;;22938:51;23006:19;;18123:105:0::1;22614:417:1::0;18123:105:0::1;18279:4;18259:13;4475:12:::0;;;4387:108;18259:13:::1;:17;::::0;18275:1:::1;18259:17;:::i;:::-;:24;;;;:::i;:::-;18246:9;:37;;18238:102;;;::::0;-1:-1:-1;;;18238:102:0;;23238:2:1;18238:102:0::1;::::0;::::1;23220:21:1::0;23277:2;23257:18;;;23250:30;23316:34;23296:18;;;23289:62;-1:-1:-1;;;23367:18:1;;;23360:50;23427:19;;18238:102:0::1;23036:416:1::0;18238:102:0::1;18350:18;:30:::0;18041:346::o;17375:300::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;17498:16:::1;4369:2:::0;17498::::1;:16;:::i;:::-;17489:4;17469:13;4475:12:::0;;;4387:108;17469:13:::1;:17;::::0;17485:1:::1;17469:17;:::i;:::-;:24;;;;:::i;:::-;17468:47;;;;:::i;:::-;17458:6;:57;;17450:112;;;::::0;-1:-1:-1;;;17450:112:0;;23659:2:1;17450:112:0::1;::::0;::::1;23641:21:1::0;23698:2;23678:18;;;23671:30;23737:34;23717:18;;;23710:62;-1:-1:-1;;;23788:18:1;;;23781:40;23838:19;;17450:112:0::1;23457:406:1::0;17450:112:0::1;17599:16;4369:2:::0;17599::::1;:16;:::i;:::-;17589:27;::::0;:6;:27:::1;:::i;:::-;17573:13;:43:::0;;;17632:35:::1;::::0;160:25:1;;;17632:35:0::1;::::0;148:2:1;133:18;17632:35:0::1;14:177:1::0;31482:2300:0;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;31652:13:::1;::::0;::::1;::::0;::::1;;;31651:14;31643:70;;;::::0;-1:-1:-1;;;31643:70:0;;24070:2:1;31643:70:0::1;::::0;::::1;24052:21:1::0;24109:2;24089:18;;;24082:30;24148:34;24128:18;;;24121:62;-1:-1:-1;;;24199:18:1;;;24192:41;24250:19;;31643:70:0::1;23868:407:1::0;31643:70:0::1;31751:2;31732:16;:21;31724:73;;;;-1:-1:-1::0;;;31724:73:0::1;;;;;;;:::i;:::-;31836:15;:22;31818:7;:14;:40;31810:83;;;::::0;-1:-1:-1;;;31810:83:0;;24482:2:1;31810:83:0::1;::::0;::::1;24464:21:1::0;24521:2;24501:18;;;24494:30;24560:32;24540:18;;;24533:60;24610:18;;31810:83:0::1;24280:354:1::0;31810:83:0::1;31929:3;31912:7;:14;:20;31904:87;;;::::0;-1:-1:-1;;;31904:87:0;;24841:2:1;31904:87:0::1;::::0;::::1;24823:21:1::0;24880:2;24860:18;;;24853:30;24919:34;24899:18;;;24892:62;-1:-1:-1;;;24970:18:1;;;24963:52;25032:19;;31904:87:0::1;24639:418:1::0;31904:87:0::1;32104:9;32100:86;32119:19:::0;;::::1;32100:86;;;32180:4;32145:19;:32;32165:8;;32174:1;32165:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32145:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32145:32:0;:39;;-1:-1:-1;;32145:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32140:3;::::1;::::0;::::1;:::i;:::-;;;;32100:86;;;;32200:9;32196:351;32219:7;:14;32215:1;:18;32196:351;;;32254:14;32271:7;32279:1;32271:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32296:26:0;::::1;;::::0;;;:18:::1;:26:::0;;;;;;;:33;;-1:-1:-1;;32296:33:0::1;32325:4;32296:33;::::0;;32271:10;-1:-1:-1;32380:26:0::1;:15;32398:8;32380:26;:::i;:::-;-1:-1:-1::0;;;;;32344:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;:62;;;;32460:16:::1;4369:2:::0;32460::::1;:16;:::i;:::-;32438:15;32454:1;32438:18;;;;;;;;:::i;:::-;;;;;;;:39;;;;:::i;:::-;32421:56;;32492:43;32508:10;32520:6;32528;32492:15;:43::i;:::-;32239:308;;32235:3;;;;;:::i;:::-;;;;32196:351;;;-1:-1:-1::0;32596:13:0::1;:20:::0;;-1:-1:-1;;32627:18:0;;;;;32677:12:::1;32656:18;:33:::0;;;32721:37:::1;::::0;32742:16;;32721:37:::1;:::i;:::-;32700:18;:58:::0;32774:16:::1;::::0;::::1;::::0;;;::::1;32848:9;;;;;;;;;-1:-1:-1::0;;;;;32848:9:0::1;-1:-1:-1::0;;;;;32848:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32836:43:0::1;;32888:4;32895:9;;;;;;;;;-1:-1:-1::0;;;;;32895:9:0::1;-1:-1:-1::0;;;;;32895:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32836:76;::::0;-1:-1:-1;;;;;;32836:76:0::1;::::0;;;;;;-1:-1:-1;;;;;25292:15:1;;;32836:76:0::1;::::0;::::1;25274:34:1::0;25344:15;;25324:18;;;25317:43;25209:18;;32836:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32827:6;:85:::0;;-1:-1:-1;;;;;;32827:85:0::1;-1:-1:-1::0;;;;;32827:85:0;;;::::1;::::0;;::::1;::::0;;32923:49:::1;::::0;-1:-1:-1;32923:26:0::1;:49::i;:::-;33020:6;::::0;32983:51:::1;::::0;-1:-1:-1;;;;;33020:6:0::1;::::0;32983:28:::1;:51::i;:::-;33114:1;33090:21;:25;33082:73;;;::::0;-1:-1:-1;;;33082:73:0;;25573:2:1;33082:73:0::1;::::0;::::1;25555:21:1::0;25612:2;25592:18;;;25585:30;25651:34;25631:18;;;25624:62;-1:-1:-1;;;25702:18:1;;;25695:33;25745:19;;33082:73:0::1;25371:399:1::0;33082:73:0::1;33203:1;33176:24;33194:4;33176:9;:24::i;:::-;:28;33168:79;;;::::0;-1:-1:-1;;;33168:79:0;;25977:2:1;33168:79:0::1;::::0;::::1;25959:21:1::0;26016:2;25996:18;;;25989:30;26055:34;26035:18;;;26028:62;-1:-1:-1;;;26106:18:1;;;26099:36;26152:19;;33168:79:0::1;25775:402:1::0;33168:79:0::1;33292:9;::::0;33260:69:::1;::::0;33277:4:::1;::::0;-1:-1:-1;;;;;33292:9:0::1;33304:24;33277:4:::0;33304:9:::1;:24::i;33260:69::-;33340:9;::::0;-1:-1:-1;;;;;33340:9:0::1;:25;33373:21;33418:4;33438:24;33418:4:::0;33438:9:::1;:24::i;:::-;33477:1;33520::::0;33571:4:::1;33591:15;33340:277;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;33676:4:0::1;33659:14;:21:::0;;;33691:12:::1;:19:::0;;;33721:15:::1;:22:::0;;;33754:13:::1;:20:::0;-1:-1:-1;;;;;;31482:2300:0:o;16958:98::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;17020:20:::1;:28:::0;;-1:-1:-1;;17020:28:0::1;::::0;;16958:98::o;10146:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10146:28:0;;-1:-1:-1;10146:28:0;:::o;8305:244::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8394:22:0;::::1;8386:73;;;::::0;-1:-1:-1;;;8386:73:0;;27307:2:1;8386:73:0::1;::::0;::::1;27289:21:1::0;27346:2;27326:18;;;27319:30;27385:34;27365:18;;;27358:62;-1:-1:-1;;;27436:18:1;;;27429:36;27482:19;;8386:73:0::1;27105:402:1::0;8386:73:0::1;8496:6;::::0;8475:38:::1;::::0;-1:-1:-1;;;;;8475:38:0;;::::1;::::0;8496:6:::1;::::0;8475:38:::1;::::0;8496:6:::1;::::0;8475:38:::1;8524:6;:17:::0;;-1:-1:-1;;;;;;8524:17:0::1;-1:-1:-1::0;;;;;8524:17:0;;;::::1;::::0;;;::::1;::::0;;8305:244::o;29989:160::-;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;30083:58:::1;::::0;30047:12:::1;::::0;30091:10:::1;::::0;30115:21:::1;::::0;30047:12;30083:58;30047:12;30083:58;30115:21;30091:10;30083:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35509:1398:::0;8060:6;;-1:-1:-1;;;;;8060:6:0;295:10;8060:22;8052:67;;;;-1:-1:-1;;;8052:67:0;;;;;;;:::i;:::-;35613:4:::1;35603:7;:14;;35595:80;;;::::0;-1:-1:-1;;;35595:80:0;;27924:2:1;35595:80:0::1;::::0;::::1;27906:21:1::0;27963:2;27943:18;;;27936:30;28002:34;27982:18;;;27975:62;-1:-1:-1;;;28053:18:1;;;28046:51;28114:19;;35595:80:0::1;27722:417:1::0;35595:80:0::1;35736:19;::::0;35718:37:::1;::::0;:15:::1;:37;:::i;:::-;35694:20;;:61;;35686:87;;;::::0;-1:-1:-1;;;35686:87:0;;28479:2:1;35686:87:0::1;::::0;::::1;28461:21:1::0;28518:2;28498:18;;;28491:30;-1:-1:-1;;;28537:18:1;;;28530:43;28590:18;;35686:87:0::1;28277:337:1::0;35686:87:0::1;35807:15;35784:20;:38:::0;35860:6:::1;::::0;35853:39:::1;::::0;-1:-1:-1;;;35853:39:0;;35886:4:::1;35853:39;::::0;::::1;913:51:1::0;35833:17:0::1;::::0;-1:-1:-1;;;;;35860:6:0::1;::::0;35853:24:::1;::::0;886:18:1;;35853:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35833:59;;35903:20;35926:24;35944:4;35926:9;:24::i;:::-;35903:47:::0;-1:-1:-1;35961:16:0::1;36002:5;35980:19;35992:7:::0;35980:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;36154:6;::::0;36178:9:::1;::::0;36147:52:::1;::::0;-1:-1:-1;;;36147:52:0;;-1:-1:-1;;;;;36178:9:0;;::::1;36147:52;::::0;::::1;18262:51:1::0;18329:18;;;18322:34;;;35961:46:0;;-1:-1:-1;36046:21:0::1;::::0;36154:6;::::1;::::0;36147:22:::1;::::0;18235:18:1;;36147:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36245:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;36245:234:0;;-1:-1:-1;;;;;36245:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36296:4:::1;::::0;36316:8;;36245:9;;;;36296:4;;36453:15:::1;::::0;36245:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36492:25;36547:12;36520:24;36538:4;36520:9;:24::i;:::-;:39;;;;:::i;:::-;36492:67:::0;-1:-1:-1;36573:21:0;;36570:118:::1;;36610:66;36634:4;36649:6;36658:17;36610:15;:66::i;:::-;36700:23;36726:41;36750:17:::0;36726:21:::1;:41;:::i;:::-;36700:67:::0;-1:-1:-1;36783:19:0;;36780:80:::1;;36818:30;36832:15;36818:13;:30::i;:::-;36877:22;::::0;36890:8;;36877:22:::1;::::0;;;::::1;35584:1323;;;;;;35509:1398:::0;:::o;7222:380::-;-1:-1:-1;;;;;7358:19:0;;7350:68;;;;-1:-1:-1;;;7350:68:0;;29683:2:1;7350:68:0;;;29665:21:1;29722:2;29702:18;;;29695:30;29761:34;29741:18;;;29734:62;-1:-1:-1;;;29812:18:1;;;29805:34;29856:19;;7350:68:0;29481:400:1;7350:68:0;-1:-1:-1;;;;;7437:21:0;;7429:68;;;;-1:-1:-1;;;7429:68:0;;30088:2:1;7429:68:0;;;30070:21:1;30127:2;30107:18;;;30100:30;30166:34;30146:18;;;30139:62;-1:-1:-1;;;30217:18:1;;;30210:32;30259:19;;7429:68:0;29886:398:1;7429:68:0;-1:-1:-1;;;;;7510:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7562:32;;160:25:1;;;7562:32:0;;133:18:1;7562:32:0;;;;;;;7222:380;;;:::o;20714:6250::-;-1:-1:-1;;;;;20814:18:0;;20806:68;;;;-1:-1:-1;;;20806:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20893:16:0;;20885:64;;;;-1:-1:-1;;;20885:64:0;;;;;;;:::i;:::-;20977:1;20968:6;:10;20960:52;;;;-1:-1:-1;;;20960:52:0;;31301:2:1;20960:52:0;;;31283:21:1;31340:2;31320:18;;;31313:30;31379:31;31359:18;;;31352:59;31428:18;;20960:52:0;31099:353:1;20960:52:0;21037:13;;;;;;;21033:132;;-1:-1:-1;;;;;21074:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21103:23:0;;;;;;:19;:23;;;;;;;;21074:52;21066:87;;;;-1:-1:-1;;;21066:87:0;;31659:2:1;21066:87:0;;;31641:21:1;31698:2;31678:18;;;31671:30;-1:-1:-1;;;31717:18:1;;;31710:52;31779:18;;21066:87:0;31457:346:1;21066:87:0;27066:18;;27051:12;:33;21180:26;:43;;;;-1:-1:-1;21210:13:0;;;;;;;21180:43;21177:235;;;-1:-1:-1;;;;;21249:15:0;;;;;;:9;:15;;;;;;;;21248:16;:34;;;;-1:-1:-1;;;;;;21269:13:0;;;;;;:9;:13;;;;;;;;21268:14;21248:34;21247:53;;;-1:-1:-1;7998:6:0;;-1:-1:-1;;;;;21287:13:0;;;7998:6;;21287:13;21247:53;:78;;;-1:-1:-1;;;;;;21304:21:0;;21318:6;21304:21;21247:78;21239:161;;;;-1:-1:-1;;;21239:161:0;;32010:2:1;21239:161:0;;;31992:21:1;32049:2;32029:18;;;32022:30;32088:34;32068:18;;;32061:62;32159:34;32139:18;;;32132:62;-1:-1:-1;;;32210:19:1;;;32203:37;32257:19;;21239:161:0;31808:474:1;21239:161:0;-1:-1:-1;;;;;21427:24:0;;;;;;:18;:24;;;;;;;;21424:610;;;-1:-1:-1;;;;;21470:29:0;;;;;;:25;:29;;;;;;;;21467:556;;;-1:-1:-1;;;;;21577:31:0;;;;;;:25;:31;;;;;;21612:15;-1:-1:-1;21577:50:0;21569:78;;;;-1:-1:-1;;;21569:78:0;;32489:2:1;21569:78:0;;;32471:21:1;32528:2;32508:18;;;32501:30;-1:-1:-1;;;32547:18:1;;;32540:45;32602:18;;21569:78:0;32287:339:1;21569:78:0;21684:23;:21;:23::i;:::-;21674:6;:33;;21666:98;;;;-1:-1:-1;;;21666:98:0;;32833:2:1;21666:98:0;;;32815:21:1;32872:2;32852:18;;;32845:30;32911:34;32891:18;;;32884:62;-1:-1:-1;;;32962:18:1;;;32955:50;33022:19;;21666:98:0;32631:416:1;21666:98:0;21817:26;:15;21835:8;21817:26;:::i;:::-;-1:-1:-1;;;;;21783:31:0;;;;;;:25;:31;;;;;:60;21467:556;;;-1:-1:-1;;;;;21869:23:0;;;;;;:19;:23;;;;;;;;21865:158;;21912:95;;-1:-1:-1;;;21912:95:0;;33254:2:1;21912:95:0;;;33236:21:1;33293:2;33273:18;;;33266:30;33332:34;33312:18;;;33305:62;33403:34;33383:18;;;33376:62;-1:-1:-1;;;33454:19:1;;;33447:52;33516:19;;21912:95:0;33052:489:1;21865:158:0;22057:14;;;;22054:1662;;;7998:6;;-1:-1:-1;;;;;22091:15:0;;;7998:6;;22091:15;;;;:32;;-1:-1:-1;7998:6:0;;-1:-1:-1;;;;;22110:13:0;;;7998:6;;22110:13;;22091:32;:52;;;;-1:-1:-1;;;;;;22127:16:0;;;;22091:52;:77;;;;-1:-1:-1;;;;;;22147:21:0;;22161:6;22147:21;;22091:77;:107;;;;-1:-1:-1;;;;;;22173:25:0;;;;;;:19;:25;;;;;;;;22172:26;22091:107;:135;;;;-1:-1:-1;;;;;;22203:23:0;;;;;;:19;:23;;;;;;;;22202:24;22091:135;22087:1618;;;22402:20;;;;22398:506;;;22464:9;;-1:-1:-1;;;;;22450:24:0;;;22464:9;;22450:24;;;;:49;;-1:-1:-1;22492:6:0;;-1:-1:-1;;;;;22478:21:0;;;22492:6;;22478:21;;22450:49;22446:439;;;22577:16;22592:1;22577:12;:16;:::i;:::-;22564:9;22535:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;22632:16:0;22647:1;22632:12;:16;:::i;:::-;-1:-1:-1;;;;;22597:32:0;;;;;;:28;:32;;;;;;:51;22535:113;22527:179;;;;-1:-1:-1;;;22527:179:0;;33748:2:1;22527:179:0;;;33730:21:1;33787:2;33767:18;;;33760:30;33826:34;33806:18;;;33799:62;-1:-1:-1;;;33877:18:1;;;33870:51;33938:19;;22527:179:0;33546:417:1;22527:179:0;22762:9;22733:39;;;;:28;:39;;;;;;22775:12;22733:54;;;;-1:-1:-1;;;;;22814:32:0;;;;;;:47;22446:439;-1:-1:-1;;;;;22973:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23009:35:0;;;;;;:31;:35;;;;;;;;23008:36;22973:71;22969:721;;;23087:12;;23077:6;:22;;23069:75;;;;-1:-1:-1;;;23069:75:0;;34170:2:1;23069:75:0;;;34152:21:1;34209:2;34189:18;;;34182:30;34248:34;34228:18;;;34221:62;-1:-1:-1;;;34299:18:1;;;34292:38;34347:19;;23069:75:0;33968:404:1;23069:75:0;23201:9;;23184:13;23194:2;23184:9;:13::i;:::-;23175:22;;:6;:22;:::i;:::-;:35;;23167:72;;;;-1:-1:-1;;;23167:72:0;;34579:2:1;23167:72:0;;;34561:21:1;34618:2;34598:18;;;34591:30;-1:-1:-1;;;34637:18:1;;;34630:54;34701:18;;23167:72:0;34377:348:1;23167:72:0;22969:721;;;-1:-1:-1;;;;;23316:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23350:37:0;;;;;;:31;:37;;;;;;;;23349:38;23316:71;23312:378;;;23430:13;;23420:6;:23;;23412:78;;;;-1:-1:-1;;;23412:78:0;;34932:2:1;23412:78:0;;;34914:21:1;34971:2;34951:18;;;34944:30;35010:34;34990:18;;;34983:62;-1:-1:-1;;;35061:18:1;;;35054:40;35111:19;;23412:78:0;34730:406:1;23312:378:0;-1:-1:-1;;;;;23538:35:0;;;;;;:31;:35;;;;;;;;23533:157;;23632:9;;23615:13;23625:2;23615:9;:13::i;:::-;23606:22;;:6;:22;:::i;:::-;:35;;23598:72;;;;-1:-1:-1;;;23598:72:0;;34579:2:1;23598:72:0;;;34561:21:1;34618:2;34598:18;;;34591:30;-1:-1:-1;;;34637:18:1;;;34630:54;34701:18;;23598:72:0;34377:348:1;23598:72:0;23728:28;23759:24;23777:4;23759:9;:24::i;:::-;23843:18;;23728:55;;-1:-1:-1;23819:42:0;;;;;;;23877:22;;-1:-1:-1;23888:11:0;;;;;;;23877:22;:35;;;;-1:-1:-1;23904:8:0;;-1:-1:-1;;;23904:8:0;;;;23903:9;23877:35;:71;;;;-1:-1:-1;;;;;;23917:31:0;;;;;;:25;:31;;;;;;;;23916:32;23877:71;:101;;;;-1:-1:-1;;;;;;23953:25:0;;;;;;:19;:25;;;;;;;;23952:26;23877:101;:129;;;;-1:-1:-1;;;;;;23983:23:0;;;;;;:19;:23;;;;;;;;23982:24;23877:129;23874:232;;;24023:8;:15;;-1:-1:-1;;;;24023:15:0;-1:-1:-1;;;24023:15:0;;;24053:10;:8;:10::i;:::-;24078:8;:16;;-1:-1:-1;;;;24078:16:0;;;23874:232;24122:8;;-1:-1:-1;;;24122:8:0;;;;24121:9;:42;;;;-1:-1:-1;;;;;;24134:29:0;;;;;;:25;:29;;;;;;;;24121:42;:59;;;;-1:-1:-1;24167:13:0;;;;24121:59;:114;;;;;24220:15;;24203:14;;:32;;;;:::i;:::-;24184:15;:51;;24121:114;:144;;;;-1:-1:-1;;;;;;24240:25:0;;;;;;:19;:25;;;;;;;;24239:26;24121:144;24118:204;;;24281:29;:27;:29::i;:::-;-1:-1:-1;;;;;24452:25:0;;24334:12;24452:25;;;:19;:25;;;;;;24349:4;;24452:25;;;:52;;-1:-1:-1;;;;;;24481:23:0;;;;;;:19;:23;;;;;;;;24452:52;24449:99;;;-1:-1:-1;24531:5:0;24449:99;24568:12;24595:20;24709:7;24706:2205;;;27066:18;;27051:12;:33;24771:60;;;;-1:-1:-1;;;;;;24800:31:0;;;;;;:25;:31;;;;;;;;24771:60;:94;;;;-1:-1:-1;;;;;;24836:29:0;;;;;;:25;:29;;;;;;;;24835:30;24771:94;:122;;;;-1:-1:-1;;;;;;24870:23:0;;;;;;:19;:23;;;;;;;;24869:24;24771:122;:142;;;;;24912:1;24897:12;;:16;24771:142;24768:1832;;;27066:18;;27051:12;:33;24951:330;;25260:1;25244:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;24951:330:0;-1:-1:-1;;;;;25305:13:0;;;;;;:9;:13;;;;;;;;25301:210;;-1:-1:-1;;;;;25342:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;25342:20:0;25358:4;25342:20;;;;;;25385:10;:15;;25358:4;;25385:10;;:15;;25358:4;;25385:15;:::i;:::-;;;;-1:-1:-1;;25423:11:0;:20;;;;;;;-1:-1:-1;25423:20:0;;;;;;;;-1:-1:-1;;;;;;25423:20:0;-1:-1:-1;;;;;25423:20:0;;;;;;;;25471;;913:51:1;;;25471:20:0;;901:2:1;886:18;25471:20:0;;;;;;;25301:210;11064:5;25547:12;;25538:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;25531:42;;25636:12;;25618:15;;25611:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25589:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25712:12:0;;25695:14;;25688:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;25667:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;25778:12:0;;25765:10;;25758:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;25743:47;;24768:1832;;;-1:-1:-1;;;;;25855:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25904:1;25888:13;;:17;25855:50;25851:749;;;11064:5;25941:13;;25932:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;25925:43;;26035:13;;26016:16;;26009:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;25987:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26113:13:0;;26095:15;;26088:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;26067:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26181:12:0;;26167:11;;26160:18;;:4;:18;:::i;25851:749::-;-1:-1:-1;;;;;26256:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26306:1;26291:12;;:16;26256:51;26253:347;;;11064:5;26341:12;;26332:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;26325:42;;26430:12;;26412:15;;26405:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26383:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26506:12:0;;26489:14;;26482:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;26461:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;26572:12:0;;26559:10;;26552:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;26537:47;;26253:347;26631:8;;26628:235;;26663:42;26679:4;26693;26700;26663:15;:42::i;:::-;26727:16;;26724:124;;26767:61;26791:4;26806:6;26815:12;26767:15;:61::i;:::-;26885:14;26895:4;26885:14;;:::i;:::-;;;24706:2205;26923:33;26939:4;26945:2;26949:6;26923:15;:33::i;:::-;20793:6171;;;;;20714:6250;;;:::o;28200:1213::-;28241:23;28267:24;28285:4;28267:9;:24::i;:::-;28241:50;;28302:25;28351:17;;28330:18;;:38;;;;:::i;:::-;28302:66;-1:-1:-1;28392:20:0;;;:46;;-1:-1:-1;28416:22:0;;28392:46;28389:60;;;28441:7;;28200:1213::o;28389:60::-;28482:18;;:23;;28503:2;28482:23;:::i;:::-;28464:15;:41;28461:113;;;28539:18;;:23;;28560:2;28539:23;:::i;:::-;28521:41;;28461:113;28586:12;28668:23;28753:1;28733:17;28712:18;;28694:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28668:86;-1:-1:-1;28775:51:0;28792:33;28668:86;28792:15;:33;:::i;:::-;28775:16;:51::i;:::-;29030:18;;28869:21;;;;28848:18;;29030:20;;29049:1;;29030:20;:::i;:::-;29009:42;;:17;:42;:::i;:::-;28988:17;;28975:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;28950:102;-1:-1:-1;29065:33:0;28950:102;29065:33;;:::i;:::-;29144:1;29123:18;:22;;;29156:17;:21;29065:33;-1:-1:-1;29201:19:0;;;;;:42;;;29242:1;29224:15;:19;29201:42;29198:119;;;29259:46;29272:15;29289;29259:12;:46::i;:::-;29350:15;;29342:63;;-1:-1:-1;;;;;29350:15:0;;;;29379:21;;29342:63;;;;29379:21;29350:15;29342:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;28200:1213:0:o;19188:236::-;-1:-1:-1;;;;;19271:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19271:39:0;;;;;;;19321;19271:31;:39;19321:26;:39::i;6301:614::-;-1:-1:-1;;;;;6441:20:0;;6433:70;;;;-1:-1:-1;;;6433:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6522:23:0;;6514:71;;;;-1:-1:-1;;;6514:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6622:17:0;;6598:21;6622:17;;;;;;;;;;;6658:23;;;;6650:74;;;;-1:-1:-1;;;6650:74:0;;35343:2:1;6650:74:0;;;35325:21:1;35382:2;35362:18;;;35355:30;35421:34;35401:18;;;35394:62;-1:-1:-1;;;35472:18:1;;;35465:36;35518:19;;6650:74:0;35141:402:1;6650:74:0;-1:-1:-1;;;;;6760:17:0;;;:9;:17;;;;;;;;;;;6780:22;;;6760:42;;6824:20;;;;;;;;:30;;6796:6;;6760:9;6824:30;;6796:6;;6824:30;:::i;:::-;;;;;;;;6889:9;-1:-1:-1;;;;;6872:35:0;6881:6;-1:-1:-1;;;;;6872:35:0;;6900:6;6872:35;;;;160:25:1;;148:2;133:18;;14:177;6872:35:0;;;;;;;;6422:493;6301:614;;;:::o;18399:207::-;-1:-1:-1;;;;;18487:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;18487:52:0;;;;;;;;;;18555:43;;35716:51:1;;;35783:18;;;35776:50;18555:43:0;;35689:18:1;18555:43:0;;;;;;;18399:207;;:::o;36915:382::-;37003:16;;;37017:1;37003:16;;;;;;;;36979:21;;37003:16;;;;;;;;-1:-1:-1;;37040:9:0;;:16;;;-1:-1:-1;;;37040:16:0;;;;36979:40;;-1:-1:-1;;;;;;37040:9:0;;;;:14;;-1:-1:-1;37040:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37030:4;37035:1;37030:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;37030:26:0;;;-1:-1:-1;;;;;37030:26:0;;;;;37085:4;37067;37072:1;37067:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37067:23:0;;;:7;;;;;;;;;:23;37103:9;;:186;;-1:-1:-1;;;37103:186:0;;:9;;;:60;;37171:11;;37103:186;;:9;;37214:4;;37241:6;;37263:15;;37103:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36968:329;36915:382;:::o;34249:1252::-;34335:15;34318:14;:32;;;34371:20;:38;34447:6;;34440:39;;-1:-1:-1;;;34440:39:0;;34473:4;34440:39;;;913:51:1;-1:-1:-1;;;;;;;34447:6:0;;34440:24;;886:18:1;;34440:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34420:59;;34490:20;34513:24;34531:4;34513:9;:24::i;:::-;34490:47;;34548:16;34598:5;34579:16;;34567:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;34750:6;;34774:9;;34743:52;;-1:-1:-1;;;34743:52:0;;-1:-1:-1;;;;;34774:9:0;;;34743:52;;;18262:51:1;18329:18;;;18322:34;;;34548:55:0;;-1:-1:-1;34642:21:0;;34750:6;;;34743:22;;18235:18:1;;34743:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34841:9:0;;:234;;-1:-1:-1;;;34841:234:0;;-1:-1:-1;;;;;34841:9:0;;;;:28;;:234;;34892:4;;34912:8;;34841:9;;;;34892:4;;35049:15;;34841:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35088:25;35143:12;35116:24;35134:4;35116:9;:24::i;:::-;:39;;;;:::i;:::-;35088:67;-1:-1:-1;35169:21:0;;35166:118;;35206:66;35230:4;35245:6;35254:17;35206:15;:66::i;:::-;35296:23;35322:41;35346:17;35322:21;:41;:::i;:::-;35296:67;-1:-1:-1;35379:19:0;;35376:80;;35414:30;35428:15;35414:13;:30::i;:::-;35473:20;;35484:8;;35473:20;;;;;34297:1204;;;;;;34249:1252::o;27100:573::-;27252:16;;;27266:1;27252:16;;;;;;;;27228:21;;27252:16;;;;;;;;;;-1:-1:-1;27252:16:0;27228:40;;27297:4;27279;27284:1;27279:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27279:23:0;;;:7;;;;;;;;;;:23;;;;27323:9;;:16;;;-1:-1:-1;;;27323:16:0;;;;:9;;;;;:14;;:16;;;;;27279:7;;27323:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27313:4;27318:1;27313:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27313:26:0;;;:7;;;;;;;;;:26;27384:9;;27352:56;;27369:4;;27384:9;27396:11;27352:8;:56::i;:::-;27447:9;;:218;;-1:-1:-1;;;27447:218:0;;-1:-1:-1;;;;;27447:9:0;;;;:60;;:218;;27522:11;;27447:9;;27592:4;;27619;;27639:15;;27447:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27155:518;27100:573;:::o;27685:507::-;27865:9;;27833:56;;27850:4;;-1:-1:-1;;;;;27865:9:0;27877:11;27833:8;:56::i;:::-;27932:9;;:252;;-1:-1:-1;;;27932:252:0;;-1:-1:-1;;;;;27932:9:0;;;;:25;;27965:9;;27932:252;;27998:4;;28018:11;;27932:9;;;;27998:4;;28158:15;;27932:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27685:507;;:::o;196:548: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;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;975:131::-;-1:-1:-1;;;;;1050:31:1;;1040:42;;1030:70;;1096:1;1093;1086:12;1030:70;975:131;:::o;1111:315::-;1179:6;1187;1240:2;1228:9;1219:7;1215:23;1211:32;1208:52;;;1256:1;1253;1246:12;1208:52;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;1416:2;1401:18;;;;1388:32;;-1:-1:-1;;;1111:315:1:o;1623:247::-;1682:6;1735:2;1723:9;1714:7;1710:23;1706:32;1703:52;;;1751:1;1748;1741:12;1703:52;1790:9;1777:23;1809:31;1834:5;1809:31;:::i;:::-;1859:5;1623:247;-1:-1:-1;;;1623:247:1:o;1875:180::-;1934:6;1987:2;1975:9;1966:7;1962:23;1958:32;1955:52;;;2003:1;2000;1993:12;1955:52;-1:-1:-1;2026:23:1;;1875:180;-1:-1:-1;1875:180:1:o;2060:456::-;2137:6;2145;2153;2206:2;2194:9;2185:7;2181:23;2177:32;2174:52;;;2222:1;2219;2212:12;2174:52;2261:9;2248:23;2280:31;2305:5;2280:31;:::i;:::-;2330:5;-1:-1:-1;2387:2:1;2372:18;;2359:32;2400:33;2359:32;2400:33;:::i;:::-;2060:456;;2452:7;;-1:-1:-1;;;2506:2:1;2491:18;;;;2478:32;;2060:456::o;2918:118::-;3004:5;2997:13;2990:21;2983:5;2980:32;2970:60;;3026:1;3023;3016:12;3041:377;3115:6;3123;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3236:9;3223:23;3213:33;;3293:2;3282:9;3278:18;3265:32;3255:42;;3347:2;3336:9;3332:18;3319:32;3360:28;3382:5;3360:28;:::i;:::-;3407:5;3397:15;;;3041:377;;;;;:::o;3423:382::-;3488:6;3496;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;:::-;3673:5;-1:-1:-1;3730:2:1;3715:18;;3702:32;3743:30;3702:32;3743:30;:::i;:::-;3792:7;3782:17;;;3423:382;;;;;:::o;3810:316::-;3887:6;3895;3903;3956:2;3944:9;3935:7;3931:23;3927:32;3924:52;;;3972:1;3969;3962:12;3924:52;-1:-1:-1;;3995:23:1;;;4065:2;4050:18;;4037:32;;-1:-1:-1;4116:2:1;4101:18;;;4088:32;;3810:316;-1:-1:-1;3810:316:1:o;4131:388::-;4199:6;4207;4260:2;4248:9;4239:7;4235:23;4231:32;4228:52;;;4276:1;4273;4266:12;4228:52;4315:9;4302:23;4334:31;4359:5;4334:31;:::i;:::-;4384:5;-1:-1:-1;4441:2:1;4426:18;;4413:32;4454:33;4413:32;4454:33;:::i;4524:367::-;4587:8;4597:6;4651:3;4644:4;4636:6;4632:17;4628:27;4618:55;;4669:1;4666;4659:12;4618:55;-1:-1:-1;4692:20:1;;4735:18;4724:30;;4721:50;;;4767:1;4764;4757:12;4721:50;4804:4;4796:6;4792:17;4780:29;;4864:3;4857:4;4847:6;4844:1;4840:14;4832:6;4828:27;4824:38;4821:47;4818:67;;;4881:1;4878;4871:12;4818:67;4524:367;;;;;:::o;4896:566::-;4988:6;4996;5004;5057:2;5045:9;5036:7;5032:23;5028:32;5025:52;;;5073:1;5070;5063:12;5025:52;5113:9;5100:23;5146:18;5138:6;5135:30;5132:50;;;5178:1;5175;5168:12;5132:50;5217:70;5279:7;5270:6;5259:9;5255:22;5217:70;:::i;:::-;5306:8;;-1:-1:-1;5191:96:1;-1:-1:-1;;5391:2:1;5376:18;;5363:32;5404:28;5363:32;5404:28;:::i;5467:461::-;5520:3;5558:5;5552:12;5585:6;5580:3;5573:19;5611:4;5640:2;5635:3;5631:12;5624:19;;5677:2;5670:5;5666:14;5698:1;5708:195;5722:6;5719:1;5716:13;5708:195;;;5787:13;;-1:-1:-1;;;;;5783:39:1;5771:52;;5843:12;;;;5878:15;;;;5819:1;5737:9;5708:195;;;-1:-1:-1;5919:3:1;;5467:461;-1:-1:-1;;;;;5467:461:1:o;5933:261::-;6112:2;6101:9;6094:21;6075:4;6132:56;6184:2;6173:9;6169:18;6161:6;6132:56;:::i;6199:127::-;6260:10;6255:3;6251:20;6248:1;6241:31;6291:4;6288:1;6281:15;6315:4;6312:1;6305:15;6331:275;6402:2;6396:9;6467:2;6448:13;;-1:-1:-1;;6444:27:1;6432:40;;6502:18;6487:34;;6523:22;;;6484:62;6481:88;;;6549:18;;:::i;:::-;6585:2;6578:22;6331:275;;-1:-1:-1;6331:275:1:o;6611:183::-;6671:4;6704:18;6696:6;6693:30;6690:56;;;6726:18;;:::i;:::-;-1:-1:-1;6771:1:1;6767:14;6783:4;6763:25;;6611:183::o;6799:662::-;6853:5;6906:3;6899:4;6891:6;6887:17;6883:27;6873:55;;6924:1;6921;6914:12;6873:55;6960:6;6947:20;6986:4;7010:60;7026:43;7066:2;7026:43;:::i;:::-;7010:60;:::i;:::-;7104:15;;;7190:1;7186:10;;;;7174:23;;7170:32;;;7135:12;;;;7214:15;;;7211:35;;;7242:1;7239;7232:12;7211:35;7278:2;7270:6;7266:15;7290:142;7306:6;7301:3;7298:15;7290:142;;;7372:17;;7360:30;;7410:12;;;;7323;;7290:142;;;-1:-1:-1;7450:5:1;6799:662;-1:-1:-1;;;;;;6799:662:1:o;7466:1597::-;7629:6;7637;7645;7653;7661;7714:3;7702:9;7693:7;7689:23;7685:33;7682:53;;;7731:1;7728;7721:12;7682:53;7771:9;7758:23;7800:18;7841:2;7833:6;7830:14;7827:34;;;7857:1;7854;7847:12;7827:34;7896:70;7958:7;7949:6;7938:9;7934:22;7896:70;:::i;:::-;7985:8;;-1:-1:-1;7870:96:1;-1:-1:-1;8039:2:1;;-1:-1:-1;8079:18:1;;;8066:32;8110:16;;;8107:36;;;8139:1;8136;8129:12;8107:36;8162:24;;8217:4;8209:13;;8205:27;-1:-1:-1;8195:55:1;;8246:1;8243;8236:12;8195:55;8282:2;8269:16;8305:60;8321:43;8361:2;8321:43;:::i;8305:60::-;8399:15;;;8481:1;8477:10;;;;8469:19;;8465:28;;;8430:12;;;;8505:19;;;8502:39;;;8537:1;8534;8527:12;8502:39;8561:11;;;;8581:217;8597:6;8592:3;8589:15;8581:217;;;8677:3;8664:17;8694:31;8719:5;8694:31;:::i;:::-;8738:18;;8614:12;;;;8776;;;;8581:217;;;8817:5;-1:-1:-1;;;;8875:2:1;8860:18;;8847:32;;-1:-1:-1;8891:16:1;;;8888:36;;;8920:1;8917;8910:12;8888:36;;8943:63;8998:7;8987:8;8976:9;8972:24;8943:63;:::i;:::-;7466:1597;;;;-1:-1:-1;7466:1597:1;;9053:2;9038:18;9025:32;;7466:1597;-1:-1:-1;;;7466:1597:1:o;9068:380::-;9147:1;9143:12;;;;9190;;;9211:61;;9265:4;9257:6;9253:17;9243:27;;9211:61;9318:2;9310:6;9307:14;9287:18;9284:38;9281:161;;9364:10;9359:3;9355:20;9352:1;9345:31;9399:4;9396:1;9389:15;9427:4;9424:1;9417:15;9281:161;;9068:380;;;:::o;9453:356::-;9655:2;9637:21;;;9674:18;;;9667:30;9733:34;9728:2;9713:18;;9706:62;9800:2;9785:18;;9453:356::o;10585:127::-;10646:10;10641:3;10637:20;10634:1;10627:31;10677:4;10674:1;10667:15;10701:4;10698:1;10691:15;10717:168;10790:9;;;10821;;10838:15;;;10832:22;;10818:37;10808:71;;10859:18;;:::i;10890:422::-;10979:1;11022:5;10979:1;11036:270;11057:7;11047:8;11044:21;11036:270;;;11116:4;11112:1;11108:6;11104:17;11098:4;11095:27;11092:53;;;11125:18;;:::i;:::-;11175:7;11165:8;11161:22;11158:55;;;11195:16;;;;11158:55;11274:22;;;;11234:15;;;;11036:270;;;11040:3;10890:422;;;;;:::o;11317:806::-;11366:5;11396:8;11386:80;;-1:-1:-1;11437:1:1;11451:5;;11386:80;11485:4;11475:76;;-1:-1:-1;11522:1:1;11536:5;;11475:76;11567:4;11585:1;11580:59;;;;11653:1;11648:130;;;;11560:218;;11580:59;11610:1;11601:10;;11624:5;;;11648:130;11685:3;11675:8;11672:17;11669:43;;;11692:18;;:::i;:::-;-1:-1:-1;;11748:1:1;11734:16;;11763:5;;11560:218;;11862:2;11852:8;11849:16;11843:3;11837:4;11834:13;11830:36;11824:2;11814:8;11811:16;11806:2;11800:4;11797:12;11793:35;11790:77;11787:159;;;-1:-1:-1;11899:19:1;;;11931:5;;11787:159;11978:34;12003:8;11997:4;11978:34;:::i;:::-;12048:6;12044:1;12040:6;12036:19;12027:7;12024:32;12021:58;;;12059:18;;:::i;:::-;12097:20;;11317:806;-1:-1:-1;;;11317:806:1:o;12128:140::-;12186:5;12215:47;12256:4;12246:8;12242:19;12236:4;12215:47;:::i;12273:217::-;12313:1;12339;12329:132;;12383:10;12378:3;12374:20;12371:1;12364:31;12418:4;12415:1;12408:15;12446:4;12443:1;12436:15;12329:132;-1:-1:-1;12475:9:1;;12273:217::o;13724:125::-;13789:9;;;13810:10;;;13807:36;;;13823:18;;:::i;14692:251::-;14762:6;14815:2;14803:9;14794:7;14790:23;14786:32;14783:52;;;14831:1;14828;14821:12;14783:52;14863:9;14857:16;14882:31;14907:5;14882:31;:::i;14948:127::-;15009:10;15004:3;15000:20;14997:1;14990:31;15040:4;15037:1;15030:15;15064:4;15061:1;15054:15;15080:332;15287:6;15276:9;15269:25;15330:2;15325;15314:9;15310:18;15303:30;15250:4;15350:56;15402:2;15391:9;15387:18;15379:6;15350:56;:::i;:::-;15342:64;15080:332;-1:-1:-1;;;;15080:332:1:o;15417:881::-;15512:6;15543:2;15586;15574:9;15565:7;15561:23;15557:32;15554:52;;;15602:1;15599;15592:12;15554:52;15635:9;15629:16;15668:18;15660:6;15657:30;15654:50;;;15700:1;15697;15690:12;15654:50;15723:22;;15776:4;15768:13;;15764:27;-1:-1:-1;15754:55:1;;15805:1;15802;15795:12;15754:55;15834:2;15828:9;15857:60;15873:43;15913:2;15873:43;:::i;15857:60::-;15951:15;;;16033:1;16029:10;;;;16021:19;;16017:28;;;15982:12;;;;16057:19;;;16054:39;;;16089:1;16086;16079:12;16054:39;16113:11;;;;16133:135;16149:6;16144:3;16141:15;16133:135;;;16215:10;;16203:23;;16166:12;;;;16246;;;;16133:135;;;16287:5;15417:881;-1:-1:-1;;;;;;;15417:881:1:o;17899:184::-;17969:6;18022:2;18010:9;18001:7;17997:23;17993:32;17990:52;;;18038:1;18035;18028:12;17990:52;-1:-1:-1;18061:16:1;;17899:184;-1:-1:-1;17899:184:1:o;18367:245::-;18434:6;18487:2;18475:9;18466:7;18462:23;18458:32;18455:52;;;18503:1;18500;18493:12;18455:52;18535:9;18529:16;18554:28;18576:5;18554:28;:::i;19327:403::-;19529:2;19511:21;;;19568:2;19548:18;;;19541:30;19607:34;19602:2;19587:18;;19580:62;-1:-1:-1;;;19673:2:1;19658:18;;19651:37;19720:3;19705:19;;19327:403::o;20511:135::-;20550:3;20571:17;;;20568:43;;20591:18;;:::i;:::-;-1:-1:-1;20638:1:1;20627:13;;20511:135::o;26182:607::-;-1:-1:-1;;;;;26541:15:1;;;26523:34;;26588:2;26573:18;;26566:34;;;;26631:2;26616:18;;26609:34;;;;26674:2;26659:18;;26652:34;;;;26723:15;;;26717:3;26702:19;;26695:44;26503:3;26755:19;;26748:35;;;;26472:3;26457:19;;26182:607::o;26794:306::-;26882:6;26890;26898;26951:2;26939:9;26930:7;26926:23;26922:32;26919:52;;;26967:1;26964;26957:12;26919:52;26996:9;26990:16;26980:26;;27046:2;27035:9;27031:18;27025:25;27015:35;;27090:2;27079:9;27075:18;27069:25;27059:35;;26794:306;;;;;:::o;28144:128::-;28211:9;;;28232:11;;;28229:37;;;28246:18;;:::i;29231:245::-;29310:6;29318;29371:2;29359:9;29350:7;29346:23;29342:32;29339:52;;;29387:1;29384;29377:12;29339:52;-1:-1:-1;;29410:16:1;;29466:2;29451:18;;;29445:25;29410:16;;29445:25;;-1:-1:-1;29231:245:1:o;30289:401::-;30491:2;30473:21;;;30530:2;30510:18;;;30503:30;30569:34;30564:2;30549:18;;30542:62;-1:-1:-1;;;30635:2:1;30620:18;;30613:35;30680:3;30665:19;;30289:401::o;30695:399::-;30897:2;30879:21;;;30936:2;30916:18;;;30909:30;30975:34;30970:2;30955:18;;30948:62;-1:-1:-1;;;31041:2:1;31026:18;;31019:33;31084:3;31069:19;;30695:399::o;35837:510::-;36108:6;36097:9;36090:25;36151:3;36146:2;36135:9;36131:18;36124:31;36071:4;36172:57;36224:3;36213:9;36209:19;36201:6;36172:57;:::i;:::-;-1:-1:-1;;;;;36265:32:1;;;;36260:2;36245:18;;36238:60;-1:-1:-1;36329:2:1;36314:18;36307:34;36164:65;35837:510;-1:-1:-1;;35837:510:1:o;36352:582::-;36651:6;36640:9;36633:25;36694:6;36689:2;36678:9;36674:18;36667:34;36737:3;36732:2;36721:9;36717:18;36710:31;36614:4;36758:57;36810:3;36799:9;36795:19;36787:6;36758:57;:::i;:::-;-1:-1:-1;;;;;36851:32:1;;;;36846:2;36831:18;;36824:60;-1:-1:-1;36915:3:1;36900:19;36893:35;36750:65;36352:582;-1:-1:-1;;;36352:582:1:o

Swarm Source

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