ETH Price: $2,491.35 (-0.82%)

Token

KokanKano (Kokan)
 

Overview

Max Total Supply

1,000,000,000 Kokan

Holders

274

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.565662623033552634 Kokan

Value
$0.00
0x7Fe3c0425178Ad9cA2b9A87f59B237FBc22585B1
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:
KokanKano

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-04-24
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if(currentAllowance != type(uint256).max){
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "LERC20: mint to the zero address");
        _totalSupply -= amount;
        _balances[account] -= amount;
        emit Transfer(account, address(0), amount);
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract KokanKano is ERC20, Ownable {

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

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;   

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public treasuryAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;

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

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

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

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

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;

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

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

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedTreasuryAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor(string memory name_, string memory symbol_) ERC20( name_, symbol_) {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;

        // automatically detect router
        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if(block.chainid == 137){
            _dexRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; // Polygon: Quickswap 
        } else if(block.chainid == 80001){
            _dexRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; // Mumbai Polygon: Quickswap 
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

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

        uint256 totalSupply = 1 * 1e9 * 1e18;
        
        maxBuyAmount = totalSupply * 5 / 1000;
        maxSellAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 1 / 10000;

        buyTreasuryFee = 50;
        buyLiquidityFee = 50;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee;

        sellTreasuryFee = 50;
        sellLiquidityFee = 50;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee;

        treasuryAddress = address(0x5AbD2189C0e1FeE86F77c967E783F987B3F26e2A);

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

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

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(address(msg.sender), address(dexRouter), totalSupply);

        _createInitialSupply(msg.sender, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already started");
        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

     function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100)/1e18, "Cannot set max wallet lower than 1%");
        maxWallet = newNum * (10**18);
    }

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

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInTokens[i]);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

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

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

    function updateBuyFees(uint256 _treasuryFee, uint256 _liquidityFee) external onlyOwner {
        buyTreasuryFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee;
        require(buyTotalFees <= 200, "Must keep buy fees at 2% or less");
    }

    function updateSellFees(uint256 _treasuryFee, uint256 _liquidityFee) external onlyOwner {
        sellTreasuryFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee;
        require(sellTotalFees <= 200, "Must keep fees at 2% or less");
    }

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

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

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");
        
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping){
            super._transfer(from, to, amount);
            return;
        }

        require(tradingActive, "Trading is not active.");

        if(limitsInEffect){                
            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
            if (transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number && _holderLastTransferBlock[to] < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }
                
            //when buy
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Buy transfer amt exceeds the max buy.");
                require(amount + balanceOf(to) <= maxWallet, "Cannot Exceed max wallet");
            } 
            //when sell
            else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxBuyAmount, "Sell transfer amt exceeds the max sell.");
            } 
            else if (!_isExcludedMaxTransactionAmount[to]){
                require(amount + balanceOf(to) <= maxWallet, "Cannot Exceed max wallet");
            }
        }

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

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

        uint256 fees = 0;
        
        // bot/sniper penalty.
        if(earlyBuyPenInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
            fees = amount * 6000 / FEE_DIVISOR;
            tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
        } else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ // on sell
            fees = amount * sellTotalFees / FEE_DIVISOR;
            tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
            tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
        } else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { // on buy
            fees = amount * buyTotalFees / FEE_DIVISOR;
            tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
        }
        
        if(fees > 0){    
            super._transfer(from, address(this), fees);
        }
        
        amount -= fees;
        
        super._transfer(from, to, amount);
    }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

    function getCurrentBlock() external view returns (uint256) {
        return block.number;
    }

    function getCurrentTimestamp() external view returns (uint256) {
        return block.timestamp;
    }
    
    function swapBack() private {

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

        if(contractBalance > swapTokensAtAmount * 60){
            contractBalance = swapTokensAtAmount * 60;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap;

        if(liquidityTokens > 0){
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }

        if(contractBalance > 0){
            swapTokensForEth(contractBalance);

            uint256 ethBalance = address(this).balance;
            
            tokensForTreasury = 0;

            bool success = false;

            if(ethBalance > 0){
                (success,) = treasuryAddress.call{value: ethBalance}("");   
            }
        }
    }

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"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":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c55600e805462ffffff191660019081179091556010805460ff191690911790553480156200003557600080fd5b5060405162003eb738038062003eb7833981016040819052620000589162000a81565b8181600362000068838262000b7a565b50600462000077828262000b7a565b50505060006200008c6200053560201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003e97833981519152908290a35033600046600103620000f15750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f9565b46600503620001165750737a250d5630b4cf539739df2c5dacb4c659f2488d620001f9565b466038036200013b57507310ed43c718714eb63d5aa57b78b54704e256024e620001f9565b4660610362000160575073d99d1c33f9fc3444f8101754abc46c52416550d1620001f9565b4660890362000185575073a5e0829caced8ffdd4de3c43696c57f7d7a678ff620001f9565b466201388103620001ac575073a5e0829caced8ffdd4de3c43696c57f7d7a678ff620001f9565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000244573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026a919062000c46565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e0919062000c46565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200032e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000354919062000c46565b6001600160a01b031660a08190526200036f90600162000539565b60a0516200037f9060016200059c565b6b033b2e3c9fd0803ce80000006103e86200039c82600562000c8e565b620003a8919062000cae565b6006556103e8620003bb82600562000c8e565b620003c7919062000cae565b6007556064620003d982600162000c8e565b620003e5919062000cae565b600855612710620003f882600162000c8e565b62000404919062000cae565b600a556032601281905560138190556200041f908062000cd1565b6011556032601581905560168190556200043a908062000cd1565b601455600b80546001600160a01b031916735abd2189c0e1fee86f77c967e783f987b3f26e2a1790556200047083600162000539565b6200047d30600162000539565b6200048c61dead600162000539565b600b54620004a5906001600160a01b0316600162000539565b620004b283600162000608565b620004bf30600162000608565b620004ce61dead600162000608565b600b54620004e7906001600160a01b0316600162000608565b620004fe30608051600019620006b260201b60201c565b620005133360805183620006b260201b60201c565b6200051f3382620007da565b6200052a83620008bf565b505050505062000ce7565b3390565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055620005cc828262000539565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006535760405162461bcd60e51b8152602060048201819052602482015260008051602062003e778339815191526044820152606401620001f0565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038316620007165760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001f0565b6001600160a01b038216620007795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001f0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620008325760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001f0565b806002600082825462000846919062000cd1565b90915550506001600160a01b038216600090815260208190526040812080548392906200087590849062000cd1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200090a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003e778339815191526044820152606401620001f0565b6001600160a01b038116620009715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001f0565b6005546040516001600160a01b0380841692169060008051602062003e9783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620009e457600080fd5b81516001600160401b038082111562000a015762000a01620009bc565b604051601f8301601f19908116603f0116810190828211818310171562000a2c5762000a2c620009bc565b8160405283815260209250868385880101111562000a4957600080fd5b600091505b8382101562000a6d578582018301518183018401529082019062000a4e565b600093810190920192909252949350505050565b6000806040838503121562000a9557600080fd5b82516001600160401b038082111562000aad57600080fd5b62000abb86838701620009d2565b9350602085015191508082111562000ad257600080fd5b5062000ae185828601620009d2565b9150509250929050565b600181811c9082168062000b0057607f821691505b60208210810362000b2157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b7557600081815260208120601f850160051c8101602086101562000b505750805b601f850160051c820191505b8181101562000b715782815560010162000b5c565b5050505b505050565b81516001600160401b0381111562000b965762000b96620009bc565b62000bae8162000ba7845462000aeb565b8462000b27565b602080601f83116001811462000be6576000841562000bcd5750858301515b600019600386901b1c1916600185901b17855562000b71565b600085815260208120601f198616915b8281101562000c175788860151825594840194600190910190840162000bf6565b508582101562000c365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c5957600080fd5b81516001600160a01b038116811462000c7157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000ca85762000ca862000c78565b92915050565b60008262000ccc57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000ca85762000ca862000c78565b60805160a05161313262000d456000396000818161056d01528181611280015281816116820152818161216c0152818161281f01526128460152600081816103f00152818161212f015281816129d50152612a8d01526131326000f3fe6080604052600436106103855760003560e01c806382aa7c68116101d1578063c5f956af11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610a1a578063f5648a4f14610a3a578063f637434214610a4f578063f8b45b0514610a6557600080fd5b8063e2f45605146109c3578063e884f260146109d9578063ee40166e146109ee578063f11a24d314610a0457600080fd5b8063d257b34f116100dc578063d257b34f14610927578063d85ba06314610947578063dc3f0d0f1461095d578063dd62ed3e1461097d57600080fd5b8063c5f956af146108d7578063c876d0b9146108f7578063cc2ffe7c1461091157600080fd5b8063a457c2d71161016f578063b62496f511610149578063b62496f514610848578063bbc0c74214610878578063c024666814610897578063c18bc195146108b757600080fd5b8063a457c2d7146107f2578063a62068ce14610812578063a9059cbb1461082857600080fd5b80638da5cb5b116101ab5780638da5cb5b1461078957806395d89b41146107a75780639a7a23d6146107bc5780639e93ad8e146107dc57600080fd5b806382aa7c68146107335780638366e79a1461075357806388e765ff1461077357600080fd5b80634a62bb65116102b65780636a486a8e1161025457806370a082311161022357806370a08231146106b3578063715018a6146106e9578063751039fc146106fe5780637571336a1461071357600080fd5b80636a486a8e146106545780636b2fb1241461066a5780636c9230db146106805780636ddd17131461069357600080fd5b80636605bfda116102905780636605bfda146105eb57806366ca9b831461060b57806366d602ae1461062b578063672d5d3b1461064157600080fd5b80634a62bb65146105a657806351f205e4146105c05780635c068a8c146105d557600080fd5b80632307b44111610323578063313ce567116102fd578063313ce5671461051f578063395093511461053b578063452ed4f11461055b57806347c862871461058f57600080fd5b80632307b441146104bf57806323b872dd146104df5780632be32b61146104ff57600080fd5b8063095ea7b31161035f578063095ea7b31461042a57806310d5de531461045a57806318160ddd1461048a5780631a8145bb146104a957600080fd5b806302dbd8f81461039157806306fdde03146103b35780630758d924146103de57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103b16103ac366004612b5e565b610a7b565b005b3480156103bf57600080fd5b506103c8610b1b565b6040516103d59190612b80565b60405180910390f35b3480156103ea57600080fd5b506104127f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103d5565b34801561043657600080fd5b5061044a610445366004612be6565b610bad565b60405190151581526020016103d5565b34801561046657600080fd5b5061044a610475366004612c12565b601a6020526000908152604090205460ff1681565b34801561049657600080fd5b506002545b6040519081526020016103d5565b3480156104b557600080fd5b5061049b60185481565b3480156104cb57600080fd5b506103b16104da366004612d0c565b610bc4565b3480156104eb57600080fd5b5061044a6104fa366004612dce565b610d10565b34801561050b57600080fd5b506103b161051a366004612e0f565b610dc1565b34801561052b57600080fd5b50604051601281526020016103d5565b34801561054757600080fd5b5061044a610556366004612be6565b610ece565b34801561056757600080fd5b506104127f000000000000000000000000000000000000000000000000000000000000000081565b34801561059b57600080fd5b50600d54431061044a565b3480156105b257600080fd5b50600e5461044a9060ff1681565b3480156105cc57600080fd5b506103b1610f0a565b3480156105e157600080fd5b5061049b60125481565b3480156105f757600080fd5b506103b1610606366004612c12565b611011565b34801561061757600080fd5b506103b1610626366004612b5e565b6110d1565b34801561063757600080fd5b5061049b60075481565b34801561064d57600080fd5b504361049b565b34801561066057600080fd5b5061049b60145481565b34801561067657600080fd5b5061049b60155481565b34801561068c57600080fd5b504261049b565b34801561069f57600080fd5b50600e5461044a9062010000900460ff1681565b3480156106bf57600080fd5b5061049b6106ce366004612c12565b6001600160a01b031660009081526020819052604090205490565b3480156106f557600080fd5b506103b1611164565b34801561070a57600080fd5b506103b16111d8565b34801561071f57600080fd5b506103b161072e366004612e36565b61124f565b34801561073f57600080fd5b506103b161074e366004612e0f565b61133a565b34801561075f57600080fd5b5061044a61076e366004612e6f565b61140d565b34801561077f57600080fd5b5061049b60065481565b34801561079557600080fd5b506005546001600160a01b0316610412565b3480156107b357600080fd5b506103c8611647565b3480156107c857600080fd5b506103b16107d7366004612e36565b611656565b3480156107e857600080fd5b5061049b61271081565b3480156107fe57600080fd5b5061044a61080d366004612be6565b61176d565b34801561081e57600080fd5b5061049b600d5481565b34801561083457600080fd5b5061044a610843366004612be6565b611806565b34801561085457600080fd5b5061044a610863366004612c12565b601b6020526000908152604090205460ff1681565b34801561088457600080fd5b50600e5461044a90610100900460ff1681565b3480156108a357600080fd5b506103b16108b2366004612e36565b611813565b3480156108c357600080fd5b506103b16108d2366004612e0f565b61189c565b3480156108e357600080fd5b50600b54610412906001600160a01b031681565b34801561090357600080fd5b5060105461044a9060ff1681565b34801561091d57600080fd5b5061049b60175481565b34801561093357600080fd5b506103b1610942366004612e0f565b61196c565b34801561095357600080fd5b5061049b60115481565b34801561096957600080fd5b506103b1610978366004612e0f565b611ab7565b34801561098957600080fd5b5061049b610998366004612e6f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109cf57600080fd5b5061049b600a5481565b3480156109e557600080fd5b506103b1611bbe565b3480156109fa57600080fd5b5061049b600c5481565b348015610a1057600080fd5b5061049b60135481565b348015610a2657600080fd5b506103b1610a35366004612c12565b611bf4565b348015610a4657600080fd5b506103b1611cdf565b348015610a5b57600080fd5b5061049b60165481565b348015610a7157600080fd5b5061049b60085481565b6005546001600160a01b03163314610aae5760405162461bcd60e51b8152600401610aa590612e9d565b60405180910390fd5b60158290556016819055610ac28183612ee8565b601481905560c81015610b175760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203225206f72206c657373000000006044820152606401610aa5565b5050565b606060038054610b2a90612efb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690612efb565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b5050505050905090565b6000610bba338484611d56565b5060015b92915050565b6005546001600160a01b03163314610bee5760405162461bcd60e51b8152600401610aa590612e9d565b8051825114610c3f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610aa5565b610258825110610cb05760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610aa5565b60005b8251811015610d0b57610cf933848381518110610cd257610cd2612f35565b6020026020010151848481518110610cec57610cec612f35565b6020026020010151611e7a565b80610d0381612f4b565b915050610cb3565b505050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610dab5782811015610d9e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610aa5565b610dab8533858403611d56565b610db6858585611fcf565b506001949350505050565b6005546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610aa590612e9d565b670de0b6b3a76400006103e8610e0060025490565b610e0b906001612f64565b610e159190612f7b565b610e1f9190612f7b565b811015610e805760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610aa5565b610e9281670de0b6b3a7640000612f64565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bba918590610f05908690612ee8565b611d56565b6005546001600160a01b03163314610f345760405162461bcd60e51b8152600401610aa590612e9d565b600a54306000908152602081905260409020541015610fbd576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610aa5565b6009805460ff19166001179055610fd2612796565b6009805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461103b5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b0381166110875760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610aa5565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146110fb5760405162461bcd60e51b8152600401610aa590612e9d565b6012829055601381905561110f8183612ee8565b601181905560c81015610b175760405162461bcd60e51b815260206004820181905260248201527f4d757374206b656570206275792066656573206174203225206f72206c6573736044820152606401610aa5565b6005546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610aa590612e9d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112025760405162461bcd60e51b8152600401610aa590612e9d565b600e805460ff199081169091556010805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112795760405162461bcd60e51b8152600401610aa590612e9d565b8061130f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361130f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610aa5565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113645760405162461bcd60e51b8152600401610aa590612e9d565b600e54610100900460ff16156113bc5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920737461727465640000000000006044820152606401610aa5565b600e805462ffff0019166201010017905543600c8190556113de908290612ee8565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461143a5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b0383166114905760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610aa5565b6001600160a01b038316301415806114b05750600e54610100900460ff16155b6115195760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610aa5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190612f9d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb9190612fb6565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b2a90612efb565b6005546001600160a01b031633146116805760405162461bcd60e51b8152600401610aa590612e9d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036117275760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610aa5565b6117318282612950565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aa5565b6117fc3385858403611d56565b5060019392505050565b6000610bba338484611fcf565b6005546001600160a01b0316331461183d5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118c65760405162461bcd60e51b8152600401610aa590612e9d565b670de0b6b3a764000060646118da60025490565b6118e5906001612f64565b6118ef9190612f7b565b6118f99190612f7b565b8110156119545760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e60448201526220312560e81b6064820152608401610aa5565b61196681670de0b6b3a7640000612f64565b60085550565b6005546001600160a01b031633146119965760405162461bcd60e51b8152600401610aa590612e9d565b620186a06119a360025490565b6119ae906001612f64565b6119b89190612f7b565b811015611a255760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610aa5565b6103e8611a3160025490565b611a3c906001612f64565b611a469190612f7b565b811115611ab25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610aa5565b600a55565b6005546001600160a01b03163314611ae15760405162461bcd60e51b8152600401610aa590612e9d565b670de0b6b3a76400006103e8611af660025490565b611b01906001612f64565b611b0b9190612f7b565b611b159190612f7b565b811015611b775760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610aa5565b611b8981670de0b6b3a7640000612f64565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ec3565b6005546001600160a01b03163314611be85760405162461bcd60e51b8152600401610aa590612e9d565b6010805460ff19169055565b6005546001600160a01b03163314611c1e5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b038116611c835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d095760405162461bcd60e51b8152600401610aa590612e9d565b604051600090339047908381818185875af1925050503d8060008114611d4b576040519150601f19603f3d011682016040523d82523d6000602084013e611d50565b606091505b50505050565b6001600160a01b038316611db85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b6001600160a01b038216611e195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ea05760405162461bcd60e51b8152600401610aa590612fd3565b6001600160a01b038216611ec65760405162461bcd60e51b8152600401610aa590613018565b6001600160a01b03831660009081526020819052604090205481811015611f3e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aa5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611f75908490612ee8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fc191815260200190565b60405180910390a350505050565b6001600160a01b038316611ff55760405162461bcd60e51b8152600401610aa590612fd3565b6001600160a01b03821661201b5760405162461bcd60e51b8152600401610aa590613018565b6000811161206b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610aa5565b6001600160a01b03831660009081526019602052604090205460ff16806120aa57506001600160a01b03821660009081526019602052604090205460ff165b806120b7575060095460ff165b156120c757610d0b838383611e7a565b600e54610100900460ff166121175760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610aa5565b600e5460ff16156124bb5760105460ff161561226a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156121a157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561226a57326000908152600f6020526040902054431180156121db57506001600160a01b0382166000908152600f602052604090205443115b6122455760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610aa5565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff1680156122ab57506001600160a01b0382166000908152601a602052604090205460ff16155b15612384576006548111156123105760405162461bcd60e51b815260206004820152602560248201527f427579207472616e7366657220616d74206578636565647320746865206d617860448201526410313abc9760d91b6064820152608401610aa5565b6008546001600160a01b0383166000908152602081905260409020546123369083612ee8565b111561237f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610aa5565b6124bb565b6001600160a01b0382166000908152601b602052604090205460ff1680156123c557506001600160a01b0383166000908152601a602052604090205460ff16155b1561242c5760065481111561237f5760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d74206578636565647320746865206d616044820152663c1039b2b6361760c91b6064820152608401610aa5565b6001600160a01b0382166000908152601a602052604090205460ff166124bb576008546001600160a01b0383166000908152602081905260409020546124729083612ee8565b11156124bb5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610aa5565b30600090815260208190526040902054600a54811080159081906124e75750600e5462010000900460ff165b80156124f6575060095460ff16155b801561251b57506001600160a01b0385166000908152601b602052604090205460ff16155b15612540576009805460ff19166001179055612535612796565b6009805460ff191690555b600061254d600d54431090565b801561257157506001600160a01b0386166000908152601b602052604090205460ff165b801561259657506001600160a01b0385166000908152601b602052604090205460ff16155b80156125a457506000601154115b1561262b576127106125b885611770612f64565b6125c29190612f7b565b9050601154601354826125d59190612f64565b6125df9190612f7b565b601860008282546125f09190612ee8565b90915550506011546012546126059083612f64565b61260f9190612f7b565b601760008282546126209190612ee8565b909155506127669050565b6001600160a01b0385166000908152601b602052604090205460ff16801561265557506000601454115b156126b8576127106014548561266b9190612f64565b6126759190612f7b565b9050601454601654826126889190612f64565b6126929190612f7b565b601860008282546126a39190612ee8565b90915550506014546015546126059083612f64565b6001600160a01b0386166000908152601b602052604090205460ff1680156126e257506000601154115b1561276657612710601154856126f89190612f64565b6127029190612f7b565b9050601154601354826127159190612f64565b61271f9190612f7b565b601860008282546127309190612ee8565b90915550506011546012546127459083612f64565b61274f9190612f7b565b601760008282546127609190612ee8565b90915550505b801561277757612777863083611e7a565b612781818561305b565b935061278e868686611e7a565b505050505050565b30600090815260208190526040812054905060006017546018546127ba9190612ee8565b90508115806127c7575080155b156127d0575050565b600a546127de90603c612f64565b8211156127f657600a546127f390603c612f64565b91505b600081601854846128079190612f64565b6128119190612f7b565b905080156128d357612844307f000000000000000000000000000000000000000000000000000000000000000083611e7a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561289f57600080fd5b505af19250505080156128b0575060015b506128bb818461305b565b9250601854826128cb919061305b565b600060185591505b8215610d0b576128e28361297e565b600060178190554790811561294957600b546040516001600160a01b03909116908390600081818185875af1925050503d806000811461293e576040519150601f19603f3d011682016040523d82523d6000602084013e612943565b606091505b50909150505b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff19168215151790556117318282612afb565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129b3576129b3612f35565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a55919061306e565b81600181518110612a6857612a68612f35565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612acd90859060009086903090429060040161308b565b600060405180830381600087803b158015612ae757600080fd5b505af115801561278e573d6000803e3d6000fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60008060408385031215612b7157600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612bad57858101830151858201604001528201612b91565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612be357600080fd5b50565b60008060408385031215612bf957600080fd5b8235612c0481612bce565b946020939093013593505050565b600060208284031215612c2457600080fd5b8135612c2f81612bce565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c7557612c75612c36565b604052919050565b600067ffffffffffffffff821115612c9757612c97612c36565b5060051b60200190565b600082601f830112612cb257600080fd5b81356020612cc7612cc283612c7d565b612c4c565b82815260059290921b84018101918181019086841115612ce657600080fd5b8286015b84811015612d015780358352918301918301612cea565b509695505050505050565b60008060408385031215612d1f57600080fd5b823567ffffffffffffffff80821115612d3757600080fd5b818501915085601f830112612d4b57600080fd5b81356020612d5b612cc283612c7d565b82815260059290921b84018101918181019089841115612d7a57600080fd5b948201945b83861015612da1578535612d9281612bce565b82529482019490820190612d7f565b96505086013592505080821115612db757600080fd5b50612dc485828601612ca1565b9150509250929050565b600080600060608486031215612de357600080fd5b8335612dee81612bce565b92506020840135612dfe81612bce565b929592945050506040919091013590565b600060208284031215612e2157600080fd5b5035919050565b8015158114612be357600080fd5b60008060408385031215612e4957600080fd5b8235612e5481612bce565b91506020830135612e6481612e28565b809150509250929050565b60008060408385031215612e8257600080fd5b8235612e8d81612bce565b91506020830135612e6481612bce565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bbe57610bbe612ed2565b600181811c90821680612f0f57607f821691505b602082108103612f2f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612f5d57612f5d612ed2565b5060010190565b8082028115828204841417610bbe57610bbe612ed2565b600082612f9857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612faf57600080fd5b5051919050565b600060208284031215612fc857600080fd5b8151612c2f81612e28565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bbe57610bbe612ed2565b60006020828403121561308057600080fd5b8151612c2f81612bce565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130db5784516001600160a01b0316835293830193918301916001016130b6565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122028bef304aa3196c065576cb914abf2317bd99bc9691fc50fe09e4b393607cf7964736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000094b6f6b616e4b616e6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b6f6b616e000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103855760003560e01c806382aa7c68116101d1578063c5f956af11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610a1a578063f5648a4f14610a3a578063f637434214610a4f578063f8b45b0514610a6557600080fd5b8063e2f45605146109c3578063e884f260146109d9578063ee40166e146109ee578063f11a24d314610a0457600080fd5b8063d257b34f116100dc578063d257b34f14610927578063d85ba06314610947578063dc3f0d0f1461095d578063dd62ed3e1461097d57600080fd5b8063c5f956af146108d7578063c876d0b9146108f7578063cc2ffe7c1461091157600080fd5b8063a457c2d71161016f578063b62496f511610149578063b62496f514610848578063bbc0c74214610878578063c024666814610897578063c18bc195146108b757600080fd5b8063a457c2d7146107f2578063a62068ce14610812578063a9059cbb1461082857600080fd5b80638da5cb5b116101ab5780638da5cb5b1461078957806395d89b41146107a75780639a7a23d6146107bc5780639e93ad8e146107dc57600080fd5b806382aa7c68146107335780638366e79a1461075357806388e765ff1461077357600080fd5b80634a62bb65116102b65780636a486a8e1161025457806370a082311161022357806370a08231146106b3578063715018a6146106e9578063751039fc146106fe5780637571336a1461071357600080fd5b80636a486a8e146106545780636b2fb1241461066a5780636c9230db146106805780636ddd17131461069357600080fd5b80636605bfda116102905780636605bfda146105eb57806366ca9b831461060b57806366d602ae1461062b578063672d5d3b1461064157600080fd5b80634a62bb65146105a657806351f205e4146105c05780635c068a8c146105d557600080fd5b80632307b44111610323578063313ce567116102fd578063313ce5671461051f578063395093511461053b578063452ed4f11461055b57806347c862871461058f57600080fd5b80632307b441146104bf57806323b872dd146104df5780632be32b61146104ff57600080fd5b8063095ea7b31161035f578063095ea7b31461042a57806310d5de531461045a57806318160ddd1461048a5780631a8145bb146104a957600080fd5b806302dbd8f81461039157806306fdde03146103b35780630758d924146103de57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b506103b16103ac366004612b5e565b610a7b565b005b3480156103bf57600080fd5b506103c8610b1b565b6040516103d59190612b80565b60405180910390f35b3480156103ea57600080fd5b506104127f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103d5565b34801561043657600080fd5b5061044a610445366004612be6565b610bad565b60405190151581526020016103d5565b34801561046657600080fd5b5061044a610475366004612c12565b601a6020526000908152604090205460ff1681565b34801561049657600080fd5b506002545b6040519081526020016103d5565b3480156104b557600080fd5b5061049b60185481565b3480156104cb57600080fd5b506103b16104da366004612d0c565b610bc4565b3480156104eb57600080fd5b5061044a6104fa366004612dce565b610d10565b34801561050b57600080fd5b506103b161051a366004612e0f565b610dc1565b34801561052b57600080fd5b50604051601281526020016103d5565b34801561054757600080fd5b5061044a610556366004612be6565b610ece565b34801561056757600080fd5b506104127f000000000000000000000000fd6a7a32737595eebb4177a94e182139285fdecb81565b34801561059b57600080fd5b50600d54431061044a565b3480156105b257600080fd5b50600e5461044a9060ff1681565b3480156105cc57600080fd5b506103b1610f0a565b3480156105e157600080fd5b5061049b60125481565b3480156105f757600080fd5b506103b1610606366004612c12565b611011565b34801561061757600080fd5b506103b1610626366004612b5e565b6110d1565b34801561063757600080fd5b5061049b60075481565b34801561064d57600080fd5b504361049b565b34801561066057600080fd5b5061049b60145481565b34801561067657600080fd5b5061049b60155481565b34801561068c57600080fd5b504261049b565b34801561069f57600080fd5b50600e5461044a9062010000900460ff1681565b3480156106bf57600080fd5b5061049b6106ce366004612c12565b6001600160a01b031660009081526020819052604090205490565b3480156106f557600080fd5b506103b1611164565b34801561070a57600080fd5b506103b16111d8565b34801561071f57600080fd5b506103b161072e366004612e36565b61124f565b34801561073f57600080fd5b506103b161074e366004612e0f565b61133a565b34801561075f57600080fd5b5061044a61076e366004612e6f565b61140d565b34801561077f57600080fd5b5061049b60065481565b34801561079557600080fd5b506005546001600160a01b0316610412565b3480156107b357600080fd5b506103c8611647565b3480156107c857600080fd5b506103b16107d7366004612e36565b611656565b3480156107e857600080fd5b5061049b61271081565b3480156107fe57600080fd5b5061044a61080d366004612be6565b61176d565b34801561081e57600080fd5b5061049b600d5481565b34801561083457600080fd5b5061044a610843366004612be6565b611806565b34801561085457600080fd5b5061044a610863366004612c12565b601b6020526000908152604090205460ff1681565b34801561088457600080fd5b50600e5461044a90610100900460ff1681565b3480156108a357600080fd5b506103b16108b2366004612e36565b611813565b3480156108c357600080fd5b506103b16108d2366004612e0f565b61189c565b3480156108e357600080fd5b50600b54610412906001600160a01b031681565b34801561090357600080fd5b5060105461044a9060ff1681565b34801561091d57600080fd5b5061049b60175481565b34801561093357600080fd5b506103b1610942366004612e0f565b61196c565b34801561095357600080fd5b5061049b60115481565b34801561096957600080fd5b506103b1610978366004612e0f565b611ab7565b34801561098957600080fd5b5061049b610998366004612e6f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109cf57600080fd5b5061049b600a5481565b3480156109e557600080fd5b506103b1611bbe565b3480156109fa57600080fd5b5061049b600c5481565b348015610a1057600080fd5b5061049b60135481565b348015610a2657600080fd5b506103b1610a35366004612c12565b611bf4565b348015610a4657600080fd5b506103b1611cdf565b348015610a5b57600080fd5b5061049b60165481565b348015610a7157600080fd5b5061049b60085481565b6005546001600160a01b03163314610aae5760405162461bcd60e51b8152600401610aa590612e9d565b60405180910390fd5b60158290556016819055610ac28183612ee8565b601481905560c81015610b175760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203225206f72206c657373000000006044820152606401610aa5565b5050565b606060038054610b2a90612efb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690612efb565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b5050505050905090565b6000610bba338484611d56565b5060015b92915050565b6005546001600160a01b03163314610bee5760405162461bcd60e51b8152600401610aa590612e9d565b8051825114610c3f5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610aa5565b610258825110610cb05760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610aa5565b60005b8251811015610d0b57610cf933848381518110610cd257610cd2612f35565b6020026020010151848481518110610cec57610cec612f35565b6020026020010151611e7a565b80610d0381612f4b565b915050610cb3565b505050565b6001600160a01b03831660009081526001602090815260408083203384529091528120546000198114610dab5782811015610d9e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610aa5565b610dab8533858403611d56565b610db6858585611fcf565b506001949350505050565b6005546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610aa590612e9d565b670de0b6b3a76400006103e8610e0060025490565b610e0b906001612f64565b610e159190612f7b565b610e1f9190612f7b565b811015610e805760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610aa5565b610e9281670de0b6b3a7640000612f64565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bba918590610f05908690612ee8565b611d56565b6005546001600160a01b03163314610f345760405162461bcd60e51b8152600401610aa590612e9d565b600a54306000908152602081905260409020541015610fbd576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610aa5565b6009805460ff19166001179055610fd2612796565b6009805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461103b5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b0381166110875760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610aa5565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146110fb5760405162461bcd60e51b8152600401610aa590612e9d565b6012829055601381905561110f8183612ee8565b601181905560c81015610b175760405162461bcd60e51b815260206004820181905260248201527f4d757374206b656570206275792066656573206174203225206f72206c6573736044820152606401610aa5565b6005546001600160a01b0316331461118e5760405162461bcd60e51b8152600401610aa590612e9d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146112025760405162461bcd60e51b8152600401610aa590612e9d565b600e805460ff199081169091556010805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146112795760405162461bcd60e51b8152600401610aa590612e9d565b8061130f577f000000000000000000000000fd6a7a32737595eebb4177a94e182139285fdecb6001600160a01b0316826001600160a01b03160361130f5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610aa5565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113645760405162461bcd60e51b8152600401610aa590612e9d565b600e54610100900460ff16156113bc5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920737461727465640000000000006044820152606401610aa5565b600e805462ffff0019166201010017905543600c8190556113de908290612ee8565b600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461143a5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b0383166114905760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610aa5565b6001600160a01b038316301415806114b05750600e54610100900460ff16155b6115195760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610aa5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115849190612f9d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb9190612fb6565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610b2a90612efb565b6005546001600160a01b031633146116805760405162461bcd60e51b8152600401610aa590612e9d565b7f000000000000000000000000fd6a7a32737595eebb4177a94e182139285fdecb6001600160a01b0316826001600160a01b0316036117275760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610aa5565b6117318282612950565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aa5565b6117fc3385858403611d56565b5060019392505050565b6000610bba338484611fcf565b6005546001600160a01b0316331461183d5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146118c65760405162461bcd60e51b8152600401610aa590612e9d565b670de0b6b3a764000060646118da60025490565b6118e5906001612f64565b6118ef9190612f7b565b6118f99190612f7b565b8110156119545760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e60448201526220312560e81b6064820152608401610aa5565b61196681670de0b6b3a7640000612f64565b60085550565b6005546001600160a01b031633146119965760405162461bcd60e51b8152600401610aa590612e9d565b620186a06119a360025490565b6119ae906001612f64565b6119b89190612f7b565b811015611a255760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610aa5565b6103e8611a3160025490565b611a3c906001612f64565b611a469190612f7b565b811115611ab25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610aa5565b600a55565b6005546001600160a01b03163314611ae15760405162461bcd60e51b8152600401610aa590612e9d565b670de0b6b3a76400006103e8611af660025490565b611b01906001612f64565b611b0b9190612f7b565b611b159190612f7b565b811015611b775760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610aa5565b611b8981670de0b6b3a7640000612f64565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610ec3565b6005546001600160a01b03163314611be85760405162461bcd60e51b8152600401610aa590612e9d565b6010805460ff19169055565b6005546001600160a01b03163314611c1e5760405162461bcd60e51b8152600401610aa590612e9d565b6001600160a01b038116611c835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa5565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d095760405162461bcd60e51b8152600401610aa590612e9d565b604051600090339047908381818185875af1925050503d8060008114611d4b576040519150601f19603f3d011682016040523d82523d6000602084013e611d50565b606091505b50505050565b6001600160a01b038316611db85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa5565b6001600160a01b038216611e195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611ea05760405162461bcd60e51b8152600401610aa590612fd3565b6001600160a01b038216611ec65760405162461bcd60e51b8152600401610aa590613018565b6001600160a01b03831660009081526020819052604090205481811015611f3e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aa5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611f75908490612ee8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fc191815260200190565b60405180910390a350505050565b6001600160a01b038316611ff55760405162461bcd60e51b8152600401610aa590612fd3565b6001600160a01b03821661201b5760405162461bcd60e51b8152600401610aa590613018565b6000811161206b5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610aa5565b6001600160a01b03831660009081526019602052604090205460ff16806120aa57506001600160a01b03821660009081526019602052604090205460ff165b806120b7575060095460ff165b156120c757610d0b838383611e7a565b600e54610100900460ff166121175760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610aa5565b600e5460ff16156124bb5760105460ff161561226a577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b0316141580156121a157507f000000000000000000000000fd6a7a32737595eebb4177a94e182139285fdecb6001600160a01b0316826001600160a01b031614155b1561226a57326000908152600f6020526040902054431180156121db57506001600160a01b0382166000908152600f602052604090205443115b6122455760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610aa5565b326000908152600f602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601b602052604090205460ff1680156122ab57506001600160a01b0382166000908152601a602052604090205460ff16155b15612384576006548111156123105760405162461bcd60e51b815260206004820152602560248201527f427579207472616e7366657220616d74206578636565647320746865206d617860448201526410313abc9760d91b6064820152608401610aa5565b6008546001600160a01b0383166000908152602081905260409020546123369083612ee8565b111561237f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610aa5565b6124bb565b6001600160a01b0382166000908152601b602052604090205460ff1680156123c557506001600160a01b0383166000908152601a602052604090205460ff16155b1561242c5760065481111561237f5760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d74206578636565647320746865206d616044820152663c1039b2b6361760c91b6064820152608401610aa5565b6001600160a01b0382166000908152601a602052604090205460ff166124bb576008546001600160a01b0383166000908152602081905260409020546124729083612ee8565b11156124bb5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610aa5565b30600090815260208190526040902054600a54811080159081906124e75750600e5462010000900460ff165b80156124f6575060095460ff16155b801561251b57506001600160a01b0385166000908152601b602052604090205460ff16155b15612540576009805460ff19166001179055612535612796565b6009805460ff191690555b600061254d600d54431090565b801561257157506001600160a01b0386166000908152601b602052604090205460ff165b801561259657506001600160a01b0385166000908152601b602052604090205460ff16155b80156125a457506000601154115b1561262b576127106125b885611770612f64565b6125c29190612f7b565b9050601154601354826125d59190612f64565b6125df9190612f7b565b601860008282546125f09190612ee8565b90915550506011546012546126059083612f64565b61260f9190612f7b565b601760008282546126209190612ee8565b909155506127669050565b6001600160a01b0385166000908152601b602052604090205460ff16801561265557506000601454115b156126b8576127106014548561266b9190612f64565b6126759190612f7b565b9050601454601654826126889190612f64565b6126929190612f7b565b601860008282546126a39190612ee8565b90915550506014546015546126059083612f64565b6001600160a01b0386166000908152601b602052604090205460ff1680156126e257506000601154115b1561276657612710601154856126f89190612f64565b6127029190612f7b565b9050601154601354826127159190612f64565b61271f9190612f7b565b601860008282546127309190612ee8565b90915550506011546012546127459083612f64565b61274f9190612f7b565b601760008282546127609190612ee8565b90915550505b801561277757612777863083611e7a565b612781818561305b565b935061278e868686611e7a565b505050505050565b30600090815260208190526040812054905060006017546018546127ba9190612ee8565b90508115806127c7575080155b156127d0575050565b600a546127de90603c612f64565b8211156127f657600a546127f390603c612f64565b91505b600081601854846128079190612f64565b6128119190612f7b565b905080156128d357612844307f000000000000000000000000fd6a7a32737595eebb4177a94e182139285fdecb83611e7a565b7f000000000000000000000000fd6a7a32737595eebb4177a94e182139285fdecb6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561289f57600080fd5b505af19250505080156128b0575060015b506128bb818461305b565b9250601854826128cb919061305b565b600060185591505b8215610d0b576128e28361297e565b600060178190554790811561294957600b546040516001600160a01b03909116908390600081818185875af1925050503d806000811461293e576040519150601f19603f3d011682016040523d82523d6000602084013e612943565b606091505b50909150505b5050505050565b6001600160a01b0382166000908152601b60205260409020805460ff19168215151790556117318282612afb565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129b3576129b3612f35565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a55919061306e565b81600181518110612a6857612a68612f35565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612acd90859060009086903090429060040161308b565b600060405180830381600087803b158015612ae757600080fd5b505af115801561278e573d6000803e3d6000fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b60008060408385031215612b7157600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015612bad57858101830151858201604001528201612b91565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612be357600080fd5b50565b60008060408385031215612bf957600080fd5b8235612c0481612bce565b946020939093013593505050565b600060208284031215612c2457600080fd5b8135612c2f81612bce565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c7557612c75612c36565b604052919050565b600067ffffffffffffffff821115612c9757612c97612c36565b5060051b60200190565b600082601f830112612cb257600080fd5b81356020612cc7612cc283612c7d565b612c4c565b82815260059290921b84018101918181019086841115612ce657600080fd5b8286015b84811015612d015780358352918301918301612cea565b509695505050505050565b60008060408385031215612d1f57600080fd5b823567ffffffffffffffff80821115612d3757600080fd5b818501915085601f830112612d4b57600080fd5b81356020612d5b612cc283612c7d565b82815260059290921b84018101918181019089841115612d7a57600080fd5b948201945b83861015612da1578535612d9281612bce565b82529482019490820190612d7f565b96505086013592505080821115612db757600080fd5b50612dc485828601612ca1565b9150509250929050565b600080600060608486031215612de357600080fd5b8335612dee81612bce565b92506020840135612dfe81612bce565b929592945050506040919091013590565b600060208284031215612e2157600080fd5b5035919050565b8015158114612be357600080fd5b60008060408385031215612e4957600080fd5b8235612e5481612bce565b91506020830135612e6481612e28565b809150509250929050565b60008060408385031215612e8257600080fd5b8235612e8d81612bce565b91506020830135612e6481612bce565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bbe57610bbe612ed2565b600181811c90821680612f0f57607f821691505b602082108103612f2f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612f5d57612f5d612ed2565b5060010190565b8082028115828204841417610bbe57610bbe612ed2565b600082612f9857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612faf57600080fd5b5051919050565b600060208284031215612fc857600080fd5b8151612c2f81612e28565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bbe57610bbe612ed2565b60006020828403121561308057600080fd5b8151612c2f81612bce565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130db5784516001600160a01b0316835293830193918301916001016130b6565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122028bef304aa3196c065576cb914abf2317bd99bc9691fc50fe09e4b393607cf7964736f6c63430008110033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000094b6f6b616e4b616e6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054b6f6b616e000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): KokanKano
Arg [1] : symbol_ (string): Kokan

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 4b6f6b616e4b616e6f0000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4b6f6b616e000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

10569:16418:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19593:313;;;;;;;;;;-1:-1:-1;19593:313:0;;;;;:::i;:::-;;:::i;:::-;;4077:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10717:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1002:32:1;;;984:51;;972:2;957:18;10717:37:0;820:221:1;4991:169:0;;;;;;;;;;-1:-1:-1;4991:169:0;;;;;:::i;:::-;;:::i;:::-;;;1667:14:1;;1660:22;1642:41;;1630:2;1615:18;4991:169:0;1502:187:1;11842:64:0;;;;;;;;;;-1:-1:-1;11842:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4398:108;;;;;;;;;;-1:-1:-1;4486:12:0;;4398:108;;;2092:25:1;;;2080:2;2065:18;4398:108:0;1946:177:1;11687:33:0;;;;;;;;;;;;;;;;17908:542;;;;;;;;;;-1:-1:-1;17908:542:0;;;;;:::i;:::-;;:::i;5168:571::-;;;;;;;;;;-1:-1:-1;5168:571:0;;;;;:::i;:::-;;:::i;16488:269::-;;;;;;;;;;-1:-1:-1;16488:269:0;;;;;:::i;:::-;;:::i;4297:93::-;;;;;;;;;;-1:-1:-1;4297:93:0;;4380:2;5403:36:1;;5391:2;5376:18;4297:93:0;5261:184:1;5747:215:0;;;;;;;;;;-1:-1:-1;5747:215:0;;;;;:::i;:::-;;:::i;10761:31::-;;;;;;;;;;;;;;;23545:116;;;;;;;;;;-1:-1:-1;23635:18:0;;23620:12;:33;23545:116;;11032:33;;;;;;;;;;-1:-1:-1;11032:33:0;;;;;;;;26672:312;;;;;;;;;;;;;:::i;11409:29::-;;;;;;;;;;;;;;;;26356:264;;;;;;;;;;-1:-1:-1;26356:264:0;;;;;:::i;:::-;;:::i;19275:310::-;;;;;;;;;;-1:-1:-1;19275:310:0;;;;;:::i;:::-;;:::i;10649:28::-;;;;;;;;;;;;;;;;24181:97;;;;;;;;;;-1:-1:-1;24258:12:0;24181:97;;11484:28;;;;;;;;;;;;;;;;11519:30;;;;;;;;;;;;;;;;24286:104;;;;;;;;;;-1:-1:-1;24367:15:0;24286:104;;11112:31;;;;;;;;;;-1:-1:-1;11112:31:0;;;;;;;;;;;4514:127;;;;;;;;;;-1:-1:-1;4514:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4615:18:0;4588:7;4615:18;;;;;;;;;;;;4514:127;8520:150;;;;;;;;;;;;;:::i;16088:233::-;;;;;;;;;;;;;:::i;18462:260::-;;;;;;;;;;-1:-1:-1;18462:260:0;;;;;:::i;:::-;;:::i;15652:380::-;;;;;;;;;;-1:-1:-1;15652:380:0;;;;;:::i;:::-;;:::i;25620:498::-;;;;;;;;;;-1:-1:-1;25620:498:0;;;;;:::i;:::-;;:::i;10615:27::-;;;;;;;;;;;;;;;;8306:79;;;;;;;;;;-1:-1:-1;8371:6:0;;-1:-1:-1;;;;;8371:6:0;8306:79;;4185:104;;;;;;;;;;;;;:::i;18730:293::-;;;;;;;;;;-1:-1:-1;18730:293:0;;;;;:::i;:::-;;:::i;11596:43::-;;;;;;;;;;;;11634:5;11596:43;;5970:413;;;;;;;;;;-1:-1:-1;5970:413:0;;;;;:::i;:::-;;:::i;10990:33::-;;;;;;;;;;;;;;;;4649:175;;;;;;;;;;-1:-1:-1;4649:175:0;;;;;:::i;:::-;;:::i;12064:58::-;;;;;;;;;;-1:-1:-1;12064:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11072:33;;;;;;;;;;-1:-1:-1;11072:33:0;;;;;;;;;;;19914:182;;;;;;;;;;-1:-1:-1;19914:182:0;;;;;:::i;:::-;;:::i;17052:213::-;;;;;;;;;;-1:-1:-1;17052:213:0;;;;;:::i;:::-;;:::i;10874:30::-;;;;;;;;;;-1:-1:-1;10874:30:0;;;;-1:-1:-1;;;;;10874:30:0;;;11327:39;;;;;;;;;;-1:-1:-1;11327:39:0;;;;;;;;11648:32;;;;;;;;;;;;;;;;17335:346;;;;;;;;;;-1:-1:-1;17335:346:0;;;;;:::i;:::-;;:::i;11375:27::-;;;;;;;;;;;;;;;;16769:274;;;;;;;;;;-1:-1:-1;16769:274:0;;;;;:::i;:::-;;:::i;4832:151::-;;;;;;;;;;-1:-1:-1;4832:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4948:18:0;;;4921:7;4948:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4832:151;10832:33;;;;;;;;;;;;;;;;16382:98;;;;;;;;;;;;;:::i;10913:37::-;;;;;;;;;;;;;;;;11445:30;;;;;;;;;;;;;;;;8678:244;;;;;;;;;;-1:-1:-1;8678:244:0;;;;;:::i;:::-;;:::i;26188:160::-;;;;;;;;;;;;;:::i;11556:31::-;;;;;;;;;;;;;;;;10684:24;;;;;;;;;;;;;;;;19593:313;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;;;;;;;;;19692:15:::1;:30:::0;;;19733:16:::1;:32:::0;;;19792:34:::1;19752:13:::0;19710:12;19792:34:::1;:::i;:::-;19776:13;:50:::0;;;19862:3:::1;-1:-1:-1::0;19845:20:0::1;19837:61;;;::::0;-1:-1:-1;;;19837:61:0;;7386:2:1;19837:61:0::1;::::0;::::1;7368:21:1::0;7425:2;7405:18;;;7398:30;7464;7444:18;;;7437:58;7512:18;;19837:61:0::1;7184:352:1::0;19837:61:0::1;19593:313:::0;;:::o;4077:100::-;4131:13;4164:5;4157:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4077:100;:::o;4991:169::-;5074:4;5091:39;306:10;5114:7;5123:6;5091:8;:39::i;:::-;-1:-1:-1;5148:4:0;4991:169;;;;;:::o;17908:542::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;18050:15:::1;:22;18032:7;:14;:40;18024:83;;;::::0;-1:-1:-1;;;18024:83:0;;8128:2:1;18024:83:0::1;::::0;::::1;8110:21:1::0;8167:2;8147:18;;;8140:30;8206:32;8186:18;;;8179:60;8256:18;;18024:83:0::1;7926:354:1::0;18024:83:0::1;18143:3;18126:7;:14;:20;18118:87;;;::::0;-1:-1:-1;;;18118:87:0;;8487:2:1;18118:87:0::1;::::0;::::1;8469:21:1::0;8526:2;8506:18;;;8499:30;8565:34;8545:18;;;8538:62;-1:-1:-1;;;8616:18:1;;;8609:52;8678:19;;18118:87:0::1;8285:418:1::0;18118:87:0::1;18318:9;18314:129;18337:7;:14;18333:1;:18;18314:129;;;18372:59;18388:10;18400:7;18408:1;18400:10;;;;;;;;:::i;:::-;;;;;;;18412:15;18428:1;18412:18;;;;;;;;:::i;:::-;;;;;;;18372:15;:59::i;:::-;18353:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18314:129;;;;17908:542:::0;;:::o;5168:571::-;-1:-1:-1;;;;;5352:19:0;;5308:4;5352:19;;;:11;:19;;;;;;;;306:10;5352:33;;;;;;;;-1:-1:-1;;5399:37:0;;5396:263;;5480:6;5460:16;:26;;5452:79;;;;-1:-1:-1;;;5452:79:0;;9182:2:1;5452:79:0;;;9164:21:1;9221:2;9201:18;;;9194:30;9260:34;9240:18;;;9233:62;-1:-1:-1;;;9311:18:1;;;9304:38;9359:19;;5452:79:0;8980:404:1;5452:79:0;5575:57;5584:6;306:10;5625:6;5606:16;:25;5575:8;:57::i;:::-;5671:36;5681:6;5689:9;5700:6;5671:9;:36::i;:::-;-1:-1:-1;5727:4:0;;5168:571;-1:-1:-1;;;;5168:571:0:o;16488:269::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;16607:4:::1;16601;16581:13;4486:12:::0;;;4398:108;16581:13:::1;:17;::::0;16597:1:::1;16581:17;:::i;:::-;:24;;;;:::i;:::-;16580:31;;;;:::i;:::-;16570:6;:41;;16562:95;;;::::0;-1:-1:-1;;;16562:95:0;;9986:2:1;16562:95:0::1;::::0;::::1;9968:21:1::0;10025:2;10005:18;;;9998:30;10064:34;10044:18;;;10037:62;-1:-1:-1;;;10115:18:1;;;10108:39;10164:19;;16562:95:0::1;9784:405:1::0;16562:95:0::1;16683:17;:6:::0;16693::::1;16683:17;:::i;:::-;16668:12;:32:::0;;;16716:33:::1;::::0;2092:25:1;;;16716:33:0::1;::::0;2080:2:1;2065:18;16716:33:0::1;;;;;;;;16488:269:::0;:::o;5747:215::-;306:10;5835:4;5884:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5884:34:0;;;;;;;;;;5835:4;;5852:80;;5875:7;;5884:47;;5921:10;;5884:47;:::i;:::-;5852:8;:80::i;26672:312::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;26763:18:::1;::::0;26753:4:::1;4588:7:::0;4615:18;;;;;;;;;;;26735:46:::1;;26727:123;;;::::0;;-1:-1:-1;;;26727:123:0;;10396:2:1;26727:123:0::1;::::0;::::1;10378:21:1::0;10415:18;;;10408:30;;;;10474:34;10454:18;;;10447:62;10545:34;10525:18;;;10518:62;10597:19;;26727:123:0::1;10194:428:1::0;26727:123:0::1;26861:8;:15:::0;;-1:-1:-1;;26861:15:0::1;26872:4;26861:15;::::0;;26887:10:::1;:8;:10::i;:::-;26908:8;:16:::0;;-1:-1:-1;;26908:16:0::1;::::0;;26940:36:::1;::::0;26960:15:::1;2092:25:1::0;;26940:36:0::1;::::0;2080:2:1;2065:18;26940:36:0::1;;;;;;;26672:312::o:0;26356:264::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26448:30:0;::::1;26440:62;;;::::0;-1:-1:-1;;;26440:62:0;;10829:2:1;26440:62:0::1;::::0;::::1;10811:21:1::0;10868:2;10848:18;;;10841:30;-1:-1:-1;;;10887:18:1;;;10880:49;10946:18;;26440:62:0::1;10627:343:1::0;26440:62:0::1;26513:15;:43:::0;;-1:-1:-1;;;;;;26513:43:0::1;-1:-1:-1::0;;;;;26513:43:0;::::1;::::0;;::::1;::::0;;;26572:40:::1;::::0;::::1;::::0;-1:-1:-1;;26572:40:0::1;26356:264:::0;:::o;19275:310::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;19373:14:::1;:29:::0;;;19413:15:::1;:31:::0;;;19470:32:::1;19431:13:::0;19390:12;19470:32:::1;:::i;:::-;19455:12;:47:::0;;;19537:3:::1;-1:-1:-1::0;19521:19:0::1;19513:64;;;::::0;-1:-1:-1;;;19513:64:0;;11177:2:1;19513:64:0::1;::::0;::::1;11159:21:1::0;;;11196:18;;;11189:30;11255:34;11235:18;;;11228:62;11307:18;;19513:64:0::1;10975:356:1::0;8520:150:0;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;8613:6:::1;::::0;8592:40:::1;::::0;8629:1:::1;::::0;-1:-1:-1;;;;;8613:6:0::1;::::0;8592:40:::1;::::0;8629:1;;8592:40:::1;8643:6;:19:::0;;-1:-1:-1;;;;;;8643:19:0::1;::::0;;8520:150::o;16088:233::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;16142:14:::1;:22:::0;;-1:-1:-1;;16142:22:0;;::::1;::::0;;;16175:20:::1;:28:::0;;;;::::1;::::0;;4486:12;;16214::::1;:28:::0;4486:12;;16253:13:::1;:29:::0;16298:15:::1;::::0;::::1;::::0;;;::::1;16088:233::o:0;18462:260::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;18558:4:::1;18554:104;;18596:6;-1:-1:-1::0;;;;;18586:16:0::1;:6;-1:-1:-1::0;;;;;18586:16:0::1;::::0;18578:68:::1;;;::::0;-1:-1:-1;;;18578:68:0;;11538:2:1;18578:68:0::1;::::0;::::1;11520:21:1::0;11577:2;11557:18;;;11550:30;11616:34;11596:18;;;11589:62;-1:-1:-1;;;11667:18:1;;;11660:37;11714:19;;18578:68:0::1;11336:403:1::0;18578:68:0::1;-1:-1:-1::0;;;;;18668:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;18668:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18462:260::o;15652:380::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;15740:13:::1;::::0;::::1;::::0;::::1;;;15739:14;15731:53;;;::::0;-1:-1:-1;;;15731:53:0;;11946:2:1;15731:53:0::1;::::0;::::1;11928:21:1::0;11985:2;11965:18;;;11958:30;12024:28;12004:18;;;11997:56;12070:18;;15731:53:0::1;11744:350:1::0;15731:53:0::1;15830:13;:20:::0;;-1:-1:-1;;15861:18:0;;;;;15911:12:::1;15890:18;:33:::0;;;15955:37:::1;::::0;15976:16;;15955:37:::1;:::i;:::-;15934:18;:58:::0;16008:16:::1;::::0;::::1;::::0;;;::::1;15652:380:::0;:::o;25620:498::-;8433:6;;25707:10;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25738:20:0;::::1;25730:59;;;::::0;-1:-1:-1;;;25730:59:0;;12301:2:1;25730:59:0::1;::::0;::::1;12283:21:1::0;12340:2;12320:18;;;12313:30;12379:28;12359:18;;;12352:56;12425:18;;25730:59:0::1;12099:350:1::0;25730:59:0::1;-1:-1:-1::0;;;;;25808:23:0;::::1;25826:4;25808:23;;::::0;:41:::1;;-1:-1:-1::0;25836:13:0::1;::::0;::::1;::::0;::::1;;;25835:14;25808:41;25800:106;;;::::0;-1:-1:-1;;;25800:106:0;;12656:2:1;25800:106:0::1;::::0;::::1;12638:21:1::0;12695:2;12675:18;;;12668:30;12734:34;12714:18;;;12707:62;-1:-1:-1;;;12785:18:1;;;12778:50;12845:19;;25800:106:0::1;12454:416:1::0;25800:106:0::1;25944:39;::::0;-1:-1:-1;;;25944:39:0;;25977:4:::1;25944:39;::::0;::::1;984:51:1::0;25917:24:0::1;::::0;-1:-1:-1;;;;;25944:24:0;::::1;::::0;::::1;::::0;957:18:1;;25944:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26002:46;::::0;-1:-1:-1;;;26002:46:0;;-1:-1:-1;;;;;13256:32:1;;;26002:46:0::1;::::0;::::1;13238:51:1::0;13305:18;;;13298:34;;;25917:66:0;;-1:-1:-1;26002:23:0;;::::1;::::0;::::1;::::0;13211:18:1;;26002:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26064;::::0;;-1:-1:-1;;;;;13256:32:1;;13238:51;;13320:2;13305:18;;13298:34;;;25994:54:0;;-1:-1:-1;26064:46:0::1;::::0;13211:18:1;26064:46:0::1;;;;;;;25719:399;25620:498:::0;;;;:::o;4185:104::-;4241:13;4274:7;4267:14;;;;;:::i;18730:293::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;18839:6:::1;-1:-1:-1::0;;;;;18831:14:0::1;:4;-1:-1:-1::0;;;;;18831:14:0::1;::::0;18823:84:::1;;;::::0;-1:-1:-1;;;18823:84:0;;13795:2:1;18823:84:0::1;::::0;::::1;13777:21:1::0;13834:2;13814:18;;;13807:30;13873:34;13853:18;;;13846:62;13944:27;13924:18;;;13917:55;13989:19;;18823:84:0::1;13593:421:1::0;18823:84:0::1;18918:41;18947:4;18953:5;18918:28;:41::i;:::-;18975:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18975:40:0;::::1;::::0;::::1;::::0;;;::::1;18730:293:::0;;:::o;5970:413::-;306:10;6063:4;6107:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6107:34:0;;;;;;;;;;6160:35;;;;6152:85;;;;-1:-1:-1;;;6152:85:0;;14221:2:1;6152:85:0;;;14203:21:1;14260:2;14240:18;;;14233:30;14299:34;14279:18;;;14272:62;-1:-1:-1;;;14350:18:1;;;14343:35;14395:19;;6152:85:0;14019:401:1;6152:85:0;6273:67;306:10;6296:7;6324:15;6305:16;:34;6273:8;:67::i;:::-;-1:-1:-1;6371:4:0;;5970:413;-1:-1:-1;;;5970:413:0:o;4649:175::-;4735:4;4752:42;306:10;4776:9;4787:6;4752:9;:42::i;19914:182::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19999:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;19999:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20054:34;;1642:41:1;;;20054:34:0::1;::::0;1615:18:1;20054:34:0::1;;;;;;;19914:182:::0;;:::o;17052:213::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;17173:4:::1;17168:3;17148:13;4486:12:::0;;;4398:108;17148:13:::1;:17;::::0;17164:1:::1;17148:17;:::i;:::-;:23;;;;:::i;:::-;17147:30;;;;:::i;:::-;17137:6;:40;;17129:88;;;::::0;-1:-1:-1;;;17129:88:0;;14627:2:1;17129:88:0::1;::::0;::::1;14609:21:1::0;14666:2;14646:18;;;14639:30;14705:34;14685:18;;;14678:62;-1:-1:-1;;;14756:18:1;;;14749:33;14799:19;;17129:88:0::1;14425:399:1::0;17129:88:0::1;17240:17;:6:::0;17250::::1;17240:17;:::i;:::-;17228:9;:29:::0;-1:-1:-1;17052:213:0:o;17335:346::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;17458:6:::1;17438:13;4486:12:::0;;;4398:108;17438:13:::1;:17;::::0;17454:1:::1;17438:17;:::i;:::-;:26;;;;:::i;:::-;17425:9;:39;;17417:105;;;::::0;-1:-1:-1;;;17417:105:0;;15031:2:1;17417:105:0::1;::::0;::::1;15013:21:1::0;15070:2;15050:18;;;15043:30;15109:34;15089:18;;;15082:62;-1:-1:-1;;;15160:18:1;;;15153:51;15221:19;;17417:105:0::1;14829:417:1::0;17417:105:0::1;17573:4;17553:13;4486:12:::0;;;4398:108;17553:13:::1;:17;::::0;17569:1:::1;17553:17;:::i;:::-;:24;;;;:::i;:::-;17540:9;:37;;17532:102;;;::::0;-1:-1:-1;;;17532:102:0;;15453:2:1;17532:102:0::1;::::0;::::1;15435:21:1::0;15492:2;15472:18;;;15465:30;15531:34;15511:18;;;15504:62;-1:-1:-1;;;15582:18:1;;;15575:50;15642:19;;17532:102:0::1;15251:416:1::0;17532:102:0::1;17644:18;:30:::0;17335:346::o;16769:274::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;16889:4:::1;16883;16863:13;4486:12:::0;;;4398:108;16863:13:::1;:17;::::0;16879:1:::1;16863:17;:::i;:::-;:24;;;;:::i;:::-;16862:31;;;;:::i;:::-;16852:6;:41;;16844:96;;;::::0;-1:-1:-1;;;16844:96:0;;15874:2:1;16844:96:0::1;::::0;::::1;15856:21:1::0;15913:2;15893:18;;;15886:30;15952:34;15932:18;;;15925:62;-1:-1:-1;;;16003:18:1;;;15996:40;16053:19;;16844:96:0::1;15672:406:1::0;16844:96:0::1;16967:17;:6:::0;16977::::1;16967:17;:::i;:::-;16951:13;:33:::0;;;17000:35:::1;::::0;2092:25:1;;;17000:35:0::1;::::0;2080:2:1;2065:18;17000:35:0::1;1946:177:1::0;16382:98:0;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;16444:20:::1;:28:::0;;-1:-1:-1;;16444:28:0::1;::::0;;16382:98::o;8678:244::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8767:22:0;::::1;8759:73;;;::::0;-1:-1:-1;;;8759:73:0;;16285:2:1;8759:73:0::1;::::0;::::1;16267:21:1::0;16324:2;16304:18;;;16297:30;16363:34;16343:18;;;16336:62;-1:-1:-1;;;16414:18:1;;;16407:36;16460:19;;8759:73:0::1;16083:402:1::0;8759:73:0::1;8869:6;::::0;8848:38:::1;::::0;-1:-1:-1;;;;;8848:38:0;;::::1;::::0;8869:6:::1;::::0;8848:38:::1;::::0;8869:6:::1;::::0;8848:38:::1;8897:6;:17:::0;;-1:-1:-1;;;;;;8897:17:0::1;-1:-1:-1::0;;;;;8897:17:0;;;::::1;::::0;;;::::1;::::0;;8678:244::o;26188:160::-;8433:6;;-1:-1:-1;;;;;8433:6:0;306:10;8433:22;8425:67;;;;-1:-1:-1;;;8425:67:0;;;;;;;:::i;:::-;26282:58:::1;::::0;26246:12:::1;::::0;26290:10:::1;::::0;26314:21:::1;::::0;26246:12;26282:58;26246:12;26282:58;26314:21;26290:10;26282:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;26188:160:0:o;7595:380::-;-1:-1:-1;;;;;7731:19:0;;7723:68;;;;-1:-1:-1;;;7723:68:0;;16902:2:1;7723:68:0;;;16884:21:1;16941:2;16921:18;;;16914:30;16980:34;16960:18;;;16953:62;-1:-1:-1;;;17031:18:1;;;17024:34;17075:19;;7723:68:0;16700:400:1;7723:68:0;-1:-1:-1;;;;;7810:21:0;;7802:68;;;;-1:-1:-1;;;7802:68:0;;17307:2:1;7802:68:0;;;17289:21:1;17346:2;17326:18;;;17319:30;17385:34;17365:18;;;17358:62;-1:-1:-1;;;17436:18:1;;;17429:32;17478:19;;7802:68:0;17105:398:1;7802:68:0;-1:-1:-1;;;;;7883:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7935:32;;2092:25:1;;;7935:32:0;;2065:18:1;7935:32:0;;;;;;;7595:380;;;:::o;6391:614::-;-1:-1:-1;;;;;6531:20:0;;6523:70;;;;-1:-1:-1;;;6523:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6612:23:0;;6604:71;;;;-1:-1:-1;;;6604:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6712:17:0;;6688:21;6712:17;;;;;;;;;;;6748:23;;;;6740:74;;;;-1:-1:-1;;;6740:74:0;;18520:2:1;6740:74:0;;;18502:21:1;18559:2;18539:18;;;18532:30;18598:34;18578:18;;;18571:62;-1:-1:-1;;;18649:18:1;;;18642:36;18695:19;;6740:74:0;18318:402:1;6740:74:0;-1:-1:-1;;;;;6850:17:0;;;:9;:17;;;;;;;;;;;6870:22;;;6850:42;;6914:20;;;;;;;;:30;;6886:6;;6850:9;6914:30;;6886:6;;6914:30;:::i;:::-;;;;;;;;6979:9;-1:-1:-1;;;;;6962:35:0;6971:6;-1:-1:-1;;;;;6962:35:0;;6990:6;6962:35;;;;2092:25:1;;2080:2;2065:18;;1946:177;6962:35:0;;;;;;;;6512:493;6391:614;;;:::o;20104:3433::-;-1:-1:-1;;;;;20204:18:0;;20196:68;;;;-1:-1:-1;;;20196:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20283:16:0;;20275:64;;;;-1:-1:-1;;;20275:64:0;;;;;;;:::i;:::-;20367:1;20358:6;:10;20350:52;;;;-1:-1:-1;;;20350:52:0;;18927:2:1;20350:52:0;;;18909:21:1;18966:2;18946:18;;;18939:30;19005:31;18985:18;;;18978:59;19054:18;;20350:52:0;18725:353:1;20350:52:0;-1:-1:-1;;;;;20426:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20455:23:0;;;;;;:19;:23;;;;;;;;20426:52;:64;;;-1:-1:-1;20482:8:0;;;;20426:64;20423:149;;;20506:33;20522:4;20528:2;20532:6;20506:15;:33::i;20423:149::-;20592:13;;;;;;;20584:48;;;;-1:-1:-1;;;20584:48:0;;19285:2:1;20584:48:0;;;19267:21:1;19324:2;19304:18;;;19297:30;-1:-1:-1;;;19343:18:1;;;19336:52;19405:18;;20584:48:0;19083:346:1;20584:48:0;20648:14;;;;20645:1378;;;20828:20;;;;20824:458;;;20886:9;-1:-1:-1;;;;;20872:24:0;:2;-1:-1:-1;;;;;20872:24:0;;;:49;;;;;20914:6;-1:-1:-1;;;;;20900:21:0;:2;-1:-1:-1;;;;;20900:21:0;;;20872:49;20868:399;;;20978:9;20953:35;;;;:24;:35;;;;;;20991:12;-1:-1:-1;20953:97:0;;;;-1:-1:-1;;;;;;21007:28:0;;;;;;:24;:28;;;;;;21038:12;-1:-1:-1;20953:97:0;20945:163;;;;-1:-1:-1;;;20945:163:0;;19636:2:1;20945:163:0;;;19618:21:1;19675:2;19655:18;;;19648:30;19714:34;19694:18;;;19687:62;-1:-1:-1;;;19765:18:1;;;19758:51;19826:19;;20945:163:0;19434:417:1;20945:163:0;21156:9;21131:35;;;;:24;:35;;;;;;21169:12;21131:50;;;;-1:-1:-1;;;;;21204:28:0;;;;;;:43;20868:399;-1:-1:-1;;;;;21342:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21378:35:0;;;;;;:31;:35;;;;;;;;21377:36;21342:71;21338:674;;;21452:12;;21442:6;:22;;21434:72;;;;-1:-1:-1;;;21434:72:0;;20058:2:1;21434:72:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:35;20232:19;;21434:72:0;19856:401:1;21434:72:0;21559:9;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;21533:22;;:6;:22;:::i;:::-;:35;;21525:72;;;;-1:-1:-1;;;21525:72:0;;20464:2:1;21525:72:0;;;20446:21:1;20503:2;20483:18;;;20476:30;-1:-1:-1;;;20522:18:1;;;20515:54;20586:18;;21525:72:0;20262:348:1;21525:72:0;21338:674;;;-1:-1:-1;;;;;21662:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;21696:37:0;;;;;;:31;:37;;;;;;;;21695:38;21662:71;21658:354;;;21772:12;;21762:6;:22;;21754:74;;;;-1:-1:-1;;;21754:74:0;;20817:2:1;21754:74:0;;;20799:21:1;20856:2;20836:18;;;20829:30;20895:34;20875:18;;;20868:62;-1:-1:-1;;;20946:18:1;;;20939:37;20993:19;;21754:74:0;20615:403:1;21658:354:0;-1:-1:-1;;;;;21869:35:0;;;;;;:31;:35;;;;;;;;21864:148;;21958:9;;-1:-1:-1;;;;;4615:18:0;;4588:7;4615:18;;;;;;;;;;;21932:22;;:6;:22;:::i;:::-;:35;;21924:72;;;;-1:-1:-1;;;21924:72:0;;20464:2:1;21924:72:0;;;20446:21:1;20503:2;20483:18;;;20476:30;-1:-1:-1;;;20522:18:1;;;20515:54;20586:18;;21924:72:0;20262:348:1;21924:72:0;22084:4;22035:28;4615:18;;;;;;;;;;;22150;;22126:42;;;;;;;22184:22;;-1:-1:-1;22195:11:0;;;;;;;22184:22;:35;;;;-1:-1:-1;22211:8:0;;;;22210:9;22184:35;:71;;;;-1:-1:-1;;;;;;22224:31:0;;;;;;:25;:31;;;;;;;;22223:32;22184:71;22181:174;;;22272:8;:15;;-1:-1:-1;;22272:15:0;22283:4;22272:15;;;22302:10;:8;:10::i;:::-;22327:8;:16;;-1:-1:-1;;22327:16:0;;;22181:174;22367:12;22439:21;23635:18;;23620:12;:33;;23545:116;22439:21;:56;;;;-1:-1:-1;;;;;;22464:31:0;;;;;;:25;:31;;;;;;;;22439:56;:90;;;;-1:-1:-1;;;;;;22500:29:0;;;;;;:25;:29;;;;;;;;22499:30;22439:90;:110;;;;;22548:1;22533:12;;:16;22439:110;22436:900;;;11634:5;22572:13;:6;22581:4;22572:13;:::i;:::-;:27;;;;:::i;:::-;22565:34;;22661:12;;22643:15;;22636:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;22614:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;22733:12:0;;22716:14;;22709:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;22688:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;22436:900:0;;-1:-1:-1;22436:900:0;;-1:-1:-1;;;;;22767:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;22816:1;22800:13;;:17;22767:50;22763:573;;;11634:5;22860:13;;22851:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;22844:43;;22950:13;;22931:16;;22924:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;22902:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23024:13:0;;23006:15;;22999:22;;:4;:22;:::i;22763:573::-;-1:-1:-1;;;;;23058:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;23108:1;23093:12;;:16;23058:51;23055:281;;;11634:5;23152:12;;23143:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;23136:42;;23240:12;;23222:15;;23215:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23193:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23312:12:0;;23295:14;;23288:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;23267:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;23055:281:0;23359:8;;23356:85;;23387:42;23403:4;23417;23424;23387:15;:42::i;:::-;23461:14;23471:4;23461:14;;:::i;:::-;;;23496:33;23512:4;23518:2;23522:6;23496:15;:33::i;:::-;20183:3354;;;20104:3433;;;:::o;24402:1210::-;24487:4;24443:23;4615:18;;;;;;;;;;;24443:50;;24504:25;24553:17;;24532:18;;:38;;;;:::i;:::-;24504:66;-1:-1:-1;24594:20:0;;;:46;;-1:-1:-1;24618:22:0;;24594:46;24591:60;;;24643:7;;24402:1210::o;24591:60::-;24684:18;;:23;;24705:2;24684:23;:::i;:::-;24666:15;:41;24663:113;;;24741:18;;:23;;24762:2;24741:23;:::i;:::-;24723:41;;24663:113;24845:23;24910:17;24889:18;;24871:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;24845:82;-1:-1:-1;24943:19:0;;24940:296;;24978:55;25002:4;25009:6;25017:15;24978;:55::i;:::-;25060:6;-1:-1:-1;;;;;25052:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25048:37;25099:34;25118:15;25099:34;;:::i;:::-;;;25169:18;;25148:39;;;;;:::i;:::-;25223:1;25202:18;:22;25148:39;-1:-1:-1;24940:296:0;25251:19;;25248:357;;25286:33;25303:15;25286:16;:33::i;:::-;25336:18;25407:17;:21;;;25357;;25485:14;;25482:112;;25532:15;;:43;;-1:-1:-1;;;;;25532:15:0;;;;25560:10;;25532:43;;;;25560:10;25532:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25519:56:0;;-1:-1:-1;;25482:112:0;25271:334;;24430:1182;;;24402:1210::o;19031:236::-;-1:-1:-1;;;;;19114:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;19114:39:0;;;;;;;19164;19114:31;:39;19164:26;:39::i;23669:504::-;23821:16;;;23835:1;23821:16;;;;;;;;23797:21;;23821:16;;;;;;;;;;-1:-1:-1;23821:16:0;23797:40;;23866:4;23848;23853:1;23848:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23848:23:0;;;-1:-1:-1;;;;;23848:23:0;;;;;23892:9;-1:-1:-1;;;;;23892:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23882:4;23887:1;23882:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23882:26:0;;;:7;;;;;;;;;:26;23947:218;;-1:-1:-1;;;23947:218:0;;:9;:60;;;;;;:218;;24022:11;;24048:1;;24092:4;;24119;;24139:15;;23947:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17693:207;-1:-1:-1;;;;;17781:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17781:52:0;;;;;;;;;;17849:43;;22565:51:1;;;22632:18;;;22625:50;17849:43:0;;22538:18:1;17849:43:0;;;;;;;17693:207;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;1046:131::-;-1:-1:-1;;;;;1121:31:1;;1111:42;;1101:70;;1167:1;1164;1157:12;1101:70;1046:131;:::o;1182:315::-;1250:6;1258;1311:2;1299:9;1290:7;1286:23;1282:32;1279:52;;;1327:1;1324;1317:12;1279:52;1366:9;1353:23;1385:31;1410:5;1385:31;:::i;:::-;1435:5;1487:2;1472:18;;;;1459:32;;-1:-1:-1;;;1182:315:1:o;1694:247::-;1753:6;1806:2;1794:9;1785:7;1781:23;1777:32;1774:52;;;1822:1;1819;1812:12;1774:52;1861:9;1848:23;1880:31;1905:5;1880:31;:::i;:::-;1930:5;1694:247;-1:-1:-1;;;1694:247:1:o;2128:127::-;2189:10;2184:3;2180:20;2177:1;2170:31;2220:4;2217:1;2210:15;2244:4;2241:1;2234:15;2260:275;2331:2;2325:9;2396:2;2377:13;;-1:-1:-1;;2373:27:1;2361:40;;2431:18;2416:34;;2452:22;;;2413:62;2410:88;;;2478:18;;:::i;:::-;2514:2;2507:22;2260:275;;-1:-1:-1;2260:275:1:o;2540:183::-;2600:4;2633:18;2625:6;2622:30;2619:56;;;2655:18;;:::i;:::-;-1:-1:-1;2700:1:1;2696:14;2712:4;2692:25;;2540:183::o;2728:662::-;2782:5;2835:3;2828:4;2820:6;2816:17;2812:27;2802:55;;2853:1;2850;2843:12;2802:55;2889:6;2876:20;2915:4;2939:60;2955:43;2995:2;2955:43;:::i;:::-;2939:60;:::i;:::-;3033:15;;;3119:1;3115:10;;;;3103:23;;3099:32;;;3064:12;;;;3143:15;;;3140:35;;;3171:1;3168;3161:12;3140:35;3207:2;3199:6;3195:15;3219:142;3235:6;3230:3;3227:15;3219:142;;;3301:17;;3289:30;;3339:12;;;;3252;;3219:142;;;-1:-1:-1;3379:5:1;2728:662;-1:-1:-1;;;;;;2728:662:1:o;3395:1215::-;3513:6;3521;3574:2;3562:9;3553:7;3549:23;3545:32;3542:52;;;3590:1;3587;3580:12;3542:52;3630:9;3617:23;3659:18;3700:2;3692:6;3689:14;3686:34;;;3716:1;3713;3706:12;3686:34;3754:6;3743:9;3739:22;3729:32;;3799:7;3792:4;3788:2;3784:13;3780:27;3770:55;;3821:1;3818;3811:12;3770:55;3857:2;3844:16;3879:4;3903:60;3919:43;3959:2;3919:43;:::i;3903:60::-;3997:15;;;4079:1;4075:10;;;;4067:19;;4063:28;;;4028:12;;;;4103:19;;;4100:39;;;4135:1;4132;4125:12;4100:39;4159:11;;;;4179:217;4195:6;4190:3;4187:15;4179:217;;;4275:3;4262:17;4292:31;4317:5;4292:31;:::i;:::-;4336:18;;4212:12;;;;4374;;;;4179:217;;;4415:5;-1:-1:-1;;4458:18:1;;4445:32;;-1:-1:-1;;4489:16:1;;;4486:36;;;4518:1;4515;4508:12;4486:36;;4541:63;4596:7;4585:8;4574:9;4570:24;4541:63;:::i;:::-;4531:73;;;3395:1215;;;;;:::o;4615:456::-;4692:6;4700;4708;4761:2;4749:9;4740:7;4736:23;4732:32;4729:52;;;4777:1;4774;4767:12;4729:52;4816:9;4803:23;4835:31;4860:5;4835:31;:::i;:::-;4885:5;-1:-1:-1;4942:2:1;4927:18;;4914:32;4955:33;4914:32;4955:33;:::i;:::-;4615:456;;5007:7;;-1:-1:-1;;;5061:2:1;5046:18;;;;5033:32;;4615:456::o;5076:180::-;5135:6;5188:2;5176:9;5167:7;5163:23;5159:32;5156:52;;;5204:1;5201;5194:12;5156:52;-1:-1:-1;5227:23:1;;5076:180;-1:-1:-1;5076:180:1:o;5658:118::-;5744:5;5737:13;5730:21;5723:5;5720:32;5710:60;;5766:1;5763;5756:12;5781:382;5846:6;5854;5907:2;5895:9;5886:7;5882:23;5878:32;5875:52;;;5923:1;5920;5913:12;5875:52;5962:9;5949:23;5981:31;6006:5;5981:31;:::i;:::-;6031:5;-1:-1:-1;6088:2:1;6073:18;;6060:32;6101:30;6060:32;6101:30;:::i;:::-;6150:7;6140:17;;;5781:382;;;;;:::o;6168:388::-;6236:6;6244;6297:2;6285:9;6276:7;6272:23;6268:32;6265:52;;;6313:1;6310;6303:12;6265:52;6352:9;6339:23;6371:31;6396:5;6371:31;:::i;:::-;6421:5;-1:-1:-1;6478:2:1;6463:18;;6450:32;6491:33;6450:32;6491:33;:::i;6561:356::-;6763:2;6745:21;;;6782:18;;;6775:30;6841:34;6836:2;6821:18;;6814:62;6908:2;6893:18;;6561:356::o;6922:127::-;6983:10;6978:3;6974:20;6971:1;6964:31;7014:4;7011:1;7004:15;7038:4;7035:1;7028:15;7054:125;7119:9;;;7140:10;;;7137:36;;;7153:18;;:::i;7541:380::-;7620:1;7616:12;;;;7663;;;7684:61;;7738:4;7730:6;7726:17;7716:27;;7684:61;7791:2;7783:6;7780:14;7760:18;7757:38;7754:161;;7837:10;7832:3;7828:20;7825:1;7818:31;7872:4;7869:1;7862:15;7900:4;7897:1;7890:15;7754:161;;7541:380;;;:::o;8708:127::-;8769:10;8764:3;8760:20;8757:1;8750:31;8800:4;8797:1;8790:15;8824:4;8821:1;8814:15;8840:135;8879:3;8900:17;;;8897:43;;8920:18;;:::i;:::-;-1:-1:-1;8967:1:1;8956:13;;8840:135::o;9389:168::-;9462:9;;;9493;;9510:15;;;9504:22;;9490:37;9480:71;;9531:18;;:::i;9562:217::-;9602:1;9628;9618:132;;9672:10;9667:3;9663:20;9660:1;9653:31;9707:4;9704:1;9697:15;9735:4;9732:1;9725:15;9618:132;-1:-1:-1;9764:9:1;;9562:217::o;12875:184::-;12945:6;12998:2;12986:9;12977:7;12973:23;12969:32;12966:52;;;13014:1;13011;13004:12;12966:52;-1:-1:-1;13037:16:1;;12875:184;-1:-1:-1;12875:184:1:o;13343:245::-;13410:6;13463:2;13451:9;13442:7;13438:23;13434:32;13431:52;;;13479:1;13476;13469:12;13431:52;13511:9;13505:16;13530:28;13552:5;13530:28;:::i;17508:401::-;17710:2;17692:21;;;17749:2;17729:18;;;17722:30;17788:34;17783:2;17768:18;;17761:62;-1:-1:-1;;;17854:2:1;17839:18;;17832:35;17899:3;17884:19;;17508:401::o;17914:399::-;18116:2;18098:21;;;18155:2;18135:18;;;18128:30;18194:34;18189:2;18174:18;;18167:62;-1:-1:-1;;;18260:2:1;18245:18;;18238:33;18303:3;18288:19;;17914:399::o;21023:128::-;21090:9;;;21111:11;;;21108:37;;;21125:18;;:::i;21156:251::-;21226:6;21279:2;21267:9;21258:7;21254:23;21250:32;21247:52;;;21295:1;21292;21285:12;21247:52;21327:9;21321:16;21346:31;21371:5;21346:31;:::i;21412:980::-;21674:4;21722:3;21711:9;21707:19;21753:6;21742:9;21735:25;21779:2;21817:6;21812:2;21801:9;21797:18;21790:34;21860:3;21855:2;21844:9;21840:18;21833:31;21884:6;21919;21913:13;21950:6;21942;21935:22;21988:3;21977:9;21973:19;21966:26;;22027:2;22019:6;22015:15;22001:29;;22048:1;22058:195;22072:6;22069:1;22066:13;22058:195;;;22137:13;;-1:-1:-1;;;;;22133:39:1;22121:52;;22228:15;;;;22193:12;;;;22169:1;22087:9;22058:195;;;-1:-1:-1;;;;;;;22309:32:1;;;;22304:2;22289:18;;22282:60;-1:-1:-1;;;22373:3:1;22358:19;22351:35;22270:3;21412:980;-1:-1:-1;;;21412:980:1:o

Swarm Source

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