ETH Price: $2,416.89 (+0.02%)

Token

Crypto (CRY)
 

Overview

Max Total Supply

1,000,000,000 CRY

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1.01 CRY

Value
$0.00
0xAF2a5C615a154d50d41AC93f3903B97547Ca93A6
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:
CryptoContract

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


/*
Together we stand. $CRY
*/


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.1;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract CryptoContract is Context, IERC20, Ownable {
    using Address for address;

    string private _name = "Crypto";
    string private _symbol = "CRY";
    uint8 private _decimals = 9;
    uint256 private initialsupply = 1_000_000_000;
    uint256 private _tTotal = initialsupply * 10**_decimals;

    address payable public marketingWallet;
    address public liquidityWallet;

    mapping(address => uint256) private _tOwned;
    mapping(address => uint256) private buycooldown;
    mapping(address => uint256) private sellcooldown;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isBlacklisted;

    struct Icooldown {
        bool buycooldownEnabled;
        bool sellcooldownEnabled;
        uint256 cooldown;
        uint256 cooldownLimit;
    }
    Icooldown public cooldownInfo =
        Icooldown({
            buycooldownEnabled: true,
            sellcooldownEnabled: true,
            cooldown: 30 seconds,
            cooldownLimit: 60 seconds
        });
    struct ILaunch {
        uint256 launchedAt;
        bool launched;
        bool launchProtection;
    }
    ILaunch public wenLaunch =
        ILaunch({
            launchedAt: 0, 
            launched: false, 
            launchProtection: true
        });

    struct ItxSettings {
        uint256 maxTxAmount;
        uint256 maxWalletAmount;
        uint256 numTokensToSwap;
        bool limited;
    }

    ItxSettings public txSettings;

    uint256 public _transferLiquidityFee;
    uint256 public _transferMarketingFee;
    uint256 public _transferBurnFee;

    uint256 public _buyLiquidityFee;
    uint256 public _buyMarketingFee;
    uint256 public _buyBurnFee;

    uint256 public _sellLiquidityFee;
    uint256 public _sellMarketingFee;
    uint256 public _sellBurnFee;

    uint256 public lpFeeAccumulated;

    uint256 public antiBlocks = 0;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;

    bool public tradeEnabled;
    mapping(address => bool) public tradeAllowedList;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event SniperStatus(address account, bool blacklisted);
    event ToMarketing(uint256 marketingBalance);
    event SwapAndLiquify(uint256 liquidityTokens, uint256 liquidityFees);
    event Launch();

    constructor(address _marketingWallet) {        
        marketingWallet = payable(_marketingWallet);
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // bsc pancake router 
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3); //bsc test net router kiem
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //eth unisawp router

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        _approve(_msgSender(), address(_uniswapV2Router), type(uint256).max);
        _approve(address(this), address(_uniswapV2Router), type(uint256).max);

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        setSellFee(100,100, 0);
        setBuyFee(25,25, 0);
        setTransferFee(10,30, 0);

        setTxSettings(1,100,2,100,1,1000,true);

        _tOwned[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);

        tradeEnabled = false;
        tradeAllowedList[owner()] = true;
        tradeAllowedList[address(this)] = true;

        liquidityWallet = _msgSender();
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function setSellFee(uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) public onlyOwner {
        require(liquidityFee + marketingFee + burnFee <= 250);
        _sellLiquidityFee = liquidityFee;
        _sellMarketingFee = marketingFee;
        _sellBurnFee = burnFee;
    }

    function setBuyFee(uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) public onlyOwner {
        require(liquidityFee + marketingFee + burnFee <= 250);
        _buyMarketingFee = marketingFee;
        _buyLiquidityFee = liquidityFee;
        _buyBurnFee = burnFee;
    }

    function setTransferFee(uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) public onlyOwner {
        require(liquidityFee + marketingFee + burnFee <= 250);
        _transferLiquidityFee = liquidityFee;
        _transferMarketingFee = marketingFee;
        _transferBurnFee = burnFee;
    }

    function setLiquidityFees(uint256 newTransfer, uint256 newBuy, uint256 newSell) public onlyOwner {
        _transferLiquidityFee = newTransfer;
        _buyLiquidityFee = newBuy;
        _sellLiquidityFee = newSell;
    }

    function setMarketingFees(uint256 newTransfer, uint256 newBuy, uint256 newSell) public onlyOwner {
        _transferMarketingFee = newTransfer;
        _buyMarketingFee = newBuy;
        _sellMarketingFee = newSell;
    }

    function setBurnFees(uint256 newTransfer, uint256 newBuy, uint256 newSell) public onlyOwner {
        _transferBurnFee = newTransfer;
        _buyBurnFee = newBuy;
        _sellBurnFee = newSell;
    }

    function setCooldown(uint256 amount) external onlyOwner {
        require(amount <= cooldownInfo.cooldownLimit);
        cooldownInfo.cooldown = amount;
    }

    function setMarketingWallet(address payable newMarketingWallet) external onlyOwner {
        marketingWallet = payable(newMarketingWallet);
    }

    function setLiquidityWallet(address newLpWallet) external onlyOwner {
        liquidityWallet = newLpWallet;
    }

    function setTxSettings(uint256 txp, uint256 txd, uint256 mwp, uint256 mwd, uint256 sp, uint256 sd, bool limiter) public onlyOwner {
        require((_tTotal * txp) / txd >= (_tTotal / 1000), "Max Transaction must be above 0.1% of total supply.");
        require((_tTotal * mwp) / mwd >= (_tTotal / 1000), "Max Wallet must be above 0.1% of total supply.");
        uint256 newTx = (_tTotal * txp) / (txd);
        uint256 newMw = (_tTotal * mwp) / mwd;
        uint256 swapAmount = (_tTotal * sp) / (sd);
        txSettings = ItxSettings ({
            numTokensToSwap: swapAmount,
            maxTxAmount: newTx,
            maxWalletAmount: newMw,
            limited: limiter
        });
    }

    function setTradeEnabled(bool onoff) external onlyOwner {
        if (!wenLaunch.launched) {
            wenLaunch.launchedAt = block.number;
            wenLaunch.launched = true;
            swapAndLiquifyEnabled = true;
        }

        tradeEnabled = onoff;

        if (!wenLaunch.launched) {
            emit Launch();
        }
    }

    function setAntiBlocks(uint256 _block) external onlyOwner {
        antiBlocks = _block;
    }

    function setTradeAllowedAddress(address who, bool status) external onlyOwner {
        tradeAllowedList[who] = status;
    }

    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) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - (subtractedValue)
        );
        return true;
    }

    function setBlacklistStatus(address account, bool blacklisted) external onlyOwner {
        if(account == uniswapV2Pair || account == address(this) || account == address(uniswapV2Router)) {revert();}
        
        isBlacklisted[account] = blacklisted;
    }

    function Sniper(address [] calldata accounts, bool blacklisted) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            address account = accounts[i];
            if(account != uniswapV2Pair && account != address(this) && account != address(uniswapV2Router)) {
                isBlacklisted[account] = blacklisted;
            }
        }
    }
    
    function setSniperStatus(address account, bool blacklisted) private{
        if(account == uniswapV2Pair || account == address(this) || account == address(uniswapV2Router)) {revert();}
        
        if (blacklisted == true) {
            isBlacklisted[account] = true;
            emit SniperStatus(account, blacklisted);
        } 
    }

    function limits(bool onoff) public onlyOwner {
        txSettings.limited = onoff;
    }

    function excludeFromFee(address account) public onlyOwner {
        isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        isExcludedFromFee[account] = false;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
    }

    //to receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _approve(address owner,address spender,uint256 amount) private {
        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);
    }

    function swapAndLiquify(uint256 tokenBalance) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        uint256 tokensToSwap = tokenBalance / 2;
        uint256 liquidityTokens = tokenBalance - tokensToSwap;

        if (tokensToSwap > 0) {
            swapTokensForEth(tokensToSwap);
        }

        uint256 newBalance = address(this).balance;
        uint256 liquidityBalance = uint256(newBalance - initialBalance);

        if (liquidityTokens > 0 && liquidityBalance > 0) {
            addLiquidity(liquidityTokens, liquidityBalance);
            emit SwapAndLiquify(liquidityTokens, liquidityBalance);
        }

        lpFeeAccumulated -= tokenBalance;
    }

    function swapAndMarketing(uint256 tokenBalance) private lockTheSwap {
        if (tokenBalance > 0) {
            swapTokensForEth(tokenBalance);
        }

        uint256 marketingBalance = address(this).balance;
        if (marketingBalance > 0) {
            marketingWallet.transfer(marketingBalance);
            emit ToMarketing(marketingBalance);
        }
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        require(amountPercentage <= 100);
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(
            (amountETH * (amountPercentage)) / (100)
        );
    }

    function clearStuckToken(address to) external onlyOwner {
        uint256 _balance = balanceOf(address(this));
        lpFeeAccumulated = 0;
        _transfer(address(this), to, _balance);        
    }

    function clearStuckTokens(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    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] = uniswapV2Router.WETH();

        if(_allowances[address(this)][address(uniswapV2Router)] < tokenAmount) {
            _approve(address(this), address(uniswapV2Router), type(uint256).max);
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        if(_allowances[address(this)][address(uniswapV2Router)] < tokenAmount) {
            _approve(address(this), address(uniswapV2Router), type(uint256).max);
        }

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

    function transferFrom(address sender,address recipient,uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()] - (
                amount
            )
        );
        return true;
    }    

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(isBlacklisted[from] == false, "Hehe");
        require(isBlacklisted[to] == false, "Hehe");

        if (!tradeEnabled) {
            require(tradeAllowedList[from] || tradeAllowedList[to], "Transfer: not allowed");
            require(balanceOf(uniswapV2Pair) == 0 || to != uniswapV2Pair, "Transfer: no body can sell now");
        }

        if (txSettings.limited) {
            if(from != owner() && to != owner() || to != address(0xdead) && to != address(0)) 
            {
                if (from == uniswapV2Pair || to == uniswapV2Pair
                ) {
                    if(!isExcludedFromFee[to] && !isExcludedFromFee[from]) {
                        require(amount <= txSettings.maxTxAmount);
                    }
                }
                if(to != address(uniswapV2Router) && to != uniswapV2Pair) {
                    if(!isExcludedFromFee[to]) {
                        require(balanceOf(to) + amount <= txSettings.maxWalletAmount);
                    }
                }
            }
        }

        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !isExcludedFromFee[to]
            ) {
                if (cooldownInfo.buycooldownEnabled) {
                    require(buycooldown[to] < block.timestamp);
                    buycooldown[to] = block.timestamp + (cooldownInfo.cooldown);
                }
            } else if (from != uniswapV2Pair && !isExcludedFromFee[from]){
                if (cooldownInfo.sellcooldownEnabled) {
                    require(sellcooldown[from] <= block.timestamp);
                    sellcooldown[from] = block.timestamp + (cooldownInfo.cooldown);
                }
            }

        if (
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            uint256 contractTokenBalance = balanceOf(address(this));

            if (contractTokenBalance > txSettings.numTokensToSwap) {
                if (lpFeeAccumulated > txSettings.numTokensToSwap) {
                    swapAndLiquify(txSettings.numTokensToSwap);
                } else if ((_transferMarketingFee + _buyMarketingFee + _sellMarketingFee) > 0) {
                    swapAndMarketing(txSettings.numTokensToSwap);
                }
            }
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

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

        //transfer amount, it will take tax, marketing, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender,address recipient,uint256 amount,bool takeFee) private {
        uint256 liquidityFee;
        uint256 marketingFee;
        uint256 burnFee;

        uint256 liquidityFeeAmount = 0;
        uint256 marketingFeeAmount = 0;
        uint256 burnFeeAmount = 0;
        uint256 feeAmount = 0;

        bool highFee = false;

        if (wenLaunch.launchProtection) {
            if (wenLaunch.launched && wenLaunch.launchedAt > 0 && block.number > (wenLaunch.launchedAt + antiBlocks)) {
                wenLaunch.launchProtection = false;
            } else {
                if (
                    sender == uniswapV2Pair &&
                    recipient != address(uniswapV2Router) &&
                    !isExcludedFromFee[recipient]
                ) {
                    setSniperStatus(recipient, true); 
                    highFee = true;
                }
            }
        }

        if (takeFee) {
            if (sender == uniswapV2Pair) {
                liquidityFee = _buyLiquidityFee;
                marketingFee = _buyMarketingFee;
                burnFee = _buyBurnFee;                
            } else if (recipient == uniswapV2Pair) {
                liquidityFee = _sellLiquidityFee;
                marketingFee = _sellMarketingFee;
                burnFee = _sellBurnFee;
            } else {
                liquidityFee = _transferLiquidityFee;
                marketingFee = _transferMarketingFee;
                burnFee = _transferBurnFee;
            }

            if (highFee) {
                liquidityFee = 950;
                marketingFee = 0;
                burnFee = 0;
            }

            feeAmount = (amount * (liquidityFee + marketingFee + burnFee)) / (1000);

            if ((liquidityFee + marketingFee + burnFee) > 0) {                
                liquidityFeeAmount = feeAmount * liquidityFee / (liquidityFee + marketingFee + burnFee);
                marketingFeeAmount = feeAmount * marketingFee / (liquidityFee + marketingFee + burnFee);
                burnFeeAmount = feeAmount * burnFee / (liquidityFee + marketingFee + burnFee);
            }

            lpFeeAccumulated += liquidityFeeAmount;
        }
        
        uint256 tAmount = amount - (liquidityFeeAmount + marketingFeeAmount + burnFeeAmount);
        _tOwned[sender] -= amount;
        _tOwned[address(this)] += (liquidityFeeAmount + marketingFeeAmount);
        emit Transfer(sender, address(this), (liquidityFeeAmount + marketingFeeAmount));
        _tOwned[recipient] += tAmount;
        emit Transfer(sender, recipient, tAmount);
        if (burnFeeAmount > 0) {
            _tOwned[address(0xdead)] += burnFeeAmount;
            emit Transfer(sender, address(0xdead), burnFeeAmount);
        }        
    }

    function setCooldownEnabled(bool onoff, bool offon) external onlyOwner {
        cooldownInfo.buycooldownEnabled = onoff;
        cooldownInfo.sellcooldownEnabled = offon;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"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":[],"name":"Launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"SniperStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFees","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingBalance","type":"uint256"}],"name":"ToMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"Sniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"antiBlocks","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"clearStuckTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownInfo","outputs":[{"internalType":"bool","name":"buycooldownEnabled","type":"bool"},{"internalType":"bool","name":"sellcooldownEnabled","type":"bool"},{"internalType":"uint256","name":"cooldown","type":"uint256"},{"internalType":"uint256","name":"cooldownLimit","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"limits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeAccumulated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"setAntiBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setBlacklistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransfer","type":"uint256"},{"internalType":"uint256","name":"newBuy","type":"uint256"},{"internalType":"uint256","name":"newSell","type":"uint256"}],"name":"setBurnFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"},{"internalType":"bool","name":"offon","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransfer","type":"uint256"},{"internalType":"uint256","name":"newBuy","type":"uint256"},{"internalType":"uint256","name":"newSell","type":"uint256"}],"name":"setLiquidityFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLpWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransfer","type":"uint256"},{"internalType":"uint256","name":"newBuy","type":"uint256"},{"internalType":"uint256","name":"newSell","type":"uint256"}],"name":"setMarketingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setTradeAllowedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setTradeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txp","type":"uint256"},{"internalType":"uint256","name":"txd","type":"uint256"},{"internalType":"uint256","name":"mwp","type":"uint256"},{"internalType":"uint256","name":"mwd","type":"uint256"},{"internalType":"uint256","name":"sp","type":"uint256"},{"internalType":"uint256","name":"sd","type":"uint256"},{"internalType":"bool","name":"limiter","type":"bool"}],"name":"setTxSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tradeAllowedList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txSettings","outputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"numTokensToSwap","type":"uint256"},{"internalType":"bool","name":"limited","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wenLaunch","outputs":[{"internalType":"uint256","name":"launchedAt","type":"uint256"},{"internalType":"bool","name":"launched","type":"bool"},{"internalType":"bool","name":"launchProtection","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600660c09081526543727970746f60d01b60e05260039062000028908262000a1b565b5060408051808201909152600381526243525960e81b602082015260049062000052908262000a1b565b506005805460ff19166009908117909155633b9aca006006556200007890600a62000bfc565b60065462000087919062000c14565b6007556040805160808101825260018082526020808301829052601e838501819052603c60609485018190526010805461010161ffff199182161790915560119290925560125584519384018552600080855291840182905292909301526013829055601480549091166101001790556023553480156200010757600080fd5b5060405162003fd838038062003fd88339810160408190526200012a9162000c2e565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600880546001600160a01b0319166001600160a01b0383161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808201926020929091908290030181865afa158015620001da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000200919062000c2e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000274919062000c2e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000c2e565b6001600160a01b0390811660a05281166080526200030a338260001962000499565b62000319308260001962000499565b6001600e6000620003326000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600e9092528120805490921660011790915562000383906064908190620005c5565b62000392601980600062000645565b620003a2600a601e6000620006c8565b620003b860016064600281836103e88162000748565b600754336000818152600a6020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36024805462ff000019169055600160256000620004286000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526025909252902080549091166001179055620004703390565b600980546001600160a01b0319166001600160a01b03929092169190911790555062000c929050565b6001600160a01b038316620005015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005645760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004f8565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314620006105760405162461bcd60e51b8152602060048201819052602482015260008051602062003fb88339815191526044820152606401620004f8565b60fa816200061f848662000c59565b6200062b919062000c59565b11156200063757600080fd5b601f92909255602055602155565b6000546001600160a01b03163314620006905760405162461bcd60e51b8152602060048201819052602482015260008051602062003fb88339815191526044820152606401620004f8565b60fa816200069f848662000c59565b620006ab919062000c59565b1115620006b757600080fd5b601d91909155601c91909155601e55565b6000546001600160a01b03163314620007135760405162461bcd60e51b8152602060048201819052602482015260008051602062003fb88339815191526044820152606401620004f8565b60fa8162000722848662000c59565b6200072e919062000c59565b11156200073a57600080fd5b601992909255601a55601b55565b6000546001600160a01b03163314620007935760405162461bcd60e51b8152602060048201819052602482015260008051602062003fb88339815191526044820152606401620004f8565b6103e8600754620007a5919062000c6f565b8688600754620007b6919062000c14565b620007c2919062000c6f565b1015620008385760405162461bcd60e51b815260206004820152603360248201527f4d6178205472616e73616374696f6e206d7573742062652061626f766520302e60448201527f3125206f6620746f74616c20737570706c792e000000000000000000000000006064820152608401620004f8565b6103e86007546200084a919062000c6f565b84866007546200085b919062000c14565b62000867919062000c6f565b1015620008ce5760405162461bcd60e51b815260206004820152602e60248201527f4d61782057616c6c6574206d7573742062652061626f766520302e3125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401620004f8565b60008688600754620008e1919062000c14565b620008ed919062000c6f565b90506000858760075462000902919062000c14565b6200090e919062000c6f565b90506000848660075462000923919062000c14565b6200092f919062000c6f565b60408051608081018252858152602081018590529081018290529415156060909501859052601593909355506016556017556018805460ff19169091179055505050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620009a157607f821691505b602082108103620009c257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a1657600081815260208120601f850160051c81016020861015620009f15750805b601f850160051c820191505b8181101562000a1257828155600101620009fd565b5050505b505050565b81516001600160401b0381111562000a375762000a3762000976565b62000a4f8162000a4884546200098c565b84620009c8565b602080601f83116001811462000a87576000841562000a6e5750858301515b600019600386901b1c1916600185901b17855562000a12565b600085815260208120601f198616915b8281101562000ab85788860151825594840194600190910190840162000a97565b508582101562000ad75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000b3e57816000190482111562000b225762000b2262000ae7565b8085161562000b3057918102915b93841c939080029062000b02565b509250929050565b60008262000b575750600162000bf6565b8162000b665750600062000bf6565b816001811462000b7f576002811462000b8a5762000baa565b600191505062000bf6565b60ff84111562000b9e5762000b9e62000ae7565b50506001821b62000bf6565b5060208310610133831016604e8410600b841016171562000bcf575081810a62000bf6565b62000bdb838362000afd565b806000190482111562000bf25762000bf262000ae7565b0290505b92915050565b600062000c0d60ff84168362000b46565b9392505050565b808202811582820484141762000bf65762000bf662000ae7565b60006020828403121562000c4157600080fd5b81516001600160a01b038116811462000c0d57600080fd5b8082018082111562000bf65762000bf662000ae7565b60008262000c8d57634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05161324362000d756000396000818161067901528181610c1c0152818161119301528181611d7601528181611dae01528181611e9601528181611ed101528181611f9f015281816120330152818161212b015281816121f5015281816124da0152818161258c015281816125d90152612c4101526000818161047601528181610c6a015281816111e501528181611f620152818161206f015281816125160152818161296501528181612a2301528181612a5a01528181612a9801528181612b2001528181612b5d01528181612bc70152612c8f01526132436000f3fe60806040526004361061039b5760003560e01c806370a08231116101dc578063c40fedc611610102578063dc44b6a0116100a0578063ea2f0b371161006f578063ea2f0b3714610b57578063f23175ff14610b77578063f2fde38b14610b97578063fe575a8714610bb757600080fd5b8063dc44b6a014610ac5578063dd62ed3e14610adb578063e7c8923214610b21578063ea08d30b14610b4157600080fd5b8063c8607952116100dc578063c860795214610a27578063d469801614610a3d578063d621e81314610a5d578063d8913ae314610a7d57600080fd5b8063c40fedc6146109d1578063c49b9a80146109f1578063c5d2418914610a1157600080fd5b806395f93d481161017a578063a457c2d711610149578063a457c2d714610951578063a9059cbb14610971578063b18e984014610991578063b5ec1941146109b157600080fd5b806395f93d48146108ae578063980ba05e146108fb5780639be953b314610911578063a16df9d81461093157600080fd5b80637abdc1ca116101b65780637abdc1ca1461084f57806388790a68146108655780638da5cb5b1461087b57806395d89b411461089957600080fd5b806370a08231146107e4578063715018a61461081a57806375f0a8741461082f57600080fd5b8063313ce567116102c15780634fc3f41a1161025f5780635d098b381161022e5780635d098b381461074a5780635db447571461076a578063645b2571146107ae5780636cbdd5e3146107ce57600080fd5b80634fc3f41a146106ba57806351b005e7146106da5780635342acb4146106fa5780635b8138f61461072a57600080fd5b80633bec2bf31161029b5780633bec2bf314610627578063437823ec1461064757806349bd5a5e146106675780634a74bb021461069b57600080fd5b8063313ce567146105cf578063350e96c8146105f1578063395093511461060757600080fd5b806318160ddd1161033957806323b872dd1161030857806323b872dd1461055957806325519cf214610579578063296f0a0c146105995780632aff03b7146105b957600080fd5b806318160ddd146104d45780631c66cb6d146104e95780631d865c30146105195780631da1db5e1461053957600080fd5b8063098b306611610375578063098b3066146104245780630e4e411c146104445780631694505e1461046457806316f2f1a8146104b057600080fd5b806303d29d28146103a757806306fdde03146103c9578063095ea7b3146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c2366004612d5c565b610be7565b005b3480156103d557600080fd5b506103de610cd3565b6040516103eb9190612d95565b60405180910390f35b34801561040057600080fd5b5061041461040f366004612de3565b610d65565b60405190151581526020016103eb565b34801561043057600080fd5b506103c761043f366004612e0f565b610d7c565b34801561045057600080fd5b506103c761045f366004612e0f565b610db4565b34801561047057600080fd5b506104987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103eb565b3480156104bc57600080fd5b506104c6601e5481565b6040519081526020016103eb565b3480156104e057600080fd5b506007546104c6565b3480156104f557600080fd5b50610414610504366004612e3b565b60256020526000908152604090205460ff1681565b34801561052557600080fd5b506103c7610534366004612e0f565b610dec565b34801561054557600080fd5b506103c7610554366004612e5f565b610e46565b34801561056557600080fd5b50610414610574366004612e78565b610ed2565b34801561058557600080fd5b506103c7610594366004612e0f565b610f24565b3480156105a557600080fd5b506103c76105b4366004612e3b565b610f81565b3480156105c557600080fd5b506104c660225481565b3480156105db57600080fd5b5060055460405160ff90911681526020016103eb565b3480156105fd57600080fd5b506104c660235481565b34801561061357600080fd5b50610414610622366004612de3565b610fcd565b34801561063357600080fd5b506103c7610642366004612eb9565b611004565b34801561065357600080fd5b506103c7610662366004612e3b565b6110a5565b34801561067357600080fd5b506104987f000000000000000000000000000000000000000000000000000000000000000081565b3480156106a757600080fd5b5060245461041490610100900460ff1681565b3480156106c657600080fd5b506103c76106d5366004612e5f565b6110f3565b3480156106e657600080fd5b506103c76106f5366004612ed6565b611131565b34801561070657600080fd5b50610414610715366004612e3b565b600e6020526000908152604090205460ff1681565b34801561073657600080fd5b506103c7610745366004612d5c565b61125d565b34801561075657600080fd5b506103c7610765366004612e3b565b6112b2565b34801561077657600080fd5b50601354601454610791919060ff8082169161010090041683565b6040805193845291151560208401521515908201526060016103eb565b3480156107ba57600080fd5b506103c76107c9366004612e0f565b6112fe565b3480156107da57600080fd5b506104c6601a5481565b3480156107f057600080fd5b506104c66107ff366004612e3b565b6001600160a01b03166000908152600a602052604090205490565b34801561082657600080fd5b506103c7611336565b34801561083b57600080fd5b50600854610498906001600160a01b031681565b34801561085b57600080fd5b506104c660215481565b34801561087157600080fd5b506104c6601f5481565b34801561088757600080fd5b506000546001600160a01b0316610498565b3480156108a557600080fd5b506103de6113aa565b3480156108ba57600080fd5b506010546011546012546108d99260ff80821693610100909204169184565b60408051941515855292151560208501529183015260608201526080016103eb565b34801561090757600080fd5b506104c6601b5481565b34801561091d57600080fd5b506103c761092c366004612e3b565b6113b9565b34801561093d57600080fd5b506103c761094c366004612f5c565b611409565b34801561095d57600080fd5b5061041461096c366004612de3565b6115f0565b34801561097d57600080fd5b5061041461098c366004612de3565b611627565b34801561099d57600080fd5b506103c76109ac366004612e5f565b611634565b3480156109bd57600080fd5b506103c76109cc366004612eb9565b611663565b3480156109dd57600080fd5b506104146109ec366004612fbc565b6116a0565b3480156109fd57600080fd5b506103c7610a0c366004612eb9565b6117c8565b348015610a1d57600080fd5b506104c6601d5481565b348015610a3357600080fd5b506104c660205481565b348015610a4957600080fd5b50600954610498906001600160a01b031681565b348015610a6957600080fd5b506024546104149062010000900460ff1681565b348015610a8957600080fd5b50601554601654601754601854610aa39392919060ff1684565b60408051948552602085019390935291830152151560608201526080016103eb565b348015610ad157600080fd5b506104c6601c5481565b348015610ae757600080fd5b506104c6610af6366004612fbc565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b348015610b2d57600080fd5b506103c7610b3c366004612e0f565b61180c565b348015610b4d57600080fd5b506104c660195481565b348015610b6357600080fd5b506103c7610b72366004612e3b565b611866565b348015610b8357600080fd5b506103c7610b92366004612fea565b6118b1565b348015610ba357600080fd5b506103c7610bb2366004612e3b565b6118ff565b348015610bc357600080fd5b50610414610bd2366004612e3b565b600f6020526000908152604090205460ff1681565b6000546001600160a01b03163314610c1a5760405162461bcd60e51b8152600401610c1190613008565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610c6257506001600160a01b03821630145b80610c9e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15610ca857600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b606060038054610ce29061303d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e9061303d565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b5050505050905090565b6000610d723384846119e9565b5060015b92915050565b6000546001600160a01b03163314610da65760405162461bcd60e51b8152600401610c1190613008565b601992909255601c55601f55565b6000546001600160a01b03163314610dde5760405162461bcd60e51b8152600401610c1190613008565b601b92909255601e55602155565b6000546001600160a01b03163314610e165760405162461bcd60e51b8152600401610c1190613008565b60fa81610e23848661308d565b610e2d919061308d565b1115610e3857600080fd5b601f92909255602055602155565b6000546001600160a01b03163314610e705760405162461bcd60e51b8152600401610c1190613008565b6064811115610e7e57600080fd5b60085447906001600160a01b03166108fc6064610e9b85856130a0565b610ea591906130b7565b6040518115909202916000818181858888f19350505050158015610ecd573d6000803e3d6000fd5b505050565b6000610edf848484611b0d565b6001600160a01b0384166000908152600d6020908152604080832033808552925290912054610f1a918691610f159086906130d9565b6119e9565b5060019392505050565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610c1190613008565b60fa81610f5b848661308d565b610f65919061308d565b1115610f7057600080fd5b601d91909155601c91909155601e55565b6000546001600160a01b03163314610fab5760405162461bcd60e51b8152600401610c1190613008565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b336000818152600d602090815260408083206001600160a01b03871684529091528120549091610d72918590610f1590869061308d565b6000546001600160a01b0316331461102e5760405162461bcd60e51b8152600401610c1190613008565b60145460ff1661105957436013556014805460ff191660011790556024805461ff0019166101001790555b6024805462ff00001916620100008315150217905560145460ff166110a2576040517f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e266990600090a15b50565b6000546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b6000546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610c1190613008565b60125481111561112c57600080fd5b601155565b6000546001600160a01b0316331461115b5760405162461bcd60e51b8152600401610c1190613008565b60005b8281101561125757600084848381811061117a5761117a6130ec565b905060200201602081019061118f9190612e3b565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141580156111dc57506001600160a01b0381163014155b801561121a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611244576001600160a01b0381166000908152600f60205260409020805460ff19168415151790555b508061124f81613102565b91505061115e565b50505050565b6000546001600160a01b031633146112875760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610c1190613008565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113285760405162461bcd60e51b8152600401610c1190613008565b601a92909255601d55602055565b6000546001600160a01b031633146113605760405162461bcd60e51b8152600401610c1190613008565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060048054610ce29061303d565b6000546001600160a01b031633146113e35760405162461bcd60e51b8152600401610c1190613008565b306000908152600a602052604081205460006022559050611405308383611b0d565b5050565b6000546001600160a01b031633146114335760405162461bcd60e51b8152600401610c1190613008565b6103e860075461144391906130b7565b868860075461145291906130a0565b61145c91906130b7565b10156114c65760405162461bcd60e51b815260206004820152603360248201527f4d6178205472616e73616374696f6e206d7573742062652061626f766520302e60448201527218929037b3103a37ba30b61039bab838363c9760691b6064820152608401610c11565b6103e86007546114d691906130b7565b84866007546114e591906130a0565b6114ef91906130b7565b10156115545760405162461bcd60e51b815260206004820152602e60248201527f4d61782057616c6c6574206d7573742062652061626f766520302e3125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c11565b6000868860075461156591906130a0565b61156f91906130b7565b90506000858760075461158291906130a0565b61158c91906130b7565b90506000848660075461159f91906130a0565b6115a991906130b7565b60408051608081018252858152602081018590529081018290529415156060909501859052601593909355506016556017556018805460ff19169091179055505050505050565b336000818152600d602090815260408083206001600160a01b03871684529091528120549091610d72918590610f159086906130d9565b6000610d72338484611b0d565b6000546001600160a01b0316331461165e5760405162461bcd60e51b8152600401610c1190613008565b602355565b6000546001600160a01b0316331461168d5760405162461bcd60e51b8152600401610c1190613008565b6018805460ff1916911515919091179055565b600080546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b0383166116de57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611749919061311b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c09190613134565b949350505050565b6000546001600160a01b031633146117f25760405162461bcd60e51b8152600401610c1190613008565b602480549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146118365760405162461bcd60e51b8152600401610c1190613008565b60fa81611843848661308d565b61184d919061308d565b111561185857600080fd5b601992909255601a55601b55565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6000546001600160a01b031633146118db5760405162461bcd60e51b8152600401610c1190613008565b6010805461ffff191692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b031633146119295760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03811661198e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c11565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c11565b6001600160a01b038216611aac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c11565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c11565b6001600160a01b038216611bd35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c11565b60008111611c355760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c11565b6001600160a01b0383166000908152600f602052604090205460ff1615611c875760405162461bcd60e51b8152600401610c11906020808252600490820152634865686560e01b604082015260600190565b6001600160a01b0382166000908152600f602052604090205460ff1615611cd95760405162461bcd60e51b8152600401610c11906020808252600490820152634865686560e01b604082015260600190565b60245462010000900460ff16611e2f576001600160a01b03831660009081526025602052604090205460ff1680611d2857506001600160a01b03821660009081526025602052604090205460ff165b611d6c5760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd9995c8e881b9bdd08185b1b1bddd959605a1b6044820152606401610c11565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600a60205260409020541580611de357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b611e2f5760405162461bcd60e51b815260206004820152601e60248201527f5472616e736665723a206e6f20626f64792063616e2073656c6c206e6f7700006044820152606401610c11565b60185460ff1615612031576000546001600160a01b03848116911614801590611e6657506000546001600160a01b03838116911614155b80611e8f57506001600160a01b03821661dead14801590611e8f57506001600160a01b03821615155b15612031577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480611f0557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15611f60576001600160a01b0382166000908152600e602052604090205460ff16158015611f4c57506001600160a01b0383166000908152600e602052604090205460ff16155b15611f6057601554811115611f6057600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611fd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15612031576001600160a01b0382166000908152600e602052604090205460ff16612031576016548161201c846001600160a01b03166000908152600a602052604090205490565b612026919061308d565b111561203157600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156120a457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156120c957506001600160a01b0382166000908152600e602052604090205460ff16155b156121295760105460ff1615612124576001600160a01b0382166000908152600b602052604090205442116120fd57600080fd5b60115461210a904261308d565b6001600160a01b0383166000908152600b60205260409020555b6121e5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415801561218457506001600160a01b0383166000908152600e602052604090205460ff16155b156121e557601054610100900460ff16156121e5576001600160a01b0383166000908152600c60205260409020544210156121be57600080fd5b6011546121cb904261308d565b6001600160a01b0384166000908152600c60205260409020555b60245460ff1615801561222a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561223d5750602454610100900460ff165b156122ac57306000908152600a60205260409020546017548111156122aa5760175460225411156122795760175461227490612303565b6122aa565b6000602054601d54601a5461228e919061308d565b612298919061308d565b11156122aa576017546122aa906123ce565b505b6001600160a01b0383166000908152600e602052604090205460019060ff16806122ee57506001600160a01b0383166000908152600e602052604090205460ff165b156122f7575060005b6112578484848461246e565b6024805460ff1916600117905547600061231e6002846130b7565b9050600061232c82856130d9565b9050811561233d5761233d8261290e565b47600061234a85836130d9565b905060008311801561235c5750600081115b156123a55761236b8382612b0c565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b85602260008282546123b791906130d9565b90915550506024805460ff19169055505050505050565b6024805460ff1916600117905580156123ea576123ea8161290e565b478015612460576008546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561242b573d6000803e3d6000fd5b506040518181527f4d5c7c4ddada689ed3a12644234d0a26ec361d8a6f55c9b05805a57bd636f14b9060200160405180910390a15b50506024805460ff19169055565b60008060008060009050600080600080601360010160019054906101000a900460ff16156125845760145460ff1680156124a9575060135415155b80156124c357506023546013546124c0919061308d565b43115b156124d8576014805461ff0019169055612584565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c6001600160a01b031614801561254b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b6001600160a01b031614155b801561257057506001600160a01b038b166000908152600e602052604090205460ff16155b15612584576125808b6001612c3f565b5060015b881561272d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c6001600160a01b0316036125d757601c549750601d549650601e549550612634565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168b6001600160a01b03160361262457601f54975060205496506021549550612634565b6019549750601a549650601b5495505b8015612648576103b6975060009650600095505b6103e886612656898b61308d565b612660919061308d565b61266a908c6130a0565b61267491906130b7565b9150600086612683898b61308d565b61268d919061308d565b1115612715578561269e888a61308d565b6126a8919061308d565b6126b289846130a0565b6126bc91906130b7565b9450856126c9888a61308d565b6126d3919061308d565b6126dd88846130a0565b6126e791906130b7565b9350856126f4888a61308d565b6126fe919061308d565b61270887846130a0565b61271291906130b7565b92505b8460226000828254612727919061308d565b90915550505b60008361273a868861308d565b612744919061308d565b61274e908c6130d9565b6001600160a01b038e166000908152600a6020526040812080549293508d9290919061277b9084906130d9565b9091555061278b9050858761308d565b306000908152600a6020526040812080549091906127aa90849061308d565b909155503090506001600160a01b038e167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6127e6888a61308d565b60405190815260200160405180910390a36001600160a01b038c166000908152600a60205260408120805483929061281f90849061308d565b925050819055508b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161286b91815260200190565b60405180910390a383156128ff5761dead6000908152600a6020527f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548692906128b790849061308d565b909155505060405184815261dead906001600160a01b038f16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612943576129436130ec565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190613151565b816001815181106129f8576129f86130ec565b6001600160a01b03928316602091820292909201810191909152306000908152600d825260408082207f00000000000000000000000000000000000000000000000000000000000000009094168252929091522054821115612a8157612a81307f00000000000000000000000000000000000000000000000000000000000000006000196119e9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612ad690859060009086903090429060040161316e565b600060405180830381600087803b158015612af057600080fd5b505af1158015612b04573d6000803e3d6000fd5b505050505050565b306000908152600d602090815260408083207f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168452909152902054821115612b8457612b84307f00000000000000000000000000000000000000000000000000000000000000006000196119e9565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612c13573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c3891906131df565b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480612c8757506001600160a01b03821630145b80612cc357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612ccd57600080fd5b801515600103611405576001600160a01b0382166000818152600f6020908152604091829020805460ff191660011790558151928352831515908301527f2a435d5b7631d89e0f8a99c9c5b5cf1a1e49e467b6a14ab37d5891cdeabde6a5910160405180910390a15050565b6001600160a01b03811681146110a257600080fd5b80151581146110a257600080fd5b60008060408385031215612d6f57600080fd5b8235612d7a81612d39565b91506020830135612d8a81612d4e565b809150509250929050565b600060208083528351808285015260005b81811015612dc257858101830151858201604001528201612da6565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612df657600080fd5b8235612e0181612d39565b946020939093013593505050565b600080600060608486031215612e2457600080fd5b505081359360208301359350604090920135919050565b600060208284031215612e4d57600080fd5b8135612e5881612d39565b9392505050565b600060208284031215612e7157600080fd5b5035919050565b600080600060608486031215612e8d57600080fd5b8335612e9881612d39565b92506020840135612ea881612d39565b929592945050506040919091013590565b600060208284031215612ecb57600080fd5b8135612e5881612d4e565b600080600060408486031215612eeb57600080fd5b833567ffffffffffffffff80821115612f0357600080fd5b818601915086601f830112612f1757600080fd5b813581811115612f2657600080fd5b8760208260051b8501011115612f3b57600080fd5b60209283019550935050840135612f5181612d4e565b809150509250925092565b600080600080600080600060e0888a031215612f7757600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135612fac81612d4e565b8091505092959891949750929550565b60008060408385031215612fcf57600080fd5b8235612fda81612d39565b91506020830135612d8a81612d39565b60008060408385031215612ffd57600080fd5b8235612d7a81612d4e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061305157607f821691505b60208210810361307157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d7657610d76613077565b8082028115828204841417610d7657610d76613077565b6000826130d457634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d7657610d76613077565b634e487b7160e01b600052603260045260246000fd5b60006001820161311457613114613077565b5060010190565b60006020828403121561312d57600080fd5b5051919050565b60006020828403121561314657600080fd5b8151612e5881612d4e565b60006020828403121561316357600080fd5b8151612e5881612d39565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131be5784516001600160a01b031683529383019391830191600101613199565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156131f457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220dcc19652545ae63fa6b42fe4bf017bd7201859fb8d8e256828c0ef9a2654748d64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000c6b56e09f8e80107cde720852e82eb46a1e3eac5

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806370a08231116101dc578063c40fedc611610102578063dc44b6a0116100a0578063ea2f0b371161006f578063ea2f0b3714610b57578063f23175ff14610b77578063f2fde38b14610b97578063fe575a8714610bb757600080fd5b8063dc44b6a014610ac5578063dd62ed3e14610adb578063e7c8923214610b21578063ea08d30b14610b4157600080fd5b8063c8607952116100dc578063c860795214610a27578063d469801614610a3d578063d621e81314610a5d578063d8913ae314610a7d57600080fd5b8063c40fedc6146109d1578063c49b9a80146109f1578063c5d2418914610a1157600080fd5b806395f93d481161017a578063a457c2d711610149578063a457c2d714610951578063a9059cbb14610971578063b18e984014610991578063b5ec1941146109b157600080fd5b806395f93d48146108ae578063980ba05e146108fb5780639be953b314610911578063a16df9d81461093157600080fd5b80637abdc1ca116101b65780637abdc1ca1461084f57806388790a68146108655780638da5cb5b1461087b57806395d89b411461089957600080fd5b806370a08231146107e4578063715018a61461081a57806375f0a8741461082f57600080fd5b8063313ce567116102c15780634fc3f41a1161025f5780635d098b381161022e5780635d098b381461074a5780635db447571461076a578063645b2571146107ae5780636cbdd5e3146107ce57600080fd5b80634fc3f41a146106ba57806351b005e7146106da5780635342acb4146106fa5780635b8138f61461072a57600080fd5b80633bec2bf31161029b5780633bec2bf314610627578063437823ec1461064757806349bd5a5e146106675780634a74bb021461069b57600080fd5b8063313ce567146105cf578063350e96c8146105f1578063395093511461060757600080fd5b806318160ddd1161033957806323b872dd1161030857806323b872dd1461055957806325519cf214610579578063296f0a0c146105995780632aff03b7146105b957600080fd5b806318160ddd146104d45780631c66cb6d146104e95780631d865c30146105195780631da1db5e1461053957600080fd5b8063098b306611610375578063098b3066146104245780630e4e411c146104445780631694505e1461046457806316f2f1a8146104b057600080fd5b806303d29d28146103a757806306fdde03146103c9578063095ea7b3146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c2366004612d5c565b610be7565b005b3480156103d557600080fd5b506103de610cd3565b6040516103eb9190612d95565b60405180910390f35b34801561040057600080fd5b5061041461040f366004612de3565b610d65565b60405190151581526020016103eb565b34801561043057600080fd5b506103c761043f366004612e0f565b610d7c565b34801561045057600080fd5b506103c761045f366004612e0f565b610db4565b34801561047057600080fd5b506104987f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103eb565b3480156104bc57600080fd5b506104c6601e5481565b6040519081526020016103eb565b3480156104e057600080fd5b506007546104c6565b3480156104f557600080fd5b50610414610504366004612e3b565b60256020526000908152604090205460ff1681565b34801561052557600080fd5b506103c7610534366004612e0f565b610dec565b34801561054557600080fd5b506103c7610554366004612e5f565b610e46565b34801561056557600080fd5b50610414610574366004612e78565b610ed2565b34801561058557600080fd5b506103c7610594366004612e0f565b610f24565b3480156105a557600080fd5b506103c76105b4366004612e3b565b610f81565b3480156105c557600080fd5b506104c660225481565b3480156105db57600080fd5b5060055460405160ff90911681526020016103eb565b3480156105fd57600080fd5b506104c660235481565b34801561061357600080fd5b50610414610622366004612de3565b610fcd565b34801561063357600080fd5b506103c7610642366004612eb9565b611004565b34801561065357600080fd5b506103c7610662366004612e3b565b6110a5565b34801561067357600080fd5b506104987f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b9181565b3480156106a757600080fd5b5060245461041490610100900460ff1681565b3480156106c657600080fd5b506103c76106d5366004612e5f565b6110f3565b3480156106e657600080fd5b506103c76106f5366004612ed6565b611131565b34801561070657600080fd5b50610414610715366004612e3b565b600e6020526000908152604090205460ff1681565b34801561073657600080fd5b506103c7610745366004612d5c565b61125d565b34801561075657600080fd5b506103c7610765366004612e3b565b6112b2565b34801561077657600080fd5b50601354601454610791919060ff8082169161010090041683565b6040805193845291151560208401521515908201526060016103eb565b3480156107ba57600080fd5b506103c76107c9366004612e0f565b6112fe565b3480156107da57600080fd5b506104c6601a5481565b3480156107f057600080fd5b506104c66107ff366004612e3b565b6001600160a01b03166000908152600a602052604090205490565b34801561082657600080fd5b506103c7611336565b34801561083b57600080fd5b50600854610498906001600160a01b031681565b34801561085b57600080fd5b506104c660215481565b34801561087157600080fd5b506104c6601f5481565b34801561088757600080fd5b506000546001600160a01b0316610498565b3480156108a557600080fd5b506103de6113aa565b3480156108ba57600080fd5b506010546011546012546108d99260ff80821693610100909204169184565b60408051941515855292151560208501529183015260608201526080016103eb565b34801561090757600080fd5b506104c6601b5481565b34801561091d57600080fd5b506103c761092c366004612e3b565b6113b9565b34801561093d57600080fd5b506103c761094c366004612f5c565b611409565b34801561095d57600080fd5b5061041461096c366004612de3565b6115f0565b34801561097d57600080fd5b5061041461098c366004612de3565b611627565b34801561099d57600080fd5b506103c76109ac366004612e5f565b611634565b3480156109bd57600080fd5b506103c76109cc366004612eb9565b611663565b3480156109dd57600080fd5b506104146109ec366004612fbc565b6116a0565b3480156109fd57600080fd5b506103c7610a0c366004612eb9565b6117c8565b348015610a1d57600080fd5b506104c6601d5481565b348015610a3357600080fd5b506104c660205481565b348015610a4957600080fd5b50600954610498906001600160a01b031681565b348015610a6957600080fd5b506024546104149062010000900460ff1681565b348015610a8957600080fd5b50601554601654601754601854610aa39392919060ff1684565b60408051948552602085019390935291830152151560608201526080016103eb565b348015610ad157600080fd5b506104c6601c5481565b348015610ae757600080fd5b506104c6610af6366004612fbc565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b348015610b2d57600080fd5b506103c7610b3c366004612e0f565b61180c565b348015610b4d57600080fd5b506104c660195481565b348015610b6357600080fd5b506103c7610b72366004612e3b565b611866565b348015610b8357600080fd5b506103c7610b92366004612fea565b6118b1565b348015610ba357600080fd5b506103c7610bb2366004612e3b565b6118ff565b348015610bc357600080fd5b50610414610bd2366004612e3b565b600f6020526000908152604090205460ff1681565b6000546001600160a01b03163314610c1a5760405162461bcd60e51b8152600401610c1190613008565b60405180910390fd5b7f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316826001600160a01b03161480610c6257506001600160a01b03821630145b80610c9e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316145b15610ca857600080fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b606060038054610ce29061303d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e9061303d565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b5050505050905090565b6000610d723384846119e9565b5060015b92915050565b6000546001600160a01b03163314610da65760405162461bcd60e51b8152600401610c1190613008565b601992909255601c55601f55565b6000546001600160a01b03163314610dde5760405162461bcd60e51b8152600401610c1190613008565b601b92909255601e55602155565b6000546001600160a01b03163314610e165760405162461bcd60e51b8152600401610c1190613008565b60fa81610e23848661308d565b610e2d919061308d565b1115610e3857600080fd5b601f92909255602055602155565b6000546001600160a01b03163314610e705760405162461bcd60e51b8152600401610c1190613008565b6064811115610e7e57600080fd5b60085447906001600160a01b03166108fc6064610e9b85856130a0565b610ea591906130b7565b6040518115909202916000818181858888f19350505050158015610ecd573d6000803e3d6000fd5b505050565b6000610edf848484611b0d565b6001600160a01b0384166000908152600d6020908152604080832033808552925290912054610f1a918691610f159086906130d9565b6119e9565b5060019392505050565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610c1190613008565b60fa81610f5b848661308d565b610f65919061308d565b1115610f7057600080fd5b601d91909155601c91909155601e55565b6000546001600160a01b03163314610fab5760405162461bcd60e51b8152600401610c1190613008565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b336000818152600d602090815260408083206001600160a01b03871684529091528120549091610d72918590610f1590869061308d565b6000546001600160a01b0316331461102e5760405162461bcd60e51b8152600401610c1190613008565b60145460ff1661105957436013556014805460ff191660011790556024805461ff0019166101001790555b6024805462ff00001916620100008315150217905560145460ff166110a2576040517f02ac8168caf2f254b394bd39e19417c5c28124ab89c9bc2d44921b19808e266990600090a15b50565b6000546001600160a01b031633146110cf5760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b6000546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610c1190613008565b60125481111561112c57600080fd5b601155565b6000546001600160a01b0316331461115b5760405162461bcd60e51b8152600401610c1190613008565b60005b8281101561125757600084848381811061117a5761117a6130ec565b905060200201602081019061118f9190612e3b565b90507f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316816001600160a01b0316141580156111dc57506001600160a01b0381163014155b801561121a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b031614155b15611244576001600160a01b0381166000908152600f60205260409020805460ff19168415151790555b508061124f81613102565b91505061115e565b50505050565b6000546001600160a01b031633146112875760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112dc5760405162461bcd60e51b8152600401610c1190613008565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113285760405162461bcd60e51b8152600401610c1190613008565b601a92909255601d55602055565b6000546001600160a01b031633146113605760405162461bcd60e51b8152600401610c1190613008565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060048054610ce29061303d565b6000546001600160a01b031633146113e35760405162461bcd60e51b8152600401610c1190613008565b306000908152600a602052604081205460006022559050611405308383611b0d565b5050565b6000546001600160a01b031633146114335760405162461bcd60e51b8152600401610c1190613008565b6103e860075461144391906130b7565b868860075461145291906130a0565b61145c91906130b7565b10156114c65760405162461bcd60e51b815260206004820152603360248201527f4d6178205472616e73616374696f6e206d7573742062652061626f766520302e60448201527218929037b3103a37ba30b61039bab838363c9760691b6064820152608401610c11565b6103e86007546114d691906130b7565b84866007546114e591906130a0565b6114ef91906130b7565b10156115545760405162461bcd60e51b815260206004820152602e60248201527f4d61782057616c6c6574206d7573742062652061626f766520302e3125206f6660448201526d103a37ba30b61039bab838363c9760911b6064820152608401610c11565b6000868860075461156591906130a0565b61156f91906130b7565b90506000858760075461158291906130a0565b61158c91906130b7565b90506000848660075461159f91906130a0565b6115a991906130b7565b60408051608081018252858152602081018590529081018290529415156060909501859052601593909355506016556017556018805460ff19169091179055505050505050565b336000818152600d602090815260408083206001600160a01b03871684529091528120549091610d72918590610f159086906130d9565b6000610d72338484611b0d565b6000546001600160a01b0316331461165e5760405162461bcd60e51b8152600401610c1190613008565b602355565b6000546001600160a01b0316331461168d5760405162461bcd60e51b8152600401610c1190613008565b6018805460ff1916911515919091179055565b600080546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b0383166116de57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611749919061311b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c09190613134565b949350505050565b6000546001600160a01b031633146117f25760405162461bcd60e51b8152600401610c1190613008565b602480549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146118365760405162461bcd60e51b8152600401610c1190613008565b60fa81611843848661308d565b61184d919061308d565b111561185857600080fd5b601992909255601a55601b55565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6000546001600160a01b031633146118db5760405162461bcd60e51b8152600401610c1190613008565b6010805461ffff191692151561ff0019169290921761010091151591909102179055565b6000546001600160a01b031633146119295760405162461bcd60e51b8152600401610c1190613008565b6001600160a01b03811661198e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c11565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c11565b6001600160a01b038216611aac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c11565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b715760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c11565b6001600160a01b038216611bd35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c11565b60008111611c355760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c11565b6001600160a01b0383166000908152600f602052604090205460ff1615611c875760405162461bcd60e51b8152600401610c11906020808252600490820152634865686560e01b604082015260600190565b6001600160a01b0382166000908152600f602052604090205460ff1615611cd95760405162461bcd60e51b8152600401610c11906020808252600490820152634865686560e01b604082015260600190565b60245462010000900460ff16611e2f576001600160a01b03831660009081526025602052604090205460ff1680611d2857506001600160a01b03821660009081526025602052604090205460ff165b611d6c5760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd9995c8e881b9bdd08185b1b1bddd959605a1b6044820152606401610c11565b6001600160a01b037f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b91166000908152600a60205260409020541580611de357507f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316826001600160a01b031614155b611e2f5760405162461bcd60e51b815260206004820152601e60248201527f5472616e736665723a206e6f20626f64792063616e2073656c6c206e6f7700006044820152606401610c11565b60185460ff1615612031576000546001600160a01b03848116911614801590611e6657506000546001600160a01b03838116911614155b80611e8f57506001600160a01b03821661dead14801590611e8f57506001600160a01b03821615155b15612031577f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316836001600160a01b03161480611f0557507f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316826001600160a01b0316145b15611f60576001600160a01b0382166000908152600e602052604090205460ff16158015611f4c57506001600160a01b0383166000908152600e602052604090205460ff16155b15611f6057601554811115611f6057600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614158015611fd457507f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316826001600160a01b031614155b15612031576001600160a01b0382166000908152600e602052604090205460ff16612031576016548161201c846001600160a01b03166000908152600a602052604090205490565b612026919061308d565b111561203157600080fd5b7f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316836001600160a01b03161480156120a457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156120c957506001600160a01b0382166000908152600e602052604090205460ff16155b156121295760105460ff1615612124576001600160a01b0382166000908152600b602052604090205442116120fd57600080fd5b60115461210a904261308d565b6001600160a01b0383166000908152600b60205260409020555b6121e5565b7f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316836001600160a01b03161415801561218457506001600160a01b0383166000908152600e602052604090205460ff16155b156121e557601054610100900460ff16156121e5576001600160a01b0383166000908152600c60205260409020544210156121be57600080fd5b6011546121cb904261308d565b6001600160a01b0384166000908152600c60205260409020555b60245460ff1615801561222a57507f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316836001600160a01b031614155b801561223d5750602454610100900460ff165b156122ac57306000908152600a60205260409020546017548111156122aa5760175460225411156122795760175461227490612303565b6122aa565b6000602054601d54601a5461228e919061308d565b612298919061308d565b11156122aa576017546122aa906123ce565b505b6001600160a01b0383166000908152600e602052604090205460019060ff16806122ee57506001600160a01b0383166000908152600e602052604090205460ff165b156122f7575060005b6112578484848461246e565b6024805460ff1916600117905547600061231e6002846130b7565b9050600061232c82856130d9565b9050811561233d5761233d8261290e565b47600061234a85836130d9565b905060008311801561235c5750600081115b156123a55761236b8382612b0c565b60408051848152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b85602260008282546123b791906130d9565b90915550506024805460ff19169055505050505050565b6024805460ff1916600117905580156123ea576123ea8161290e565b478015612460576008546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561242b573d6000803e3d6000fd5b506040518181527f4d5c7c4ddada689ed3a12644234d0a26ec361d8a6f55c9b05805a57bd636f14b9060200160405180910390a15b50506024805460ff19169055565b60008060008060009050600080600080601360010160019054906101000a900460ff16156125845760145460ff1680156124a9575060135415155b80156124c357506023546013546124c0919061308d565b43115b156124d8576014805461ff0019169055612584565b7f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b03168c6001600160a01b031614801561254b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168b6001600160a01b031614155b801561257057506001600160a01b038b166000908152600e602052604090205460ff16155b15612584576125808b6001612c3f565b5060015b881561272d577f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b03168c6001600160a01b0316036125d757601c549750601d549650601e549550612634565b7f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b03168b6001600160a01b03160361262457601f54975060205496506021549550612634565b6019549750601a549650601b5495505b8015612648576103b6975060009650600095505b6103e886612656898b61308d565b612660919061308d565b61266a908c6130a0565b61267491906130b7565b9150600086612683898b61308d565b61268d919061308d565b1115612715578561269e888a61308d565b6126a8919061308d565b6126b289846130a0565b6126bc91906130b7565b9450856126c9888a61308d565b6126d3919061308d565b6126dd88846130a0565b6126e791906130b7565b9350856126f4888a61308d565b6126fe919061308d565b61270887846130a0565b61271291906130b7565b92505b8460226000828254612727919061308d565b90915550505b60008361273a868861308d565b612744919061308d565b61274e908c6130d9565b6001600160a01b038e166000908152600a6020526040812080549293508d9290919061277b9084906130d9565b9091555061278b9050858761308d565b306000908152600a6020526040812080549091906127aa90849061308d565b909155503090506001600160a01b038e167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6127e6888a61308d565b60405190815260200160405180910390a36001600160a01b038c166000908152600a60205260408120805483929061281f90849061308d565b925050819055508b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161286b91815260200190565b60405180910390a383156128ff5761dead6000908152600a6020527f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548692906128b790849061308d565b909155505060405184815261dead906001600160a01b038f16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612943576129436130ec565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190613151565b816001815181106129f8576129f86130ec565b6001600160a01b03928316602091820292909201810191909152306000908152600d825260408082207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9094168252929091522054821115612a8157612a81307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6000196119e9565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612ad690859060009086903090429060040161316e565b600060405180830381600087803b158015612af057600080fd5b505af1158015612b04573d6000803e3d6000fd5b505050505050565b306000908152600d602090815260408083207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168452909152902054821115612b8457612b84307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6000196119e9565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612c13573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c3891906131df565b5050505050565b7f00000000000000000000000066672c00e4f7329c4a9f4f7f2343384a986d3b916001600160a01b0316826001600160a01b03161480612c8757506001600160a01b03821630145b80612cc357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316145b15612ccd57600080fd5b801515600103611405576001600160a01b0382166000818152600f6020908152604091829020805460ff191660011790558151928352831515908301527f2a435d5b7631d89e0f8a99c9c5b5cf1a1e49e467b6a14ab37d5891cdeabde6a5910160405180910390a15050565b6001600160a01b03811681146110a257600080fd5b80151581146110a257600080fd5b60008060408385031215612d6f57600080fd5b8235612d7a81612d39565b91506020830135612d8a81612d4e565b809150509250929050565b600060208083528351808285015260005b81811015612dc257858101830151858201604001528201612da6565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612df657600080fd5b8235612e0181612d39565b946020939093013593505050565b600080600060608486031215612e2457600080fd5b505081359360208301359350604090920135919050565b600060208284031215612e4d57600080fd5b8135612e5881612d39565b9392505050565b600060208284031215612e7157600080fd5b5035919050565b600080600060608486031215612e8d57600080fd5b8335612e9881612d39565b92506020840135612ea881612d39565b929592945050506040919091013590565b600060208284031215612ecb57600080fd5b8135612e5881612d4e565b600080600060408486031215612eeb57600080fd5b833567ffffffffffffffff80821115612f0357600080fd5b818601915086601f830112612f1757600080fd5b813581811115612f2657600080fd5b8760208260051b8501011115612f3b57600080fd5b60209283019550935050840135612f5181612d4e565b809150509250925092565b600080600080600080600060e0888a031215612f7757600080fd5b873596506020880135955060408801359450606088013593506080880135925060a0880135915060c0880135612fac81612d4e565b8091505092959891949750929550565b60008060408385031215612fcf57600080fd5b8235612fda81612d39565b91506020830135612d8a81612d39565b60008060408385031215612ffd57600080fd5b8235612d7a81612d4e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061305157607f821691505b60208210810361307157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d7657610d76613077565b8082028115828204841417610d7657610d76613077565b6000826130d457634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610d7657610d76613077565b634e487b7160e01b600052603260045260246000fd5b60006001820161311457613114613077565b5060010190565b60006020828403121561312d57600080fd5b5051919050565b60006020828403121561314657600080fd5b8151612e5881612d4e565b60006020828403121561316357600080fd5b8151612e5881612d39565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131be5784516001600160a01b031683529383019391830191600101613199565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156131f457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220dcc19652545ae63fa6b42fe4bf017bd7201859fb8d8e256828c0ef9a2654748d64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c6b56e09f8e80107cde720852e82eb46a1e3eac5

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xc6b56E09F8E80107CdE720852E82Eb46a1E3eAC5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6b56e09f8e80107cde720852e82eb46a1e3eac5


Deployed Bytecode Sourcemap

14597:20556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23340:264;;;;;;;;;;-1:-1:-1;23340:264:0;;;;;:::i;:::-;;:::i;:::-;;18610:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19266:161;;;;;;;;;;-1:-1:-1;19266:161:0;;;;;:::i;:::-;;:::i;:::-;;;1698:14:1;;1691:22;1673:41;;1661:2;1646:18;19266:161:0;1533:187:1;20338:225:0;;;;;;;;;;-1:-1:-1;20338:225:0;;;;;:::i;:::-;;:::i;20804:205::-;;;;;;;;;;-1:-1:-1;20804:205:0;;;;;:::i;:::-;;:::i;16624:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2237:32:1;;;2219:51;;2207:2;2192:18;16624:51:0;2046:230:1;16397:26:0;;;;;;;;;;;;;;;;;;;2427:25:1;;;2415:2;2400:18;16397:26:0;2281:177:1;18887:95:0;;;;;;;;;;-1:-1:-1;18967:7:0;;18887:95;;16836:48;;;;;;;;;;-1:-1:-1;16836:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19435:289;;;;;;;;;;-1:-1:-1;19435:289:0;;;;;:::i;:::-;;:::i;26365:285::-;;;;;;;;;;-1:-1:-1;26365:285:0;;;;;:::i;:::-;;:::i;28430:348::-;;;;;;;;;;-1:-1:-1;28430:348:0;;;;;:::i;:::-;;:::i;19732:285::-;;;;;;;;;;-1:-1:-1;19732:285:0;;;;;:::i;:::-;;:::i;21341:116::-;;;;;;;;;;-1:-1:-1;21341:116:0;;;;;:::i;:::-;;:::i;16546:31::-;;;;;;;;;;;;;;;;18796:83;;;;;;;;;;-1:-1:-1;18862:9:0;;18796:83;;18862:9;;;;3503:36:1;;3491:2;3476:18;18796:83:0;3361:184:1;16586:29:0;;;;;;;;;;;;;;;;22781:266;;;;;;;;;;-1:-1:-1;22781:266:0;;;;;:::i;:::-;;:::i;22181:354::-;;;;;;;;;;-1:-1:-1;22181:354:0;;;;;:::i;:::-;;:::i;24458:110::-;;;;;;;;;;-1:-1:-1;24458:110:0;;;;;:::i;:::-;;:::i;16682:38::-;;;;;;;;;;;;;;;16763:33;;;;;;;;;;-1:-1:-1;16763:33:0;;;;;;;;;;;21017:161;;;;;;;;;;-1:-1:-1;21017:161:0;;;;;:::i;:::-;;:::i;23612:380::-;;;;;;;;;;-1:-1:-1;23612:380:0;;;;;:::i;:::-;;:::i;15232:49::-;;;;;;;;;;-1:-1:-1;15232:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22647:126;;;;;;;;;;-1:-1:-1;22647:126:0;;;;;:::i;:::-;;:::i;21186:147::-;;;;;;;;;;-1:-1:-1;21186:147:0;;;;;:::i;:::-;;:::i;15839:153::-;;;;;;;;;;-1:-1:-1;15839:153:0;;;;;;;;;;;;;;;;;;;;;;5209:25:1;;;5277:14;;5270:22;5265:2;5250:18;;5243:50;5336:14;5329:22;5309:18;;;5302:50;5197:2;5182:18;15839:153:0;5019:339:1;20571:225:0;;;;;;;;;;-1:-1:-1;20571:225:0;;;;;:::i;:::-;;:::i;16238:36::-;;;;;;;;;;;;;;;;19141:117;;;;;;;;;;-1:-1:-1;19141:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;19234:16:0;19207:7;19234:16;;;:7;:16;;;;;;;19141:117;4686:148;;;;;;;;;;;;;:::i;14915:38::-;;;;;;;;;;-1:-1:-1;14915:38:0;;;;-1:-1:-1;;;;;14915:38:0;;;16510:27;;;;;;;;;;;;;;;;16432:32;;;;;;;;;;;;;;;;4472:79;;;;;;;;;;-1:-1:-1;4510:7:0;4537:6;-1:-1:-1;;;;;4537:6:0;4472:79;;18701:87;;;;;;;;;;;;;:::i;15501:217::-;;;;;;;;;;-1:-1:-1;15501:217:0;;;;;;;;;;;;;;;;;;;;;;;;;5831:14:1;;5824:22;5806:41;;5890:14;;5883:22;5878:2;5863:18;;5856:50;5922:18;;;5915:34;5980:2;5965:18;;5958:34;5793:3;5778:19;15501:217:0;5587:411:1;16281:31:0;;;;;;;;;;;;;;;;26658:206;;;;;;;;;;-1:-1:-1;26658:206:0;;;;;:::i;:::-;;:::i;21465:708::-;;;;;;;;;;-1:-1:-1;21465:708:0;;;;;:::i;:::-;;:::i;23055:277::-;;;;;;;;;;-1:-1:-1;23055:277:0;;;;;:::i;:::-;;:::i;31857:167::-;;;;;;;;;;-1:-1:-1;31857:167:0;;;;;:::i;:::-;;:::i;22543:96::-;;;;;;;;;;-1:-1:-1;22543:96:0;;;;;:::i;:::-;;:::i;24360:90::-;;;;;;;;;;-1:-1:-1;24360:90:0;;;;;:::i;:::-;;:::i;26872:285::-;;;;;;;;;;-1:-1:-1;26872:285:0;;;;;:::i;:::-;;:::i;24693:117::-;;;;;;;;;;-1:-1:-1;24693:117:0;;;;;:::i;:::-;;:::i;16359:31::-;;;;;;;;;;;;;;;;16471:32;;;;;;;;;;;;;;;;14960:30;;;;;;;;;;-1:-1:-1;14960:30:0;;;;-1:-1:-1;;;;;14960:30:0;;;16805:24;;;;;;;;;;-1:-1:-1;16805:24:0;;;;;;;;;;;16157:29;;;;;;;;;;-1:-1:-1;16157:29:0;;;;;;;;;;;;;;;;;;;;;7279:25:1;;;7335:2;7320:18;;7313:34;;;;7363:18;;;7356:34;7433:14;7426:22;7421:2;7406:18;;7399:50;7266:3;7251:19;16157:29:0;7054:401:1;16321:31:0;;;;;;;;;;;;;;;;18990:143;;;;;;;;;;-1:-1:-1;18990:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19098:18:0;;;19071:7;19098:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18990:143;20025:305;;;;;;;;;;-1:-1:-1;20025:305:0;;;;;:::i;:::-;;:::i;16195:36::-;;;;;;;;;;;;;;;;24576:109;;;;;;;;;;-1:-1:-1;24576:109:0;;;;;:::i;:::-;;:::i;34970:180::-;;;;;;;;;;-1:-1:-1;34970:180:0;;;;;:::i;:::-;;:::i;4842:281::-;;;;;;;;;;-1:-1:-1;4842:281:0;;;;;:::i;:::-;;:::i;15288:45::-;;;;;;;;;;-1:-1:-1;15288:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23340:264;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;;;;;;;;;23447:13:::1;-1:-1:-1::0;;;;;23436:24:0::1;:7;-1:-1:-1::0;;;;;23436:24:0::1;;:52;;;-1:-1:-1::0;;;;;;23464:24:0;::::1;23483:4;23464:24;23436:52;:91;;;;23511:15;-1:-1:-1::0;;;;;23492:35:0::1;:7;-1:-1:-1::0;;;;;23492:35:0::1;;23436:91;23433:107;;;23530:8;::::0;::::1;23433:107;-1:-1:-1::0;;;;;23560:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:36;;-1:-1:-1;;23560:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23340:264::o;18610:83::-;18647:13;18680:5;18673:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18610:83;:::o;19266:161::-;19341:4;19358:39;1089:10;19381:7;19390:6;19358:8;:39::i;:::-;-1:-1:-1;19415:4:0;19266:161;;;;;:::o;20338:225::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;20446:21:::1;:35:::0;;;;20492:16:::1;:25:::0;20528:17:::1;:27:::0;20338:225::o;20804:205::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;20907:16:::1;:30:::0;;;;20948:11:::1;:20:::0;20979:12:::1;:22:::0;20804:205::o;19435:289::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;19593:3:::1;19582:7:::0;19552:27:::1;19567:12:::0;19552;:27:::1;:::i;:::-;:37;;;;:::i;:::-;:44;;19544:53;;;::::0;::::1;;19608:17;:32:::0;;;;19651:17:::1;:32:::0;19694:12:::1;:22:::0;19435:289::o;26365:285::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;26476:3:::1;26456:16;:23;;26448:32;;;::::0;::::1;;26551:15;::::0;26511:21:::1;::::0;-1:-1:-1;;;;;26551:15:0::1;26543:99;26627:3;26592:30;26605:16:::0;26511:21;26592:30:::1;:::i;:::-;26591:40;;;;:::i;:::-;26543:99;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26437:213;26365:285:::0;:::o;28430:348::-;28526:4;28543:36;28553:6;28561:9;28572:6;28543:9;:36::i;:::-;-1:-1:-1;;;;;28661:19:0;;;;;;:11;:19;;;;;;;;1089:10;28661:33;;;;;;;;;28590:158;;28613:6;;28661:76;;28716:6;;28661:76;:::i;:::-;28590:8;:158::i;:::-;-1:-1:-1;28766:4:0;28430:348;;;;;:::o;19732:285::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;19889:3:::1;19878:7:::0;19848:27:::1;19863:12:::0;19848;:27:::1;:::i;:::-;:37;;;;:::i;:::-;:44;;19840:53;;;::::0;::::1;;19904:16;:31:::0;;;;19946:16:::1;:31:::0;;;;19988:11:::1;:21:::0;19732:285::o;21341:116::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;21420:15:::1;:29:::0;;-1:-1:-1;;;;;;21420:29:0::1;-1:-1:-1::0;;;;;21420:29:0;;;::::1;::::0;;;::::1;::::0;;21341:116::o;22781:266::-;1089:10;22869:4;22957:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22957:34:0;;;;;;;;;;22869:4;;22885:132;;22935:7;;22957:49;;22995:10;;22957:49;:::i;22181:354::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;22253:18;;::::1;;22248:170;;22311:12;22288:9;:35:::0;22338:18;:25;;-1:-1:-1;;22338:25:0::1;22359:4;22338:25;::::0;;22378:21:::1;:28:::0;;-1:-1:-1;;22378:28:0::1;22338:25;22378:28;::::0;;22248:170:::1;22430:12;:20:::0;;-1:-1:-1;;22430:20:0::1;::::0;;::::1;;;;::::0;;22468:18;;22430:20:::1;22468:18;22463:65;;22508:8;::::0;::::1;::::0;;;::::1;22463:65;22181:354:::0;:::o;24458:110::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24527:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;24527:33:0::1;24556:4;24527:33;::::0;;24458:110::o;21017:161::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;21102:26;;21092:36;::::1;;21084:45;;;::::0;::::1;;21140:21:::0;:30;21017:161::o;23612:380::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;23711:9:::1;23706:279;23722:19:::0;;::::1;23706:279;;;23763:15;23781:8;;23790:1;23781:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;23763:29;;23821:13;-1:-1:-1::0;;;;;23810:24:0::1;:7;-1:-1:-1::0;;;;;23810:24:0::1;;;:52;;;;-1:-1:-1::0;;;;;;23838:24:0;::::1;23857:4;23838:24;;23810:52;:91;;;;;23885:15;-1:-1:-1::0;;;;;23866:35:0::1;:7;-1:-1:-1::0;;;;;23866:35:0::1;;;23810:91;23807:167;;;-1:-1:-1::0;;;;;23922:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:36;;-1:-1:-1;;23922:36:0::1;::::0;::::1;;;::::0;;23807:167:::1;-1:-1:-1::0;23743:3:0;::::1;::::0;::::1;:::i;:::-;;;;23706:279;;;;23612:380:::0;;;:::o;22647:126::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22735:21:0;;;::::1;;::::0;;;:16:::1;:21;::::0;;;;:30;;-1:-1:-1;;22735:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22647:126::o;21186:147::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;21280:15:::1;:45:::0;;-1:-1:-1;;;;;;21280:45:0::1;-1:-1:-1::0;;;;;21280:45:0;;;::::1;::::0;;;::::1;::::0;;21186:147::o;20571:225::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;20679:21:::1;:35:::0;;;;20725:16:::1;:25:::0;20761:17:::1;:27:::0;20571:225::o;4686:148::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;4793:1:::1;4777:6:::0;;4756:40:::1;::::0;-1:-1:-1;;;;;4777:6:0;;::::1;::::0;4756:40:::1;::::0;4793:1;;4756:40:::1;4824:1;4807:19:::0;;-1:-1:-1;;;;;;4807:19:0::1;::::0;;4686:148::o;18701:87::-;18740:13;18773:7;18766:14;;;;;:::i;26658:206::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;26762:4:::1;26725:16;19234::::0;;;:7;:16;;;;;;26798:1:::1;26779:16;:20:::0;26725:43;-1:-1:-1;26810:38:0::1;26828:4;26835:2:::0;26725:43;26810:9:::1;:38::i;:::-;26714:150;26658:206:::0;:::o;21465:708::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;21650:4:::1;21640:7;;:14;;;;:::i;:::-;21632:3;21625;21615:7;;:13;;;;:::i;:::-;21614:21;;;;:::i;:::-;:41;;21606:105;;;::::0;-1:-1:-1;;;21606:105:0;;9851:2:1;21606:105:0::1;::::0;::::1;9833:21:1::0;9890:2;9870:18;;;9863:30;9929:34;9909:18;;;9902:62;-1:-1:-1;;;9980:18:1;;;9973:49;10039:19;;21606:105:0::1;9649:415:1::0;21606:105:0::1;21766:4;21756:7;;:14;;;;:::i;:::-;21748:3;21741;21731:7;;:13;;;;:::i;:::-;21730:21;;;;:::i;:::-;:41;;21722:100;;;::::0;-1:-1:-1;;;21722:100:0;;10271:2:1;21722:100:0::1;::::0;::::1;10253:21:1::0;10310:2;10290:18;;;10283:30;10349:34;10329:18;;;10322:62;-1:-1:-1;;;10400:18:1;;;10393:44;10454:19;;21722:100:0::1;10069:410:1::0;21722:100:0::1;21833:13;21868:3;21860;21850:7;;:13;;;;:::i;:::-;21849:23;;;;:::i;:::-;21833:39;;21883:13;21917:3;21910;21900:7;;:13;;;;:::i;:::-;21899:21;;;;:::i;:::-;21883:37;;21931:18;21970:2;21963;21953:7;;:12;;;;:::i;:::-;21952:21;;;;:::i;:::-;21997:168;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;;::::0;;;;;;;21984:10:::1;:181:::0;;;;-1:-1:-1;21984:181:0;;;;;;;-1:-1:-1;;21984:181:0::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;21465:708:0:o;23055:277::-;1089:10;23148:4;23237:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23237:34:0;;;;;;;;;;23148:4;;23165:137;;23215:7;;23237:54;;23275:15;;23237:54;:::i;31857:167::-;31935:4;31952:42;1089:10;31976:9;31987:6;31952:9;:42::i;22543:96::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;22612:10:::1;:19:::0;22543:96::o;24360:90::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;24416:18;:26;;-1:-1:-1;;24416:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24360:90::o;26872:285::-;26955:10;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26986:20:0;::::1;26978:29;;;::::0;::::1;;27045:39;::::0;-1:-1:-1;;;27045:39:0;;27078:4:::1;27045:39;::::0;::::1;2219:51:1::0;27018:24:0::1;::::0;-1:-1:-1;;;;;27045:24:0;::::1;::::0;::::1;::::0;2192:18:1;;27045:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27103:46;::::0;-1:-1:-1;;;27103:46:0;;-1:-1:-1;;;;;10865:32:1;;;27103:46:0::1;::::0;::::1;10847:51:1::0;10914:18;;;10907:34;;;27018:66:0;;-1:-1:-1;27103:23:0;;::::1;::::0;::::1;::::0;10820:18:1;;27103:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27095:54:::0;26872:285;-1:-1:-1;;;;26872:285:0:o;24693:117::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;24770:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;24770:32:0;;::::1;::::0;;;::::1;::::0;;24693:117::o;20025:305::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;20187:3:::1;20176:7:::0;20146:27:::1;20161:12:::0;20146;:27:::1;:::i;:::-;:37;;;;:::i;:::-;:44;;20138:53;;;::::0;::::1;;20202:21;:36:::0;;;;20249:21:::1;:36:::0;20296:16:::1;:26:::0;20025:305::o;24576:109::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24643:26:0::1;24672:5;24643:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;24643:34:0::1;::::0;;24576:109::o;34970:180::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;35052:12:::1;:39:::0;;-1:-1:-1;;35102:40:0;35052:39;::::1;;-1:-1:-1::0;;35102:40:0;;;;;35052:39:::1;35102:40:::0;::::1;;::::0;;;::::1;;::::0;;34970:180::o;4842:281::-;4599:6;;-1:-1:-1;;;;;4599:6:0;1089:10;4599:22;4591:67;;;;-1:-1:-1;;;4591:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4945:22:0;::::1;4923:110;;;::::0;-1:-1:-1;;;4923:110:0;;11404:2:1;4923:110:0::1;::::0;::::1;11386:21:1::0;11443:2;11423:18;;;11416:30;11482:34;11462:18;;;11455:62;-1:-1:-1;;;11533:18:1;;;11526:36;11579:19;;4923:110:0::1;11202:402:1::0;4923:110:0::1;5070:6;::::0;;5049:38:::1;::::0;-1:-1:-1;;;;;5049:38:0;;::::1;::::0;5070:6;::::1;::::0;5049:38:::1;::::0;::::1;5098:6;:17:::0;;-1:-1:-1;;;;;;5098:17:0::1;-1:-1:-1::0;;;;;5098:17:0;;;::::1;::::0;;;::::1;::::0;;4842:281::o;24912:335::-;-1:-1:-1;;;;;25003:19:0;;24995:68;;;;-1:-1:-1;;;24995:68:0;;11811:2:1;24995:68:0;;;11793:21:1;11850:2;11830:18;;;11823:30;11889:34;11869:18;;;11862:62;-1:-1:-1;;;11940:18:1;;;11933:34;11984:19;;24995:68:0;11609:400:1;24995:68:0;-1:-1:-1;;;;;25082:21:0;;25074:68;;;;-1:-1:-1;;;25074:68:0;;12216:2:1;25074:68:0;;;12198:21:1;12255:2;12235:18;;;12228:30;12294:34;12274:18;;;12267:62;-1:-1:-1;;;12345:18:1;;;12338:32;12387:19;;25074:68:0;12014:398:1;25074:68:0;-1:-1:-1;;;;;25155:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25207:32;;2427:25:1;;;25207:32:0;;2400:18:1;25207:32:0;;;;;;;24912:335;;;:::o;28790:3059::-;-1:-1:-1;;;;;28878:18:0;;28870:68;;;;-1:-1:-1;;;28870:68:0;;12619:2:1;28870:68:0;;;12601:21:1;12658:2;12638:18;;;12631:30;12697:34;12677:18;;;12670:62;-1:-1:-1;;;12748:18:1;;;12741:35;12793:19;;28870:68:0;12417:401:1;28870:68:0;-1:-1:-1;;;;;28957:16:0;;28949:64;;;;-1:-1:-1;;;28949:64:0;;13025:2:1;28949:64:0;;;13007:21:1;13064:2;13044:18;;;13037:30;13103:34;13083:18;;;13076:62;-1:-1:-1;;;13154:18:1;;;13147:33;13197:19;;28949:64:0;12823:399:1;28949:64:0;29041:1;29032:6;:10;29024:64;;;;-1:-1:-1;;;29024:64:0;;13429:2:1;29024:64:0;;;13411:21:1;13468:2;13448:18;;;13441:30;13507:34;13487:18;;;13480:62;-1:-1:-1;;;13558:18:1;;;13551:39;13607:19;;29024:64:0;13227:405:1;29024:64:0;-1:-1:-1;;;;;29107:19:0;;;;;;:13;:19;;;;;;;;:28;29099:45;;;;-1:-1:-1;;;29099:45:0;;;;;;13839:2:1;13821:21;;;13878:1;13858:18;;;13851:29;-1:-1:-1;;;13911:2:1;13896:18;;13889:34;13955:2;13940:18;;13637:327;29099:45:0;-1:-1:-1;;;;;29163:17:0;;;;;;:13;:17;;;;;;;;:26;29155:43;;;;-1:-1:-1;;;29155:43:0;;;;;;13839:2:1;13821:21;;;13878:1;13858:18;;;13851:29;-1:-1:-1;;;13911:2:1;13896:18;;13889:34;13955:2;13940:18;;13637:327;29155:43:0;29216:12;;;;;;;29211:236;;-1:-1:-1;;;;;29253:22:0;;;;;;:16;:22;;;;;;;;;:46;;-1:-1:-1;;;;;;29279:20:0;;;;;;:16;:20;;;;;;;;29253:46;29245:80;;;;-1:-1:-1;;;29245:80:0;;14171:2:1;29245:80:0;;;14153:21:1;14210:2;14190:18;;;14183:30;-1:-1:-1;;;14229:18:1;;;14222:51;14290:18;;29245:80:0;13969:345:1;29245:80:0;-1:-1:-1;;;;;29358:13:0;19234:16;19207:7;19234:16;;;:7;:16;;;;;;29348:29;;:52;;;29387:13;-1:-1:-1;;;;;29381:19:0;:2;-1:-1:-1;;;;;29381:19:0;;;29348:52;29340:95;;;;-1:-1:-1;;;29340:95:0;;14521:2:1;29340:95:0;;;14503:21:1;14560:2;14540:18;;;14533:30;14599:32;14579:18;;;14572:60;14649:18;;29340:95:0;14319:354:1;29340:95:0;29463:18;;;;29459:694;;;4510:7;4537:6;-1:-1:-1;;;;;29501:15:0;;;4537:6;;29501:15;;;;:32;;-1:-1:-1;4510:7:0;4537:6;-1:-1:-1;;;;;29520:13:0;;;4537:6;;29520:13;;29501:32;:77;;;-1:-1:-1;;;;;;29537:21:0;;29551:6;29537:21;;;;:41;;-1:-1:-1;;;;;;29562:16:0;;;;29537:41;29498:644;;;29625:13;-1:-1:-1;;;;;29617:21:0;:4;-1:-1:-1;;;;;29617:21:0;;:44;;;;29648:13;-1:-1:-1;;;;;29642:19:0;:2;-1:-1:-1;;;;;29642:19:0;;29617:44;29613:257;;;-1:-1:-1;;;;;29708:21:0;;;;;;:17;:21;;;;;;;;29707:22;:50;;;;-1:-1:-1;;;;;;29734:23:0;;;;;;:17;:23;;;;;;;;29733:24;29707:50;29704:147;;;29804:10;:22;29794:32;;;29786:41;;;;;;29905:15;-1:-1:-1;;;;;29891:30:0;:2;-1:-1:-1;;;;;29891:30:0;;;:53;;;;;29931:13;-1:-1:-1;;;;;29925:19:0;:2;-1:-1:-1;;;;;29925:19:0;;;29891:53;29888:239;;;-1:-1:-1;;;;;29973:21:0;;;;;;:17;:21;;;;;;;;29969:139;;30057:26;;30047:6;30031:13;30041:2;-1:-1:-1;;;;;19234:16:0;19207:7;19234:16;;;:7;:16;;;;;;;19141:117;30031:13;:22;;;;:::i;:::-;:52;;30023:61;;;;;;30177:13;-1:-1:-1;;;;;30169:21:0;:4;-1:-1:-1;;;;;30169:21:0;;:55;;;;;30208:15;-1:-1:-1;;;;;30194:30:0;:2;-1:-1:-1;;;;;30194:30:0;;;30169:55;:81;;;;-1:-1:-1;;;;;;30229:21:0;;;;;;:17;:21;;;;;;;;30228:22;30169:81;30165:645;;;30289:12;:31;;;30285:204;;;-1:-1:-1;;;;;30353:15:0;;;;;;:11;:15;;;;;;30371;-1:-1:-1;30345:42:0;;;;;;30447:21;;30428:41;;:15;:41;:::i;:::-;-1:-1:-1;;;;;30410:15:0;;;;;;:11;:15;;;;;:59;30285:204;30165:645;;;30522:13;-1:-1:-1;;;;;30514:21:0;:4;-1:-1:-1;;;;;30514:21:0;;;:49;;;;-1:-1:-1;;;;;;30540:23:0;;;;;;:17;:23;;;;;;;;30539:24;30514:49;30510:300;;;30587:12;:32;;;;;;30583:212;;;-1:-1:-1;;;;;30652:18:0;;;;;;:12;:18;;;;;;30674:15;-1:-1:-1;30652:37:0;30644:46;;;;;;30753:21;;30734:41;;:15;:41;:::i;:::-;-1:-1:-1;;;;;30713:18:0;;;;;;:12;:18;;;;;:62;30583:212;30841:16;;;;30840:17;:55;;;;;30882:13;-1:-1:-1;;;;;30874:21:0;:4;-1:-1:-1;;;;;30874:21:0;;;30840:55;:93;;;;-1:-1:-1;30912:21:0;;;;;;;30840:93;30822:611;;;31009:4;30960:28;19234:16;;;:7;:16;;;;;;31059:26;;31036:49;;31032:390;;;31129:26;;31110:16;;:45;31106:301;;;31195:26;;31180:42;;:14;:42::i;:::-;31106:301;;;31317:1;31296:17;;31277:16;;31253:21;;:40;;;;:::i;:::-;:60;;;;:::i;:::-;31252:66;31248:159;;;31360:26;;31343:44;;:16;:44::i;:::-;30945:488;30822:611;-1:-1:-1;;;;;31625:23:0;;31506:12;31625:23;;;:17;:23;;;;;;31521:4;;31625:23;;;:48;;-1:-1:-1;;;;;;31652:21:0;;;;;;:17;:21;;;;;;;;31625:48;31621:96;;;-1:-1:-1;31700:5:0;31621:96;31800:41;31815:4;31821:2;31825:6;31833:7;31800:14;:41::i;25255:714::-;16927:16;:23;;-1:-1:-1;;16927:23:0;16946:4;16927:23;;;25357:21:::1;16927:16:::0;25412::::1;25427:1;25412:12:::0;:16:::1;:::i;:::-;25389:39:::0;-1:-1:-1;25439:23:0::1;25465:27;25389:39:::0;25465:12;:27:::1;:::i;:::-;25439:53:::0;-1:-1:-1;25509:16:0;;25505:79:::1;;25542:30;25559:12;25542:16;:30::i;:::-;25617:21;25596:18;25684:27;25697:14:::0;25617:21;25684:27:::1;:::i;:::-;25649:63;;25747:1;25729:15;:19;:43;;;;;25771:1;25752:16;:20;25729:43;25725:192;;;25789:47;25802:15;25819:16;25789:12;:47::i;:::-;25856:49;::::0;;14852:25:1;;;14908:2;14893:18;;14886:34;;;25856:49:0::1;::::0;14825:18:1;25856:49:0::1;;;;;;;25725:192;25949:12;25929:16;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16973:16:0;:24;;-1:-1:-1;;16973:24:0;;;-1:-1:-1;;;;;;25255:714:0:o;25977:380::-;16927:16;:23;;-1:-1:-1;;16927:23:0;16946:4;16927:23;;;26060:16;;26056:79:::1;;26093:30;26110:12;26093:16;:30::i;:::-;26174:21;26210:20:::0;;26206:144:::1;;26247:15;::::0;:42:::1;::::0;-1:-1:-1;;;;;26247:15:0;;::::1;::::0;:42;::::1;;;::::0;26272:16;;26247:15:::1;:42:::0;:15;:42;26272:16;26247:15;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26309:29:0::1;::::0;2427:25:1;;;26309:29:0::1;::::0;2415:2:1;2400:18;26309:29:0::1;;;;;;;26206:144;-1:-1:-1::0;;16973:16:0;:24;;-1:-1:-1;;16973:24:0;;;25977:380::o;32105:2857::-;32210:20;32241;32272:15;32300:26;32329:1;32300:30;;32341:26;32382:21;32418:17;32452:12;32489:9;:26;;;;;;;;;;;;32485:571;;;32536:18;;;;:46;;;;-1:-1:-1;32558:9:0;:20;:24;;32536:46;:100;;;;-1:-1:-1;32625:10:0;;32602:9;:20;:33;;32625:10;32602:33;:::i;:::-;32586:12;:50;32536:100;32532:513;;;32657:26;:34;;-1:-1:-1;;32657:34:0;;;32532:513;;;32768:13;-1:-1:-1;;;;;32758:23:0;:6;-1:-1:-1;;;;;32758:23:0;;:85;;;;;32827:15;-1:-1:-1;;;;;32806:37:0;:9;-1:-1:-1;;;;;32806:37:0;;;32758:85;:139;;;;-1:-1:-1;;;;;;32869:28:0;;;;;;:17;:28;;;;;;;;32868:29;32758:139;32732:298;;;32940:32;32956:9;32967:4;32940:15;:32::i;:::-;-1:-1:-1;33006:4:0;32732:298;33072:7;33068:1309;;;33110:13;-1:-1:-1;;;;;33100:23:0;:6;-1:-1:-1;;;;;33100:23:0;;33096:575;;33159:16;;33144:31;;33209:16;;33194:31;;33254:11;;33244:21;;33096:575;;;33320:13;-1:-1:-1;;;;;33307:26:0;:9;-1:-1:-1;;;;;33307:26:0;;33303:368;;33369:17;;33354:32;;33420:17;;33405:32;;33466:12;;33456:22;;33303:368;;;33534:21;;33519:36;;33589:21;;33574:36;;33639:16;;33629:26;;33303:368;33691:7;33687:131;;;33734:3;33719:18;;33771:1;33756:16;;33801:1;33791:11;;33687:131;33900:4;33887:7;33857:27;33872:12;33857;:27;:::i;:::-;:37;;;;:::i;:::-;33847:48;;:6;:48;:::i;:::-;33846:59;;;;:::i;:::-;33834:71;-1:-1:-1;33968:1:0;33957:7;33927:27;33942:12;33927;:27;:::i;:::-;:37;;;;:::i;:::-;33926:43;33922:389;;;34085:7;34055:27;34070:12;34055;:27;:::i;:::-;:37;;;;:::i;:::-;34027:24;34039:12;34027:9;:24;:::i;:::-;:66;;;;:::i;:::-;34006:87;-1:-1:-1;34191:7:0;34161:27;34176:12;34161;:27;:::i;:::-;:37;;;;:::i;:::-;34133:24;34145:12;34133:9;:24;:::i;:::-;:66;;;;:::i;:::-;34112:87;-1:-1:-1;34287:7:0;34257:27;34272:12;34257;:27;:::i;:::-;:37;;;;:::i;:::-;34234:19;34246:7;34234:9;:19;:::i;:::-;:61;;;;:::i;:::-;34218:77;;33922:389;34347:18;34327:16;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;33068:1309:0;34397:15;34467:13;34425:39;34446:18;34425;:39;:::i;:::-;:55;;;;:::i;:::-;34415:66;;:6;:66;:::i;:::-;-1:-1:-1;;;;;34492:15:0;;;;;;:7;:15;;;;;:25;;34397:84;;-1:-1:-1;34511:6:0;;34492:15;;;:25;;34511:6;;34492:25;:::i;:::-;;;;-1:-1:-1;34555:39:0;;-1:-1:-1;34576:18:0;34555;:39;:::i;:::-;34544:4;34528:22;;;;:7;:22;;;;;:67;;:22;;;:67;;;;;:::i;:::-;;;;-1:-1:-1;34636:4:0;;-1:-1:-1;;;;;;34611:74:0;;;34644:39;34665:18;34644;:39;:::i;:::-;34611:74;;2427:25:1;;;2415:2;2400:18;34611:74:0;;;;;;;-1:-1:-1;;;;;34696:18:0;;;;;;:7;:18;;;;;:29;;34718:7;;34696:18;:29;;34718:7;;34696:29;:::i;:::-;;;;;;;;34758:9;-1:-1:-1;;;;;34741:36:0;34750:6;-1:-1:-1;;;;;34741:36:0;;34769:7;34741:36;;;;2427:25:1;;2415:2;2400:18;;2281:177;34741:36:0;;;;;;;;34792:17;;34788:159;;34842:6;34826:24;;;;:7;:24;;;:41;;34854:13;;34826:24;:41;;34854:13;;34826:41;:::i;:::-;;;;-1:-1:-1;;34887:48:0;;2427:25:1;;;34912:6:0;;-1:-1:-1;;;;;34887:48:0;;;;;2415:2:1;2400:18;34887:48:0;;;;;;;34788:159;32199:2763;;;;;;;;;32105:2857;;;;:::o;27165:692::-;27315:16;;;27329:1;27315:16;;;;;;;;27291:21;;27315:16;;;;;;;;;;-1:-1:-1;27315:16:0;27291:40;;27360:4;27342;27347:1;27342:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27342:23:0;;;-1:-1:-1;;;;;27342:23:0;;;;;27386:15;-1:-1:-1;;;;;27386:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27376:4;27381:1;27376:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27376:32:0;;;:7;;;;;;;;;;:32;;;;27444:4;27424:26;;;;:11;:26;;;;;;27459:15;27424:52;;;;;;;;;;;:66;-1:-1:-1;27421:166:0;;;27507:68;27524:4;27539:15;-1:-1:-1;;27507:8:0;:68::i;:::-;27625:224;;-1:-1:-1;;;27625:224:0;;-1:-1:-1;;;;;27625:15:0;:66;;;;:224;;27706:11;;27732:1;;27776:4;;27803;;27823:15;;27625:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27220:637;27165:692;:::o;27865:557::-;27969:4;27949:26;;;;:11;:26;;;;;;;;27984:15;-1:-1:-1;;;;;27949:52:0;;;;;;;;;:66;-1:-1:-1;27946:166:0;;;28032:68;28049:4;28064:15;-1:-1:-1;;28032:8:0;:68::i;:::-;28358:15;;28154:260;;-1:-1:-1;;;28154:260:0;;28226:4;28154:260;;;16645:34:1;16695:18;;;16688:34;;;28272:1:0;16738:18:1;;;16731:34;;;16781:18;;;16774:34;-1:-1:-1;;;;;28358:15:0;;;16824:19:1;;;16817:44;28388:15:0;16877:19:1;;;16870:35;28154:15:0;:31;;;;;;28193:9;;16579:19:1;;28154:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27865:557;;:::o;24004:348::-;24096:13;-1:-1:-1;;;;;24085:24:0;:7;-1:-1:-1;;;;;24085:24:0;;:52;;;-1:-1:-1;;;;;;24113:24:0;;24132:4;24113:24;24085:52;:91;;;;24160:15;-1:-1:-1;;;;;24141:35:0;:7;-1:-1:-1;;;;;24141:35:0;;24085:91;24082:107;;;24179:8;;;24082:107;24213:19;;;24228:4;24213:19;24209:135;;-1:-1:-1;;;;;24249:22:0;;;;;;:13;:22;;;;;;;;;:29;;-1:-1:-1;;24249:29:0;24274:4;24249:29;;;24298:34;;17395:51:1;;;17489:14;;17482:22;17462:18;;;17455:50;24298:34:0;;17368:18:1;24298:34:0;;;;;;;24004:348;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:118;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:1;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;660:548::-;772:4;801:2;830;819:9;812:21;862:6;856:13;905:6;900:2;889:9;885:18;878:34;930:1;940:140;954:6;951:1;948:13;940:140;;;1049:14;;;1045:23;;1039:30;1015:17;;;1034:2;1011:26;1004:66;969:10;;940:140;;;944:3;1129:1;1124:2;1115:6;1104:9;1100:22;1096:31;1089:42;1199:2;1192;1188:7;1183:2;1175:6;1171:15;1167:29;1156:9;1152:45;1148:54;1140:62;;;;660:548;;;;:::o;1213:315::-;1281:6;1289;1342:2;1330:9;1321:7;1317:23;1313:32;1310:52;;;1358:1;1355;1348:12;1310:52;1397:9;1384:23;1416:31;1441:5;1416:31;:::i;:::-;1466:5;1518:2;1503:18;;;;1490:32;;-1:-1:-1;;;1213:315:1:o;1725:316::-;1802:6;1810;1818;1871:2;1859:9;1850:7;1846:23;1842:32;1839:52;;;1887:1;1884;1877:12;1839:52;-1:-1:-1;;1910:23:1;;;1980:2;1965:18;;1952:32;;-1:-1:-1;2031:2:1;2016:18;;;2003:32;;1725:316;-1:-1:-1;1725:316:1:o;2463:247::-;2522:6;2575:2;2563:9;2554:7;2550:23;2546:32;2543:52;;;2591:1;2588;2581:12;2543:52;2630:9;2617:23;2649:31;2674:5;2649:31;:::i;:::-;2699:5;2463:247;-1:-1:-1;;;2463:247:1:o;2715:180::-;2774:6;2827:2;2815:9;2806:7;2802:23;2798:32;2795:52;;;2843:1;2840;2833:12;2795:52;-1:-1:-1;2866:23:1;;2715:180;-1:-1:-1;2715:180:1:o;2900:456::-;2977:6;2985;2993;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3101:9;3088:23;3120:31;3145:5;3120:31;:::i;:::-;3170:5;-1:-1:-1;3227:2:1;3212:18;;3199:32;3240:33;3199:32;3240:33;:::i;:::-;2900:456;;3292:7;;-1:-1:-1;;;3346:2:1;3331:18;;;;3318:32;;2900:456::o;3550:241::-;3606:6;3659:2;3647:9;3638:7;3634:23;3630:32;3627:52;;;3675:1;3672;3665:12;3627:52;3714:9;3701:23;3733:28;3755:5;3733:28;:::i;4004:750::-;4096:6;4104;4112;4165:2;4153:9;4144:7;4140:23;4136:32;4133:52;;;4181:1;4178;4171:12;4133:52;4221:9;4208:23;4250:18;4291:2;4283:6;4280:14;4277:34;;;4307:1;4304;4297:12;4277:34;4345:6;4334:9;4330:22;4320:32;;4390:7;4383:4;4379:2;4375:13;4371:27;4361:55;;4412:1;4409;4402:12;4361:55;4452:2;4439:16;4478:2;4470:6;4467:14;4464:34;;;4494:1;4491;4484:12;4464:34;4549:7;4542:4;4532:6;4529:1;4525:14;4521:2;4517:23;4513:34;4510:47;4507:67;;;4570:1;4567;4560:12;4507:67;4601:4;4593:13;;;;-1:-1:-1;4625:6:1;-1:-1:-1;;4666:20:1;;4653:34;4696:28;4653:34;4696:28;:::i;:::-;4743:5;4733:15;;;4004:750;;;;;:::o;6003:653::-;6113:6;6121;6129;6137;6145;6153;6161;6214:3;6202:9;6193:7;6189:23;6185:33;6182:53;;;6231:1;6228;6221:12;6182:53;6267:9;6254:23;6244:33;;6324:2;6313:9;6309:18;6296:32;6286:42;;6375:2;6364:9;6360:18;6347:32;6337:42;;6426:2;6415:9;6411:18;6398:32;6388:42;;6477:3;6466:9;6462:19;6449:33;6439:43;;6529:3;6518:9;6514:19;6501:33;6491:43;;6584:3;6573:9;6569:19;6556:33;6598:28;6620:5;6598:28;:::i;:::-;6645:5;6635:15;;;6003:653;;;;;;;;;;:::o;6661:388::-;6729:6;6737;6790:2;6778:9;6769:7;6765:23;6761:32;6758:52;;;6806:1;6803;6796:12;6758:52;6845:9;6832:23;6864:31;6889:5;6864:31;:::i;:::-;6914:5;-1:-1:-1;6971:2:1;6956:18;;6943:32;6984:33;6943:32;6984:33;:::i;7460:376::-;7522:6;7530;7583:2;7571:9;7562:7;7558:23;7554:32;7551:52;;;7599:1;7596;7589:12;7551:52;7638:9;7625:23;7657:28;7679:5;7657:28;:::i;7841:356::-;8043:2;8025:21;;;8062:18;;;8055:30;8121:34;8116:2;8101:18;;8094:62;8188:2;8173:18;;7841:356::o;8202:380::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:161;;8498:10;8493:3;8489:20;8486:1;8479:31;8533:4;8530:1;8523:15;8561:4;8558:1;8551:15;8415:161;;8202:380;;;:::o;8587:127::-;8648:10;8643:3;8639:20;8636:1;8629:31;8679:4;8676:1;8669:15;8703:4;8700:1;8693:15;8719:125;8784:9;;;8805:10;;;8802:36;;;8818:18;;:::i;8849:168::-;8922:9;;;8953;;8970:15;;;8964:22;;8950:37;8940:71;;8991:18;;:::i;9022:217::-;9062:1;9088;9078:132;;9132:10;9127:3;9123:20;9120:1;9113:31;9167:4;9164:1;9157:15;9195:4;9192:1;9185:15;9078:132;-1:-1:-1;9224:9:1;;9022:217::o;9244:128::-;9311:9;;;9332:11;;;9329:37;;;9346:18;;:::i;9377:127::-;9438:10;9433:3;9429:20;9426:1;9419:31;9469:4;9466:1;9459:15;9493:4;9490:1;9483:15;9509:135;9548:3;9569:17;;;9566:43;;9589:18;;:::i;:::-;-1:-1:-1;9636:1:1;9625:13;;9509:135::o;10484:184::-;10554:6;10607:2;10595:9;10586:7;10582:23;10578:32;10575:52;;;10623:1;10620;10613:12;10575:52;-1:-1:-1;10646:16:1;;10484:184;-1:-1:-1;10484:184:1:o;10952:245::-;11019:6;11072:2;11060:9;11051:7;11047:23;11043:32;11040:52;;;11088:1;11085;11078:12;11040:52;11120:9;11114:16;11139:28;11161:5;11139:28;:::i;15063:251::-;15133:6;15186:2;15174:9;15165:7;15161:23;15157:32;15154:52;;;15202:1;15199;15192:12;15154:52;15234:9;15228:16;15253:31;15278:5;15253:31;:::i;15319:980::-;15581:4;15629:3;15618:9;15614:19;15660:6;15649:9;15642:25;15686:2;15724:6;15719:2;15708:9;15704:18;15697:34;15767:3;15762:2;15751:9;15747:18;15740:31;15791:6;15826;15820:13;15857:6;15849;15842:22;15895:3;15884:9;15880:19;15873:26;;15934:2;15926:6;15922:15;15908:29;;15955:1;15965:195;15979:6;15976:1;15973:13;15965:195;;;16044:13;;-1:-1:-1;;;;;16040:39:1;16028:52;;16135:15;;;;16100:12;;;;16076:1;15994:9;15965:195;;;-1:-1:-1;;;;;;;16216:32:1;;;;16211:2;16196:18;;16189:60;-1:-1:-1;;;16280:3:1;16265:19;16258:35;16177:3;15319:980;-1:-1:-1;;;15319:980:1:o;16916:306::-;17004:6;17012;17020;17073:2;17061:9;17052:7;17048:23;17044:32;17041:52;;;17089:1;17086;17079:12;17041:52;17118:9;17112:16;17102:26;;17168:2;17157:9;17153:18;17147:25;17137:35;;17212:2;17201:9;17197:18;17191:25;17181:35;;16916:306;;;;;:::o

Swarm Source

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