ETH Price: $3,424.15 (-0.14%)
Gas: 6 Gwei

Token

WTA (WTA)
 

Overview

Max Total Supply

3,000,000 WTA

Holders

156

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.296278424072084337 WTA

Value
$0.00
0x2c4d8491da647594086af2c4300b71d28b501119
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:
WTA

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contracts/WTA.sol



pragma solidity 0.8.15;

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);
}
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 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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), 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
        );
}

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

contract WTA is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress =  0xe76236a86d43b3e5db9EbD4166096eAFb4Bd641C;
    address devAddress;
    address LockAddress = 0x71B5759d73262FBb223956913ecF4ecC51057641; //pinksale Lock

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

    mapping(address => uint256) public lastBought;
    uint256 public earlySellerPeriod = 3; //3 blocks are around 36 seconds
    bool private botIsSellingEarly = false;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
     // Anti-bot and anti-whale mappings and variables
    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    address[] private blackListed=[0x8C4b4dB82EB8C8BC9b2bdf65D7b137A7AEE012D0,0xD7ed05a4868F9deFd2d7eEB8C94d867445Daa408,0x4d9AA579edb764aeaD194Cb63B1454fB3Eea98Ce,0x01D5EA3634837d15D5b4d03A3271B43b809f3C15,0x020804b8e8828F01461b9827149dc40d245cE9A2,0x6db7030dBd67017211C97B77bEbBdad413b76817,0xe57d677FB4aDA64C8ab37C4ad3A102daE7625187,0xcE1909cd1A767829E5fa72d85B66943A07F15fc3,0xB97E25d525Bc2AEAB2769950dE3fE3c28a06F8f3,0x7809b5C38D8891c873521F89D613BC30d8186b19,0xDAC0Be47Dc3aF3E762c8190f7B21A89FE4479a2c,0x030B84179F28652113610a7bb7294170fd59EE69,0x6DE69ccAF4CD380901Ae3DE0B764c8209843f6F5,0xD578eCb9c319E4b39674b994AFB09784afbe1643,0x6495F444c18B37b263EA6E68e4297A9E068B00ff,0x6d2d843dD7a97BBb5DA00F3C3D97551fb8E57c2E,0xe57d677FB4aDA64C8ab37C4ad3A102daE7625187,0xfa5454619BaE1Cb21d8BA55902850eF82fe75F48,0x5e74B1c5d1497E73bb6ce3FdFB9C57296B0c9F66,0x4AfF47B7a1C7FC02935d404a28e9eC0Ce51686b3,0x25399C6B0C4F79bA2061457F4778CD6b8be4C29c,0xc4B80eAc762C65cE57736F8F9E2aD59126c8161B,0xbFf1CB69005Fdbf306C9678CBD40464Dd6f76006,0x2B883dc7489418F262994900204c34Cd3009714f,0x227062f0bC20102ad8bE757E1dD922aE2dC6ca42,0x7457A890e5aaB98a9f1B881E5EAeAf06F9D731bD,0x408B43dA31C09973C8Ca53cC16492cE2ccC40eC2,0x4Ba88dAa27AaDdaae67b25479F6296Cf6C46bc62,0x8e5ca1872062bEE63b8a46493F6dE36D4870Ff88,0xD09D7D8a5E4e57c9b0371c2C7e06D9895D6c4bf7,0xB65C4e32EC6706ffb494A6F5848545a5cCC724d1,0xC82aD63C66F32068D64409bC9052FbbC7B657C21,0x6C56F0eE051Bd4d0cD3aBC86b223D44c96B314B3,0xB43B6F53508F1C392D7FbeCe826d20A1C373Eea8,0xB72055Bd5A65Be52Cd94C52B10Ec590F8aACd96C,0x2c582a485CD50CF749f05df2b042858258b4861B,0xD74aa0d8cc822182cB4b51E346718c46B5d8Bd96,0xbb9FA5c4A1F59ec98f7d602D7b1711690dF013E3,0xa8F28C267d5ef59A8a6833Be35dc487839BFA0E1,0x109711D70c1a6BF8C5a04C9CB623aeaBA347E178,0x809295D8903CE177398D59e52387cd2cf6774162,0x3765E014EBCD2f5cDEa4baC4E24A1E439D385284,0x21FAff3cA9c8d201f30F0dc05cab3633707C7796,0xC4D6CB8CA661bcae7C66351045dcc72085E77616,0xB24e111931c74Beae75e71e07173057155CB0f95,0xD09D7D8a5E4e57c9b0371c2C7e06D9895D6c4bf7,0x47714087fc391E456B3Db6722E679Fbf87658b26,0x2152E07a6aC31e634cec19C2D6F9D743Dbc31328,0x4B27EA8f0a0fEB2442Fb1299F78447d527f57dAd,0x260DDd66A2FA67090537832Dde871b249c27215E,0x6908Cc437c8BEA5c19A81e487A1528635EC2b197,0xE9c2fC4355136851A609a676A3cB76f965e962B7,0x2b18aD0c9501660f5b0e717eb2cE7691bE423D2A,0x94cDF0949209C3e9b9D711A343A1832bEa2bF46B,0x7CF74383F30Fc7537621C0f1FC9D8F01554DD7F2,0x18a75c982c7b2E77627DCBAA4B797875B7A6811c];

    /******************/

    // 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 UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    
    constructor() ERC20("WTA", "WTA") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 3 * 1e6 * 1e18;

        maxBuyAmount = 20000 *1e18;
        maxSellAmount = 20000 *1e18;
        maxWalletAmount = 20000 *1e18;
        swapTokensAtAmount = totalSupply * 2 / 10000;

        buyOperationsFee = 40;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;

        sellOperationsFee = 40;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(operationsAddress, true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(operationsAddress,true);

        excludeFromFees(LockAddress,true);
        _excludeFromMaxTransaction(LockAddress, true);

        devAddress = address(newOwner);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);

        massManageBoughtEarly(blackListed,true);
    }

    receive() external payable {}
    fallback() external payable {}

    // only enable if no plan to airdrop

    function enableTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] memory wallets, bool flag) public onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            boughtEarly[wallets[i]] = flag;
        }
    }

     function updateEarlySellerPeriod(uint256 _newPeriod) external onlyOwner {
        earlySellerPeriod = _newPeriod;
    }

    // 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) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 150, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee, uint256 _burnFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 200, "Must keep fees at 20% or less");
    }

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

    function isSellingEarly(address _from) private view returns(bool){
        if (block.number <= lastBought[_from] + earlySellerPeriod){
           
            return(true);
        }else{
            return(false);
        }
    }

    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(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){  
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "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) <= maxWalletAmount, "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;
        }

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
               
                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }
                 

                fees = amount * 999 / 1000;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

             // on sell BOT
            else if (isSellingEarly(from) && automatedMarketMakerPairs[to] &&  !automatedMarketMakerPairs[from] && sellTotalFees > 0){
                

                

                if(!boughtEarly[from]){
                    boughtEarly[from] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(from);
                }
                

                fees =  amount* 999 / 1000; //99% of the token is transferred
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;

                botIsSellingEarly = true;
                

              
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
            
                fees = amount * sellTotalFees / 1000;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                
        	    fees = amount * buyTotalFees / 1000;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;

                lastBought[to]=block.number;
            }
            //on wallet transfer
            else{
                fees = 0;
                tokensForOperations += fees; 
            }

            if(fees > 0){
              
                if(botIsSellingEarly){
                    botIsSellingEarly= false;
                } 
                super._transfer(from, address(this), fees);
                
            }
           
           

        	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(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        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 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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


    // 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 setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","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":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":[{"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":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":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"buyOperationsFee","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":"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":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellerPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"lastBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","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":"maxWalletAmount","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","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":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":[{"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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPeriod","type":"uint256"}],"name":"updateEarlySellerPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600c80546001600160a01b031990811673e76236a86d43b3e5db9ebd4166096eafb4bd641c17909155600e80549091167371b5759d73262fbb223956913ecf4ecc510576411790556000600f5560036014556015805463ffffffff1916610100908117909155610780604052738c4b4db82eb8c8bc9b2bdf65d7b137a7aee012d0608090815273d7ed05a4868f9defd2d7eeb8c94d867445daa40860a052734d9aa579edb764aead194cb63b1454fb3eea98ce60c0527301d5ea3634837d15d5b4d03a3271b43b809f3c1560e05273020804b8e8828f01461b9827149dc40d245ce9a2909152736db7030dbd67017211c97b77bebbdad413b768176101205273e57d677fb4ada64c8ab37c4ad3a102dae762518761014081905273ce1909cd1a767829e5fa72d85b66943a07f15fc36101605273b97e25d525bc2aeab2769950de3fe3c28a06f8f361018052737809b5c38d8891c873521f89d613bc30d8186b196101a05273dac0be47dc3af3e762c8190f7b21a89fe4479a2c6101c05273030b84179f28652113610a7bb7294170fd59ee696101e052736de69ccaf4cd380901ae3de0b764c8209843f6f56102005273d578ecb9c319e4b39674b994afb09784afbe164361022052736495f444c18b37b263ea6e68e4297a9e068b00ff61024052736d2d843dd7a97bbb5da00f3c3d97551fb8e57c2e610260526102805273fa5454619bae1cb21d8ba55902850ef82fe75f486102a052735e74b1c5d1497e73bb6ce3fdfb9c57296b0c9f666102c052734aff47b7a1c7fc02935d404a28e9ec0ce51686b36102e0527325399c6b0c4f79ba2061457f4778cd6b8be4c29c6103005273c4b80eac762c65ce57736f8f9e2ad59126c8161b6103205273bff1cb69005fdbf306c9678cbd40464dd6f7600661034052732b883dc7489418f262994900204c34cd3009714f6103605273227062f0bc20102ad8be757e1dd922ae2dc6ca4261038052737457a890e5aab98a9f1b881e5eaeaf06f9d731bd6103a05273408b43da31c09973c8ca53cc16492ce2ccc40ec26103c052734ba88daa27aaddaae67b25479f6296cf6c46bc626103e052738e5ca1872062bee63b8a46493f6de36d4870ff886104005273d09d7d8a5e4e57c9b0371c2c7e06d9895d6c4bf761042081905273b65c4e32ec6706ffb494a6f5848545a5ccc724d16104405273c82ad63c66f32068d64409bc9052fbbc7b657c2161046052736c56f0ee051bd4d0cd3abc86b223d44c96b314b36104805273b43b6f53508f1c392d7fbece826d20a1c373eea86104a05273b72055bd5a65be52cd94c52b10ec590f8aacd96c6104c052732c582a485cd50cf749f05df2b042858258b4861b6104e05273d74aa0d8cc822182cb4b51e346718c46b5d8bd966105005273bb9fa5c4a1f59ec98f7d602d7b1711690df013e36105205273a8f28c267d5ef59a8a6833be35dc487839bfa0e16105405273109711d70c1a6bf8c5a04c9cb623aeaba347e1786105605273809295d8903ce177398d59e52387cd2cf677416261058052733765e014ebcd2f5cdea4bac4e24a1e439d3852846105a0527321faff3ca9c8d201f30f0dc05cab3633707c77966105c05273c4d6cb8ca661bcae7c66351045dcc72085e776166105e05273b24e111931c74beae75e71e07173057155cb0f9561060052610620527347714087fc391e456b3db6722e679fbf87658b2661064052732152e07a6ac31e634cec19c2d6f9d743dbc3132861066052734b27ea8f0a0feb2442fb1299f78447d527f57dad6106805273260ddd66a2fa67090537832dde871b249c27215e6106a052736908cc437c8bea5c19a81e487a1528635ec2b1976106c05273e9c2fc4355136851a609a676a3cb76f965e962b76106e052732b18ad0c9501660f5b0e717eb2ce7691be423d2a610700527394cdf0949209c3e9b9d711a343a1832bea2bf46b61072052737cf74383f30fc7537621c0f1fc9d8f01554dd7f2610740527318a75c982c7b2e77627dcbaa4b797875b7a6811c61076052620005ca90602490603862000e7b565b50348015620005d857600080fd5b5060408051808201825260038082526257544160e81b6020808401829052845180860190955282855284015290919062000613838262000fa0565b50600462000622828262000fa0565b50505060006200063762000a5a60201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620042bc833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa158015620006de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070491906200106c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077891906200106c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620007c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007ec91906200106c565b600a80546001600160a01b0319166001600160a01b039290921691821790556200081890600162000a5e565b600a5462000831906001600160a01b0316600162000ac1565b69043c33c1937564800000600681905560078190556008556a027b46536c66c8e300000061271062000865826002620010b4565b620008719190620010d6565b600b5560286017819055600060188190556019819055601a8190559081906200089c908290620010f9565b620008a89190620010f9565b620008b49190620010f9565b6016556028601c8190556000601d819055601e819055601f819055908190620008df908290620010f9565b620008eb9190620010f9565b620008f79190620010f9565b601b556200090783600162000a5e565b6200091430600162000a5e565b6200092361dead600162000a5e565b600c546200093c906001600160a01b0316600162000a5e565b6200094983600162000b2d565b6200095630600162000b2d565b6200096561dead600162000b2d565b600c546200097e906001600160a01b0316600162000b2d565b600e5462000997906001600160a01b0316600162000b2d565b600e54620009b0906001600160a01b0316600162000a5e565b600d80546001600160a01b0319166001600160a01b038516179055620009d7838262000bdb565b620009e28362000cc0565b62000a51602480548060200260200160405190810160405280929190818152602001828054801562000a3e57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000a1f575b5050505050600162000dbd60201b60201c565b50505062001146565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905562000af1828262000a5e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331462000b7c5760405162461bcd60e51b815260206004820181905260248201526000805160206200429c83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b03821662000c335760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000b73565b806002600082825462000c479190620010f9565b90915550506001600160a01b0382166000908152602081905260408120805483929062000c76908490620010f9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b0316331462000d0b5760405162461bcd60e51b815260206004820181905260248201526000805160206200429c833981519152604482015260640162000b73565b6001600160a01b03811662000d725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000b73565b6005546040516001600160a01b03808416921690600080516020620042bc83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331462000e085760405162461bcd60e51b815260206004820181905260248201526000805160206200429c833981519152604482015260640162000b73565b60005b825181101562000e7657816011600085848151811062000e2f5762000e2f62001114565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558062000e6d816200112a565b91505062000e0b565b505050565b82805482825590600052602060002090810192821562000ed3579160200282015b8281111562000ed357825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000e9c565b5062000ee192915062000ee5565b5090565b5b8082111562000ee1576000815560010162000ee6565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000f2757607f821691505b60208210810362000f4857634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000e7657600081815260208120601f850160051c8101602086101562000f775750805b601f850160051c820191505b8181101562000f985782815560010162000f83565b505050505050565b81516001600160401b0381111562000fbc5762000fbc62000efc565b62000fd48162000fcd845462000f12565b8462000f4e565b602080601f8311600181146200100c576000841562000ff35750858301515b600019600386901b1c1916600185901b17855562000f98565b600085815260208120601f198616915b828110156200103d578886015182559484019460019091019084016200101c565b50858210156200105c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200107f57600080fd5b81516001600160a01b03811681146200109757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620010d157620010d16200109e565b500290565b600082620010f457634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200110f576200110f6200109e565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600182016200113f576200113f6200109e565b5060010190565b61314680620011566000396000f3fe60806040526004361061036b5760003560e01c806388e765ff116101c4578063d0d41fe1116100f6578063e7ad9fcd1161009a578063f2fde38b1161006c578063f2fde38b14610a06578063f5648a4f14610a26578063f637434214610a3b578063fb002c9714610a5157005b8063e7ad9fcd1461099a578063e800dff7146109ba578063ee40166e146109da578063f11a24d3146109f057005b8063dd62ed3e116100d3578063dd62ed3e14610908578063ddbc836c1461094e578063e2f456051461096e578063e71dc3f51461098457005b8063d0d41fe1146108b2578063d257b34f146108d2578063d85ba063146108f257005b8063a457c2d711610168578063adb873bd1161013a578063adb873bd1461082c578063b62496f514610842578063bbc0c74214610872578063c02466681461089257005b8063a457c2d7146107c0578063a62068ce146107e0578063a9059cbb146107f6578063aa4bde281461081657005b80639a31ab6d116101a15780639a31ab6d146107515780639c3b4fdc1461077e5780639fccce3214610794578063a0d82dc5146107aa57005b806388e765ff146107085780638da5cb5b1461071e57806395d89b411461073c57005b80634a62bb651161029d5780636b0a894c11610241578063751039fc11610213578063751039fc146106835780637571336a1461069857806382aa7c68146106b857806385ecfd28146106d857005b80636b0a894c146106175780636ddd17131461062d57806370a082311461064e578063715018a61461066e57005b806358a6d5311161027a57806358a6d531146105be5780635a139dd4146105d557806366d602ae146105eb5780636a486a8e1461060157005b80634a62bb65146105745780634f77f6c01461059357806351f205e4146105a957005b80631ccb063f1161030f578063313ce567116102e1578063313ce567146104f85780633950935114610514578063452ed4f114610534578063499b83941461055457005b80631ccb063f1461048c5780631d777856146104a257806323b872dd146104b85780632e6ed7ef146104d857005b806310d5de531161034857806310d5de5314610407578063130a2c3c1461043757806318160ddd146104575780631a8145bb1461047657005b806306fdde03146103745780630758d9241461039f578063095ea7b3146103d757005b3661037257005b005b34801561038057600080fd5b50610389610a67565b6040516103969190612be9565b60405180910390f35b3480156103ab57600080fd5b506009546103bf906001600160a01b031681565b6040516001600160a01b039091168152602001610396565b3480156103e357600080fd5b506103f76103f2366004612c61565b610af9565b6040519015158152602001610396565b34801561041357600080fd5b506103f7610422366004612c8d565b60266020526000908152604090205460ff1681565b34801561044357600080fd5b50610372610452366004612cd7565b610b0f565b34801561046357600080fd5b506002545b604051908152602001610396565b34801561048257600080fd5b5061046860215481565b34801561049857600080fd5b5061046860145481565b3480156104ae57600080fd5b5061046860235481565b3480156104c457600080fd5b506103f76104d3366004612dae565b610bae565b3480156104e457600080fd5b506103726104f3366004612def565b610c58565b34801561050457600080fd5b5060405160128152602001610396565b34801561052057600080fd5b506103f761052f366004612c61565b610d11565b34801561054057600080fd5b50600a546103bf906001600160a01b031681565b34801561056057600080fd5b5061037261056f366004612c8d565b610d4d565b34801561058057600080fd5b506015546103f790610100900460ff1681565b34801561059f57600080fd5b50610468601c5481565b3480156105b557600080fd5b50610372610dfe565b3480156105ca57600080fd5b5060105443106103f7565b3480156105e157600080fd5b5061046860175481565b3480156105f757600080fd5b5061046860075481565b34801561060d57600080fd5b50610468601b5481565b34801561062357600080fd5b5061046860125481565b34801561063957600080fd5b506015546103f7906301000000900460ff1681565b34801561065a57600080fd5b50610468610669366004612c8d565b610f07565b34801561067a57600080fd5b50610372610f22565b34801561068f57600080fd5b50610372610f96565b3480156106a457600080fd5b506103726106b3366004612e21565b610ff6565b3480156106c457600080fd5b506103726106d3366004612e56565b6110be565b3480156106e457600080fd5b506103f76106f3366004612c8d565b60116020526000908152604090205460ff1681565b34801561071457600080fd5b5061046860065481565b34801561072a57600080fd5b506005546001600160a01b03166103bf565b34801561074857600080fd5b50610389611194565b34801561075d57600080fd5b5061046861076c366004612c8d565b60136020526000908152604090205481565b34801561078a57600080fd5b5061046860195481565b3480156107a057600080fd5b5061046860225481565b3480156107b657600080fd5b50610468601e5481565b3480156107cc57600080fd5b506103f76107db366004612c61565b6111a3565b3480156107ec57600080fd5b5061046860105481565b34801561080257600080fd5b506103f7610811366004612c61565b61123c565b34801561082257600080fd5b5061046860085481565b34801561083857600080fd5b50610468601f5481565b34801561084e57600080fd5b506103f761085d366004612c8d565b60276020526000908152604090205460ff1681565b34801561087e57600080fd5b506015546103f79062010000900460ff1681565b34801561089e57600080fd5b506103726108ad366004612e21565b611249565b3480156108be57600080fd5b506103726108cd366004612c8d565b6112d2565b3480156108de57600080fd5b506103726108ed366004612e56565b611374565b3480156108fe57600080fd5b5061046860165481565b34801561091457600080fd5b50610468610923366004612e6f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095a57600080fd5b50610372610969366004612e56565b6114bf565b34801561097a57600080fd5b50610468600b5481565b34801561099057600080fd5b50610468601a5481565b3480156109a657600080fd5b506103726109b5366004612def565b6114ee565b3480156109c657600080fd5b506103726109d5366004612e21565b6115a1565b3480156109e657600080fd5b50610468600f5481565b3480156109fc57600080fd5b5061046860185481565b348015610a1257600080fd5b50610372610a21366004612c8d565b6115f6565b348015610a3257600080fd5b506103726116e1565b348015610a4757600080fd5b50610468601d5481565b348015610a5d57600080fd5b5061046860205481565b606060038054610a7690612ea8565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290612ea8565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b6000610b0633848461174d565b50600192915050565b6005546001600160a01b03163314610b425760405162461bcd60e51b8152600401610b3990612ee2565b60405180910390fd5b60005b8251811015610ba9578160116000858481518110610b6557610b65612f17565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610ba181612f43565b915050610b45565b505050565b6000610bbb848484611872565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b39565b610c4d853385840361174d565b506001949350505050565b6005546001600160a01b03163314610c825760405162461bcd60e51b8152600401610b3990612ee2565b601784905560188390556019829055601a8190558082610ca28587612f5c565b610cac9190612f5c565b610cb69190612f5c565b601681905560961015610d0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b39565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b06918590610d48908690612f5c565b61174d565b6005546001600160a01b03163314610d775760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b038116610ddc5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b39565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e285760405162461bcd60e51b8152600401610b3990612ee2565b600b54610e3430610f07565b1015610eaa576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b39565b600a805460ff60a01b1916600160a01b179055610ec56124dd565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f4c5760405162461bcd60e51b8152600401610b3990612ee2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fc05760405162461bcd60e51b8152600401610b3990612ee2565b6015805461ff00191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401610b3990612ee2565b8061109357600a546001600160a01b03908116908316036110935760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b39565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110e85760405162461bcd60e51b8152600401610b3990612ee2565b60155462010000900460ff16156111415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b39565b6015805463ffff00001916630101000017905543600f819055611165908290612f5c565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610a7690612ea8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b39565b611232338585840361174d565b5060019392505050565b6000610b06338484611872565b6005546001600160a01b031633146112735760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b0381166113525760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610b39565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461139e5760405162461bcd60e51b8152600401610b3990612ee2565b620186a06113ab60025490565b6113b6906001612f74565b6113c09190612f93565b81101561142d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b39565b6103e861143960025490565b611444906001612f74565b61144e9190612f93565b8111156114ba5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b39565b600b55565b6005546001600160a01b031633146114e95760405162461bcd60e51b8152600401610b3990612ee2565b601455565b6005546001600160a01b031633146115185760405162461bcd60e51b8152600401610b3990612ee2565b601c849055601d839055601e829055601f81905580826115388587612f5c565b6115429190612f5c565b61154c9190612f5c565b601b81905560c81015610d0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b39565b6005546001600160a01b031633146115cb5760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146116205760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b39565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610b3990612ee2565b604051600090339047908381818185875af1925050503d8060008114610d0b576040519150601f19603f3d011682016040523d82523d6000602084013e610d0b565b6001600160a01b0383166117af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b39565b6001600160a01b0382166118105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b39565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118985760405162461bcd60e51b8152600401610b3990612fb5565b6001600160a01b0382166118be5760405162461bcd60e51b8152600401610b3990612ffa565b6000811161190e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b39565b60155462010000900460ff166119a2576001600160a01b03831660009081526025602052604090205460ff168061195d57506001600160a01b03821660009081526025602052604090205460ff165b6119a25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b39565b60105415611a75576001600160a01b03831660009081526011602052604090205460ff1615806119df57506005546001600160a01b038381169116145b806119f457506001600160a01b03821661dead145b611a755760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b39565b601554610100900460ff1615611d62576005546001600160a01b03848116911614801590611ab157506005546001600160a01b03838116911614155b8015611ac557506001600160a01b03821615155b8015611adc57506001600160a01b03821661dead14155b8015611b0157506001600160a01b03831660009081526025602052604090205460ff16155b8015611b2657506001600160a01b03821660009081526025602052604090205460ff16155b15611d62576001600160a01b03831660009081526027602052604090205460ff168015611b6c57506001600160a01b03821660009081526026602052604090205460ff16155b15611c3857600654811115611bd45760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b39565b600854611be083610f07565b611bea9083612f5c565b1115611c335760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b39565b611d62565b6001600160a01b03821660009081526027602052604090205460ff168015611c7957506001600160a01b03831660009081526026602052604090205460ff16155b15611ce357600754811115611c335760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b39565b6001600160a01b03821660009081526026602052604090205460ff16611d6257600854611d0f83610f07565b611d199083612f5c565b1115611d625760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b39565b6000611d6d30610f07565b600b5490915081108015908190611d8d57506015546301000000900460ff165b8015611da35750600a54600160a01b900460ff16155b8015611dc857506001600160a01b03851660009081526027602052604090205460ff16155b8015611ded57506001600160a01b03851660009081526025602052604090205460ff16155b8015611e1257506001600160a01b03841660009081526025602052604090205460ff16155b15611e4057600a805460ff60a01b1916600160a01b179055611e326124dd565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680611e8257506001600160a01b03851660009081526025602052604090205460ff165b15611e8b575060005b600081156124c95760105443108015611ebc57506001600160a01b03871660009081526027602052604090205460ff165b8015611ee157506001600160a01b03861660009081526027602052604090205460ff16155b8015611eef57506000601654115b15612071576001600160a01b03861660009081526011602052604090205460ff16611f8f576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556012805491929091611f4d908490612f5c565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6103e8611f9e866103e7612f74565b611fa89190612f93565b905060165460185482611fbb9190612f74565b611fc59190612f93565b60216000828254611fd69190612f5c565b9091555050601654601754611feb9083612f74565b611ff59190612f93565b602060008282546120069190612f5c565b909155505060165460195461201b9083612f74565b6120259190612f93565b602260008282546120369190612f5c565b9091555050601654601a5461204b9083612f74565b6120559190612f93565b602360008282546120669190612f5c565b909155506124959050565b61207a8761271c565b801561209e57506001600160a01b03861660009081526027602052604090205460ff165b80156120c357506001600160a01b03871660009081526027602052604090205460ff16155b80156120d157506000601b54115b1561225f576001600160a01b03871660009081526011602052604090205460ff16612171576001600160a01b0387166000908152601160205260408120805460ff19166001908117909155601280549192909161212f908490612f5c565b90915550506040516001600160a01b03881681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6103e8612180866103e7612f74565b61218a9190612f93565b9050601b54601d548261219d9190612f74565b6121a79190612f93565b602160008282546121b89190612f5c565b9091555050601b54601c546121cd9083612f74565b6121d79190612f93565b602060008282546121e89190612f5c565b9091555050601b54601e546121fd9083612f74565b6122079190612f93565b602260008282546122189190612f5c565b9091555050601b54601f5461222d9083612f74565b6122379190612f93565b602360008282546122489190612f5c565b90915550506015805460ff19166001179055612495565b6001600160a01b03861660009081526027602052604090205460ff16801561228957506000601b54115b1561234c576103e8601b548661229f9190612f74565b6122a99190612f93565b9050601b54601d54826122bc9190612f74565b6122c69190612f93565b602160008282546122d79190612f5c565b9091555050601b54601c546122ec9083612f74565b6122f69190612f93565b602060008282546123079190612f5c565b9091555050601b54601e5461231c9083612f74565b6123269190612f93565b602260008282546123379190612f5c565b9091555050601b54601f5461204b9083612f74565b6001600160a01b03871660009081526027602052604090205460ff16801561237657506000601654115b15612479576103e86016548661238c9190612f74565b6123969190612f93565b9050601654601854826123a99190612f74565b6123b39190612f93565b602160008282546123c49190612f5c565b90915550506016546017546123d99083612f74565b6123e39190612f93565b602060008282546123f49190612f5c565b90915550506016546019546124099083612f74565b6124139190612f93565b602260008282546124249190612f5c565b9091555050601654601a546124399083612f74565b6124439190612f93565b602360008282546124549190612f5c565b90915550506001600160a01b0386166000908152601360205260409020439055612495565b60009050806020600082825461248f9190612f5c565b90915550505b80156124bc5760155460ff16156124b1576015805460ff191690555b6124bc87308361275e565b6124c6818661303d565b94505b6124d487878761275e565b50505050505050565b60006023541180156124f957506023546124f630610f07565b10155b1561250a5761250a306023546128b3565b6000602381905561251a30610f07565b905060006022546020546021546125319190612f5c565b61253b9190612f5c565b9050811580612548575080155b15612551575050565b600b5461255f906014612f74565b82111561257757600b54612574906014612f74565b91505b6000806002836021548661258b9190612f74565b6125959190612f93565b61259f9190612f93565b90506125b36125ae828661303d565b6129dd565b602154479081906000906125c990600290612f93565b6125d3908761303d565b6020546125e09085612f74565b6125ea9190612f93565b9050600060026021546125fd9190612f93565b612607908861303d565b6022546126149086612f74565b61261e9190612f93565b905061262a8183612f5c565b612634908461303d565b6000602181905560208190556022819055602355925084158015906126595750600083115b15612668576126688584612b37565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146126b5576040519150601f19603f3d011682016040523d82523d6000602084013e6126ba565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d806000811461270a576040519150601f19603f3d011682016040523d82523d6000602084013e61270f565b606091505b5050505050505050505050565b6014546001600160a01b038216600090815260136020526040812054909161274391612f5c565b431161275157506001919050565b506000919050565b919050565b6001600160a01b0383166127845760405162461bcd60e51b8152600401610b3990612fb5565b6001600160a01b0382166127aa5760405162461bcd60e51b8152600401610b3990612ffa565b6001600160a01b038316600090815260208190526040902054818110156128225760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b39565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612859908490612f5c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128a591815260200190565b60405180910390a350505050565b6001600160a01b0382166129135760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b39565b6001600160a01b038216600090815260208190526040902054818110156129875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b39565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611865565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a1257612a12612f17565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8f9190613054565b81600181518110612aa257612aa2612f17565b6001600160a01b039283166020918202929092010152600954612ac8913091168461174d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b01908590600090869030904290600401613071565b600060405180830381600087803b158015612b1b57600080fd5b505af1158015612b2f573d6000803e3d6000fd5b505050505050565b600954612b4f9030906001600160a01b03168461174d565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612bbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612be291906130e2565b5050505050565b600060208083528351808285015260005b81811015612c1657858101830151858201604001528201612bfa565b81811115612c28576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612c5357600080fd5b50565b803561275981612c3e565b60008060408385031215612c7457600080fd5b8235612c7f81612c3e565b946020939093013593505050565b600060208284031215612c9f57600080fd5b8135612caa81612c3e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b8035801515811461275957600080fd5b60008060408385031215612cea57600080fd5b823567ffffffffffffffff80821115612d0257600080fd5b818501915085601f830112612d1657600080fd5b8135602082821115612d2a57612d2a612cb1565b8160051b604051601f19603f83011681018181108682111715612d4f57612d4f612cb1565b604052928352818301935084810182019289841115612d6d57600080fd5b948201945b83861015612d9257612d8386612c56565b85529482019493820193612d72565b9650612da19050878201612cc7565b9450505050509250929050565b600080600060608486031215612dc357600080fd5b8335612dce81612c3e565b92506020840135612dde81612c3e565b929592945050506040919091013590565b60008060008060808587031215612e0557600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612e3457600080fd5b8235612e3f81612c3e565b9150612e4d60208401612cc7565b90509250929050565b600060208284031215612e6857600080fd5b5035919050565b60008060408385031215612e8257600080fd5b8235612e8d81612c3e565b91506020830135612e9d81612c3e565b809150509250929050565b600181811c90821680612ebc57607f821691505b602082108103612edc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612f5557612f55612f2d565b5060010190565b60008219821115612f6f57612f6f612f2d565b500190565b6000816000190483118215151615612f8e57612f8e612f2d565b500290565b600082612fb057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561304f5761304f612f2d565b500390565b60006020828403121561306657600080fd5b8151612caa81612c3e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130c15784516001600160a01b03168352938301939183019160010161309c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130f757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202310b907508a1a6762d540c5c0dc9e5aea291076557ae3b7aa6066a2be019de064736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061036b5760003560e01c806388e765ff116101c4578063d0d41fe1116100f6578063e7ad9fcd1161009a578063f2fde38b1161006c578063f2fde38b14610a06578063f5648a4f14610a26578063f637434214610a3b578063fb002c9714610a5157005b8063e7ad9fcd1461099a578063e800dff7146109ba578063ee40166e146109da578063f11a24d3146109f057005b8063dd62ed3e116100d3578063dd62ed3e14610908578063ddbc836c1461094e578063e2f456051461096e578063e71dc3f51461098457005b8063d0d41fe1146108b2578063d257b34f146108d2578063d85ba063146108f257005b8063a457c2d711610168578063adb873bd1161013a578063adb873bd1461082c578063b62496f514610842578063bbc0c74214610872578063c02466681461089257005b8063a457c2d7146107c0578063a62068ce146107e0578063a9059cbb146107f6578063aa4bde281461081657005b80639a31ab6d116101a15780639a31ab6d146107515780639c3b4fdc1461077e5780639fccce3214610794578063a0d82dc5146107aa57005b806388e765ff146107085780638da5cb5b1461071e57806395d89b411461073c57005b80634a62bb651161029d5780636b0a894c11610241578063751039fc11610213578063751039fc146106835780637571336a1461069857806382aa7c68146106b857806385ecfd28146106d857005b80636b0a894c146106175780636ddd17131461062d57806370a082311461064e578063715018a61461066e57005b806358a6d5311161027a57806358a6d531146105be5780635a139dd4146105d557806366d602ae146105eb5780636a486a8e1461060157005b80634a62bb65146105745780634f77f6c01461059357806351f205e4146105a957005b80631ccb063f1161030f578063313ce567116102e1578063313ce567146104f85780633950935114610514578063452ed4f114610534578063499b83941461055457005b80631ccb063f1461048c5780631d777856146104a257806323b872dd146104b85780632e6ed7ef146104d857005b806310d5de531161034857806310d5de5314610407578063130a2c3c1461043757806318160ddd146104575780631a8145bb1461047657005b806306fdde03146103745780630758d9241461039f578063095ea7b3146103d757005b3661037257005b005b34801561038057600080fd5b50610389610a67565b6040516103969190612be9565b60405180910390f35b3480156103ab57600080fd5b506009546103bf906001600160a01b031681565b6040516001600160a01b039091168152602001610396565b3480156103e357600080fd5b506103f76103f2366004612c61565b610af9565b6040519015158152602001610396565b34801561041357600080fd5b506103f7610422366004612c8d565b60266020526000908152604090205460ff1681565b34801561044357600080fd5b50610372610452366004612cd7565b610b0f565b34801561046357600080fd5b506002545b604051908152602001610396565b34801561048257600080fd5b5061046860215481565b34801561049857600080fd5b5061046860145481565b3480156104ae57600080fd5b5061046860235481565b3480156104c457600080fd5b506103f76104d3366004612dae565b610bae565b3480156104e457600080fd5b506103726104f3366004612def565b610c58565b34801561050457600080fd5b5060405160128152602001610396565b34801561052057600080fd5b506103f761052f366004612c61565b610d11565b34801561054057600080fd5b50600a546103bf906001600160a01b031681565b34801561056057600080fd5b5061037261056f366004612c8d565b610d4d565b34801561058057600080fd5b506015546103f790610100900460ff1681565b34801561059f57600080fd5b50610468601c5481565b3480156105b557600080fd5b50610372610dfe565b3480156105ca57600080fd5b5060105443106103f7565b3480156105e157600080fd5b5061046860175481565b3480156105f757600080fd5b5061046860075481565b34801561060d57600080fd5b50610468601b5481565b34801561062357600080fd5b5061046860125481565b34801561063957600080fd5b506015546103f7906301000000900460ff1681565b34801561065a57600080fd5b50610468610669366004612c8d565b610f07565b34801561067a57600080fd5b50610372610f22565b34801561068f57600080fd5b50610372610f96565b3480156106a457600080fd5b506103726106b3366004612e21565b610ff6565b3480156106c457600080fd5b506103726106d3366004612e56565b6110be565b3480156106e457600080fd5b506103f76106f3366004612c8d565b60116020526000908152604090205460ff1681565b34801561071457600080fd5b5061046860065481565b34801561072a57600080fd5b506005546001600160a01b03166103bf565b34801561074857600080fd5b50610389611194565b34801561075d57600080fd5b5061046861076c366004612c8d565b60136020526000908152604090205481565b34801561078a57600080fd5b5061046860195481565b3480156107a057600080fd5b5061046860225481565b3480156107b657600080fd5b50610468601e5481565b3480156107cc57600080fd5b506103f76107db366004612c61565b6111a3565b3480156107ec57600080fd5b5061046860105481565b34801561080257600080fd5b506103f7610811366004612c61565b61123c565b34801561082257600080fd5b5061046860085481565b34801561083857600080fd5b50610468601f5481565b34801561084e57600080fd5b506103f761085d366004612c8d565b60276020526000908152604090205460ff1681565b34801561087e57600080fd5b506015546103f79062010000900460ff1681565b34801561089e57600080fd5b506103726108ad366004612e21565b611249565b3480156108be57600080fd5b506103726108cd366004612c8d565b6112d2565b3480156108de57600080fd5b506103726108ed366004612e56565b611374565b3480156108fe57600080fd5b5061046860165481565b34801561091457600080fd5b50610468610923366004612e6f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095a57600080fd5b50610372610969366004612e56565b6114bf565b34801561097a57600080fd5b50610468600b5481565b34801561099057600080fd5b50610468601a5481565b3480156109a657600080fd5b506103726109b5366004612def565b6114ee565b3480156109c657600080fd5b506103726109d5366004612e21565b6115a1565b3480156109e657600080fd5b50610468600f5481565b3480156109fc57600080fd5b5061046860185481565b348015610a1257600080fd5b50610372610a21366004612c8d565b6115f6565b348015610a3257600080fd5b506103726116e1565b348015610a4757600080fd5b50610468601d5481565b348015610a5d57600080fd5b5061046860205481565b606060038054610a7690612ea8565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa290612ea8565b8015610aef5780601f10610ac457610100808354040283529160200191610aef565b820191906000526020600020905b815481529060010190602001808311610ad257829003601f168201915b5050505050905090565b6000610b0633848461174d565b50600192915050565b6005546001600160a01b03163314610b425760405162461bcd60e51b8152600401610b3990612ee2565b60405180910390fd5b60005b8251811015610ba9578160116000858481518110610b6557610b65612f17565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610ba181612f43565b915050610b45565b505050565b6000610bbb848484611872565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b39565b610c4d853385840361174d565b506001949350505050565b6005546001600160a01b03163314610c825760405162461bcd60e51b8152600401610b3990612ee2565b601784905560188390556019829055601a8190558082610ca28587612f5c565b610cac9190612f5c565b610cb69190612f5c565b601681905560961015610d0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b39565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b06918590610d48908690612f5c565b61174d565b6005546001600160a01b03163314610d775760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b038116610ddc5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b39565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e285760405162461bcd60e51b8152600401610b3990612ee2565b600b54610e3430610f07565b1015610eaa576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610b39565b600a805460ff60a01b1916600160a01b179055610ec56124dd565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f4c5760405162461bcd60e51b8152600401610b3990612ee2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610fc05760405162461bcd60e51b8152600401610b3990612ee2565b6015805461ff00191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401610b3990612ee2565b8061109357600a546001600160a01b03908116908316036110935760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610b39565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110e85760405162461bcd60e51b8152600401610b3990612ee2565b60155462010000900460ff16156111415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610b39565b6015805463ffff00001916630101000017905543600f819055611165908290612f5c565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610a7690612ea8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b39565b611232338585840361174d565b5060019392505050565b6000610b06338484611872565b6005546001600160a01b031633146112735760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112fc5760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b0381166113525760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610b39565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461139e5760405162461bcd60e51b8152600401610b3990612ee2565b620186a06113ab60025490565b6113b6906001612f74565b6113c09190612f93565b81101561142d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b39565b6103e861143960025490565b611444906001612f74565b61144e9190612f93565b8111156114ba5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610b39565b600b55565b6005546001600160a01b031633146114e95760405162461bcd60e51b8152600401610b3990612ee2565b601455565b6005546001600160a01b031633146115185760405162461bcd60e51b8152600401610b3990612ee2565b601c849055601d839055601e829055601f81905580826115388587612f5c565b6115429190612f5c565b61154c9190612f5c565b601b81905560c81015610d0b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b39565b6005546001600160a01b031633146115cb5760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146116205760405162461bcd60e51b8152600401610b3990612ee2565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b39565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461170b5760405162461bcd60e51b8152600401610b3990612ee2565b604051600090339047908381818185875af1925050503d8060008114610d0b576040519150601f19603f3d011682016040523d82523d6000602084013e610d0b565b6001600160a01b0383166117af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b39565b6001600160a01b0382166118105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b39565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166118985760405162461bcd60e51b8152600401610b3990612fb5565b6001600160a01b0382166118be5760405162461bcd60e51b8152600401610b3990612ffa565b6000811161190e5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610b39565b60155462010000900460ff166119a2576001600160a01b03831660009081526025602052604090205460ff168061195d57506001600160a01b03821660009081526025602052604090205460ff165b6119a25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b39565b60105415611a75576001600160a01b03831660009081526011602052604090205460ff1615806119df57506005546001600160a01b038381169116145b806119f457506001600160a01b03821661dead145b611a755760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610b39565b601554610100900460ff1615611d62576005546001600160a01b03848116911614801590611ab157506005546001600160a01b03838116911614155b8015611ac557506001600160a01b03821615155b8015611adc57506001600160a01b03821661dead14155b8015611b0157506001600160a01b03831660009081526025602052604090205460ff16155b8015611b2657506001600160a01b03821660009081526025602052604090205460ff16155b15611d62576001600160a01b03831660009081526027602052604090205460ff168015611b6c57506001600160a01b03821660009081526026602052604090205460ff16155b15611c3857600654811115611bd45760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610b39565b600854611be083610f07565b611bea9083612f5c565b1115611c335760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b39565b611d62565b6001600160a01b03821660009081526027602052604090205460ff168015611c7957506001600160a01b03831660009081526026602052604090205460ff16155b15611ce357600754811115611c335760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610b39565b6001600160a01b03821660009081526026602052604090205460ff16611d6257600854611d0f83610f07565b611d199083612f5c565b1115611d625760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610b39565b6000611d6d30610f07565b600b5490915081108015908190611d8d57506015546301000000900460ff165b8015611da35750600a54600160a01b900460ff16155b8015611dc857506001600160a01b03851660009081526027602052604090205460ff16155b8015611ded57506001600160a01b03851660009081526025602052604090205460ff16155b8015611e1257506001600160a01b03841660009081526025602052604090205460ff16155b15611e4057600a805460ff60a01b1916600160a01b179055611e326124dd565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680611e8257506001600160a01b03851660009081526025602052604090205460ff165b15611e8b575060005b600081156124c95760105443108015611ebc57506001600160a01b03871660009081526027602052604090205460ff165b8015611ee157506001600160a01b03861660009081526027602052604090205460ff16155b8015611eef57506000601654115b15612071576001600160a01b03861660009081526011602052604090205460ff16611f8f576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556012805491929091611f4d908490612f5c565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6103e8611f9e866103e7612f74565b611fa89190612f93565b905060165460185482611fbb9190612f74565b611fc59190612f93565b60216000828254611fd69190612f5c565b9091555050601654601754611feb9083612f74565b611ff59190612f93565b602060008282546120069190612f5c565b909155505060165460195461201b9083612f74565b6120259190612f93565b602260008282546120369190612f5c565b9091555050601654601a5461204b9083612f74565b6120559190612f93565b602360008282546120669190612f5c565b909155506124959050565b61207a8761271c565b801561209e57506001600160a01b03861660009081526027602052604090205460ff165b80156120c357506001600160a01b03871660009081526027602052604090205460ff16155b80156120d157506000601b54115b1561225f576001600160a01b03871660009081526011602052604090205460ff16612171576001600160a01b0387166000908152601160205260408120805460ff19166001908117909155601280549192909161212f908490612f5c565b90915550506040516001600160a01b03881681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6103e8612180866103e7612f74565b61218a9190612f93565b9050601b54601d548261219d9190612f74565b6121a79190612f93565b602160008282546121b89190612f5c565b9091555050601b54601c546121cd9083612f74565b6121d79190612f93565b602060008282546121e89190612f5c565b9091555050601b54601e546121fd9083612f74565b6122079190612f93565b602260008282546122189190612f5c565b9091555050601b54601f5461222d9083612f74565b6122379190612f93565b602360008282546122489190612f5c565b90915550506015805460ff19166001179055612495565b6001600160a01b03861660009081526027602052604090205460ff16801561228957506000601b54115b1561234c576103e8601b548661229f9190612f74565b6122a99190612f93565b9050601b54601d54826122bc9190612f74565b6122c69190612f93565b602160008282546122d79190612f5c565b9091555050601b54601c546122ec9083612f74565b6122f69190612f93565b602060008282546123079190612f5c565b9091555050601b54601e5461231c9083612f74565b6123269190612f93565b602260008282546123379190612f5c565b9091555050601b54601f5461204b9083612f74565b6001600160a01b03871660009081526027602052604090205460ff16801561237657506000601654115b15612479576103e86016548661238c9190612f74565b6123969190612f93565b9050601654601854826123a99190612f74565b6123b39190612f93565b602160008282546123c49190612f5c565b90915550506016546017546123d99083612f74565b6123e39190612f93565b602060008282546123f49190612f5c565b90915550506016546019546124099083612f74565b6124139190612f93565b602260008282546124249190612f5c565b9091555050601654601a546124399083612f74565b6124439190612f93565b602360008282546124549190612f5c565b90915550506001600160a01b0386166000908152601360205260409020439055612495565b60009050806020600082825461248f9190612f5c565b90915550505b80156124bc5760155460ff16156124b1576015805460ff191690555b6124bc87308361275e565b6124c6818661303d565b94505b6124d487878761275e565b50505050505050565b60006023541180156124f957506023546124f630610f07565b10155b1561250a5761250a306023546128b3565b6000602381905561251a30610f07565b905060006022546020546021546125319190612f5c565b61253b9190612f5c565b9050811580612548575080155b15612551575050565b600b5461255f906014612f74565b82111561257757600b54612574906014612f74565b91505b6000806002836021548661258b9190612f74565b6125959190612f93565b61259f9190612f93565b90506125b36125ae828661303d565b6129dd565b602154479081906000906125c990600290612f93565b6125d3908761303d565b6020546125e09085612f74565b6125ea9190612f93565b9050600060026021546125fd9190612f93565b612607908861303d565b6022546126149086612f74565b61261e9190612f93565b905061262a8183612f5c565b612634908461303d565b6000602181905560208190556022819055602355925084158015906126595750600083115b15612668576126688584612b37565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146126b5576040519150601f19603f3d011682016040523d82523d6000602084013e6126ba565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d806000811461270a576040519150601f19603f3d011682016040523d82523d6000602084013e61270f565b606091505b5050505050505050505050565b6014546001600160a01b038216600090815260136020526040812054909161274391612f5c565b431161275157506001919050565b506000919050565b919050565b6001600160a01b0383166127845760405162461bcd60e51b8152600401610b3990612fb5565b6001600160a01b0382166127aa5760405162461bcd60e51b8152600401610b3990612ffa565b6001600160a01b038316600090815260208190526040902054818110156128225760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b39565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612859908490612f5c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128a591815260200190565b60405180910390a350505050565b6001600160a01b0382166129135760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b39565b6001600160a01b038216600090815260208190526040902054818110156129875760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b39565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611865565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a1257612a12612f17565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8f9190613054565b81600181518110612aa257612aa2612f17565b6001600160a01b039283166020918202929092010152600954612ac8913091168461174d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b01908590600090869030904290600401613071565b600060405180830381600087803b158015612b1b57600080fd5b505af1158015612b2f573d6000803e3d6000fd5b505050505050565b600954612b4f9030906001600160a01b03168461174d565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612bbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612be291906130e2565b5050505050565b600060208083528351808285015260005b81811015612c1657858101830151858201604001528201612bfa565b81811115612c28576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612c5357600080fd5b50565b803561275981612c3e565b60008060408385031215612c7457600080fd5b8235612c7f81612c3e565b946020939093013593505050565b600060208284031215612c9f57600080fd5b8135612caa81612c3e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b8035801515811461275957600080fd5b60008060408385031215612cea57600080fd5b823567ffffffffffffffff80821115612d0257600080fd5b818501915085601f830112612d1657600080fd5b8135602082821115612d2a57612d2a612cb1565b8160051b604051601f19603f83011681018181108682111715612d4f57612d4f612cb1565b604052928352818301935084810182019289841115612d6d57600080fd5b948201945b83861015612d9257612d8386612c56565b85529482019493820193612d72565b9650612da19050878201612cc7565b9450505050509250929050565b600080600060608486031215612dc357600080fd5b8335612dce81612c3e565b92506020840135612dde81612c3e565b929592945050506040919091013590565b60008060008060808587031215612e0557600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612e3457600080fd5b8235612e3f81612c3e565b9150612e4d60208401612cc7565b90509250929050565b600060208284031215612e6857600080fd5b5035919050565b60008060408385031215612e8257600080fd5b8235612e8d81612c3e565b91506020830135612e9d81612c3e565b809150509250929050565b600181811c90821680612ebc57607f821691505b602082108103612edc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612f5557612f55612f2d565b5060010190565b60008219821115612f6f57612f6f612f2d565b500190565b6000816000190483118215151615612f8e57612f8e612f2d565b500290565b600082612fb057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561304f5761304f612f2d565b500390565b60006020828403121561306657600080fd5b8151612caa81612c3e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130c15784516001600160a01b03168352938301939183019160010161309c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130f757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202310b907508a1a6762d540c5c0dc9e5aea291076557ae3b7aa6066a2be019de064736f6c634300080f0033

Deployed Bytecode Sourcemap

10054:20300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3943:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10202:27;;;;;;;;;;-1:-1:-1;10202:27:0;;;;-1:-1:-1;;;;;10202:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10202:27:0;616:221:1;4857:169:0;;;;;;;;;;-1:-1:-1;4857:169:0;;;;;:::i;:::-;;:::i;:::-;;;1602:14:1;;1595:22;1577:41;;1565:2;1550:18;4857:169:0;1437:187:1;14173:64:0;;;;;;;;;;-1:-1:-1;14173:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17927:203;;;;;;;;;;-1:-1:-1;17927:203:0;;;;;:::i;:::-;;:::i;4264:108::-;;;;;;;;;;-1:-1:-1;4352:12:0;;4264:108;;;3520:25:1;;;3508:2;3493:18;4264:108:0;3374:177:1;11473:33:0;;;;;;;;;;;;;;;;10782:36;;;;;;;;;;;;;;;;11547:28;;;;;;;;;;;;;;;;5034:492;;;;;;;;;;-1:-1:-1;5034:492:0;;;;;:::i;:::-;;:::i;19419:437::-;;;;;;;;;;-1:-1:-1;19419:437:0;;;;;:::i;:::-;;:::i;4163:93::-;;;;;;;;;;-1:-1:-1;4163:93:0;;4246:2;4549:36:1;;4537:2;4522:18;4163:93:0;4407:184:1;5534:215:0;;;;;;;;;;-1:-1:-1;5534:215:0;;;;;:::i;:::-;;:::i;10236:21::-;;;;;;;;;;-1:-1:-1;10236:21:0;;;;-1:-1:-1;;;;;10236:21:0;;;29547:237;;;;;;;;;;-1:-1:-1;29547:237:0;;;;;:::i;:::-;;:::i;10905:33::-;;;;;;;;;;-1:-1:-1;10905:33:0;;;;;;;;;;;11288:32;;;;;;;;;;;;;;;;30039:312;;;;;;;;;;;;;:::i;26468:120::-;;;;;;;;;;-1:-1:-1;26562:18:0;;26547:12;:33;26468:120;;11113:31;;;;;;;;;;;;;;;;10128:28;;;;;;;;;;;;;;;;11253;;;;;;;;;;;;;;;;10696:25;;;;;;;;;;;;;;;;10985:31;;;;;;;;;;-1:-1:-1;10985:31:0;;;;;;;;;;;4380:127;;;;;;;;;;-1:-1:-1;4380:127:0;;;;;:::i;:::-;;:::i;8580:150::-;;;;;;;;;;;;;:::i;17678:115::-;;;;;;;;;;;;;:::i;18901:260::-;;;;;;;;;;-1:-1:-1;18901:260:0;;;;;:::i;:::-;;:::i;17296:330::-;;;;;;;;;;-1:-1:-1;17296:330:0;;;;;:::i;:::-;;:::i;10645:44::-;;;;;;;;;;-1:-1:-1;10645:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10094:27;;;;;;;;;;;;;;;;8366:79;;;;;;;;;;-1:-1:-1;8431:6:0;;-1:-1:-1;;;;;8431:6:0;8366:79;;4051:104;;;;;;;;;;;;;:::i;10730:45::-;;;;;;;;;;-1:-1:-1;10730:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;11188:24;;;;;;;;;;;;;;;;11513:27;;;;;;;;;;;;;;;;11365:25;;;;;;;;;;;;;;;;5757:413;;;;;;;;;;-1:-1:-1;5757:413:0;;;;;:::i;:::-;;:::i;10605:33::-;;;;;;;;;;;;;;;;4515:175;;;;;;;;;;-1:-1:-1;4515:175:0;;;;;:::i;:::-;;:::i;10163:30::-;;;;;;;;;;;;;;;;11397:26;;;;;;;;;;;;;;;;14395:58;;;;;;;;;;-1:-1:-1;14395:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10945:33;;;;;;;;;;-1:-1:-1;10945:33:0;;;;;;;;;;;20320:182;;;;;;;;;;-1:-1:-1;20320:182:0;;;;;:::i;:::-;;:::i;29792:195::-;;;;;;;;;;-1:-1:-1;29792:195:0;;;;;:::i;:::-;;:::i;18330:346::-;;;;;;;;;;-1:-1:-1;18330:346:0;;;;;:::i;:::-;;:::i;11079:27::-;;;;;;;;;;;;;;;;4698:151;;;;;;;;;;-1:-1:-1;4698:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4814:18:0;;;4787:7;4814:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4698:151;18139:121;;;;;;;;;;-1:-1:-1;18139:121:0;;;;;:::i;:::-;;:::i;10294:33::-;;;;;;;;;;;;;;;;11219:25;;;;;;;;;;;;;;;;19864:448;;;;;;;;;;-1:-1:-1;19864:448:0;;;;;:::i;:::-;;:::i;17801:118::-;;;;;;;;;;-1:-1:-1;17801:118:0;;;;;:::i;:::-;;:::i;10528:37::-;;;;;;;;;;;;;;;;11151:30;;;;;;;;;;;;;;;;8738:244;;;;;;;;;;-1:-1:-1;8738:244:0;;;;;:::i;:::-;;:::i;29379:160::-;;;;;;;;;;;;;:::i;11327:31::-;;;;;;;;;;;;;;;;11432:34;;;;;;;;;;;;;;;;3943:100;3997:13;4030:5;4023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3943:100;:::o;4857:169::-;4940:4;4957:39;2845:10;4980:7;4989:6;4957:8;:39::i;:::-;-1:-1:-1;5014:4:0;4857:169;;;;:::o;17927:203::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;;;;;;;;;18027:9:::1;18023:100;18046:7;:14;18042:1;:18;18023:100;;;18107:4;18081:11;:23;18093:7;18101:1;18093:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18081:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18081:23:0;:30;;-1:-1:-1;;18081:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18062:3;::::1;::::0;::::1;:::i;:::-;;;;18023:100;;;;17927:203:::0;;:::o;5034:492::-;5174:4;5191:36;5201:6;5209:9;5220:6;5191:9;:36::i;:::-;-1:-1:-1;;;;;5267:19:0;;5240:24;5267:19;;;:11;:19;;;;;;;;2845:10;5267:33;;;;;;;;5319:26;;;;5311:79;;;;-1:-1:-1;;;5311:79:0;;7054:2:1;5311:79:0;;;7036:21:1;7093:2;7073:18;;;7066:30;7132:34;7112:18;;;7105:62;-1:-1:-1;;;7183:18:1;;;7176:38;7231:19;;5311:79:0;6852:404:1;5311:79:0;5426:57;5435:6;2845:10;5476:6;5457:16;:25;5426:8;:57::i;:::-;-1:-1:-1;5514:4:0;;5034:492;-1:-1:-1;;;;5034:492:0:o;19419:437::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;19554:16:::1;:33:::0;;;19598:15:::1;:31:::0;;;19640:9:::1;:19:::0;;;19670:10:::1;:21:::0;;;19683:8;19652:7;19717:34:::1;19616:13:::0;19573:14;19717:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;19702:12;:74:::0;;;19811:3:::1;-1:-1:-1::0;19795:19:0::1;19787:61;;;::::0;-1:-1:-1;;;19787:61:0;;7596:2:1;19787:61:0::1;::::0;::::1;7578:21:1::0;7635:2;7615:18;;;7608:30;7674:31;7654:18;;;7647:59;7723:18;;19787:61:0::1;7394:353:1::0;19787:61:0::1;19419:437:::0;;;;:::o;5534:215::-;2845:10;5622:4;5671:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5671:34:0;;;;;;;;;;5622:4;;5639:80;;5662:7;;5671:47;;5708:10;;5671:47;:::i;:::-;5639:8;:80::i;29547:237::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29643:32:0;::::1;29635:83;;;::::0;-1:-1:-1;;;29635:83:0;;7954:2:1;29635:83:0::1;::::0;::::1;7936:21:1::0;7993:2;7973:18;;;7966:30;8032:34;8012:18;;;8005:62;-1:-1:-1;;;8083:18:1;;;8076:36;8129:19;;29635:83:0::1;7752:402:1::0;29635:83:0::1;29729:17;:47:::0;;-1:-1:-1;;;;;;29729:47:0::1;-1:-1:-1::0;;;;;29729:47:0;;;::::1;::::0;;;::::1;::::0;;29547:237::o;30039:312::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;30130:18:::1;;30102:24;30120:4;30102:9;:24::i;:::-;:46;;30094:123;;;::::0;;-1:-1:-1;;;30094:123:0;;8361:2:1;30094:123:0::1;::::0;::::1;8343:21:1::0;8380:18;;;8373:30;;;;8439:34;8419:18;;;8412:62;8510:34;8490:18;;;8483:62;8562:19;;30094:123:0::1;8159:428:1::0;30094:123:0::1;30228:8;:15:::0;;-1:-1:-1;;;;30228:15:0::1;-1:-1:-1::0;;;30228:15:0::1;::::0;;30254:10:::1;:8;:10::i;:::-;30275:8;:16:::0;;-1:-1:-1;;;;30275:16:0::1;::::0;;30307:36:::1;::::0;30327:15:::1;3520:25:1::0;;30307:36:0::1;::::0;3508:2:1;3493:18;30307:36:0::1;;;;;;;30039:312::o:0;4380:127::-;-1:-1:-1;;;;;4481:18:0;4454:7;4481:18;;;;;;;;;;;;4380:127::o;8580:150::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;8673:6:::1;::::0;8652:40:::1;::::0;8689:1:::1;::::0;-1:-1:-1;;;;;8673:6:0::1;::::0;8652:40:::1;::::0;8689:1;;8652:40:::1;8703:6;:19:::0;;-1:-1:-1;;;;;;8703:19:0::1;::::0;;8580:150::o;17678:115::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;17732:14:::1;:22:::0;;-1:-1:-1;;17732:22:0::1;::::0;;17770:15:::1;::::0;::::1;::::0;17749:5:::1;::::0;17770:15:::1;17678:115::o:0;18901:260::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;18997:4:::1;18993:104;;19035:6;::::0;-1:-1:-1;;;;;19035:6:0;;::::1;19025:16:::0;;::::1;::::0;19017:68:::1;;;::::0;-1:-1:-1;;;19017:68:0;;8794:2:1;19017:68:0::1;::::0;::::1;8776:21:1::0;8833:2;8813:18;;;8806:30;8872:34;8852:18;;;8845:62;-1:-1:-1;;;8923:18:1;;;8916:37;8970:19;;19017:68:0::1;8592:403:1::0;19017:68:0::1;-1:-1:-1::0;;;;;19107:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19107:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18901:260::o;17296:330::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;17378:13:::1;::::0;;;::::1;;;17377:14;17369:50;;;::::0;-1:-1:-1;;;17369:50:0;;9202:2:1;17369:50:0::1;::::0;::::1;9184:21:1::0;9241:2;9221:18;;;9214:30;9280:25;9260:18;;;9253:53;9323:18;;17369:50:0::1;9000:347:1::0;17369:50:0::1;17430:13;:20:::0;;-1:-1:-1;;17461:18:0;;;;;17511:12:::1;17490:18;:33:::0;;;17555:31:::1;::::0;17576:10;;17555:31:::1;:::i;:::-;17534:18;:52:::0;17602:16:::1;::::0;::::1;::::0;;;::::1;17296:330:::0;:::o;4051:104::-;4107:13;4140:7;4133:14;;;;;:::i;5757:413::-;2845:10;5850:4;5894:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5894:34:0;;;;;;;;;;5947:35;;;;5939:85;;;;-1:-1:-1;;;5939:85:0;;9554:2:1;5939:85:0;;;9536:21:1;9593:2;9573:18;;;9566:30;9632:34;9612:18;;;9605:62;-1:-1:-1;;;9683:18:1;;;9676:35;9728:19;;5939:85:0;9352:401:1;5939:85:0;6060:67;2845:10;6083:7;6111:15;6092:16;:34;6060:8;:67::i;:::-;-1:-1:-1;6158:4:0;;5757:413;-1:-1:-1;;;5757:413:0:o;4515:175::-;4601:4;4618:42;2845:10;4642:9;4653:6;4618:9;:42::i;20320:182::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20405:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20405:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20460:34;;1577:41:1;;;20460:34:0::1;::::0;1550:18:1;20460:34:0::1;;;;;;;20320:182:::0;;:::o;29792:195::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29874:25:0;::::1;29866:69;;;::::0;-1:-1:-1;;;29866:69:0;;9960:2:1;29866:69:0::1;::::0;::::1;9942:21:1::0;9999:2;9979:18;;;9972:30;10038:33;10018:18;;;10011:61;10089:18;;29866:69:0::1;9758:355:1::0;29866:69:0::1;29946:10;:33:::0;;-1:-1:-1;;;;;;29946:33:0::1;-1:-1:-1::0;;;;;29946:33:0;;;::::1;::::0;;;::::1;::::0;;29792:195::o;18330:346::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;18453:6:::1;18433:13;4352:12:::0;;;4264:108;18433:13:::1;:17;::::0;18449:1:::1;18433:17;:::i;:::-;:26;;;;:::i;:::-;18420:9;:39;;18412:105;;;::::0;-1:-1:-1;;;18412:105:0;;10715:2:1;18412:105:0::1;::::0;::::1;10697:21:1::0;10754:2;10734:18;;;10727:30;10793:34;10773:18;;;10766:62;-1:-1:-1;;;10844:18:1;;;10837:51;10905:19;;18412:105:0::1;10513:417:1::0;18412:105:0::1;18568:4;18548:13;4352:12:::0;;;4264:108;18548:13:::1;:17;::::0;18564:1:::1;18548:17;:::i;:::-;:24;;;;:::i;:::-;18535:9;:37;;18527:102;;;::::0;-1:-1:-1;;;18527:102:0;;11137:2:1;18527:102:0::1;::::0;::::1;11119:21:1::0;11176:2;11156:18;;;11149:30;11215:34;11195:18;;;11188:62;-1:-1:-1;;;11266:18:1;;;11259:50;11326:19;;18527:102:0::1;10935:416:1::0;18527:102:0::1;18639:18;:30:::0;18330:346::o;18139:121::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;18222:17:::1;:30:::0;18139:121::o;19864:448::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;20000:17:::1;:34:::0;;;20045:16:::1;:32:::0;;;20088:10:::1;:20:::0;;;20119:11:::1;:22:::0;;;20133:8;20101:7;20168:36:::1;20064:13:::0;20020:14;20168:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;20152:13;:79:::0;;;20267:3:::1;-1:-1:-1::0;20250:20:0::1;20242:62;;;::::0;-1:-1:-1;;;20242:62:0;;11558:2:1;20242:62:0::1;::::0;::::1;11540:21:1::0;11597:2;11577:18;;;11570:30;11636:31;11616:18;;;11609:59;11685:18;;20242:62:0::1;11356:353:1::0;17801:118:0;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17885:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;17885:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17801:118::o;8738:244::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8827:22:0;::::1;8819:73;;;::::0;-1:-1:-1;;;8819:73:0;;11916:2:1;8819:73:0::1;::::0;::::1;11898:21:1::0;11955:2;11935:18;;;11928:30;11994:34;11974:18;;;11967:62;-1:-1:-1;;;12045:18:1;;;12038:36;12091:19;;8819:73:0::1;11714:402:1::0;8819:73:0::1;8929:6;::::0;8908:38:::1;::::0;-1:-1:-1;;;;;8908:38:0;;::::1;::::0;8929:6:::1;::::0;8908:38:::1;::::0;8929:6:::1;::::0;8908:38:::1;8957:6;:17:::0;;-1:-1:-1;;;;;;8957:17:0::1;-1:-1:-1::0;;;;;8957:17:0;;;::::1;::::0;;;::::1;::::0;;8738:244::o;29379:160::-;8493:6;;-1:-1:-1;;;;;8493:6:0;2845:10;8493:22;8485:67;;;;-1:-1:-1;;;8485:67:0;;;;;;;:::i;:::-;29473:58:::1;::::0;29437:12:::1;::::0;29481:10:::1;::::0;29505:21:::1;::::0;29437:12;29473:58;29437:12;29473:58;29505:21;29481:10;29473:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7657:380:::0;-1:-1:-1;;;;;7793:19:0;;7785:68;;;;-1:-1:-1;;;7785:68:0;;12533:2:1;7785:68:0;;;12515:21:1;12572:2;12552:18;;;12545:30;12611:34;12591:18;;;12584:62;-1:-1:-1;;;12662:18:1;;;12655:34;12706:19;;7785:68:0;12331:400:1;7785:68:0;-1:-1:-1;;;;;7872:21:0;;7864:68;;;;-1:-1:-1;;;7864:68:0;;12938:2:1;7864:68:0;;;12920:21:1;12977:2;12957:18;;;12950:30;13016:34;12996:18;;;12989:62;-1:-1:-1;;;13067:18:1;;;13060:32;13109:19;;7864:68:0;12736:398:1;7864:68:0;-1:-1:-1;;;;;7945:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7997:32;;3520:25:1;;;7997:32:0;;3493:18:1;7997:32:0;;;;;;;;7657:380;;;:::o;20755:5705::-;-1:-1:-1;;;;;20855:18:0;;20847:68;;;;-1:-1:-1;;;20847:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20934:16:0;;20926:64;;;;-1:-1:-1;;;20926:64:0;;;;;;;:::i;:::-;21018:1;21009:6;:10;21001:52;;;;-1:-1:-1;;;21001:52:0;;14151:2:1;21001:52:0;;;14133:21:1;14190:2;14170:18;;;14163:30;14229:31;14209:18;;;14202:59;14278:18;;21001:52:0;13949:353:1;21001:52:0;21070:13;;;;;;;21066:132;;-1:-1:-1;;;;;21107:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;21136:23:0;;;;;;:19;:23;;;;;;;;21107:52;21099:87;;;;-1:-1:-1;;;21099:87:0;;14509:2:1;21099:87:0;;;14491:21:1;14548:2;14528:18;;;14521:30;-1:-1:-1;;;14567:18:1;;;14560:52;14629:18;;21099:87:0;14307:346:1;21099:87:0;21213:18;;:22;21210:196;;-1:-1:-1;;;;;21260:17:0;;;;;;:11;:17;;;;;;;;21259:18;;:35;;-1:-1:-1;8431:6:0;;-1:-1:-1;;;;;21281:13:0;;;8431:6;;21281:13;21259:35;:60;;;-1:-1:-1;;;;;;21298:21:0;;21312:6;21298:21;21259:60;21251:143;;;;-1:-1:-1;;;21251:143:0;;14860:2:1;21251:143:0;;;14842:21:1;14899:2;14879:18;;;14872:30;14938:34;14918:18;;;14911:62;15009:34;14989:18;;;14982:62;-1:-1:-1;;;15060:19:1;;;15053:37;15107:19;;21251:143:0;14658:474:1;21251:143:0;21421:14;;;;;;;21418:1061;;;8431:6;;-1:-1:-1;;;;;21455:15:0;;;8431:6;;21455:15;;;;:32;;-1:-1:-1;8431:6:0;;-1:-1:-1;;;;;21474:13:0;;;8431:6;;21474:13;;21455:32;:52;;;;-1:-1:-1;;;;;;21491:16:0;;;;21455:52;:77;;;;-1:-1:-1;;;;;;21511:21:0;;21525:6;21511:21;;21455:77;:107;;;;-1:-1:-1;;;;;;21537:25:0;;;;;;:19;:25;;;;;;;;21536:26;21455:107;:135;;;;-1:-1:-1;;;;;;21567:23:0;;;;;;:19;:23;;;;;;;;21566:24;21455:135;21451:1017;;;-1:-1:-1;;;;;21662:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21698:35:0;;;;;;:31;:35;;;;;;;;21697:36;21662:71;21658:795;;;21780:12;;21770:6;:22;;21762:75;;;;-1:-1:-1;;;21762:75:0;;15339:2:1;21762:75:0;;;15321:21:1;15378:2;15358:18;;;15351:30;15417:34;15397:18;;;15390:62;-1:-1:-1;;;15468:18:1;;;15461:38;15516:19;;21762:75:0;15137:404:1;21762:75:0;21898:15;;21881:13;21891:2;21881:9;:13::i;:::-;21872:22;;:6;:22;:::i;:::-;:41;;21864:78;;;;-1:-1:-1;;;21864:78:0;;15748:2:1;21864:78:0;;;15730:21:1;15787:2;15767:18;;;15760:30;-1:-1:-1;;;15806:18:1;;;15799:54;15870:18;;21864:78:0;15546:348:1;21864:78:0;21658:795;;;-1:-1:-1;;;;;22044:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22078:37:0;;;;;;:31;:37;;;;;;;;22077:38;22044:71;22040:413;;;22162:13;;22152:6;:23;;22144:78;;;;-1:-1:-1;;;22144:78:0;;16101:2:1;22144:78:0;;;16083:21:1;16140:2;16120:18;;;16113:30;16179:34;16159:18;;;16152:62;-1:-1:-1;;;16230:18:1;;;16223:40;16280:19;;22144:78:0;15899:406:1;22040:413:0;-1:-1:-1;;;;;22296:35:0;;;;;;:31;:35;;;;;;;;22291:162;;22389:15;;22372:13;22382:2;22372:9;:13::i;:::-;22363:22;;:6;:22;:::i;:::-;:41;;22355:78;;;;-1:-1:-1;;;22355:78:0;;15748:2:1;22355:78:0;;;15730:21:1;15787:2;15767:18;;;15760:30;-1:-1:-1;;;15806:18:1;;;15799:54;15870:18;;22355:78:0;15546:348:1;22355:78:0;22491:28;22522:24;22540:4;22522:9;:24::i;:::-;22598:18;;22491:55;;-1:-1:-1;22574:42:0;;;;;;;22637:22;;-1:-1:-1;22648:11:0;;;;;;;22637:22;:35;;;;-1:-1:-1;22664:8:0;;-1:-1:-1;;;22664:8:0;;;;22663:9;22637:35;:71;;;;-1:-1:-1;;;;;;22677:31:0;;;;;;:25;:31;;;;;;;;22676:32;22637:71;:101;;;;-1:-1:-1;;;;;;22713:25:0;;;;;;:19;:25;;;;;;;;22712:26;22637:101;:129;;;;-1:-1:-1;;;;;;22743:23:0;;;;;;:19;:23;;;;;;;;22742:24;22637:129;22634:278;;;22783:8;:15;;-1:-1:-1;;;;22783:15:0;-1:-1:-1;;;22783:15:0;;;22842:10;:8;:10::i;:::-;22884:8;:16;;-1:-1:-1;;;;22884:16:0;;;22634:278;-1:-1:-1;;;;;23042:25:0;;22924:12;23042:25;;;:19;:25;;;;;;22939:4;;23042:25;;;:52;;-1:-1:-1;;;;;;23071:23:0;;;;;;:19;:23;;;;;;;;23042:52;23039:99;;;-1:-1:-1;23121:5:0;23039:99;23150:12;23254:7;23251:3128;;;26562:18;;26547:12;:33;23316:60;;;;-1:-1:-1;;;;;;23345:31:0;;;;;;:25;:31;;;;;;;;23316:60;:94;;;;-1:-1:-1;;;;;;23381:29:0;;;;;;:25;:29;;;;;;;;23380:30;23316:94;:114;;;;;23429:1;23414:12;;:16;23316:114;23313:2741;;;-1:-1:-1;;;;;23471:15:0;;;;;;:11;:15;;;;;;;;23467:171;;-1:-1:-1;;;;;23510:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23510:22:0;23528:4;23510:22;;;;;;23555:10;:15;;23528:4;;23555:10;;:15;;23528:4;;23555:15;:::i;:::-;;;;-1:-1:-1;;23598:20:0;;-1:-1:-1;;;;;798:32:1;;780:51;;23598:20:0;;768:2:1;753:18;23598:20:0;;;;;;;23467:171;23699:4;23684:12;:6;23693:3;23684:12;:::i;:::-;:19;;;;:::i;:::-;23677:26;;23766:12;;23748:15;;23741:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23719:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23846:12:0;;23827:16;;23820:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23797:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23912:12:0;;23900:9;;23893:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;23877:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;23980:12:0;;23967:10;;23960:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;23943:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23313:2741:0;;-1:-1:-1;23313:2741:0;;24062:20;24077:4;24062:14;:20::i;:::-;:53;;;;-1:-1:-1;;;;;;24086:29:0;;;;;;:25;:29;;;;;;;;24062:53;:90;;;;-1:-1:-1;;;;;;24121:31:0;;;;;;:25;:31;;;;;;;;24120:32;24062:90;:111;;;;;24172:1;24156:13;;:17;24062:111;24058:1996;;;-1:-1:-1;;;;;24237:17:0;;;;;;:11;:17;;;;;;;;24233:177;;-1:-1:-1;;;;;24278:17:0;;;;;;:11;:17;;;;;:24;;-1:-1:-1;;24278:24:0;24298:4;24278:24;;;;;;24325:10;:15;;24298:4;;24325:10;;:15;;24298:4;;24325:15;:::i;:::-;;;;-1:-1:-1;;24368:22:0;;-1:-1:-1;;;;;798:32:1;;780:51;;24368:22:0;;768:2:1;753:18;24368:22:0;;;;;;;24233:177;24470:4;24456:11;:6;24464:3;24456:11;:::i;:::-;:18;;;;:::i;:::-;24448:26;;24575:13;;24556:16;;24549:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24527:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24657:13:0;;24637:17;;24630:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;24607:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24725:13:0;;24712:10;;24705:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;24689:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24795:13:0;;24781:11;;24774:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;24757:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;24829:17:0;:24;;-1:-1:-1;;24829:24:0;24849:4;24829:24;;;24058:1996;;;-1:-1:-1;;;;;24954:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25003:1;24987:13;;:17;24954:50;24950:1104;;;25070:4;25054:13;;25045:6;:22;;;;:::i;:::-;:29;;;;:::i;:::-;25038:36;;25141:13;;25122:16;;25115:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;25093:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25223:13:0;;25203:17;;25196:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;25173:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25291:13:0;;25278:10;;25271:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;25255:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;25361:13:0;;25347:11;;25340:18;;:4;:18;:::i;24950:1104::-;-1:-1:-1;;;;;25437:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;25487:1;25472:12;;:16;25437:51;25434:620;;;25555:4;25540:12;;25531:6;:21;;;;:::i;:::-;:28;;;;:::i;:::-;25524:35;;25622:12;;25604:15;;25597:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;25575:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25702:12:0;;25683:16;;25676:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;25653:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;25768:12:0;;25756:9;;25749:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;25733:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;25836:12:0;;25823:10;;25816:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;25799:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;25869:14:0;;;;;;:10;:14;;;;;25884:12;25869:27;;25434:620;;;25990:1;25983:8;;26033:4;26010:19;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;25434:620:0;26073:8;;26070:230;;26120:17;;;;26117:88;;;26161:17;:24;;-1:-1:-1;;26161:24:0;;;26117:88;26224:42;26240:4;26254;26261;26224:15;:42::i;:::-;26339:14;26349:4;26339:14;;:::i;:::-;;;23251:3128;26399:33;26415:4;26421:2;26425:6;26399:15;:33::i;:::-;20834:5626;;;;20755:5705;;;:::o;27701:1606::-;27761:1;27745:13;;:17;:62;;;;;27794:13;;27766:24;27784:4;27766:9;:24::i;:::-;:41;;27745:62;27742:129;;;27824:35;27838:4;27845:13;;27824:5;:35::i;:::-;27897:1;27881:13;:17;;;27937:24;27955:4;27937:9;:24::i;:::-;27911:50;;27972:25;28043:12;;28021:19;;28000:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;27972:83;-1:-1:-1;28071:20:0;;;:46;;-1:-1:-1;28095:22:0;;28071:46;28068:60;;;28120:7;;27701:1606::o;28068:60::-;28161:18;;:23;;28182:2;28161:23;:::i;:::-;28143:15;:41;28140:113;;;28218:18;;:23;;28239:2;28218:23;:::i;:::-;28200:41;;28140:113;28265:12;28339:23;28424:1;28404:17;28383:18;;28365:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;28339:86;-1:-1:-1;28438:51:0;28455:33;28339:86;28455:15;:33;:::i;:::-;28438:16;:51::i;:::-;28688:18;;28523:21;;;;28502:18;;28688:20;;28707:1;;28688:20;:::i;:::-;28667:42;;:17;:42;:::i;:::-;28644:19;;28631:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;28604:106;;28721:17;28810:1;28791:18;;:20;;;;:::i;:::-;28770:42;;:17;:42;:::i;:::-;28754:12;;28741:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;28721:92;-1:-1:-1;28845:28:0;28721:92;28845:16;:28;:::i;:::-;28826:47;;;;:::i;:::-;28907:1;28886:18;:22;;;28919:19;:23;;;28953:12;:16;;;28980:13;:17;28826:47;-1:-1:-1;29013:19:0;;;;;:42;;;29054:1;29036:15;:19;29013:42;29010:119;;;29071:46;29084:15;29101;29071:12;:46::i;:::-;29162:10;;29154:46;;-1:-1:-1;;;;;29162:10:0;;;;29186:9;;29154:46;;;;29186:9;29162:10;29154:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29242:17:0;;29234:65;;29141:59;;-1:-1:-1;;;;;;29242:17:0;;29273:21;;29234:65;;;;29273:21;29242:17;29234:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27701:1606:0:o;20510:237::-;20626:17;;-1:-1:-1;;;;;20606:17:0;;20570:4;20606:17;;;:10;:17;;;;;;20570:4;;20606:37;;;:::i;:::-;20590:12;:53;20586:154;;-1:-1:-1;20679:4:0;;20510:237;-1:-1:-1;20510:237:0:o;20586:154::-;-1:-1:-1;20722:5:0;;20510:237;-1:-1:-1;20510:237:0:o;20586:154::-;20510:237;;;:::o;6178:614::-;-1:-1:-1;;;;;6318:20:0;;6310:70;;;;-1:-1:-1;;;6310:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6399:23:0;;6391:71;;;;-1:-1:-1;;;6391:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6499:17:0;;6475:21;6499:17;;;;;;;;;;;6535:23;;;;6527:74;;;;-1:-1:-1;;;6527:74:0;;16642:2:1;6527:74:0;;;16624:21:1;16681:2;16661:18;;;16654:30;16720:34;16700:18;;;16693:62;-1:-1:-1;;;16771:18:1;;;16764:36;16817:19;;6527:74:0;16440:402:1;6527:74:0;-1:-1:-1;;;;;6637:17:0;;;:9;:17;;;;;;;;;;;6657:22;;;6637:42;;6701:20;;;;;;;;:30;;6673:6;;6637:9;6701:30;;6673:6;;6701:30;:::i;:::-;;;;;;;;6766:9;-1:-1:-1;;;;;6749:35:0;6758:6;-1:-1:-1;;;;;6749:35:0;;6777:6;6749:35;;;;3520:25:1;;3508:2;3493:18;;3374:177;6749:35:0;;;;;;;;6299:493;6178:614;;;:::o;7099:550::-;-1:-1:-1;;;;;7183:21:0;;7175:67;;;;-1:-1:-1;;;7175:67:0;;17049:2:1;7175:67:0;;;17031:21:1;17088:2;17068:18;;;17061:30;17127:34;17107:18;;;17100:62;-1:-1:-1;;;17178:18:1;;;17171:31;17219:19;;7175:67:0;16847:397:1;7175:67:0;-1:-1:-1;;;;;7278:18:0;;7253:22;7278:18;;;;;;;;;;;7315:24;;;;7307:71;;;;-1:-1:-1;;;7307:71:0;;17451:2:1;7307:71:0;;;17433:21:1;17490:2;17470:18;;;17463:30;17529:34;17509:18;;;17502:62;-1:-1:-1;;;17580:18:1;;;17573:32;17622:19;;7307:71:0;17249:398:1;7307:71:0;-1:-1:-1;;;;;7414:18:0;;:9;:18;;;;;;;;;;;7435:23;;;7414:44;;7553:12;:22;;;;;;;7604:37;3520:25:1;;;7414:9:0;;:18;7604:37;;3493:18:1;7604:37:0;3374:177:1;26596:580:0;26748:16;;;26762:1;26748:16;;;;;;;;26724:21;;26748:16;;;;;;;;;;-1:-1:-1;26748:16:0;26724:40;;26793:4;26775;26780:1;26775:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26775:23:0;;;:7;;;;;;;;;;:23;;;;26819:9;;:16;;;-1:-1:-1;;;26819:16:0;;;;:9;;;;;:14;;:16;;;;;26775:7;;26819:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26809:4;26814:1;26809:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26809:26:0;;;:7;;;;;;;;;:26;26880:9;;26848:56;;26865:4;;26880:9;26892:11;26848:8;:56::i;:::-;26950:9;;:218;;-1:-1:-1;;;26950:218:0;;-1:-1:-1;;;;;26950:9:0;;;;:60;;:218;;27025:11;;26950:9;;27095:4;;27122;;27142:15;;26950:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26651:525;26596:580;:::o;27184:509::-;27364:9;;27332:56;;27349:4;;-1:-1:-1;;;;;27364:9:0;27376:11;27332:8;:56::i;:::-;27431:9;;:254;;-1:-1:-1;;;27431:254:0;;27497:4;27431:254;;;19234:34:1;19284:18;;;19277:34;;;27431:9:0;19327:18:1;;;19320:34;;;19370:18;;;19363:34;27637:6:0;19413:19:1;;;19406:44;27659:15:0;19466:19:1;;;19459:35;-1:-1:-1;;;;;27431:9:0;;;;:25;;27464:9;;19168:19:1;;27431:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27184:509;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;897:70;842:131;:::o;978:134::-;1046:20;;1075:31;1046:20;1075:31;:::i;1117:315::-;1185:6;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1301:9;1288:23;1320:31;1345:5;1320:31;:::i;:::-;1370:5;1422:2;1407:18;;;;1394:32;;-1:-1:-1;;;1117:315:1:o;1629:247::-;1688:6;1741:2;1729:9;1720:7;1716:23;1712:32;1709:52;;;1757:1;1754;1747:12;1709:52;1796:9;1783:23;1815:31;1840:5;1815:31;:::i;:::-;1865:5;1629:247;-1:-1:-1;;;1629:247:1:o;1881:127::-;1942:10;1937:3;1933:20;1930:1;1923:31;1973:4;1970:1;1963:15;1997:4;1994:1;1987:15;2013:160;2078:20;;2134:13;;2127:21;2117:32;;2107:60;;2163:1;2160;2153:12;2178:1191;2268:6;2276;2329:2;2317:9;2308:7;2304:23;2300:32;2297:52;;;2345:1;2342;2335:12;2297:52;2385:9;2372:23;2414:18;2455:2;2447:6;2444:14;2441:34;;;2471:1;2468;2461:12;2441:34;2509:6;2498:9;2494:22;2484:32;;2554:7;2547:4;2543:2;2539:13;2535:27;2525:55;;2576:1;2573;2566:12;2525:55;2612:2;2599:16;2634:4;2657:2;2653;2650:10;2647:36;;;2663:18;;:::i;:::-;2709:2;2706:1;2702:10;2741:2;2735:9;2804:2;2800:7;2795:2;2791;2787:11;2783:25;2775:6;2771:38;2859:6;2847:10;2844:22;2839:2;2827:10;2824:18;2821:46;2818:72;;;2870:18;;:::i;:::-;2906:2;2899:22;2956:18;;;2990:15;;;;-1:-1:-1;3032:11:1;;;3028:20;;;3060:19;;;3057:39;;;3092:1;3089;3082:12;3057:39;3116:11;;;;3136:148;3152:6;3147:3;3144:15;3136:148;;;3218:23;3237:3;3218:23;:::i;:::-;3206:36;;3169:12;;;;3262;;;;3136:148;;;3303:6;-1:-1:-1;3328:35:1;;-1:-1:-1;3344:18:1;;;3328:35;:::i;:::-;3318:45;;;;;;2178:1191;;;;;:::o;3556:456::-;3633:6;3641;3649;3702:2;3690:9;3681:7;3677:23;3673:32;3670:52;;;3718:1;3715;3708:12;3670:52;3757:9;3744:23;3776:31;3801:5;3776:31;:::i;:::-;3826:5;-1:-1:-1;3883:2:1;3868:18;;3855:32;3896:33;3855:32;3896:33;:::i;:::-;3556:456;;3948:7;;-1:-1:-1;;;4002:2:1;3987:18;;;;3974:32;;3556:456::o;4017:385::-;4103:6;4111;4119;4127;4180:3;4168:9;4159:7;4155:23;4151:33;4148:53;;;4197:1;4194;4187:12;4148:53;-1:-1:-1;;4220:23:1;;;4290:2;4275:18;;4262:32;;-1:-1:-1;4341:2:1;4326:18;;4313:32;;4392:2;4377:18;4364:32;;-1:-1:-1;4017:385:1;-1:-1:-1;4017:385:1:o;4804:315::-;4869:6;4877;4930:2;4918:9;4909:7;4905:23;4901:32;4898:52;;;4946:1;4943;4936:12;4898:52;4985:9;4972:23;5004:31;5029:5;5004:31;:::i;:::-;5054:5;-1:-1:-1;5078:35:1;5109:2;5094:18;;5078:35;:::i;:::-;5068:45;;4804:315;;;;;:::o;5124:180::-;5183:6;5236:2;5224:9;5215:7;5211:23;5207:32;5204:52;;;5252:1;5249;5242:12;5204:52;-1:-1:-1;5275:23:1;;5124:180;-1:-1:-1;5124:180:1:o;5309:388::-;5377:6;5385;5438:2;5426:9;5417:7;5413:23;5409:32;5406:52;;;5454:1;5451;5444:12;5406:52;5493:9;5480:23;5512:31;5537:5;5512:31;:::i;:::-;5562:5;-1:-1:-1;5619:2:1;5604:18;;5591:32;5632:33;5591:32;5632:33;:::i;:::-;5684:7;5674:17;;;5309:388;;;;;:::o;5702:380::-;5781:1;5777:12;;;;5824;;;5845:61;;5899:4;5891:6;5887:17;5877:27;;5845:61;5952:2;5944:6;5941:14;5921:18;5918:38;5915:161;;5998:10;5993:3;5989:20;5986:1;5979:31;6033:4;6030:1;6023:15;6061:4;6058:1;6051:15;5915:161;;5702:380;;;:::o;6087:356::-;6289:2;6271:21;;;6308:18;;;6301:30;6367:34;6362:2;6347:18;;6340:62;6434:2;6419:18;;6087:356::o;6448:127::-;6509:10;6504:3;6500:20;6497:1;6490:31;6540:4;6537:1;6530:15;6564:4;6561:1;6554:15;6580:127;6641:10;6636:3;6632:20;6629:1;6622:31;6672:4;6669:1;6662:15;6696:4;6693:1;6686:15;6712:135;6751:3;6772:17;;;6769:43;;6792:18;;:::i;:::-;-1:-1:-1;6839:1:1;6828:13;;6712:135::o;7261:128::-;7301:3;7332:1;7328:6;7325:1;7322:13;7319:39;;;7338:18;;:::i;:::-;-1:-1:-1;7374:9:1;;7261:128::o;10118:168::-;10158:7;10224:1;10220;10216:6;10212:14;10209:1;10206:21;10201:1;10194:9;10187:17;10183:45;10180:71;;;10231:18;;:::i;:::-;-1:-1:-1;10271:9:1;;10118:168::o;10291:217::-;10331:1;10357;10347:132;;10401:10;10396:3;10392:20;10389:1;10382:31;10436:4;10433:1;10426:15;10464:4;10461:1;10454:15;10347:132;-1:-1:-1;10493:9:1;;10291:217::o;13139:401::-;13341:2;13323:21;;;13380:2;13360:18;;;13353:30;13419:34;13414:2;13399:18;;13392:62;-1:-1:-1;;;13485:2:1;13470:18;;13463:35;13530:3;13515:19;;13139:401::o;13545:399::-;13747:2;13729:21;;;13786:2;13766:18;;;13759:30;13825:34;13820:2;13805:18;;13798:62;-1:-1:-1;;;13891:2:1;13876:18;;13869:33;13934:3;13919:19;;13545:399::o;16310:125::-;16350:4;16378:1;16375;16372:8;16369:34;;;16383:18;;:::i;:::-;-1:-1:-1;16420:9:1;;16310:125::o;17652:251::-;17722:6;17775:2;17763:9;17754:7;17750:23;17746:32;17743:52;;;17791:1;17788;17781:12;17743:52;17823:9;17817:16;17842:31;17867:5;17842:31;:::i;17908:980::-;18170:4;18218:3;18207:9;18203:19;18249:6;18238:9;18231:25;18275:2;18313:6;18308:2;18297:9;18293:18;18286:34;18356:3;18351:2;18340:9;18336:18;18329:31;18380:6;18415;18409:13;18446:6;18438;18431:22;18484:3;18473:9;18469:19;18462:26;;18523:2;18515:6;18511:15;18497:29;;18544:1;18554:195;18568:6;18565:1;18562:13;18554:195;;;18633:13;;-1:-1:-1;;;;;18629:39:1;18617:52;;18724:15;;;;18689:12;;;;18665:1;18583:9;18554:195;;;-1:-1:-1;;;;;;;18805:32:1;;;;18800:2;18785:18;;18778:60;-1:-1:-1;;;18869:3:1;18854:19;18847:35;18766:3;17908:980;-1:-1:-1;;;17908:980:1:o;19505:306::-;19593:6;19601;19609;19662:2;19650:9;19641:7;19637:23;19633:32;19630:52;;;19678:1;19675;19668:12;19630:52;19707:9;19701:16;19691:26;;19757:2;19746:9;19742:18;19736:25;19726:35;;19801:2;19790:9;19786:18;19780:25;19770:35;;19505:306;;;;;:::o

Swarm Source

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