ETH Price: $3,461.56 (-1.57%)
Gas: 3 Gwei

Token

Tsukanomics (TNOMICS)
 

Overview

Max Total Supply

1,000,000,000,000 TNOMICS

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,017,753,397.122823658306912086 TNOMICS

Value
$0.00
0x17500bec1fdd16698f20a558636362854e943e73
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:
Tsukanomics

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 2022-09-25
*/

/**

    https://t.me/tsukanomicsportal

**/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Tsukanomics is Context, IERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private _uniswapV2Router;

    mapping (address => uint256) private _balances;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;

    bool public tradingOpen;
    bool private _swapping;
    bool public swapEnabled = false;
    bool public feesEnabled = true;

    string private constant _name = "Tsukanomics";
    string private constant _symbol = "TNOMICS";

    uint8 private constant _decimals = 18;

    uint256 private constant _totalSupply = 1e12 * (10**_decimals);
    uint256 public mxBuy = _totalSupply;
    uint256 public mxSell = _totalSupply;
    uint256 public mxWallet = _totalSupply;
    uint256 public fee = 1;
    uint256 private _previousFee = fee;
    uint256 private _tokensForFee;
    uint256 private _swapTokensAtAmount = 0;

    address payable private feeCollector;
    address private _uniswapV2Pair;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    
    constructor () {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _totalSupply);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);

        feeCollector = payable(_msgSender());
        _balances[_msgSender()] = _totalSupply;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;

        emit Transfer(ZERO, _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "TNOMICS: transfer amount exceeds allowance"));
        return true;
    }

    function setSwapEnabled(bool onoff) public onlyOwner {
        swapEnabled = onoff;
    }

    function setFeesEnabled(bool onoff) public onlyOwner {
        feesEnabled = onoff;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != ZERO, "TNOMICS: approve from the zero address");
        require(spender != ZERO, "TNOMICS: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != ZERO, "TNOMICS: transfer from the zero address");
        require(to != ZERO, "TNOMICS: transfer to the zero address");
        require(amount > 0, "TNOMICS: Transfer amount must be greater than zero");
        bool takeFee = true;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {
            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "TNOMICS: Trading is not allowed yet.");

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= mxBuy, "TNOMICS: Transfer amount exceeds the mxBuy.");
                require(balanceOf(to) + amount <= mxWallet, "TNOMICS: Exceeds maximum wallet token amount.");
            }
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= mxSell, "TNOMICS: Transfer amount exceeds the mxSell.");
                shouldSwap = true;
            }
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) takeFee = false;

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = (contractTokenBalance > _swapTokensAtAmount) && shouldSwap;

        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            _swapping = true;
            _swapBack();
            _swapping = false;
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function _swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        
        if (contractBalance == 0 || _tokensForFee == 0) return;

        if (contractBalance > _swapTokensAtAmount * 5) contractBalance = _swapTokensAtAmount * 5;

        swapTokensForETH(contractBalance); 
        
        _tokensForFee = 0;
        
        (success,) = address(feeCollector).call{value: address(this).balance}("");
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function launch() public onlyOwner {
        require(!tradingOpen,"TNOMICS: Trading is already open");
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        swapEnabled = true;
        mxBuy = _totalSupply.mul(15).div(1000);
        mxSell = _totalSupply.mul(15).div(1000);
        mxWallet = _totalSupply.mul(15).div(1000);
        _swapTokensAtAmount = _totalSupply.mul(7).div(10000);
        tradingOpen = true;
    }

    function setmxBuy(uint256 maxBuy) public onlyOwner {
        require(maxBuy >= (totalSupply().mul(1).div(10000)), "TNOMICS: Max buy amount cannot be lower than 0.01% total supply.");
        mxBuy = maxBuy;
    }

    function setmxSell(uint256 maxSell) public onlyOwner {
        require(maxSell >= (totalSupply().mul(1).div(10000)), "TNOMICS: Max sell amount cannot be lower than 0.01% total supply.");
        mxSell = maxSell;
    }
    
    function setmxWallet(uint256 maxToken) public onlyOwner {
        require(maxToken >= (totalSupply().mul(1).div(1000)), "TNOMICS: Max wallet amount cannot be lower than 0.1% total supply.");
        mxWallet = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 swapAmount) public onlyOwner {
        require(swapAmount >= (totalSupply().mul(1).div(100000)), "TNOMICS: Swap amount cannot be lower than 0.001% total supply.");
        require(swapAmount <= (totalSupply().mul(5).div(1000)), "TNOMICS: Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapAmount;
    }

    function setFeeCollector(address feeCollectorAddy) public onlyOwner {
        require(feeCollectorAddy != ZERO, "TNOMICS: feeCollector address cannot be 0");
        feeCollector = payable(feeCollectorAddy);
        _isExcludedFromFees[feeCollectorAddy] = true;
        _isExcludedMaxTransactionAmount[feeCollectorAddy] = true;
    }

    function setExcludedFromFees(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;
    }
    
    function setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
    }

    function removeAllFee() private {
        if (fee == 0) return;
        _previousFee = fee;
        fee = 0;
    }
    
    function restoreAllFee() private {
        fee = _previousFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) removeAllFee();
        else amount = _takeFees(sender, amount);

        _transferStandard(sender, recipient, amount);
        
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _balances[sender] = _balances[sender].sub(tAmount);
        _balances[recipient] = _balances[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount) private returns (uint256) {        
        uint256 fees;
        if (fee > 0) {
            fees = amount.mul(fee).div(100);
            _tokensForFee += fees * fee / fee;
        }
            
        if (fees > 0) _transferStandard(sender, address(this), fees);
            
        return amount -= fees;
    }

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

    function saveETH() public onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function saveTokens(address tkn) public onlyOwner {
        require(tkn != address(this), "Cannot withdraw this token");
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"stateMutability":"payable","type":"fallback"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saveETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"saveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeCollectorAddy","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setmxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setmxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setmxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526006805463ffff000019166301000000179055620000256012600a620006e8565b620000369064e8d4a5100062000700565b600755620000476012600a620006e8565b620000589064e8d4a5100062000700565b600855620000696012600a620006e8565b6200007a9064e8d4a5100062000700565b6009556001600a819055600b556000600d55601080546001600160a01b031990811661dead17909155601180549091169055348015620000b957600080fd5b50620000c53362000443565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556200011a903090620001036012600a620006e8565b620001149064e8d4a5100062000700565b62000493565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200071a565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d91906200071a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029191906200071a565b600f80546001600160a01b0319166001600160a01b0392831690811790915560015460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b3906044016020604051808303816000875af1158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f919062000745565b50600e80546001600160a01b03191633179055620003406012600a620006e8565b620003519064e8d4a5100062000700565b3360008181526002602090815260408083209490945581546001600160a01b039081168352600482528483208054600160ff1991821681179092553080865287862080548316841790556010805485168752888720805484168517905586548516875260059095528786208054831684179055855286852080548216831790559254821684529490922080549091169093179092556011549091167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200041b6012600a620006e8565b6200042c9064e8d4a5100062000700565b60405190815260200160405180910390a362000769565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6011546001600160a01b0390811690841603620005065760405162461bcd60e51b815260206004820152602660248201527f544e4f4d4943533a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6011546001600160a01b0390811690831603620005725760405162461bcd60e51b8152602060048201526024808201527f544e4f4d4943533a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b6064820152608401620004fd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200062a5781600019048211156200060e576200060e620005d3565b808516156200061c57918102915b93841c9390800290620005ee565b509250929050565b6000826200064357506001620006e2565b816200065257506000620006e2565b81600181146200066b5760028114620006765762000696565b6001915050620006e2565b60ff8411156200068a576200068a620005d3565b50506001821b620006e2565b5060208310610133831016604e8410600b8410161715620006bb575081810a620006e2565b620006c78383620005e9565b8060001904821115620006de57620006de620005d3565b0290505b92915050565b6000620006f960ff84168362000632565b9392505050565b8082028115828204841417620006e257620006e2620005d3565b6000602082840312156200072d57600080fd5b81516001600160a01b0381168114620006f957600080fd5b6000602082840312156200075857600080fd5b81518015158114620006f957600080fd5b6120fd80620007796000396000f3fe6080604052600436106101c45760003560e01c806395d89b41116100f6578063d7030d261161008f578063f1d1db7911610061578063f1d1db7914610578578063f2fde38b1461058e578063f5a6682f146105ae578063ffb54a99146105ce57005b8063d7030d26146104e6578063dd62ed3e146104fc578063ddca3f4314610542578063e01af92c1461055857005b8063a901dd92116100c8578063a901dd9214610466578063a9059cbb14610486578063afa4f3b2146104a6578063beb1a837146104c657005b806395d89b41146103d557806398c99c9e14610405578063a42dce8014610425578063a64e4f8a1461044557005b8063313ce5671161016857806370a082311161013a57806370a082311461034d578063715018a614610383578063896f1a95146103985780638da5cb5b146103ad57005b8063313ce567146102db5780634ca2959a146102f7578063673d59c1146103175780636ddd17131461032d57005b8063105222f9116101a1578063105222f91461025857806317b24acb1461027857806318160ddd1461029857806323b872dd146102bb57005b806301339c21146101cd57806306fdde03146101e2578063095ea7b31461022857005b366101cb57005b005b3480156101d957600080fd5b506101cb6105e8565b3480156101ee57600080fd5b5060408051808201909152600b81526a5473756b616e6f6d69637360a81b60208201525b60405161021f9190611ba2565b60405180910390f35b34801561023457600080fd5b50610248610243366004611c15565b6107c2565b604051901515815260200161021f565b34801561026457600080fd5b506101cb610273366004611c70565b6107d9565b34801561028457600080fd5b506101cb610293366004611d47565b61084d565b3480156102a457600080fd5b506102ad6108ec565b60405190815260200161021f565b3480156102c757600080fd5b506102486102d6366004611d60565b61090e565b3480156102e757600080fd5b506040516012815260200161021f565b34801561030357600080fd5b506101cb610312366004611d47565b610977565b34801561032357600080fd5b506102ad60085481565b34801561033957600080fd5b506006546102489062010000900460ff1681565b34801561035957600080fd5b506102ad610368366004611da1565b6001600160a01b031660009081526002602052604090205490565b34801561038f57600080fd5b506101cb610a0e565b3480156103a457600080fd5b506101cb610a22565b3480156103b957600080fd5b506000546040516001600160a01b03909116815260200161021f565b3480156103e157600080fd5b50604080518082019091526007815266544e4f4d49435360c81b6020820152610212565b34801561041157600080fd5b506101cb610420366004611da1565b610a77565b34801561043157600080fd5b506101cb610440366004611da1565b610c5a565b34801561045157600080fd5b50600654610248906301000000900460ff1681565b34801561047257600080fd5b506101cb610481366004611dbe565b610d25565b34801561049257600080fd5b506102486104a1366004611c15565b610d4b565b3480156104b257600080fd5b506101cb6104c1366004611d47565b610d58565b3480156104d257600080fd5b506101cb6104e1366004611d47565b610e76565b3480156104f257600080fd5b506102ad60075481565b34801561050857600080fd5b506102ad610517366004611ddb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561054e57600080fd5b506102ad600a5481565b34801561056457600080fd5b506101cb610573366004611dbe565b610f16565b34801561058457600080fd5b506102ad60095481565b34801561059a57600080fd5b506101cb6105a9366004611da1565b610f3a565b3480156105ba57600080fd5b506101cb6105c9366004611c70565b610fb3565b3480156105da57600080fd5b506006546102489060ff1681565b6105f0611022565b60065460ff16156106485760405162461bcd60e51b815260206004820181905260248201527f544e4f4d4943533a2054726164696e6720697320616c7265616479206f70656e60448201526064015b60405180910390fd5b6001546001600160a01b031663f305d719473061067a816001600160a01b031660009081526002602052604090205490565b60008061068f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156106f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061071c9190611e14565b50506006805462ff0000191662010000179055506107626103e861075c600f6107476012600a611f3c565b6107569064e8d4a51000611f4b565b9061107c565b9061108f565b60075561077c6103e861075c600f6107476012600a611f3c565b6008556107966103e861075c600f6107476012600a611f3c565b6009556107b061271061075c60076107476012600a611f3c565b600d556006805460ff19166001179055565b60006107cf33848461109b565b5060015b92915050565b6107e1611022565b60005b825181101561084857816004600085848151811061080457610804611f62565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061084081611f78565b9150506107e4565b505050565b610855611022565b61086861271061075c60016107566108ec565b8110156108e75760405162461bcd60e51b815260206004820152604160248201527f544e4f4d4943533a204d61782073656c6c20616d6f756e742063616e6e6f742060448201527f6265206c6f776572207468616e20302e30312520746f74616c20737570706c796064820152601760f91b608482015260a40161063f565b600855565b60006108fa6012600a611f3c565b6109099064e8d4a51000611f4b565b905090565b600061091b8484846111d4565b61096d8433610968856040518060600160405280602a815260200161209e602a91396001600160a01b038a166000908152600360209081526040808320338452909152902054919061178a565b61109b565b5060019392505050565b61097f611022565b61099261271061075c60016107566108ec565b811015610a09576040805162461bcd60e51b81526020600482015260248101919091527f544e4f4d4943533a204d61782062757920616d6f756e742063616e6e6f74206260448201527f65206c6f776572207468616e20302e30312520746f74616c20737570706c792e606482015260840161063f565b600755565b610a16611022565b610a2060006117b6565b565b610a2a611022565b604051600090339047908381818185875af1925050503d8060008114610a6c576040519150601f19603f3d011682016040523d82523d6000602084013e610a71565b606091505b50505050565b610a7f611022565b306001600160a01b03821603610ad75760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604482015260640161063f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190611f91565b11610b7b5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161063f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611f91565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108489190611faa565b610c62611022565b6011546001600160a01b0390811690821603610cd25760405162461bcd60e51b815260206004820152602960248201527f544e4f4d4943533a20666565436f6c6c6563746f72206164647265737320636160448201526806e6e6f7420626520360bc1b606482015260840161063f565b600e80546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b610d2d611022565b6006805491151563010000000263ff00000019909216919091179055565b60006107cf3384846111d4565b610d60611022565b610d74620186a061075c60016107566108ec565b811015610de95760405162461bcd60e51b815260206004820152603e60248201527f544e4f4d4943533a205377617020616d6f756e742063616e6e6f74206265206c60448201527f6f776572207468616e20302e3030312520746f74616c20737570706c792e0000606482015260840161063f565b610dfc6103e861075c60056107566108ec565b811115610e715760405162461bcd60e51b815260206004820152603d60248201527f544e4f4d4943533a205377617020616d6f756e742063616e6e6f74206265206860448201527f6967686572207468616e20302e352520746f74616c20737570706c792e000000606482015260840161063f565b600d55565b610e7e611022565b610e916103e861075c60016107566108ec565b811015610f115760405162461bcd60e51b815260206004820152604260248201527f544e4f4d4943533a204d61782077616c6c657420616d6f756e742063616e6e6f60448201527f74206265206c6f776572207468616e20302e312520746f74616c20737570706c6064820152613c9760f11b608482015260a40161063f565b600955565b610f1e611022565b60068054911515620100000262ff000019909216919091179055565b610f42611022565b6001600160a01b038116610fa75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161063f565b610fb0816117b6565b50565b610fbb611022565b60005b8251811015610848578160056000858481518110610fde57610fde611f62565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061101a81611f78565b915050610fbe565b6000546001600160a01b03163314610a205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063f565b60006110888284611f4b565b9392505050565b60006110888284611fc7565b6011546001600160a01b03908116908416036111085760405162461bcd60e51b815260206004820152602660248201527f544e4f4d4943533a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161063f565b6011546001600160a01b03908116908316036111725760405162461bcd60e51b8152602060048201526024808201527f544e4f4d4943533a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b606482015260840161063f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6011546001600160a01b03908116908416036112425760405162461bcd60e51b815260206004820152602760248201527f544e4f4d4943533a207472616e736665722066726f6d20746865207a65726f206044820152666164647265737360c81b606482015260840161063f565b6011546001600160a01b03908116908316036112ae5760405162461bcd60e51b815260206004820152602560248201527f544e4f4d4943533a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161063f565b600081116113195760405162461bcd60e51b815260206004820152603260248201527f544e4f4d4943533a205472616e7366657220616d6f756e74206d7573742062656044820152712067726561746572207468616e207a65726f60701b606482015260840161063f565b6001600061132f6000546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561135e57506000546001600160a01b03858116911614155b801561137857506011546001600160a01b03858116911614155b801561139257506010546001600160a01b03858116911614155b80156113a65750600654610100900460ff16155b156116585760065460ff1661144c576001600160a01b03851660009081526004602052604090205460ff16806113f457506001600160a01b03841660009081526004602052604090205460ff165b61144c5760405162461bcd60e51b8152602060048201526024808201527f544e4f4d4943533a2054726164696e67206973206e6f7420616c6c6f776564206044820152633cb2ba1760e11b606482015260840161063f565b600f546001600160a01b03868116911614801561147757506001546001600160a01b03858116911614155b801561149c57506001600160a01b03841660009081526005602052604090205460ff16155b15611598576007548311156115075760405162461bcd60e51b815260206004820152602b60248201527f544e4f4d4943533a205472616e7366657220616d6f756e74206578636565647360448201526a103a34329036bc213abc9760a91b606482015260840161063f565b6009548361152a866001600160a01b031660009081526002602052604090205490565b6115349190611fe9565b11156115985760405162461bcd60e51b815260206004820152602d60248201527f544e4f4d4943533a2045786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b606482015260840161063f565b600f546001600160a01b0385811691161480156115c357506001546001600160a01b03868116911614155b80156115e857506001600160a01b03851660009081526005602052604090205460ff16155b15611658576008548311156116545760405162461bcd60e51b815260206004820152602c60248201527f544e4f4d4943533a205472616e7366657220616d6f756e74206578636565647360448201526b103a34329036bc29b2b6361760a11b606482015260840161063f565b5060015b6001600160a01b03851660009081526004602052604090205460ff168061169757506001600160a01b03841660009081526004602052604090205460ff165b806116ac57506006546301000000900460ff16155b156116b657600091505b3060009081526002602052604081205490506000600d54821180156116d85750825b90508080156116ef575060065462010000900460ff165b80156117035750600654610100900460ff16155b801561172857506001600160a01b03871660009081526004602052604090205460ff16155b801561174d57506001600160a01b03861660009081526004602052604090205460ff16155b15611775576006805461ff001916610100179055611769611806565b6006805461ff00191690555b611781878787876118bb565b50505050505050565b600081848411156117ae5760405162461bcd60e51b815260040161063f9190611ba2565b505050900390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b30600090815260026020526040812054908115806118245750600c54155b1561182d575050565b600d5461183b906005611f4b565b82111561185357600d54611850906005611f4b565b91505b61185c826118f5565b6000600c819055600e546040516001600160a01b039091169147919081818185875af1925050503d80600081146118af576040519150601f19603f3d011682016040523d82523d6000602084013e6118b4565b606091505b5050505050565b806118cd576118c8611a4f565b6118da565b6118d78483611a68565b91505b6118e5848484611ae4565b80610a7157610a71600b54600a55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061192a5761192a611f62565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a79190611ffc565b816001815181106119ba576119ba611f62565b6001600160a01b0392831660209182029290920101526001546119e0913091168461109b565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a19908590600090869030904290600401612019565b600060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050505050565b600a54600003611a5b57565b600a8054600b5560009055565b6000806000600a541115611ac157611a90606461075c600a548661107c90919063ffffffff16565b600a54909150611aa08183611f4b565b611aaa9190611fc7565b600c6000828254611abb9190611fe9565b90915550505b8015611ad257611ad2843083611ae4565b611adc818461208a565b949350505050565b6001600160a01b038316600090815260026020526040902054611b079082611b8a565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611b369082611b96565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111c79085815260200190565b6000611088828461208a565b60006110888284611fe9565b600060208083528351808285015260005b81811015611bcf57858101830151858201604001528201611bb3565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610fb057600080fd5b8035611c1081611bf0565b919050565b60008060408385031215611c2857600080fd5b8235611c3381611bf0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114610fb057600080fd5b8035611c1081611c57565b60008060408385031215611c8357600080fd5b823567ffffffffffffffff80821115611c9b57600080fd5b818501915085601f830112611caf57600080fd5b8135602082821115611cc357611cc3611c41565b8160051b604051601f19603f83011681018181108682111715611ce857611ce8611c41565b604052928352818301935084810182019289841115611d0657600080fd5b948201945b83861015611d2b57611d1c86611c05565b85529482019493820193611d0b565b9650611d3a9050878201611c65565b9450505050509250929050565b600060208284031215611d5957600080fd5b5035919050565b600080600060608486031215611d7557600080fd5b8335611d8081611bf0565b92506020840135611d9081611bf0565b929592945050506040919091013590565b600060208284031215611db357600080fd5b813561108881611bf0565b600060208284031215611dd057600080fd5b813561108881611c57565b60008060408385031215611dee57600080fd5b8235611df981611bf0565b91506020830135611e0981611bf0565b809150509250929050565b600080600060608486031215611e2957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611e93578160001904821115611e7957611e79611e42565b80851615611e8657918102915b93841c9390800290611e5d565b509250929050565b600082611eaa575060016107d3565b81611eb7575060006107d3565b8160018114611ecd5760028114611ed757611ef3565b60019150506107d3565b60ff841115611ee857611ee8611e42565b50506001821b6107d3565b5060208310610133831016604e8410600b8410161715611f16575081810a6107d3565b611f208383611e58565b8060001904821115611f3457611f34611e42565b029392505050565b600061108860ff841683611e9b565b80820281158282048414176107d3576107d3611e42565b634e487b7160e01b600052603260045260246000fd5b600060018201611f8a57611f8a611e42565b5060010190565b600060208284031215611fa357600080fd5b5051919050565b600060208284031215611fbc57600080fd5b815161108881611c57565b600082611fe457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156107d3576107d3611e42565b60006020828403121561200e57600080fd5b815161108881611bf0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120695784516001600160a01b031683529383019391830191600101612044565b50506001600160a01b03969096166060850152505050608001529392505050565b818103818111156107d3576107d3611e4256fe544e4f4d4943533a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122013ded5c8605c514549c7fd29df7da4169f78e1c210ac67d28114f626b570558c64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101c45760003560e01c806395d89b41116100f6578063d7030d261161008f578063f1d1db7911610061578063f1d1db7914610578578063f2fde38b1461058e578063f5a6682f146105ae578063ffb54a99146105ce57005b8063d7030d26146104e6578063dd62ed3e146104fc578063ddca3f4314610542578063e01af92c1461055857005b8063a901dd92116100c8578063a901dd9214610466578063a9059cbb14610486578063afa4f3b2146104a6578063beb1a837146104c657005b806395d89b41146103d557806398c99c9e14610405578063a42dce8014610425578063a64e4f8a1461044557005b8063313ce5671161016857806370a082311161013a57806370a082311461034d578063715018a614610383578063896f1a95146103985780638da5cb5b146103ad57005b8063313ce567146102db5780634ca2959a146102f7578063673d59c1146103175780636ddd17131461032d57005b8063105222f9116101a1578063105222f91461025857806317b24acb1461027857806318160ddd1461029857806323b872dd146102bb57005b806301339c21146101cd57806306fdde03146101e2578063095ea7b31461022857005b366101cb57005b005b3480156101d957600080fd5b506101cb6105e8565b3480156101ee57600080fd5b5060408051808201909152600b81526a5473756b616e6f6d69637360a81b60208201525b60405161021f9190611ba2565b60405180910390f35b34801561023457600080fd5b50610248610243366004611c15565b6107c2565b604051901515815260200161021f565b34801561026457600080fd5b506101cb610273366004611c70565b6107d9565b34801561028457600080fd5b506101cb610293366004611d47565b61084d565b3480156102a457600080fd5b506102ad6108ec565b60405190815260200161021f565b3480156102c757600080fd5b506102486102d6366004611d60565b61090e565b3480156102e757600080fd5b506040516012815260200161021f565b34801561030357600080fd5b506101cb610312366004611d47565b610977565b34801561032357600080fd5b506102ad60085481565b34801561033957600080fd5b506006546102489062010000900460ff1681565b34801561035957600080fd5b506102ad610368366004611da1565b6001600160a01b031660009081526002602052604090205490565b34801561038f57600080fd5b506101cb610a0e565b3480156103a457600080fd5b506101cb610a22565b3480156103b957600080fd5b506000546040516001600160a01b03909116815260200161021f565b3480156103e157600080fd5b50604080518082019091526007815266544e4f4d49435360c81b6020820152610212565b34801561041157600080fd5b506101cb610420366004611da1565b610a77565b34801561043157600080fd5b506101cb610440366004611da1565b610c5a565b34801561045157600080fd5b50600654610248906301000000900460ff1681565b34801561047257600080fd5b506101cb610481366004611dbe565b610d25565b34801561049257600080fd5b506102486104a1366004611c15565b610d4b565b3480156104b257600080fd5b506101cb6104c1366004611d47565b610d58565b3480156104d257600080fd5b506101cb6104e1366004611d47565b610e76565b3480156104f257600080fd5b506102ad60075481565b34801561050857600080fd5b506102ad610517366004611ddb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561054e57600080fd5b506102ad600a5481565b34801561056457600080fd5b506101cb610573366004611dbe565b610f16565b34801561058457600080fd5b506102ad60095481565b34801561059a57600080fd5b506101cb6105a9366004611da1565b610f3a565b3480156105ba57600080fd5b506101cb6105c9366004611c70565b610fb3565b3480156105da57600080fd5b506006546102489060ff1681565b6105f0611022565b60065460ff16156106485760405162461bcd60e51b815260206004820181905260248201527f544e4f4d4943533a2054726164696e6720697320616c7265616479206f70656e60448201526064015b60405180910390fd5b6001546001600160a01b031663f305d719473061067a816001600160a01b031660009081526002602052604090205490565b60008061068f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156106f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061071c9190611e14565b50506006805462ff0000191662010000179055506107626103e861075c600f6107476012600a611f3c565b6107569064e8d4a51000611f4b565b9061107c565b9061108f565b60075561077c6103e861075c600f6107476012600a611f3c565b6008556107966103e861075c600f6107476012600a611f3c565b6009556107b061271061075c60076107476012600a611f3c565b600d556006805460ff19166001179055565b60006107cf33848461109b565b5060015b92915050565b6107e1611022565b60005b825181101561084857816004600085848151811061080457610804611f62565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061084081611f78565b9150506107e4565b505050565b610855611022565b61086861271061075c60016107566108ec565b8110156108e75760405162461bcd60e51b815260206004820152604160248201527f544e4f4d4943533a204d61782073656c6c20616d6f756e742063616e6e6f742060448201527f6265206c6f776572207468616e20302e30312520746f74616c20737570706c796064820152601760f91b608482015260a40161063f565b600855565b60006108fa6012600a611f3c565b6109099064e8d4a51000611f4b565b905090565b600061091b8484846111d4565b61096d8433610968856040518060600160405280602a815260200161209e602a91396001600160a01b038a166000908152600360209081526040808320338452909152902054919061178a565b61109b565b5060019392505050565b61097f611022565b61099261271061075c60016107566108ec565b811015610a09576040805162461bcd60e51b81526020600482015260248101919091527f544e4f4d4943533a204d61782062757920616d6f756e742063616e6e6f74206260448201527f65206c6f776572207468616e20302e30312520746f74616c20737570706c792e606482015260840161063f565b600755565b610a16611022565b610a2060006117b6565b565b610a2a611022565b604051600090339047908381818185875af1925050503d8060008114610a6c576040519150601f19603f3d011682016040523d82523d6000602084013e610a71565b606091505b50505050565b610a7f611022565b306001600160a01b03821603610ad75760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604482015260640161063f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190611f91565b11610b7b5760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b604482015260640161063f565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190611f91565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108489190611faa565b610c62611022565b6011546001600160a01b0390811690821603610cd25760405162461bcd60e51b815260206004820152602960248201527f544e4f4d4943533a20666565436f6c6c6563746f72206164647265737320636160448201526806e6e6f7420626520360bc1b606482015260840161063f565b600e80546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b610d2d611022565b6006805491151563010000000263ff00000019909216919091179055565b60006107cf3384846111d4565b610d60611022565b610d74620186a061075c60016107566108ec565b811015610de95760405162461bcd60e51b815260206004820152603e60248201527f544e4f4d4943533a205377617020616d6f756e742063616e6e6f74206265206c60448201527f6f776572207468616e20302e3030312520746f74616c20737570706c792e0000606482015260840161063f565b610dfc6103e861075c60056107566108ec565b811115610e715760405162461bcd60e51b815260206004820152603d60248201527f544e4f4d4943533a205377617020616d6f756e742063616e6e6f74206265206860448201527f6967686572207468616e20302e352520746f74616c20737570706c792e000000606482015260840161063f565b600d55565b610e7e611022565b610e916103e861075c60016107566108ec565b811015610f115760405162461bcd60e51b815260206004820152604260248201527f544e4f4d4943533a204d61782077616c6c657420616d6f756e742063616e6e6f60448201527f74206265206c6f776572207468616e20302e312520746f74616c20737570706c6064820152613c9760f11b608482015260a40161063f565b600955565b610f1e611022565b60068054911515620100000262ff000019909216919091179055565b610f42611022565b6001600160a01b038116610fa75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161063f565b610fb0816117b6565b50565b610fbb611022565b60005b8251811015610848578160056000858481518110610fde57610fde611f62565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061101a81611f78565b915050610fbe565b6000546001600160a01b03163314610a205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063f565b60006110888284611f4b565b9392505050565b60006110888284611fc7565b6011546001600160a01b03908116908416036111085760405162461bcd60e51b815260206004820152602660248201527f544e4f4d4943533a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161063f565b6011546001600160a01b03908116908316036111725760405162461bcd60e51b8152602060048201526024808201527f544e4f4d4943533a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b606482015260840161063f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6011546001600160a01b03908116908416036112425760405162461bcd60e51b815260206004820152602760248201527f544e4f4d4943533a207472616e736665722066726f6d20746865207a65726f206044820152666164647265737360c81b606482015260840161063f565b6011546001600160a01b03908116908316036112ae5760405162461bcd60e51b815260206004820152602560248201527f544e4f4d4943533a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b606482015260840161063f565b600081116113195760405162461bcd60e51b815260206004820152603260248201527f544e4f4d4943533a205472616e7366657220616d6f756e74206d7573742062656044820152712067726561746572207468616e207a65726f60701b606482015260840161063f565b6001600061132f6000546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561135e57506000546001600160a01b03858116911614155b801561137857506011546001600160a01b03858116911614155b801561139257506010546001600160a01b03858116911614155b80156113a65750600654610100900460ff16155b156116585760065460ff1661144c576001600160a01b03851660009081526004602052604090205460ff16806113f457506001600160a01b03841660009081526004602052604090205460ff165b61144c5760405162461bcd60e51b8152602060048201526024808201527f544e4f4d4943533a2054726164696e67206973206e6f7420616c6c6f776564206044820152633cb2ba1760e11b606482015260840161063f565b600f546001600160a01b03868116911614801561147757506001546001600160a01b03858116911614155b801561149c57506001600160a01b03841660009081526005602052604090205460ff16155b15611598576007548311156115075760405162461bcd60e51b815260206004820152602b60248201527f544e4f4d4943533a205472616e7366657220616d6f756e74206578636565647360448201526a103a34329036bc213abc9760a91b606482015260840161063f565b6009548361152a866001600160a01b031660009081526002602052604090205490565b6115349190611fe9565b11156115985760405162461bcd60e51b815260206004820152602d60248201527f544e4f4d4943533a2045786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b606482015260840161063f565b600f546001600160a01b0385811691161480156115c357506001546001600160a01b03868116911614155b80156115e857506001600160a01b03851660009081526005602052604090205460ff16155b15611658576008548311156116545760405162461bcd60e51b815260206004820152602c60248201527f544e4f4d4943533a205472616e7366657220616d6f756e74206578636565647360448201526b103a34329036bc29b2b6361760a11b606482015260840161063f565b5060015b6001600160a01b03851660009081526004602052604090205460ff168061169757506001600160a01b03841660009081526004602052604090205460ff165b806116ac57506006546301000000900460ff16155b156116b657600091505b3060009081526002602052604081205490506000600d54821180156116d85750825b90508080156116ef575060065462010000900460ff165b80156117035750600654610100900460ff16155b801561172857506001600160a01b03871660009081526004602052604090205460ff16155b801561174d57506001600160a01b03861660009081526004602052604090205460ff16155b15611775576006805461ff001916610100179055611769611806565b6006805461ff00191690555b611781878787876118bb565b50505050505050565b600081848411156117ae5760405162461bcd60e51b815260040161063f9190611ba2565b505050900390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b30600090815260026020526040812054908115806118245750600c54155b1561182d575050565b600d5461183b906005611f4b565b82111561185357600d54611850906005611f4b565b91505b61185c826118f5565b6000600c819055600e546040516001600160a01b039091169147919081818185875af1925050503d80600081146118af576040519150601f19603f3d011682016040523d82523d6000602084013e6118b4565b606091505b5050505050565b806118cd576118c8611a4f565b6118da565b6118d78483611a68565b91505b6118e5848484611ae4565b80610a7157610a71600b54600a55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061192a5761192a611f62565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a79190611ffc565b816001815181106119ba576119ba611f62565b6001600160a01b0392831660209182029290920101526001546119e0913091168461109b565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a19908590600090869030904290600401612019565b600060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050505050565b600a54600003611a5b57565b600a8054600b5560009055565b6000806000600a541115611ac157611a90606461075c600a548661107c90919063ffffffff16565b600a54909150611aa08183611f4b565b611aaa9190611fc7565b600c6000828254611abb9190611fe9565b90915550505b8015611ad257611ad2843083611ae4565b611adc818461208a565b949350505050565b6001600160a01b038316600090815260026020526040902054611b079082611b8a565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611b369082611b96565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111c79085815260200190565b6000611088828461208a565b60006110888284611fe9565b600060208083528351808285015260005b81811015611bcf57858101830151858201604001528201611bb3565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610fb057600080fd5b8035611c1081611bf0565b919050565b60008060408385031215611c2857600080fd5b8235611c3381611bf0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114610fb057600080fd5b8035611c1081611c57565b60008060408385031215611c8357600080fd5b823567ffffffffffffffff80821115611c9b57600080fd5b818501915085601f830112611caf57600080fd5b8135602082821115611cc357611cc3611c41565b8160051b604051601f19603f83011681018181108682111715611ce857611ce8611c41565b604052928352818301935084810182019289841115611d0657600080fd5b948201945b83861015611d2b57611d1c86611c05565b85529482019493820193611d0b565b9650611d3a9050878201611c65565b9450505050509250929050565b600060208284031215611d5957600080fd5b5035919050565b600080600060608486031215611d7557600080fd5b8335611d8081611bf0565b92506020840135611d9081611bf0565b929592945050506040919091013590565b600060208284031215611db357600080fd5b813561108881611bf0565b600060208284031215611dd057600080fd5b813561108881611c57565b60008060408385031215611dee57600080fd5b8235611df981611bf0565b91506020830135611e0981611bf0565b809150509250929050565b600080600060608486031215611e2957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611e93578160001904821115611e7957611e79611e42565b80851615611e8657918102915b93841c9390800290611e5d565b509250929050565b600082611eaa575060016107d3565b81611eb7575060006107d3565b8160018114611ecd5760028114611ed757611ef3565b60019150506107d3565b60ff841115611ee857611ee8611e42565b50506001821b6107d3565b5060208310610133831016604e8410600b8410161715611f16575081810a6107d3565b611f208383611e58565b8060001904821115611f3457611f34611e42565b029392505050565b600061108860ff841683611e9b565b80820281158282048414176107d3576107d3611e42565b634e487b7160e01b600052603260045260246000fd5b600060018201611f8a57611f8a611e42565b5060010190565b600060208284031215611fa357600080fd5b5051919050565b600060208284031215611fbc57600080fd5b815161108881611c57565b600082611fe457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156107d3576107d3611e42565b60006020828403121561200e57600080fd5b815161108881611bf0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120695784516001600160a01b031683529383019391830191600101612044565b50506001600160a01b03969096166060850152505050608001529392505050565b818103818111156107d3576107d3611e4256fe544e4f4d4943533a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122013ded5c8605c514549c7fd29df7da4169f78e1c210ac67d28114f626b570558c64736f6c63430008110033

Deployed Bytecode Sourcemap

18987:10861:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25732:523;;;;;;;;;;;;;:::i;21152:83::-;;;;;;;;;;-1:-1:-1;21222:5:0;;;;;;;;;;;;-1:-1:-1;;;21222:5:0;;;;21152:83;;;;;;;:::i;:::-;;;;;;;;21990:161;;;;;;;;;;-1:-1:-1;21990:161:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;21990:161:0;1162:187:1;27697:185:0;;;;;;;;;;-1:-1:-1;27697:185:0;;;;;:::i;:::-;;:::i;26486:221::-;;;;;;;;;;-1:-1:-1;26486:221:0;;;;;:::i;:::-;;:::i;21429:100::-;;;;;;;;;;;;;:::i;:::-;;;3269:25:1;;;3257:2;3242:18;21429:100:0;3123:177:1;22159:315:0;;;;;;;;;;-1:-1:-1;22159:315:0;;;;;:::i;:::-;;:::i;21338:83::-;;;;;;;;;;-1:-1:-1;21338:83:0;;19672:2;3908:36:1;;3896:2;3881:18;21338:83:0;3766:184:1;26263:215:0;;;;;;;;;;-1:-1:-1;26263:215:0;;;;;:::i;:::-;;:::i;19794:36::-;;;;;;;;;;;;;;;;19456:31;;;;;;;;;;-1:-1:-1;19456:31:0;;;;;;;;;;;21537:119;;;;;;;;;;-1:-1:-1;21537:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;21630:18:0;21603:7;21630:18;;;:9;:18;;;;;;;21537:119;2776:103;;;;;;;;;;;;;:::i;29373:149::-;;;;;;;;;;;;;:::i;2128:87::-;;;;;;;;;;-1:-1:-1;2174:7:0;2201:6;2128:87;;-1:-1:-1;;;;;2201:6:0;;;4353:51:1;;4341:2;4326:18;2128:87:0;4207:203:1;21243:87:0;;;;;;;;;;-1:-1:-1;21315:7:0;;;;;;;;;;;;-1:-1:-1;;;21315:7:0;;;;21243:87;;29530:313;;;;;;;;;;-1:-1:-1;29530:313:0;;;;;:::i;:::-;;:::i;27351:338::-;;;;;;;;;;-1:-1:-1;27351:338:0;;;;;:::i;:::-;;:::i;19494:30::-;;;;;;;;;;-1:-1:-1;19494:30:0;;;;;;;;;;;22581:91;;;;;;;;;;-1:-1:-1;22581:91:0;;;;;:::i;:::-;;:::i;21664:167::-;;;;;;;;;;-1:-1:-1;21664:167:0;;;;;:::i;:::-;;:::i;26959:384::-;;;;;;;;;;-1:-1:-1;26959:384:0;;;;;:::i;:::-;;:::i;26719:228::-;;;;;;;;;;-1:-1:-1;26719:228:0;;;;;:::i;:::-;;:::i;19752:35::-;;;;;;;;;;;;;;;;21839:143;;;;;;;;;;-1:-1:-1;21839:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21947:18:0;;;21920:7;21947:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21839:143;19882:22;;;;;;;;;;;;;;;;22482:91;;;;;;;;;;-1:-1:-1;22482:91:0;;;;;:::i;:::-;;:::i;19837:38::-;;;;;;;;;;;;;;;;3034:201;;;;;;;;;;-1:-1:-1;3034:201:0;;;;;:::i;:::-;;:::i;27894:206::-;;;;;;;;;;-1:-1:-1;27894:206:0;;;;;:::i;:::-;;:::i;19397:23::-;;;;;;;;;;-1:-1:-1;19397:23:0;;;;;;;;25732:523;2014:13;:11;:13::i;:::-;25787:11:::1;::::0;::::1;;25786:12;25778:56;;;::::0;-1:-1:-1;;;25778:56:0;;5256:2:1;25778:56:0::1;::::0;::::1;5238:21:1::0;;;5275:18;;;5268:30;5334:34;5314:18;;;5307:62;5386:18;;25778:56:0::1;;;;;;;;;25845:16;::::0;-1:-1:-1;;;;;25845:16:0::1;:32;25885:21;25916:4;25922:24;25916:4:::0;-1:-1:-1;;;;;21630:18:0;21603:7;21630:18;;;:9;:18;;;;;;;21537:119;25922:24:::1;25947:1;25949::::0;25951:7:::1;2174::::0;2201:6;-1:-1:-1;;;;;2201:6:0;;2128:87;25951:7:::1;25845:130;::::0;::::1;::::0;;;-1:-1:-1;;;;;;25845:130:0;;;-1:-1:-1;;;;;5774:15:1;;;25845:130:0::1;::::0;::::1;5756:34:1::0;5806:18;;;5799:34;;;;5849:18;;;5842:34;;;;5892:18;;;5885:34;5956:15;;;5935:19;;;5928:44;25959:15:0::1;5988:19:1::0;;;5981:35;5690:19;;25845:130:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25986:11:0::1;:18:::0;;-1:-1:-1;;25986:18:0::1;::::0;::::1;::::0;;-1:-1:-1;26023:30:0::1;26048:4;26023:20;26040:2;19731:13;19672:2;19731;:13;:::i;:::-;19723:22;::::0;:4:::1;:22;:::i;:::-;26023:16:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;26015:5;:38:::0;26073:30:::1;26098:4;26073:20;26090:2;19731:13;19672:2;19731;:13;:::i;26073:30::-;26064:6;:39:::0;26125:30:::1;26150:4;26125:20;26142:2;19731:13;19672:2;19731;:13;:::i;26125:30::-;26114:8;:41:::0;26188:30:::1;26212:5;26188:19;26205:1;19731:13;19672:2;19731;:13;:::i;26188:30::-;26166:19;:52:::0;26229:11:::1;:18:::0;;-1:-1:-1;;26229:18:0::1;26243:4;26229:18;::::0;;25732:523::o;21990:161::-;22065:4;22082:39;818:10;22105:7;22114:6;22082:8;:39::i;:::-;-1:-1:-1;22139:4:0;21990:161;;;;;:::o;27697:185::-;2014:13;:11;:13::i;:::-;27797:6:::1;27792:82;27813:8;:15;27809:1;:19;27792:82;;;27870:4;27835:19;:32;27855:8;27864:1;27855:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27835:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27835:32:0;:39;;-1:-1:-1;;27835:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27830:3;::::1;::::0;::::1;:::i;:::-;;;;27792:82;;;;27697:185:::0;;:::o;26486:221::-;2014:13;:11;:13::i;:::-;26570:31:::1;26595:5;26570:20;26588:1;26570:13;:11;:13::i;:31::-;26558:7;:44;;26550:122;;;::::0;-1:-1:-1;;;26550:122:0;;8500:2:1;26550:122:0::1;::::0;::::1;8482:21:1::0;8539:2;8519:18;;;8512:30;8578:34;8558:18;;;8551:62;8649:34;8629:18;;;8622:62;-1:-1:-1;;;8700:19:1;;;8693:32;8742:19;;26550:122:0::1;8298:469:1::0;26550:122:0::1;26683:6;:16:::0;26486:221::o;21429:100::-;21482:7;19731:13;19672:2;19731;:13;:::i;:::-;19723:22;;:4;:22;:::i;:::-;21502:19;;21429:100;:::o;22159:315::-;22257:4;22274:36;22284:6;22292:9;22303:6;22274:9;:36::i;:::-;22321:123;22330:6;818:10;22352:91;22390:6;22352:91;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22352:19:0;;;;;;:11;:19;;;;;;;;818:10;22352:33;;;;;;;;;;:37;:91::i;:::-;22321:8;:123::i;:::-;-1:-1:-1;22462:4:0;22159:315;;;;;:::o;26263:215::-;2014:13;:11;:13::i;:::-;26344:31:::1;26369:5;26344:20;26362:1;26344:13;:11;:13::i;:31::-;26333:6;:43;;26325:120;;;::::0;;-1:-1:-1;;;26325:120:0;;8974:2:1;26325:120:0::1;::::0;::::1;8956:21:1::0;8993:18;;;8986:30;;;;9052:34;9032:18;;;9025:62;9123:34;9103:18;;;9096:62;9175:19;;26325:120:0::1;8772:428:1::0;26325:120:0::1;26456:5;:14:::0;26263:215::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;29373:149::-;2014:13;:11;:13::i;:::-;29456:58:::1;::::0;29420:12:::1;::::0;29464:10:::1;::::0;29488:21:::1;::::0;29420:12;29456:58;29420:12;29456:58;29488:21;29464:10;29456:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;29373:149:0:o;29530:313::-;2014:13;:11;:13::i;:::-;29614:4:::1;-1:-1:-1::0;;;;;29599:20:0;::::1;::::0;29591:59:::1;;;::::0;-1:-1:-1;;;29591:59:0;;9617:2:1;29591:59:0::1;::::0;::::1;9599:21:1::0;9656:2;9636:18;;;9629:30;9695:28;9675:18;;;9668:56;9741:18;;29591:59:0::1;9415:350:1::0;29591:59:0::1;29669:36;::::0;-1:-1:-1;;;29669:36:0;;29699:4:::1;29669:36;::::0;::::1;4353:51:1::0;29708:1:0::1;::::0;-1:-1:-1;;;;;29669:21:0;::::1;::::0;::::1;::::0;4326:18:1;;29669:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;29661:62;;;::::0;-1:-1:-1;;;29661:62:0;;10161:2:1;29661:62:0::1;::::0;::::1;10143:21:1::0;10200:1;10180:18;;;10173:29;-1:-1:-1;;;10218:18:1;;;10211:39;10267:18;;29661:62:0::1;9959:332:1::0;29661:62:0::1;29748:36;::::0;-1:-1:-1;;;29748:36:0;;29778:4:::1;29748:36;::::0;::::1;4353:51:1::0;29734:11:0::1;::::0;-1:-1:-1;;;;;29748:21:0;::::1;::::0;::::1;::::0;4326:18:1;;29748:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29795:40;::::0;-1:-1:-1;;;29795:40:0;;29816:10:::1;29795:40;::::0;::::1;10470:51:1::0;10537:18;;;10530:34;;;29734:50:0;;-1:-1:-1;;;;;;29795:20:0;::::1;::::0;::::1;::::0;10443:18:1;;29795:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27351:338::-:0;2014:13;:11;:13::i;:::-;27458:4:::1;::::0;-1:-1:-1;;;;;27458:4:0;;::::1;27438:24:::0;;::::1;::::0;27430:78:::1;;;::::0;-1:-1:-1;;;27430:78:0;;11027:2:1;27430:78:0::1;::::0;::::1;11009:21:1::0;11066:2;11046:18;;;11039:30;11105:34;11085:18;;;11078:62;-1:-1:-1;;;11156:18:1;;;11149:39;11205:19;;27430:78:0::1;10825:405:1::0;27430:78:0::1;27519:12;:40:::0;;-1:-1:-1;;;;;27519:40:0;;::::1;-1:-1:-1::0;;;;;;27519:40:0;;::::1;::::0;::::1;::::0;;:12:::1;27570:37:::0;;;:19:::1;:37;::::0;;;;;;;:44;;-1:-1:-1;;27570:44:0;;::::1;27519:40:::0;27570:44;;::::1;::::0;;;27625:31:::1;:49:::0;;;;;:56;;;;::::1;::::0;;::::1;::::0;;27351:338::o;22581:91::-;2014:13;:11;:13::i;:::-;22645:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22645:19:0;;::::1;::::0;;;::::1;::::0;;22581:91::o;21664:167::-;21742:4;21759:42;818:10;21783:9;21794:6;21759:9;:42::i;26959:384::-;2014:13;:11;:13::i;:::-;27061:32:::1;27086:6;27061:20;27079:1;27061:13;:11;:13::i;:32::-;27046:10;:48;;27038:123;;;::::0;-1:-1:-1;;;27038:123:0;;11437:2:1;27038:123:0::1;::::0;::::1;11419:21:1::0;11476:2;11456:18;;;11449:30;11515:34;11495:18;;;11488:62;11586:32;11566:18;;;11559:60;11636:19;;27038:123:0::1;11235:426:1::0;27038:123:0::1;27195:30;27220:4;27195:20;27213:1;27195:13;:11;:13::i;:30::-;27180:10;:46;;27172:120;;;::::0;-1:-1:-1;;;27172:120:0;;11868:2:1;27172:120:0::1;::::0;::::1;11850:21:1::0;11907:2;11887:18;;;11880:30;11946:34;11926:18;;;11919:62;12017:31;11997:18;;;11990:59;12066:19;;27172:120:0::1;11666:425:1::0;27172:120:0::1;27303:19;:32:::0;26959:384::o;26719:228::-;2014:13;:11;:13::i;:::-;26807:30:::1;26832:4;26807:20;26825:1;26807:13;:11;:13::i;:30::-;26794:8;:44;;26786:123;;;::::0;-1:-1:-1;;;26786:123:0;;12298:2:1;26786:123:0::1;::::0;::::1;12280:21:1::0;12337:2;12317:18;;;12310:30;12376:34;12356:18;;;12349:62;12447:34;12427:18;;;12420:62;-1:-1:-1;;;12498:19:1;;;12491:33;12541:19;;26786:123:0::1;12096:470:1::0;26786:123:0::1;26920:8;:19:::0;26719:228::o;22482:91::-;2014:13;:11;:13::i;:::-;22546:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22546:19:0;;::::1;::::0;;;::::1;::::0;;22482:91::o;3034:201::-;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;3123:22:0;::::1;3115:73;;;::::0;-1:-1:-1;;;3115:73:0;;12773:2:1;3115:73:0::1;::::0;::::1;12755:21:1::0;12812:2;12792:18;;;12785:30;12851:34;12831:18;;;12824:62;-1:-1:-1;;;12902:18:1;;;12895:36;12948:19;;3115:73:0::1;12571:402:1::0;3115:73:0::1;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;27894:206::-;2014:13;:11;:13::i;:::-;28003:6:::1;27998:94;28019:8;:15;28015:1;:19;27998:94;;;28088:4;28041:31;:44;28073:8;28082:1;28073:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;28041:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;28041:44:0;:51;;-1:-1:-1;;28041:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28036:3;::::1;::::0;::::1;:::i;:::-;;;;27998:94;;2293:132:::0;2174:7;2201:6;-1:-1:-1;;;;;2201:6:0;818:10;2357:23;2349:68;;;;-1:-1:-1;;;2349:68:0;;13180:2:1;2349:68:0;;;13162:21:1;;;13199:18;;;13192:30;13258:34;13238:18;;;13231:62;13310:18;;2349:68:0;12978:356:1;9963:98:0;10021:7;10048:5;10052:1;10048;:5;:::i;:::-;10041:12;9963:98;-1:-1:-1;;;9963:98:0:o;10362:::-;10420:7;10447:5;10451:1;10447;:5;:::i;22680:327::-;22782:4;;-1:-1:-1;;;;;22782:4:0;;;22773:13;;;;22765:64;;;;-1:-1:-1;;;22765:64:0;;13763:2:1;22765:64:0;;;13745:21:1;13802:2;13782:18;;;13775:30;13841:34;13821:18;;;13814:62;-1:-1:-1;;;13892:18:1;;;13885:36;13938:19;;22765:64:0;13561:402:1;22765:64:0;22859:4;;-1:-1:-1;;;;;22859:4:0;;;22848:15;;;;22840:64;;;;-1:-1:-1;;;22840:64:0;;14170:2:1;22840:64:0;;;14152:21:1;14209:2;14189:18;;;14182:30;14248:34;14228:18;;;14221:62;-1:-1:-1;;;14299:18:1;;;14292:34;14343:19;;22840:64:0;13968:400:1;22840:64:0;-1:-1:-1;;;;;22915:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22967:32;;3269:25:1;;;22967:32:0;;3242:18:1;22967:32:0;;;;;;;;22680:327;;;:::o;23015:1739::-;23111:4;;-1:-1:-1;;;;;23111:4:0;;;23103:12;;;;23095:64;;;;-1:-1:-1;;;23095:64:0;;14575:2:1;23095:64:0;;;14557:21:1;14614:2;14594:18;;;14587:30;14653:34;14633:18;;;14626:62;-1:-1:-1;;;14704:18:1;;;14697:37;14751:19;;23095:64:0;14373:403:1;23095:64:0;23184:4;;-1:-1:-1;;;;;23184:4:0;;;23178:10;;;;23170:60;;;;-1:-1:-1;;;23170:60:0;;14983:2:1;23170:60:0;;;14965:21:1;15022:2;15002:18;;;14995:30;15061:34;15041:18;;;15034:62;-1:-1:-1;;;15112:18:1;;;15105:35;15157:19;;23170:60:0;14781:401:1;23170:60:0;23258:1;23249:6;:10;23241:73;;;;-1:-1:-1;;;23241:73:0;;15389:2:1;23241:73:0;;;15371:21:1;15428:2;15408:18;;;15401:30;15467:34;15447:18;;;15440:62;-1:-1:-1;;;15518:18:1;;;15511:48;15576:19;;23241:73:0;15187:414:1;23241:73:0;23340:4;23325:12;23401:7;2174;2201:6;-1:-1:-1;;;;;2201:6:0;;2128:87;23401:7;-1:-1:-1;;;;;23393:15:0;:4;-1:-1:-1;;;;;23393:15:0;;;:32;;;;-1:-1:-1;2174:7:0;2201:6;-1:-1:-1;;;;;23412:13:0;;;2201:6;;23412:13;;23393:32;:46;;;;-1:-1:-1;23435:4:0;;-1:-1:-1;;;;;23429:10:0;;;23435:4;;23429:10;;23393:46;:60;;;;-1:-1:-1;23449:4:0;;-1:-1:-1;;;;;23443:10:0;;;23449:4;;23443:10;;23393:60;:74;;;;-1:-1:-1;23458:9:0;;;;;;;23457:10;23393:74;23389:838;;;23488:11;;;;23484:118;;-1:-1:-1;;;;;23509:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23538:23:0;;;;;;:19;:23;;;;;;;;23509:52;23501:101;;;;-1:-1:-1;;;23501:101:0;;15808:2:1;23501:101:0;;;15790:21:1;15847:2;15827:18;;;15820:30;15886:34;15866:18;;;15859:62;-1:-1:-1;;;15937:18:1;;;15930:34;15981:19;;23501:101:0;15606:400:1;23501:101:0;23631:14;;-1:-1:-1;;;;;23623:22:0;;;23631:14;;23623:22;:57;;;;-1:-1:-1;23663:16:0;;-1:-1:-1;;;;;23649:31:0;;;23663:16;;23649:31;;23623:57;:97;;;;-1:-1:-1;;;;;;23685:35:0;;;;;;:31;:35;;;;;;;;23684:36;23623:97;23619:320;;;23759:5;;23749:6;:15;;23741:71;;;;-1:-1:-1;;;23741:71:0;;16213:2:1;23741:71:0;;;16195:21:1;16252:2;16232:18;;;16225:30;16291:34;16271:18;;;16264:62;-1:-1:-1;;;16342:18:1;;;16335:41;16393:19;;23741:71:0;16011:407:1;23741:71:0;23865:8;;23855:6;23839:13;23849:2;-1:-1:-1;;;;;21630:18:0;21603:7;21630:18;;;:9;:18;;;;;;;21537:119;23839:13;:22;;;;:::i;:::-;:34;;23831:92;;;;-1:-1:-1;;;23831:92:0;;16755:2:1;23831:92:0;;;16737:21:1;16794:2;16774:18;;;16767:30;16833:34;16813:18;;;16806:62;-1:-1:-1;;;16884:18:1;;;16877:43;16937:19;;23831:92:0;16553:409:1;23831:92:0;23977:14;;-1:-1:-1;;;;;23971:20:0;;;23977:14;;23971:20;:57;;;;-1:-1:-1;24011:16:0;;-1:-1:-1;;;;;23995:33:0;;;24011:16;;23995:33;;23971:57;:99;;;;-1:-1:-1;;;;;;24033:37:0;;;;;;:31;:37;;;;;;;;24032:38;23971:99;23967:249;;;24109:6;;24099;:16;;24091:73;;;;-1:-1:-1;;;24091:73:0;;17169:2:1;24091:73:0;;;17151:21:1;17208:2;17188:18;;;17181:30;17247:34;17227:18;;;17220:62;-1:-1:-1;;;17298:18:1;;;17291:42;17350:19;;24091:73:0;16967:408:1;24091:73:0;-1:-1:-1;24196:4:0;23967:249;-1:-1:-1;;;;;24242:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24271:23:0;;;;;;:19;:23;;;;;;;;24242:52;:68;;;-1:-1:-1;24299:11:0;;;;;;;24298:12;24242:68;24239:88;;;24322:5;24312:15;;24239:88;24389:4;24340:28;21630:18;;;:9;:18;;;;;;24340:55;;24406:12;24445:19;;24422:20;:42;24421:58;;;;;24469:10;24421:58;24406:73;;24496:7;:22;;;;-1:-1:-1;24507:11:0;;;;;;;24496:22;:36;;;;-1:-1:-1;24523:9:0;;;;;;;24522:10;24496:36;:66;;;;-1:-1:-1;;;;;;24537:25:0;;;;;;:19;:25;;;;;;;;24536:26;24496:66;:94;;;;-1:-1:-1;;;;;;24567:23:0;;;;;;:19;:23;;;;;;;;24566:24;24496:94;24492:201;;;24607:9;:16;;-1:-1:-1;;24607:16:0;;;;;24638:11;:9;:11::i;:::-;24664:9;:17;;-1:-1:-1;;24664:17:0;;;24492:201;24705:41;24720:4;24726:2;24730:6;24738:7;24705:14;:41::i;:::-;23084:1670;;;;23015:1739;;;:::o;11504:240::-;11624:7;11685:12;11677:6;;;;11669:29;;;;-1:-1:-1;;;11669:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11720:5:0;;;11504:240::o;3395:191::-;3469:16;3488:6;;-1:-1:-1;;;;;3505:17:0;;;-1:-1:-1;;;;;;3505:17:0;;;;;;3538:40;;3488:6;;;;;;;3538:40;;3469:16;3538:40;3458:128;3395:191;:::o;24762:476::-;24846:4;24802:23;21630:18;;;:9;:18;;;;;;;24900:20;;;:42;;-1:-1:-1;24924:13:0;;:18;24900:42;24896:55;;;24944:7;;24762:476::o;24896:55::-;24985:19;;:23;;25007:1;24985:23;:::i;:::-;24967:15;:41;24963:88;;;25028:19;;:23;;25050:1;25028:23;:::i;:::-;25010:41;;24963:88;25064:33;25081:15;25064:16;:33::i;:::-;25135:1;25119:13;:17;;;25178:12;;25170:60;;-1:-1:-1;;;;;25178:12:0;;;;25204:21;;25170:60;;25135:1;25170:60;25204:21;25178:12;25170:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24762:476:0:o;28324:301::-;28437:7;28432:78;;28446:14;:12;:14::i;:::-;28432:78;;;28485:25;28495:6;28503;28485:9;:25::i;:::-;28476:34;;28432:78;28523:44;28541:6;28549:9;28560:6;28523:17;:44::i;:::-;28593:7;28588:29;;28602:15;28288:12;;28282:3;:18;28238:70;25246:474;25336:16;;;25350:1;25336:16;;;;;;;;25312:21;;25336:16;;;;;;;;;;-1:-1:-1;25336:16:0;25312:40;;25381:4;25363;25368:1;25363:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25363:23:0;;;:7;;;;;;;;;;:23;;;;25407:16;;:23;;;-1:-1:-1;;;25407:23:0;;;;:16;;;;;:21;;:23;;;;;25363:7;;25407:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25397:4;25402:1;25397:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25397:33:0;;;:7;;;;;;;;;:33;25473:16;;25441:63;;25458:4;;25473:16;25492:11;25441:8;:63::i;:::-;25515:16;;:197;;-1:-1:-1;;;25515:197:0;;-1:-1:-1;;;;;25515:16:0;;;;:67;;:197;;25597:11;;25515:16;;25639:4;;25666;;25686:15;;25515:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25301:419;25246:474;:::o;28108:118::-;28155:3;;28162:1;28155:8;28151:21;;28108:118::o;28151:21::-;28197:3;;;28182:12;:18;-1:-1:-1;28211:7:0;;28108:118::o;28916:376::-;28984:7;29012:12;29045:1;29039:3;;:7;29035:119;;;29070:24;29090:3;29070:15;29081:3;;29070:6;:10;;:15;;;;:::i;:24::-;29139:3;;29063:31;;-1:-1:-1;29126:10:0;29139:3;29063:31;29126:10;:::i;:::-;:16;;;;:::i;:::-;29109:13;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;29035:119:0;29182:8;;29178:60;;29192:46;29210:6;29226:4;29233;29192:17;:46::i;:::-;29270:14;29280:4;29270:14;;:::i;:::-;;28916:376;-1:-1:-1;;;;28916:376:0:o;28633:275::-;-1:-1:-1;;;;;28751:17:0;;;;;;:9;:17;;;;;;:30;;28773:7;28751:21;:30::i;:::-;-1:-1:-1;;;;;28731:17:0;;;;;;;:9;:17;;;;;;:50;;;;28815:20;;;;;;;:33;;28840:7;28815:24;:33::i;:::-;-1:-1:-1;;;;;28792:20:0;;;;;;;:9;:20;;;;;;;:56;;;;28864:36;;;;;;;;;;28892:7;3269:25:1;;3257:2;3242:18;;3123:177;9606:98:0;9664:7;9691:5;9695:1;9691;:5;:::i;9225:98::-;9283:7;9310:5;9314:1;9310;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1354:127::-;1415:10;1410:3;1406:20;1403:1;1396:31;1446:4;1443:1;1436:15;1470:4;1467:1;1460:15;1486:118;1572:5;1565:13;1558:21;1551:5;1548:32;1538:60;;1594:1;1591;1584:12;1609:128;1674:20;;1703:28;1674:20;1703:28;:::i;1742:1191::-;1832:6;1840;1893:2;1881:9;1872:7;1868:23;1864:32;1861:52;;;1909:1;1906;1899:12;1861:52;1949:9;1936:23;1978:18;2019:2;2011:6;2008:14;2005:34;;;2035:1;2032;2025:12;2005:34;2073:6;2062:9;2058:22;2048:32;;2118:7;2111:4;2107:2;2103:13;2099:27;2089:55;;2140:1;2137;2130:12;2089:55;2176:2;2163:16;2198:4;2221:2;2217;2214:10;2211:36;;;2227:18;;:::i;:::-;2273:2;2270:1;2266:10;2305:2;2299:9;2368:2;2364:7;2359:2;2355;2351:11;2347:25;2339:6;2335:38;2423:6;2411:10;2408:22;2403:2;2391:10;2388:18;2385:46;2382:72;;;2434:18;;:::i;:::-;2470:2;2463:22;2520:18;;;2554:15;;;;-1:-1:-1;2596:11:1;;;2592:20;;;2624:19;;;2621:39;;;2656:1;2653;2646:12;2621:39;2680:11;;;;2700:148;2716:6;2711:3;2708:15;2700:148;;;2782:23;2801:3;2782:23;:::i;:::-;2770:36;;2733:12;;;;2826;;;;2700:148;;;2867:6;-1:-1:-1;2892:35:1;;-1:-1:-1;2908:18:1;;;2892:35;:::i;:::-;2882:45;;;;;;1742:1191;;;;;:::o;2938:180::-;2997:6;3050:2;3038:9;3029:7;3025:23;3021:32;3018:52;;;3066:1;3063;3056:12;3018:52;-1:-1:-1;3089:23:1;;2938:180;-1:-1:-1;2938:180:1:o;3305:456::-;3382:6;3390;3398;3451:2;3439:9;3430:7;3426:23;3422:32;3419:52;;;3467:1;3464;3457:12;3419:52;3506:9;3493:23;3525:31;3550:5;3525:31;:::i;:::-;3575:5;-1:-1:-1;3632:2:1;3617:18;;3604:32;3645:33;3604:32;3645:33;:::i;:::-;3305:456;;3697:7;;-1:-1:-1;;;3751:2:1;3736:18;;;;3723:32;;3305:456::o;3955:247::-;4014:6;4067:2;4055:9;4046:7;4042:23;4038:32;4035:52;;;4083:1;4080;4073:12;4035:52;4122:9;4109:23;4141:31;4166:5;4141:31;:::i;4415:241::-;4471:6;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;4579:9;4566:23;4598:28;4620:5;4598:28;:::i;4661:388::-;4729:6;4737;4790:2;4778:9;4769:7;4765:23;4761:32;4758:52;;;4806:1;4803;4796:12;4758:52;4845:9;4832:23;4864:31;4889:5;4864:31;:::i;:::-;4914:5;-1:-1:-1;4971:2:1;4956:18;;4943:32;4984:33;4943:32;4984:33;:::i;:::-;5036:7;5026:17;;;4661:388;;;;;:::o;6027:306::-;6115:6;6123;6131;6184:2;6172:9;6163:7;6159:23;6155:32;6152:52;;;6200:1;6197;6190:12;6152:52;6229:9;6223:16;6213:26;;6279:2;6268:9;6264:18;6258:25;6248:35;;6323:2;6312:9;6308:18;6302:25;6292:35;;6027:306;;;;;:::o;6338:127::-;6399:10;6394:3;6390:20;6387:1;6380:31;6430:4;6427:1;6420:15;6454:4;6451:1;6444:15;6470:422;6559:1;6602:5;6559:1;6616:270;6637:7;6627:8;6624:21;6616:270;;;6696:4;6692:1;6688:6;6684:17;6678:4;6675:27;6672:53;;;6705:18;;:::i;:::-;6755:7;6745:8;6741:22;6738:55;;;6775:16;;;;6738:55;6854:22;;;;6814:15;;;;6616:270;;;6620:3;6470:422;;;;;:::o;6897:806::-;6946:5;6976:8;6966:80;;-1:-1:-1;7017:1:1;7031:5;;6966:80;7065:4;7055:76;;-1:-1:-1;7102:1:1;7116:5;;7055:76;7147:4;7165:1;7160:59;;;;7233:1;7228:130;;;;7140:218;;7160:59;7190:1;7181:10;;7204:5;;;7228:130;7265:3;7255:8;7252:17;7249:43;;;7272:18;;:::i;:::-;-1:-1:-1;;7328:1:1;7314:16;;7343:5;;7140:218;;7442:2;7432:8;7429:16;7423:3;7417:4;7414:13;7410:36;7404:2;7394:8;7391:16;7386:2;7380:4;7377:12;7373:35;7370:77;7367:159;;;-1:-1:-1;7479:19:1;;;7511:5;;7367:159;7558:34;7583:8;7577:4;7558:34;:::i;:::-;7628:6;7624:1;7620:6;7616:19;7607:7;7604:32;7601:58;;;7639:18;;:::i;:::-;7677:20;;6897:806;-1:-1:-1;;;6897:806:1:o;7708:140::-;7766:5;7795:47;7836:4;7826:8;7822:19;7816:4;7795:47;:::i;7853:168::-;7926:9;;;7957;;7974:15;;;7968:22;;7954:37;7944:71;;7995:18;;:::i;8026:127::-;8087:10;8082:3;8078:20;8075:1;8068:31;8118:4;8115:1;8108:15;8142:4;8139:1;8132:15;8158:135;8197:3;8218:17;;;8215:43;;8238:18;;:::i;:::-;-1:-1:-1;8285:1:1;8274:13;;8158:135::o;9770:184::-;9840:6;9893:2;9881:9;9872:7;9868:23;9864:32;9861:52;;;9909:1;9906;9899:12;9861:52;-1:-1:-1;9932:16:1;;9770:184;-1:-1:-1;9770:184:1:o;10575:245::-;10642:6;10695:2;10683:9;10674:7;10670:23;10666:32;10663:52;;;10711:1;10708;10701:12;10663:52;10743:9;10737:16;10762:28;10784:5;10762:28;:::i;13339:217::-;13379:1;13405;13395:132;;13449:10;13444:3;13440:20;13437:1;13430:31;13484:4;13481:1;13474:15;13512:4;13509:1;13502:15;13395:132;-1:-1:-1;13541:9:1;;13339:217::o;16423:125::-;16488:9;;;16509:10;;;16506:36;;;16522:18;;:::i;17380:251::-;17450:6;17503:2;17491:9;17482:7;17478:23;17474:32;17471:52;;;17519:1;17516;17509:12;17471:52;17551:9;17545:16;17570:31;17595:5;17570:31;:::i;17636:980::-;17898:4;17946:3;17935:9;17931:19;17977:6;17966:9;17959:25;18003:2;18041:6;18036:2;18025:9;18021:18;18014:34;18084:3;18079:2;18068:9;18064:18;18057:31;18108:6;18143;18137:13;18174:6;18166;18159:22;18212:3;18201:9;18197:19;18190:26;;18251:2;18243:6;18239:15;18225:29;;18272:1;18282:195;18296:6;18293:1;18290:13;18282:195;;;18361:13;;-1:-1:-1;;;;;18357:39:1;18345:52;;18452:15;;;;18417:12;;;;18393:1;18311:9;18282:195;;;-1:-1:-1;;;;;;;18533:32:1;;;;18528:2;18513:18;;18506:60;-1:-1:-1;;;18597:3:1;18582:19;18575:35;18494:3;17636:980;-1:-1:-1;;;17636:980:1:o;18621:128::-;18688:9;;;18709:11;;;18706:37;;;18723:18;;:::i

Swarm Source

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