ETH Price: $3,452.40 (+1.11%)
Gas: 16 Gwei

Token

Jailcoin (JLC)
 

Overview

Max Total Supply

100,000,000,000 JLC

Holders

170

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
100,000,000 JLC

Value
$0.00
0xfd336a0b6252d59869e4553be956a0c9b7a641ca
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:
Jailcoin

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-26
*/

pragma solidity ^0.8.0;
// SPDX-License-Identifier: MIT


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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


/**
 * @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;
    }
}



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

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

    uint256 internal _totalSupply;

    string internal _name;
    string internal _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}

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

/**
 * @dev This interface declares a function for retrieving the pair address for two tokens 
 * in a Decentralized Exchange such as Uniswap.
 */
interface ISwapFactory {
    function getPair(address token0,address token1) external view returns(address);
}

/**
 * @title Jailcoin
 * @dev Jailcoin is a custom ERC20 token that introduces a unique transaction mechanism limiting the frequency and amount of transactions for each user.
 * This mechanism works on the basis of a user's transaction history, incrementing a counter and updating their last transaction time with every trade.
 * Frequency of user transactions is managed by controlling the number of transactions they can make within a specified time interval. Any excess transactions attempted within this interval are rejected by the contract.
 * In addition, Jailcoin has a distribution mechanism for crowdfunding participants, allotting a specified amount of tokens to their addresses at the time of token minting.
 * Lastly, Jailcoin also incorporates a liquidity pool mechanism, reducing the sale waiting time when a buy exceeds holdings.
 */
contract Jailcoin is ERC20 {

    // Transaction interval in hours
    uint256 public baseDuration = 3 hours;

    // Amount allocated for each crowdfunding contribution
    uint256 public amountPerCrowdfund = 100 * 10 ** 6 * 10 ** 18;

    // Counter to track the transaction intervals for each address
    mapping(address => uint256) public userCounter;

    // Tracks the last sale time of each user
    mapping(address => uint256) public userLastSaleTime;

    // Owner of the contract
    address public owner;

    // Addresses for crowdfund participants to distribute tokens
    address[300] recipients;

    // Flag to enable or disable swap
    bool public isSwapAvailable;

    // Ethereum Network addresses for main network
    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    ISwapFactory public constant uniSwapFactory = ISwapFactory(address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f));

    // Modifier to check if the caller of a function is the owner of the contract
    modifier onlyOwner() {
        require(owner == msg.sender, "ERC20: Operation allowed for owner only.");
        _;
    }

    // Constructor function to initialize the contract, mint tokens and distribute tokens to crowdfunding participants
    constructor() ERC20("Jailcoin", "JLC") {
        owner = msg.sender;
        _mint(owner, 68 * 10**9 * 10**18);
        _mint(owner, 2 * 10 **9 * 10**18);
        _distributeCrowdfunding();
    }

    // Overriding the transfer function from the ERC20 contract
    function transfer(address recipient, uint256 amount)
    public
    override
    returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    // Overriding the transferFrom function from the ERC20 contract
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _spendAllowance(sender, msg.sender, amount);
        return true;
    }
    
    // Internal function to check if a given address is owner or swap pair
    function _isPairOrOwner(address targetAddress) internal view returns(bool res) {
        res = targetAddress == owner || targetAddress == uniSwapFactory.getPair(address(this), WETH);
    }
    // Internal transfer function with safety checks and custom logic
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override  {
        bool isPairOrOwner = _isPairOrOwner(from);
		require(from != address(0), "ERC20: Sender address cannot be zero");
		require(to != address(0), "ERC20: Recipient address cannot be zero");
		require(amount > 0, "ERC20: Transfer amount should be more than zero");
		require(isPairOrOwner || isSwapAvailable, "ERC20: Liquidity has not been established yet");
		require(_balances[from] >= amount, "ERC20: Sender does not have enough balance");
        
        uint256 realAmount = amount;

        // Enable swap if a pair or owner is making the transaction
        if(isPairOrOwner && !isSwapAvailable){
            isSwapAvailable = true;
        }

        // Enforce selling time restrictions
        bool isSaleTimeAvailable = block.timestamp >= userLastSaleTime[from] + userCounter[from] * baseDuration;
        require(isSaleTimeAvailable || isPairOrOwner, "ERC20: Sale time not met or unauthorized address.");

        // Limit the amount that can be transferred by non-owners
        if (!isPairOrOwner && amount > _balances[from] / 2) {
            realAmount = _balances[from] / 2;
        }

        // Check if the address is buying and adjust userCounter
        if (isSwapPair(from) && amount >= _balances[to]) {
            if (userCounter[to] > 0) {
                userCounter[to] -= 1;
            }
        }

        // Update user transaction count and last sale time
        userCounter[from] += 1;
        userLastSaleTime[from] = block.timestamp;

        // Execute transfer and emit event
        _balances[from] -= realAmount;
        _balances[to] += realAmount;
        emit Transfer(from, to, realAmount);
    }

    // Check if the address is a swap pair
    function isSwapPair(address pair) internal view returns(bool){
        return uniSwapFactory.getPair(address(this), WETH) == pair;
    }

    // Fetch user information regarding last sale time and transaction count
    function userInfo(address account) external view returns(bool status_, uint256 userLastSaleTime_, uint256 userCount_){
        uint256 _userLastSaleTime = userLastSaleTime[account] + userCounter[account] * baseDuration;
        status_ = _userLastSaleTime < block.timestamp;
        userLastSaleTime_ = status_ ? 0 : _userLastSaleTime - block.timestamp;
        userCount_ = userCounter[account];
    }

    // Function to distribute tokens among the crowdfunding participants
    function _distributeCrowdfunding() private {
        recipients = [
			0x28C1D928Ae30A9f65709A2A80e8A8ab74c6FED11,
            0xbD0Fa838F505979Ab6683104d24F20040B5C3B8A,
            0x71AAc5eaBABD68C9b7BC64EcA061526134a72bEA,
            0x96fe8b63F949C2fFEC0E9DBB488E76646e07926b,
            0xb06B2454Db4e0A78FAB807E794CB9bEBEE4EAe43,
            0x229BED80d0bbD244D53E25904F56a45EA5De44F0,
            0x4B87823187FEDF8bCF5DE8261FB5d98935B614Ce,
            0x56D142995e07773ec548B7Cc43502A0391B4b0EE,
            0x8680aF8e5c820B8B538A752A4d37e65fe78b0278,
            0x142Dd2350BB82D7F663Fa6776163C8170B2c743A,
            0xcBEe5F5E7530402d3BA87af9dD8424dF48409fdc,
            0x2E826883f8736c96432B0b2cb20ef536dd946C6c,
            0x433929CE2bfeeA4A89E88B843DFC93335D01cbDf,
            0x6F5bA9f815759DC36b474Efb4c5890EeD0E1eC55,
            0x5bBD9D184F9Ad2b6472dbb6CbaF4B0de897695AF,
            0xCDA321Cfa32b646F11B9744615c6ee2Fd7d31A69,
            0x1579Db0AF58e3573b4eC0470cEb44101ef9f4891,
            0x689681d6243f580077DE6b7bFaBF77664D75F86b,
            0x711A9328ff1B1e3EE6cb282F0a58e52CC2570128,
            0xD0102e2dA388bc260aC77b786fB7B86C4340e2c2,
            0xe2E369B57c0425b9658D137Ead5406BBE1540FB4,
            0x2C64a2F846CffF94F5Fc01C824F40Cb7E236649a,
            0xAE9Ec9C235d9e5e03eD7d6007dE85171f67Fbb2B,
            0x80F79A0AfD71B3fc16F35A6503fb83655A44F875,
            0x6e6E0878A0464BFBeCC024960E56056f17f0AC19,
            0xf3306c9025Bc74829A66f3D4035Ee4C8A12C1F42,
            0x9e84585FFfd48e2da3aa081ee7158F0cf1694299,
            0xC206836E11E4adb07a9408Fa9017ee825e772f92,
            0x68D35Cd19D364029C01369897D80ab33b30b49ed,
            0x7ED1E4bFE2f85cC5b3C9fd885147cB8F3bC2F2e5,
            0xB2c38AB5709d2b089ceDb6BEc0f958c8Bc6aB953,
            0x740483418dcd3c9F842b14FFCEf40c6a792d42C1,
            0x64D4310EA8f99DD83a72E1653A534149D6ef5c95,
            0x99d1680fF35Fb0BA4116Ef5636D820E3C52c0959,
            0x302288D644CA3147030e161d129D51B86E0B60Ed,
            0xd5c6a4b8b015DD81016C4f13F3499e20CE74292E,
            0x2cc835e706e173663a6fF043DBe857469ca0816A,
            0x79485251c5B0Ea3E5437CaFBd6c9a86022c7fC8f,
            0x50B6a16494FdbEb00d4cBf81Ab3B3696C8E187D7,
            0xC5cD7626816F3E4F0E160440F661C715a24B2BFf,
            0xED7d99ae6f2a8a58c6c460cE9ac5f603102C42bD,
            0x59aa3173da57F6A73B7a2178982F28281F4c912E,
            0x4f7c84EC5e2C65633E793D09FA455a27B4d8cD67,
            0x2041A12B27f7155F2a1B0c9Fbc9F5CFBFF8309C9,
            0x9747b852Bd44B020693CCC8bA8b50FB8862440c6,
            0xa8AB946CA7bf677dC91f69B402539e3bF4B8898e,
            0x4E97741D704128e53f75Df79D6e893037a51C112,
            0x87d56dBa0a82Dea88F8CF723fB6aA868Bd2cf130,
            0x7d882a29D24108B978525fdA2E6d2CA058919831,
            0x62f609D184C31083d143Cea86e65dFD9c69526e0,
            0x850027F0bEa668601C96FE79F0Df2dc0AeD20b9E,
            0x875ff39bE5446376c7b913c80a05450a4830CB5e,
            0x3f2855e64069228964CB3a523655cc81d64997fd,
            0x7c2fd31D34bD25C46Fe1b0B13C7d556Cbca10D4D,
            0x1Cc9906dE4a2BB0ead11be55c0B1F699B4d18FA4,
            0x320ec0E06a638283d95A3AF0A42260827d5088de,
            0xf866eDd329B0948a4548fFC550401a8D73C42923,
            0xdaf2901488E6a5c7e9bf8211C40215aa26e13b38,
            0xDc8157f2b4A5B0aad751e1083925CFE3b1289c9C,
            0x2E588EBBeb54c6585764fF6ab164ca2180c155A9,
            0xFBe45Eb2826f0373A252cDe87212C69ca880f811,
            0xCf22A44530d0e8d7E4ac4381f734b7Ef08AB4843,
            0x42999e0bDA3885F314b3E0A97f8666A7425d7ecA,
            0x84818752057523865408BeBcAa06c5843a04F632,
            0x38a3d4e62A4C37C8D5A0893f1D6c6d66b46E8fe8,
            0x7ac89E41fd756E98B94ABb79A381c39e59D1D4Cc,
            0x2bdCDa1bd24A6bE013529d9fB0DB3e8E6a8118F2,
            0x78437216d56249c956D21e23CE51cD9312Cfd911,
            0x23f117a08CaD0E9942C137F280d250Cf88A397f0,
            0x78787Cd8B0119F89d7b34657983c091b79950420,
            0xE6b5118A51eC131700D88F39b9aCBA24C953a53A,
            0xE6b5118A51eC131700D88F39b9aCBA24C953a53A,
            0xE6b5118A51eC131700D88F39b9aCBA24C953a53A,
            0x23f117a08CaD0E9942C137F280d250Cf88A397f0,
            0xE6b5118A51eC131700D88F39b9aCBA24C953a53A,
            0xE6b5118A51eC131700D88F39b9aCBA24C953a53A,
            0x757fbe83eC827D0Be2e13aDCF851526832f67595,
            0x2A7fc120CbA6E6f863C3ce9402DEbe3417EBa420,
            0xb51B7DBd0E941122F111B580Fa683e12960CE98a,
            0xb51B7DBd0E941122F111B580Fa683e12960CE98a,
            0x84E10E9883820a2fb16C5762C506da0d8C3B9a7a,
            0xE68475f061e45469d4A177563b7985279654a6a4,
            0xBD275C7257825f06160875e1B42D8a7aFc434bb5,
            0xe99b52C2008427E4C4157351c670F37cbcAb23cc,
            0xEca1CE84b5Be8bcf8227a4407f148ab981fDbEfA,
            0xA68D08783Ad95b5E31cfE6Cb42577223b82761ba,
            0x9A10e3693f74C09E5e3362990051D1AF0C9c6da6,
            0x7D8c4CF9a42e1108ecb5e6F672Ec023975764c81,
            0x028E9a536afb096CF9D3405e4ccdb0A850425f2E,
            0xBD6C84c0C19dCFa35b46F6881c8Aaaf903479acE,
            0x50bD15765Ce37d01f0A63E0b7Fa59997df54d056,
            0x2bBc6F1Dce03488AF1EC3066C2CbE47D4eb5FAA8,
            0x23f117a08CaD0E9942C137F280d250Cf88A397f0,
            0x1C166D65ABBB2aebE76554bD7E82640DB75124E9,
            0xfD336a0B6252d59869e4553be956A0c9B7A641ca,
            0x040a0352A3C960c2a64f8a318f6F6b0f1f50024b,
            0x07fc7C163a642e0501251360D0d131f8931fd423,
            0x1dCAf87fa2C7965D1304CF4a975cb94b3ec6AF9E,
            0x78815501f12beDd7Fc51C442c608b3e78E1f9bd4,
            0x7872cF9C384D480f20688f8b5DF56043DEE83347,
            0x982F291Eff7f2C6Db2015ffE8860b75B4Bb79859,
            0xFDa8228459266540E58e5a6796463fa564E46558,
            0xB79499a21b1b1Aef2ae85680329C56f5BfF3C785,
            0x631e225965C3c256d8Ff7E783c6913B2306Ff949,
            0x7E6E0B62EA107C9BddA0Cda068482997b2ac8574,
            0xEE1dFb4a5871Ad9a3800eA013b4E7D05eE95d3eb,
            0x5f967d0e782731130fEb8AA9D4060a04587dBF83,
            0xEC8E3bE32961682892f1E989D7050887B6E652AE,
            0x6eC05de35BdbD63b199240C5a7d8Cd54Ca3c68B1,
            0xa974455b49B7e640dB9f7ca354c3979ce49B6666,
            0x066710E2099Be083654b60f81328C502ec5bE2B0,
            0x4bB5B06bdf7BC0416C290520985584B21dB5339B,
            0x0eD0f9D67250812270Fd0c77B1727C35bDa01fC8,
            0x656c42A82917F91291500dBaC6678903c37a1301,
            0x4cdEA4824Bc2C2Cf6409f0dF5b6f898030162901,
            0x4a4B27F8e7B716d3Ba3745E715630573c464c097,
            0x8cE5fFaAC5C6A15ce9FCFD5177b6b107916B5015,
            0x331F48D7a5E3fC2E43481CDc8Db5F8412a9aCC55,
            0x387F07cdAbFF4b512b3c416dE5FbEa465Da86f23,
            0x46eA926a5E47B811a1b75D907bf9ea4bFDC765e5,
            0xaf8ee63e68EADD507B1a68C587943c882F5A87Dd,
            0xFf4A751565F6Aca92FAd416Ad4DAD7DfeC089937,
            0x7110e935D7B1B6B232D34D335Bc5dB747Dba7424,
            0xBEB8974C64434ca8B4f4256EA4a3bb66cdA04463,
            0x89284409d5453FfEF2CA7082079cD05A48065713,
            0xb4d650B73e93631aa4f87661d701650fBaBfC40f,
            0x94A756Fd77DBb233c61DC88B034aC6b92637b6a8,
            0x68dF35b07df01CeAbCC0e4C17e4b22E0668805f0,
            0x43A16Fa9bf073f0E62B1F012D34dA505B82D56c7,
            0x2c68bA0e2339A4aaEC3aE4974bca61F4a3AD03ee,
            0xDdC7d0B2dE2442a770DaD4bD046cB41F9b78D17B,
            0x195aaf1e2FA35dd7c8b900C34432868c2C3B8e1A,
            0xf3F41fb2900aC6299aa88c39F4a5DC4dFd0FdfE2,
            0x904309f802543014d48CDF506B19f29393eebf93,
            0x3f896295e55BE18B5B2cE07bc4A23546a50F4340,
            0xfAb013860C4289761EEc828F71d19C74A5593698,
            0xfAb013860C4289761EEc828F71d19C74A5593698,
            0x5a684b41455092F11F9cA3e6D771f450671EA2E2,
            0x8c855EF6194496BBd3aE894Eb4a9BCee95613609,
            0x720ce0E8e6164991d7aC0E41a26e8F9703BE9b21,
            0xA4795c896a4726D3dbfd11b1884b03B3ff60f00F,
            0xCB034C379928D8945704D5C9462542a1Cc5eaA87,
            0xEE058e7998b6e0253c71eBcC5e5D5D1c84681510,
            0xB57Ad795B1ad3fFAcfDC5dd24F52c02Fe12a02b2,
            0x85e6ED9cc1f326BE2509E984f035119e7cb14CC9,
            0xf0482dD4D0cF24Cc5a3e1c1e326877D8Ca470d36,
            0xdcD33AdD34479c432EC414a396397EC11F32668a,
            0x016755E43711452d9928518B07a2A19852eE6aeb,
            0xB28Ac82f1E0D5431DbD059ABC58488c0e09d06Dc,
            0x9D0d1A24B2b7c58925c20C1EDEc26B9388Fc9349,
            0x443B63524b513D2F5cB0Dec303ffbD77f83713C3,
            0x648672823372Eb07144481ad0741882E53E96690,
            0x83016155082C548A5844Fb82436C4b08222FF218,
            0x8DCd34D94a8ed36f2e8178Fc57c4003A4cedC912,
            0xe0c687a5712C1050eb1C9637eaaB8A4Fb18Aa246,
            0xAd9E2950ef0553f1CeA721B281B54DCE9Fafe602,
            0xa6F9Dfa34F822Ef9B18de858025DE86990Db587a,
            0x28DD52f3a07F770F628eB292E4c302FcaFE9c7cc,
            0x913e9485771Fd872dd21cb7D845F3E64f4888707
        ];
        for(uint256 i = 0; i < recipients.length; i++) {
            _mint(recipients[i], amountPerCrowdfund);
        }
    }
	
	// transfer owner`s rights
	function updateOwner(address newOwner) public onlyOwner {
		owner = newOwner;
	}
}

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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountPerCrowdfund","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":"baseDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isSwapAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"uniSwapFactory","outputs":[{"internalType":"contract ISwapFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userInfo","outputs":[{"internalType":"bool","name":"status_","type":"bool"},{"internalType":"uint256","name":"userLastSaleTime_","type":"uint256"},{"internalType":"uint256","name":"userCount_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastSaleTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052612a306005556a52b7d2dcc80cd2e40000006006553480156200002657600080fd5b50604051806040016040528060088152602001672530b4b631b7b4b760c11b815250604051806040016040528060038152602001624a4c4360e81b81525081600390805190602001906200007c92919062001237565b5080516200009290600490602084019062001237565b5050600980546001600160a01b031916331790819055620000ca91506001600160a01b03166bdbb8481a7362102da0000000620000fe565b600954620000ee906001600160a01b03166b06765c793fa10079d0000000620000fe565b620000f86200018e565b620013be565b6200010c6000838362001232565b806002600082825462000120919062001332565b90915550506001600160a01b038216600081815260208190526040808220805485019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200017490859062001329565b60405180910390a36200018a6000838362001232565b5050565b604080516113e0810182527328c1d928ae30a9f65709a2a80e8a8ab74c6fed11815273bd0fa838f505979ab6683104d24f20040b5c3b8a60208201527371aac5eababd68c9b7bc64eca061526134a72bea918101919091527396fe8b63f949c2ffec0e9dbb488e76646e07926b606082015273b06b2454db4e0a78fab807e794cb9bebee4eae43608082015273229bed80d0bbd244d53e25904f56a45ea5de44f060a0820152734b87823187fedf8bcf5de8261fb5d98935b614ce60c08201527356d142995e07773ec548b7cc43502a0391b4b0ee60e0820152738680af8e5c820b8b538a752a4d37e65fe78b027861010082015273142dd2350bb82d7f663fa6776163c8170b2c743a61012082015273cbee5f5e7530402d3ba87af9dd8424df48409fdc610140820152732e826883f8736c96432b0b2cb20ef536dd946c6c61016082015273433929ce2bfeea4a89e88b843dfc93335d01cbdf610180820152736f5ba9f815759dc36b474efb4c5890eed0e1ec556101a0820152735bbd9d184f9ad2b6472dbb6cbaf4b0de897695af6101c082015273cda321cfa32b646f11b9744615c6ee2fd7d31a696101e0820152731579db0af58e3573b4ec0470ceb44101ef9f489161020082015273689681d6243f580077de6b7bfabf77664d75f86b61022082015273711a9328ff1b1e3ee6cb282f0a58e52cc257012861024082015273d0102e2da388bc260ac77b786fb7b86c4340e2c261026082015273e2e369b57c0425b9658d137ead5406bbe1540fb4610280820152732c64a2f846cfff94f5fc01c824f40cb7e236649a6102a082015273ae9ec9c235d9e5e03ed7d6007de85171f67fbb2b6102c08201527380f79a0afd71b3fc16f35a6503fb83655a44f8756102e0820152736e6e0878a0464bfbecc024960e56056f17f0ac1961030082015273f3306c9025bc74829a66f3d4035ee4c8a12c1f42610320820152739e84585fffd48e2da3aa081ee7158f0cf169429961034082015273c206836e11e4adb07a9408fa9017ee825e772f926103608201527368d35cd19d364029c01369897d80ab33b30b49ed610380820152737ed1e4bfe2f85cc5b3c9fd885147cb8f3bc2f2e56103a082015273b2c38ab5709d2b089cedb6bec0f958c8bc6ab9536103c082015273740483418dcd3c9f842b14ffcef40c6a792d42c16103e08201527364d4310ea8f99dd83a72e1653a534149d6ef5c956104008201527399d1680ff35fb0ba4116ef5636d820e3c52c095961042082015273302288d644ca3147030e161d129d51b86e0b60ed61044082015273d5c6a4b8b015dd81016c4f13f3499e20ce74292e610460820152732cc835e706e173663a6ff043dbe857469ca0816a6104808201527379485251c5b0ea3e5437cafbd6c9a86022c7fc8f6104a08201527350b6a16494fdbeb00d4cbf81ab3b3696c8e187d76104c082015273c5cd7626816f3e4f0e160440f661c715a24b2bff6104e082015273ed7d99ae6f2a8a58c6c460ce9ac5f603102c42bd6105008201527359aa3173da57f6a73b7a2178982f28281f4c912e610520820152734f7c84ec5e2c65633e793d09fa455a27b4d8cd67610540820152732041a12b27f7155f2a1b0c9fbc9f5cfbff8309c9610560820152739747b852bd44b020693ccc8ba8b50fb8862440c661058082015273a8ab946ca7bf677dc91f69b402539e3bf4b8898e6105a0820152734e97741d704128e53f75df79d6e893037a51c1126105c08201527387d56dba0a82dea88f8cf723fb6aa868bd2cf1306105e0820152737d882a29d24108b978525fda2e6d2ca0589198316106008201527362f609d184c31083d143cea86e65dfd9c69526e061062082015273850027f0bea668601c96fe79f0df2dc0aed20b9e61064082015273875ff39be5446376c7b913c80a05450a4830cb5e610660820152733f2855e64069228964cb3a523655cc81d64997fd610680820152737c2fd31d34bd25c46fe1b0b13c7d556cbca10d4d6106a0820152731cc9906de4a2bb0ead11be55c0b1f699b4d18fa46106c082015273320ec0e06a638283d95a3af0a42260827d5088de6106e082015273f866edd329b0948a4548ffc550401a8d73c4292361070082015273daf2901488e6a5c7e9bf8211c40215aa26e13b3861072082015273dc8157f2b4a5b0aad751e1083925cfe3b1289c9c610740820152732e588ebbeb54c6585764ff6ab164ca2180c155a961076082015273fbe45eb2826f0373a252cde87212c69ca880f81161078082015273cf22a44530d0e8d7e4ac4381f734b7ef08ab48436107a08201527342999e0bda3885f314b3e0a97f8666a7425d7eca6107c08201527384818752057523865408bebcaa06c5843a04f6326107e08201527338a3d4e62a4c37c8d5a0893f1d6c6d66b46e8fe8610800820152737ac89e41fd756e98b94abb79a381c39e59d1d4cc610820820152732bdcda1bd24a6be013529d9fb0db3e8e6a8118f26108408201527378437216d56249c956d21e23ce51cd9312cfd9116108608201527323f117a08cad0e9942c137f280d250cf88a397f061088082018190527378787cd8b0119f89d7b34657983c091b799504206108a083015273e6b5118a51ec131700d88f39b9acba24c953a53a6108c083018190526108e0830181905261090083018190526109208301829052610940830181905261096083015273757fbe83ec827d0be2e13adcf851526832f67595610980830152732a7fc120cba6e6f863c3ce9402debe3417eba4206109a083015273b51b7dbd0e941122f111b580fa683e12960ce98a6109c083018190526109e08301527384e10e9883820a2fb16c5762c506da0d8c3b9a7a610a0083015273e68475f061e45469d4a177563b7985279654a6a4610a2083015273bd275c7257825f06160875e1b42d8a7afc434bb5610a4083015273e99b52c2008427e4c4157351c670f37cbcab23cc610a6083015273eca1ce84b5be8bcf8227a4407f148ab981fdbefa610a8083015273a68d08783ad95b5e31cfe6cb42577223b82761ba610aa0830152739a10e3693f74c09e5e3362990051d1af0c9c6da6610ac0830152737d8c4cf9a42e1108ecb5e6f672ec023975764c81610ae083015273028e9a536afb096cf9d3405e4ccdb0a850425f2e610b0083015273bd6c84c0c19dcfa35b46f6881c8aaaf903479ace610b208301527350bd15765ce37d01f0a63e0b7fa59997df54d056610b40830152732bbc6f1dce03488af1ec3066c2cbe47d4eb5faa8610b60830152610b80820152731c166d65abbb2aebe76554bd7e82640db75124e9610ba082015273fd336a0b6252d59869e4553be956a0c9b7a641ca610bc082015273040a0352a3c960c2a64f8a318f6f6b0f1f50024b610be08201527307fc7c163a642e0501251360d0d131f8931fd423610c00820152731dcaf87fa2c7965d1304cf4a975cb94b3ec6af9e610c208201527378815501f12bedd7fc51c442c608b3e78e1f9bd4610c40820152737872cf9c384d480f20688f8b5df56043dee83347610c6082015273982f291eff7f2c6db2015ffe8860b75b4bb79859610c8082015273fda8228459266540e58e5a6796463fa564e46558610ca082015273b79499a21b1b1aef2ae85680329c56f5bff3c785610cc082015273631e225965c3c256d8ff7e783c6913b2306ff949610ce0820152737e6e0b62ea107c9bdda0cda068482997b2ac8574610d0082015273ee1dfb4a5871ad9a3800ea013b4e7d05ee95d3eb610d20820152735f967d0e782731130feb8aa9d4060a04587dbf83610d4082015273ec8e3be32961682892f1e989d7050887b6e652ae610d60820152736ec05de35bdbd63b199240c5a7d8cd54ca3c68b1610d8082015273a974455b49b7e640db9f7ca354c3979ce49b6666610da082015273066710e2099be083654b60f81328c502ec5be2b0610dc0820152734bb5b06bdf7bc0416c290520985584b21db5339b610de0820152730ed0f9d67250812270fd0c77b1727c35bda01fc8610e0082015273656c42a82917f91291500dbac6678903c37a1301610e20820152734cdea4824bc2c2cf6409f0df5b6f898030162901610e40820152734a4b27f8e7b716d3ba3745e715630573c464c097610e60820152738ce5ffaac5c6a15ce9fcfd5177b6b107916b5015610e8082015273331f48d7a5e3fc2e43481cdc8db5f8412a9acc55610ea082015273387f07cdabff4b512b3c416de5fbea465da86f23610ec08201527346ea926a5e47b811a1b75d907bf9ea4bfdc765e5610ee082015273af8ee63e68eadd507b1a68c587943c882f5a87dd610f0082015273ff4a751565f6aca92fad416ad4dad7dfec089937610f20820152737110e935d7b1b6b232d34d335bc5db747dba7424610f4082015273beb8974c64434ca8b4f4256ea4a3bb66cda04463610f608201527389284409d5453ffef2ca7082079cd05a48065713610f8082015273b4d650b73e93631aa4f87661d701650fbabfc40f610fa08201527394a756fd77dbb233c61dc88b034ac6b92637b6a8610fc08201527368df35b07df01ceabcc0e4c17e4b22e0668805f0610fe08201527343a16fa9bf073f0e62b1f012d34da505b82d56c7611000820152732c68ba0e2339a4aaec3ae4974bca61f4a3ad03ee61102082015273ddc7d0b2de2442a770dad4bd046cb41f9b78d17b61104082015273195aaf1e2fa35dd7c8b900c34432868c2c3b8e1a61106082015273f3f41fb2900ac6299aa88c39f4a5dc4dfd0fdfe261108082015273904309f802543014d48cdf506b19f29393eebf936110a0820152733f896295e55be18b5b2ce07bc4a23546a50f43406110c082015273fab013860c4289761eec828f71d19c74a55936986110e08201819052611100820152735a684b41455092f11f9ca3e6d771f450671ea2e2611120820152738c855ef6194496bbd3ae894eb4a9bcee9561360961114082015273720ce0e8e6164991d7ac0e41a26e8f9703be9b2161116082015273a4795c896a4726d3dbfd11b1884b03b3ff60f00f61118082015273cb034c379928d8945704d5c9462542a1cc5eaa876111a082015273ee058e7998b6e0253c71ebcc5e5d5d1c846815106111c082015273b57ad795b1ad3ffacfdc5dd24f52c02fe12a02b26111e08201527385e6ed9cc1f326be2509e984f035119e7cb14cc961120082015273f0482dd4d0cf24cc5a3e1c1e326877d8ca470d3661122082015273dcd33add34479c432ec414a396397ec11f32668a61124082015273016755e43711452d9928518b07a2a19852ee6aeb61126082015273b28ac82f1e0d5431dbd059abc58488c0e09d06dc611280820152739d0d1a24b2b7c58925c20c1edec26b9388fc93496112a082015273443b63524b513d2f5cb0dec303ffbd77f83713c36112c082015273648672823372eb07144481ad0741882e53e966906112e08201527383016155082c548a5844fb82436c4b08222ff218611300820152738dcd34d94a8ed36f2e8178fc57c4003a4cedc91261132082015273e0c687a5712c1050eb1c9637eaab8a4fb18aa24661134082015273ad9e2950ef0553f1cea721b281b54dce9fafe60261136082015273a6f9dfa34f822ef9b18de858025de86990db587a6113808201527328dd52f3a07f770f628eb292e4c302fcafe9c7cc6113a082015273913e9485771fd872dd21cb7d845f3e64f48887076113c0820152620011cd90600a90609f620012c6565b5060005b61012c8110156200122f576200121a600a8261012c81106200120357634e487b7160e01b600052603260045260246000fd5b01546006546001600160a01b0390911690620000fe565b8062001226816200138a565b915050620011d1565b50565b505050565b82805462001245906200134d565b90600052602060002090601f016020900481019282620012695760008555620012b4565b82601f106200128457805160ff1916838001178555620012b4565b82800160010185558215620012b4579182015b82811115620012b457825182559160200191906001019062001297565b50620012c292915062001312565b5090565b8261012c8101928215620012b4579160200282015b82811115620012b457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620012db565b5b80821115620012c2576000815560010162001313565b90815260200190565b60008219821115620013485762001348620013a8565b500190565b6002810460018216806200136257607f821691505b602082108114156200138457634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620013a157620013a1620013a8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b61115980620013ce6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637decede8116100b8578063a457c2d71161007c578063a457c2d71461025c578063a9059cbb1461026f578063ad5c464814610282578063d9d897d51461028a578063dcf1ed2b1461029d578063dd62ed3e146102a557610137565b80637decede81461021c578063880cdc31146102245780638da5cb5b1461023957806395d89b4114610241578063983386691461024957610137565b80632559a02b116100ff5780632559a02b146101c4578063313ce567146101cc57806339509351146101e157806356fa907d146101f457806370a082311461020957610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017a5780631959a0021461018f57806323b872dd146101b1575b600080fd5b6101446102b8565b6040516101519190610cd6565b60405180910390f35b61016d610168366004610c5a565b61034a565b6040516101519190610cb3565b61018261036c565b6040516101519190611035565b6101a261019d366004610ba3565b610372565b60405161015193929190610cbe565b61016d6101bf366004610c1a565b610403565b61016d61041b565b6101d4610425565b604051610151919061103e565b61016d6101ef366004610c5a565b61042a565b6101fc610456565b6040516101519190610c85565b610182610217366004610ba3565b61046e565b610182610489565b610237610232366004610ba3565b61048f565b005b6101fc6104e4565b6101446104f3565b610182610257366004610ba3565b610502565b61016d61026a366004610c5a565b610514565b61016d61027d366004610c5a565b610567565b6101fc61057d565b610182610298366004610ba3565b610595565b6101826105a7565b6101826102b3366004610be2565b6105ad565b6060600380546102c7906110ba565b80601f01602080910402602001604051908101604052809291908181526020018280546102f3906110ba565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b5050505050905090565b6000806103556105d8565b90506103628185856105dc565b5060019392505050565b60025490565b6005546001600160a01b03821660009081526007602052604081205490918291829182916103a09190611084565b6001600160a01b0386166000908152600860205260409020546103c3919061104c565b90504281109350836103de576103d942826110a3565b6103e1565b60005b6001600160a01b03909516600090815260076020526040902054939592505050565b6000610410848484610690565b6103628433846109cc565b6101365460ff1681565b601290565b6000806104356105d8565b905061036281858561044785896105ad565b610451919061104c565b6105dc565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6001600160a01b031660009081526020819052604090205490565b60065481565b6009546001600160a01b031633146104c25760405162461bcd60e51b81526004016104b990610fed565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6060600480546102c7906110ba565b60086020526000908152604090205481565b60008061051f6105d8565b9050600061052d82866105ad565b90508381101561054f5760405162461bcd60e51b81526004016104b990610fa8565b61055c82868684036105dc565b506001949350505050565b6000610574338484610690565b50600192915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60076020526000908152604090205481565b60055481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166106025760405162461bcd60e51b81526004016104b990610f64565b6001600160a01b0382166106285760405162461bcd60e51b81526004016104b990610d29565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610683908590611035565b60405180910390a3505050565b600061069b84610a16565b90506001600160a01b0384166106c35760405162461bcd60e51b81526004016104b990610da2565b6001600160a01b0383166106e95760405162461bcd60e51b81526004016104b990610de6565b600082116107095760405162461bcd60e51b81526004016104b990610e2d565b808061071857506101365460ff165b6107345760405162461bcd60e51b81526004016104b990610f17565b6001600160a01b03841660009081526020819052604090205482111561076c5760405162461bcd60e51b81526004016104b990610e7c565b8181801561077e57506101365460ff16155b1561079257610136805460ff191660011790555b6005546001600160a01b03861660009081526007602052604081205490916107b991611084565b6001600160a01b0387166000908152600860205260409020546107dc919061104c565b421015905080806107ea5750825b6108065760405162461bcd60e51b81526004016104b990610ec6565b8215801561083757506001600160a01b03861660009081526020819052604090205461083490600290611064565b84115b15610864576001600160a01b03861660009081526020819052604090205461086190600290611064565b91505b61086d86610ae8565b801561089157506001600160a01b0385166000908152602081905260409020548410155b156108e3576001600160a01b038516600090815260076020526040902054156108e3576001600160a01b03851660009081526007602052604081208054600192906108dd9084906110a3565b90915550505b6001600160a01b038616600090815260076020526040812080546001929061090c90849061104c565b90915550506001600160a01b038616600090815260086020908152604080832042905590829052812080548492906109459084906110a3565b90915550506001600160a01b0385166000908152602081905260408120805484929061097290849061104c565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109bc9190611035565b60405180910390a3505050505050565b60006109d884846105ad565b90506000198114610a105781811015610a035760405162461bcd60e51b81526004016104b990610d6b565b610a1084848484036105dc565b50505050565b6009546000906001600160a01b0383811691161480610ae2575060405163e6a4390560e01b8152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063e6a4390590610a7d90309073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290600401610c99565b60206040518083038186803b158015610a9557600080fd5b505afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd9190610bc6565b6001600160a01b0316826001600160a01b0316145b92915050565b60405163e6a4390560e01b81526000906001600160a01b03831690735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063e6a4390590610b4390309073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290600401610c99565b60206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190610bc6565b6001600160a01b03161492915050565b600060208284031215610bb4578081fd5b8135610bbf8161110b565b9392505050565b600060208284031215610bd7578081fd5b8151610bbf8161110b565b60008060408385031215610bf4578081fd5b8235610bff8161110b565b91506020830135610c0f8161110b565b809150509250929050565b600080600060608486031215610c2e578081fd5b8335610c398161110b565b92506020840135610c498161110b565b929592945050506040919091013590565b60008060408385031215610c6c578182fd5b8235610c778161110b565b946020939093013593505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602080835283518082850152825b81811015610d0257858101830151858201604001528201610ce6565b81811115610d135783604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526024908201527f45524332303a2053656e64657220616464726573732063616e6e6f74206265206040820152637a65726f60e01b606082015260800190565b60208082526027908201527f45524332303a20526563697069656e7420616464726573732063616e6e6f74206040820152666265207a65726f60c81b606082015260800190565b6020808252602f908201527f45524332303a205472616e7366657220616d6f756e742073686f756c6420626560408201526e206d6f7265207468616e207a65726f60881b606082015260800190565b6020808252602a908201527f45524332303a2053656e64657220646f6573206e6f74206861766520656e6f7560408201526967682062616c616e636560b01b606082015260800190565b60208082526031908201527f45524332303a2053616c652074696d65206e6f74206d6574206f7220756e61756040820152703a3437b934bd32b21030b2323932b9b99760791b606082015260800190565b6020808252602d908201527f45524332303a204c697175696469747920686173206e6f74206265656e20657360408201526c1d18589b1a5cda1959081e595d609a1b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526028908201527f45524332303a204f7065726174696f6e20616c6c6f77656420666f72206f776e60408201526732b91037b7363c9760c11b606082015260800190565b90815260200190565b60ff91909116815260200190565b6000821982111561105f5761105f6110f5565b500190565b60008261107f57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561109e5761109e6110f5565b500290565b6000828210156110b5576110b56110f5565b500390565b6002810460018216806110ce57607f821691505b602082108114156110ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461112057600080fd5b5056fea26469706673582212205da453feaa5402b26eadf78856967c18d3635952a8a4a272c6c3b3eb093073ee64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80637decede8116100b8578063a457c2d71161007c578063a457c2d71461025c578063a9059cbb1461026f578063ad5c464814610282578063d9d897d51461028a578063dcf1ed2b1461029d578063dd62ed3e146102a557610137565b80637decede81461021c578063880cdc31146102245780638da5cb5b1461023957806395d89b4114610241578063983386691461024957610137565b80632559a02b116100ff5780632559a02b146101c4578063313ce567146101cc57806339509351146101e157806356fa907d146101f457806370a082311461020957610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017a5780631959a0021461018f57806323b872dd146101b1575b600080fd5b6101446102b8565b6040516101519190610cd6565b60405180910390f35b61016d610168366004610c5a565b61034a565b6040516101519190610cb3565b61018261036c565b6040516101519190611035565b6101a261019d366004610ba3565b610372565b60405161015193929190610cbe565b61016d6101bf366004610c1a565b610403565b61016d61041b565b6101d4610425565b604051610151919061103e565b61016d6101ef366004610c5a565b61042a565b6101fc610456565b6040516101519190610c85565b610182610217366004610ba3565b61046e565b610182610489565b610237610232366004610ba3565b61048f565b005b6101fc6104e4565b6101446104f3565b610182610257366004610ba3565b610502565b61016d61026a366004610c5a565b610514565b61016d61027d366004610c5a565b610567565b6101fc61057d565b610182610298366004610ba3565b610595565b6101826105a7565b6101826102b3366004610be2565b6105ad565b6060600380546102c7906110ba565b80601f01602080910402602001604051908101604052809291908181526020018280546102f3906110ba565b80156103405780601f1061031557610100808354040283529160200191610340565b820191906000526020600020905b81548152906001019060200180831161032357829003601f168201915b5050505050905090565b6000806103556105d8565b90506103628185856105dc565b5060019392505050565b60025490565b6005546001600160a01b03821660009081526007602052604081205490918291829182916103a09190611084565b6001600160a01b0386166000908152600860205260409020546103c3919061104c565b90504281109350836103de576103d942826110a3565b6103e1565b60005b6001600160a01b03909516600090815260076020526040902054939592505050565b6000610410848484610690565b6103628433846109cc565b6101365460ff1681565b601290565b6000806104356105d8565b905061036281858561044785896105ad565b610451919061104c565b6105dc565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6001600160a01b031660009081526020819052604090205490565b60065481565b6009546001600160a01b031633146104c25760405162461bcd60e51b81526004016104b990610fed565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6060600480546102c7906110ba565b60086020526000908152604090205481565b60008061051f6105d8565b9050600061052d82866105ad565b90508381101561054f5760405162461bcd60e51b81526004016104b990610fa8565b61055c82868684036105dc565b506001949350505050565b6000610574338484610690565b50600192915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60076020526000908152604090205481565b60055481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166106025760405162461bcd60e51b81526004016104b990610f64565b6001600160a01b0382166106285760405162461bcd60e51b81526004016104b990610d29565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610683908590611035565b60405180910390a3505050565b600061069b84610a16565b90506001600160a01b0384166106c35760405162461bcd60e51b81526004016104b990610da2565b6001600160a01b0383166106e95760405162461bcd60e51b81526004016104b990610de6565b600082116107095760405162461bcd60e51b81526004016104b990610e2d565b808061071857506101365460ff165b6107345760405162461bcd60e51b81526004016104b990610f17565b6001600160a01b03841660009081526020819052604090205482111561076c5760405162461bcd60e51b81526004016104b990610e7c565b8181801561077e57506101365460ff16155b1561079257610136805460ff191660011790555b6005546001600160a01b03861660009081526007602052604081205490916107b991611084565b6001600160a01b0387166000908152600860205260409020546107dc919061104c565b421015905080806107ea5750825b6108065760405162461bcd60e51b81526004016104b990610ec6565b8215801561083757506001600160a01b03861660009081526020819052604090205461083490600290611064565b84115b15610864576001600160a01b03861660009081526020819052604090205461086190600290611064565b91505b61086d86610ae8565b801561089157506001600160a01b0385166000908152602081905260409020548410155b156108e3576001600160a01b038516600090815260076020526040902054156108e3576001600160a01b03851660009081526007602052604081208054600192906108dd9084906110a3565b90915550505b6001600160a01b038616600090815260076020526040812080546001929061090c90849061104c565b90915550506001600160a01b038616600090815260086020908152604080832042905590829052812080548492906109459084906110a3565b90915550506001600160a01b0385166000908152602081905260408120805484929061097290849061104c565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109bc9190611035565b60405180910390a3505050505050565b60006109d884846105ad565b90506000198114610a105781811015610a035760405162461bcd60e51b81526004016104b990610d6b565b610a1084848484036105dc565b50505050565b6009546000906001600160a01b0383811691161480610ae2575060405163e6a4390560e01b8152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063e6a4390590610a7d90309073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290600401610c99565b60206040518083038186803b158015610a9557600080fd5b505afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd9190610bc6565b6001600160a01b0316826001600160a01b0316145b92915050565b60405163e6a4390560e01b81526000906001600160a01b03831690735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063e6a4390590610b4390309073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290600401610c99565b60206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190610bc6565b6001600160a01b03161492915050565b600060208284031215610bb4578081fd5b8135610bbf8161110b565b9392505050565b600060208284031215610bd7578081fd5b8151610bbf8161110b565b60008060408385031215610bf4578081fd5b8235610bff8161110b565b91506020830135610c0f8161110b565b809150509250929050565b600080600060608486031215610c2e578081fd5b8335610c398161110b565b92506020840135610c498161110b565b929592945050506040919091013590565b60008060408385031215610c6c578182fd5b8235610c778161110b565b946020939093013593505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b92151583526020830191909152604082015260600190565b6000602080835283518082850152825b81811015610d0257858101830151858201604001528201610ce6565b81811115610d135783604083870101525b50601f01601f1916929092016040019392505050565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526024908201527f45524332303a2053656e64657220616464726573732063616e6e6f74206265206040820152637a65726f60e01b606082015260800190565b60208082526027908201527f45524332303a20526563697069656e7420616464726573732063616e6e6f74206040820152666265207a65726f60c81b606082015260800190565b6020808252602f908201527f45524332303a205472616e7366657220616d6f756e742073686f756c6420626560408201526e206d6f7265207468616e207a65726f60881b606082015260800190565b6020808252602a908201527f45524332303a2053656e64657220646f6573206e6f74206861766520656e6f7560408201526967682062616c616e636560b01b606082015260800190565b60208082526031908201527f45524332303a2053616c652074696d65206e6f74206d6574206f7220756e61756040820152703a3437b934bd32b21030b2323932b9b99760791b606082015260800190565b6020808252602d908201527f45524332303a204c697175696469747920686173206e6f74206265656e20657360408201526c1d18589b1a5cda1959081e595d609a1b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526028908201527f45524332303a204f7065726174696f6e20616c6c6f77656420666f72206f776e60408201526732b91037b7363c9760c11b606082015260800190565b90815260200190565b60ff91909116815260200190565b6000821982111561105f5761105f6110f5565b500190565b60008261107f57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561109e5761109e6110f5565b500290565b6000828210156110b5576110b56110f5565b500390565b6002810460018216806110ce57607f821691505b602082108114156110ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461112057600080fd5b5056fea26469706673582212205da453feaa5402b26eadf78856967c18d3635952a8a4a272c6c3b3eb093073ee64736f6c63430008000033

Deployed Bytecode Sourcemap

15914:14406:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6034:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8394:201;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7163:108::-;;;:::i;:::-;;;;;;;:::i;20447:407::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;17747:269::-;;;;;;:::i;:::-;;:::i;16589:27::-;;;:::i;7005:93::-;;;:::i;:::-;;;;;;;:::i;9845:238::-;;;;;;:::i;:::-;;:::i;16757:111::-;;;:::i;:::-;;;;;;;:::i;7334:127::-;;;;;;:::i;:::-;;:::i;16094:60::-;;;:::i;30235:82::-;;;;;;:::i;:::-;;:::i;:::-;;16423:20;;;:::i;6253:104::-;;;:::i;16333:51::-;;;;;;:::i;:::-;;:::i;10586:436::-;;;;;;:::i;:::-;;:::i;17485:185::-;;;;;;:::i;:::-;;:::i;16677:73::-;;;:::i;16231:46::-;;;;;;:::i;:::-;;:::i;15988:37::-;;;:::i;7923:151::-;;;;;;:::i;:::-;;:::i;6034:100::-;6088:13;6121:5;6114:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6034:100;:::o;8394:201::-;8477:4;8494:13;8510:12;:10;:12::i;:::-;8494:28;;8533:32;8542:5;8549:7;8558:6;8533:8;:32::i;:::-;-1:-1:-1;8583:4:0;;8394:201;-1:-1:-1;;;8394:201:0:o;7163:108::-;7251:12;;7163:108;:::o;20447:407::-;20654:12;;-1:-1:-1;;;;;20631:20:0;;20504:12;20631:20;;;:11;:20;;;;;;20504:12;;;;;;;;20631:35;;20654:12;20631:35;:::i;:::-;-1:-1:-1;;;;;20603:25:0;;;;;;:16;:25;;;;;;:63;;;;:::i;:::-;20575:91;;20707:15;20687:17;:35;20677:45;;20753:7;:49;;20767:35;20787:15;20767:17;:35;:::i;:::-;20753:49;;;20763:1;20753:49;-1:-1:-1;;;;;20826:20:0;;;;;;;:11;:20;;;;;;20447:407;;;-1:-1:-1;;;20447:407:0:o;17747:269::-;17879:4;17896:36;17906:6;17914:9;17925:6;17896:9;:36::i;:::-;17943:43;17959:6;17967:10;17979:6;17943:15;:43::i;16589:27::-;;;;;;:::o;7005:93::-;7088:2;7005:93;:::o;9845:238::-;9933:4;9950:13;9966:12;:10;:12::i;:::-;9950:28;;9989:64;9998:5;10005:7;10042:10;10014:25;10024:5;10031:7;10014:9;:25::i;:::-;:38;;;;:::i;:::-;9989:8;:64::i;16757:111::-;16824:42;16757:111;:::o;7334:127::-;-1:-1:-1;;;;;7435:18:0;7408:7;7435:18;;;;;;;;;;;;7334:127::o;16094:60::-;;;;:::o;30235:82::-;17000:5;;-1:-1:-1;;;;;17000:5:0;17009:10;17000:19;16992:72;;;;-1:-1:-1;;;16992:72:0;;;;;;;:::i;:::-;;;;;;;;;30296:5:::1;:16:::0;;-1:-1:-1;;;;;;30296:16:0::1;-1:-1:-1::0;;;;;30296:16:0;;;::::1;::::0;;;::::1;::::0;;30235:82::o;16423:20::-;;;-1:-1:-1;;;;;16423:20:0;;:::o;6253:104::-;6309:13;6342:7;6335:14;;;;;:::i;16333:51::-;;;;;;;;;;;;;:::o;10586:436::-;10679:4;10696:13;10712:12;:10;:12::i;:::-;10696:28;;10735:24;10762:25;10772:5;10779:7;10762:9;:25::i;:::-;10735:52;;10826:15;10806:16;:35;;10798:85;;;;-1:-1:-1;;;10798:85:0;;;;;;;:::i;:::-;10919:60;10928:5;10935:7;10963:15;10944:16;:34;10919:8;:60::i;:::-;-1:-1:-1;11010:4:0;;10586:436;-1:-1:-1;;;;10586:436:0:o;17485:185::-;17578:4;17600:40;17610:10;17622:9;17633:6;17600:9;:40::i;:::-;-1:-1:-1;17658:4:0;17485:185;;;;:::o;16677:73::-;16708:42;16677:73;:::o;16231:46::-;;;;;;;;;;;;;:::o;15988:37::-;;;;:::o;7923:151::-;-1:-1:-1;;;;;8039:18:0;;;8012:7;8039:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7923:151::o;3831:98::-;3911:10;3831:98;:::o;12217:346::-;-1:-1:-1;;;;;12319:19:0;;12311:68;;;;-1:-1:-1;;;12311:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12398:21:0;;12390:68;;;;-1:-1:-1;;;12390:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12471:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;12523:32;;;;;12501:6;;12523:32;:::i;:::-;;;;;;;;12217:346;;;:::o;18371:1800::-;18496:18;18517:20;18532:4;18517:14;:20::i;:::-;18496:41;-1:-1:-1;;;;;;18550:18:0;;18542:67;;;;-1:-1:-1;;;18542:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18622:16:0;;18614:68;;;;-1:-1:-1;;;18614:68:0;;;;;;;:::i;:::-;18704:1;18695:6;:10;18687:70;;;;-1:-1:-1;;;18687:70:0;;;;;;;:::i;:::-;18770:13;:32;;;-1:-1:-1;18787:15:0;;;;18770:32;18762:90;;;;-1:-1:-1;;;18762:90:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18865:15:0;;:9;:15;;;;;;;;;;;:25;-1:-1:-1;18865:25:0;18857:80;;;;-1:-1:-1;;;18857:80:0;;;;;;;:::i;:::-;18979:6;19070:13;:33;;;;-1:-1:-1;19088:15:0;;;;19087:16;19070:33;19067:86;;;19119:15;:22;;-1:-1:-1;;19119:22:0;19137:4;19119:22;;;19067:86;19302:12;;-1:-1:-1;;;;;19282:17:0;;19211:24;19282:17;;;:11;:17;;;;;;19211:24;;19282:32;;;:::i;:::-;-1:-1:-1;;;;;19257:22:0;;;;;;:16;:22;;;;;;:57;;;;:::i;:::-;19238:15;:76;;19211:103;;19333:19;:36;;;;19356:13;19333:36;19325:98;;;;-1:-1:-1;;;19325:98:0;;;;;;;:::i;:::-;19508:13;19507:14;:46;;;;-1:-1:-1;;;;;;19534:15:0;;:9;:15;;;;;;;;;;;:19;;19552:1;;19534:19;:::i;:::-;19525:6;:28;19507:46;19503:111;;;-1:-1:-1;;;;;19583:15:0;;:9;:15;;;;;;;;;;;:19;;19601:1;;19583:19;:::i;:::-;19570:32;;19503:111;19696:16;19707:4;19696:10;:16::i;:::-;:43;;;;-1:-1:-1;;;;;;19726:13:0;;:9;:13;;;;;;;;;;;19716:23;;;19696:43;19692:155;;;-1:-1:-1;;;;;19760:15:0;;19778:1;19760:15;;;:11;:15;;;;;;:19;19756:80;;-1:-1:-1;;;;;19800:15:0;;;;;;:11;:15;;;;;:20;;19819:1;;19800:15;:20;;19819:1;;19800:20;:::i;:::-;;;;-1:-1:-1;;19756:80:0;-1:-1:-1;;;;;19920:17:0;;;;;;:11;:17;;;;;:22;;19941:1;;19920:17;:22;;19941:1;;19920:22;:::i;:::-;;;;-1:-1:-1;;;;;;;19953:22:0;;;;;;:16;:22;;;;;;;;19978:15;19953:40;;20050:15;;;;;;:29;;20069:10;;19953:22;20050:29;;20069:10;;20050:29;:::i;:::-;;;;-1:-1:-1;;;;;;;20090:13:0;;:9;:13;;;;;;;;;;:27;;20107:10;;20090:9;:27;;20107:10;;20090:27;:::i;:::-;;;;;;;;20148:2;-1:-1:-1;;;;;20133:30:0;20142:4;-1:-1:-1;;;;;20133:30:0;;20152:10;20133:30;;;;;;:::i;:::-;;;;;;;;18371:1800;;;;;;:::o;12854:419::-;12955:24;12982:25;12992:5;12999:7;12982:9;:25::i;:::-;12955:52;;-1:-1:-1;;13022:16:0;:37;13018:248;;13104:6;13084:16;:26;;13076:68;;;;-1:-1:-1;;;13076:68:0;;;;;;;:::i;:::-;13188:51;13197:5;13204:7;13232:6;13213:16;:25;13188:8;:51::i;:::-;12854:419;;;;:::o;18104:190::-;18217:5;;18173:8;;-1:-1:-1;;;;;18200:22:0;;;18217:5;;18200:22;;:86;;-1:-1:-1;18243:43:0;;-1:-1:-1;;;18243:43:0;;16824:42;;18243:22;;:43;;18274:4;;16708:42;;18243:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18226:60:0;:13;-1:-1:-1;;;;;18226:60:0;;18200:86;18194:92;18104:190;-1:-1:-1;;18104:190:0:o;20223:138::-;20302:43;;-1:-1:-1;;;20302:43:0;;20279:4;;-1:-1:-1;;;;;20302:51:0;;;16824:42;;20302:22;;:43;;20333:4;;16708:42;;20302:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20302:51:0;;;20223:138;-1:-1:-1;;20223:138:0:o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;:::-;262:5;84:189;-1:-1:-1;;;84:189:1:o;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:1:o;1760:203::-;-1:-1:-1;;;;;1924:32:1;;;;1906:51;;1894:2;1879:18;;1861:102::o;1968:304::-;-1:-1:-1;;;;;2198:15:1;;;2180:34;;2250:15;;2245:2;2230:18;;2223:43;2130:2;2115:18;;2097:175::o;2277:187::-;2442:14;;2435:22;2417:41;;2405:2;2390:18;;2372:92::o;2469:329::-;2690:14;;2683:22;2665:41;;2737:2;2722:18;;2715:34;;;;2780:2;2765:18;;2758:34;2653:2;2638:18;;2620:178::o;3031:603::-;;3172:2;3201;3190:9;3183:21;3233:6;3227:13;3276:6;3271:2;3260:9;3256:18;3249:34;3301:4;3314:140;3328:6;3325:1;3322:13;3314:140;;;3423:14;;;3419:23;;3413:30;3389:17;;;3408:2;3385:26;3378:66;3343:10;;3314:140;;;3472:6;3469:1;3466:13;3463:2;;;3542:4;3537:2;3528:6;3517:9;3513:22;3509:31;3502:45;3463:2;-1:-1:-1;3618:2:1;3597:15;-1:-1:-1;;3593:29:1;3578:45;;;;3625:2;3574:54;;3152:482;-1:-1:-1;;;3152:482:1:o;3639:398::-;3841:2;3823:21;;;3880:2;3860:18;;;3853:30;3919:34;3914:2;3899:18;;3892:62;-1:-1:-1;;;3985:2:1;3970:18;;3963:32;4027:3;4012:19;;3813:224::o;4042:353::-;4244:2;4226:21;;;4283:2;4263:18;;;4256:30;4322:31;4317:2;4302:18;;4295:59;4386:2;4371:18;;4216:179::o;4400:400::-;4602:2;4584:21;;;4641:2;4621:18;;;4614:30;4680:34;4675:2;4660:18;;4653:62;-1:-1:-1;;;4746:2:1;4731:18;;4724:34;4790:3;4775:19;;4574:226::o;4805:403::-;5007:2;4989:21;;;5046:2;5026:18;;;5019:30;5085:34;5080:2;5065:18;;5058:62;-1:-1:-1;;;5151:2:1;5136:18;;5129:37;5198:3;5183:19;;4979:229::o;5213:411::-;5415:2;5397:21;;;5454:2;5434:18;;;5427:30;5493:34;5488:2;5473:18;;5466:62;-1:-1:-1;;;5559:2:1;5544:18;;5537:45;5614:3;5599:19;;5387:237::o;5629:406::-;5831:2;5813:21;;;5870:2;5850:18;;;5843:30;5909:34;5904:2;5889:18;;5882:62;-1:-1:-1;;;5975:2:1;5960:18;;5953:40;6025:3;6010:19;;5803:232::o;6040:413::-;6242:2;6224:21;;;6281:2;6261:18;;;6254:30;6320:34;6315:2;6300:18;;6293:62;-1:-1:-1;;;6386:2:1;6371:18;;6364:47;6443:3;6428:19;;6214:239::o;6458:409::-;6660:2;6642:21;;;6699:2;6679:18;;;6672:30;6738:34;6733:2;6718:18;;6711:62;-1:-1:-1;;;6804:2:1;6789:18;;6782:43;6857:3;6842:19;;6632:235::o;6872:400::-;7074:2;7056:21;;;7113:2;7093:18;;;7086:30;7152:34;7147:2;7132:18;;7125:62;-1:-1:-1;;;7218:2:1;7203:18;;7196:34;7262:3;7247:19;;7046:226::o;7277:401::-;7479:2;7461:21;;;7518:2;7498:18;;;7491:30;7557:34;7552:2;7537:18;;7530:62;-1:-1:-1;;;7623:2:1;7608:18;;7601:35;7668:3;7653:19;;7451:227::o;7683:404::-;7885:2;7867:21;;;7924:2;7904:18;;;7897:30;7963:34;7958:2;7943:18;;7936:62;-1:-1:-1;;;8029:2:1;8014:18;;8007:38;8077:3;8062:19;;7857:230::o;8092:177::-;8238:25;;;8226:2;8211:18;;8193:76::o;8274:184::-;8446:4;8434:17;;;;8416:36;;8404:2;8389:18;;8371:87::o;8463:128::-;;8534:1;8530:6;8527:1;8524:13;8521:2;;;8540:18;;:::i;:::-;-1:-1:-1;8576:9:1;;8511:80::o;8596:217::-;;8662:1;8652:2;;-1:-1:-1;;;8687:31:1;;8741:4;8738:1;8731:15;8769:4;8694:1;8759:15;8652:2;-1:-1:-1;8798:9:1;;8642:171::o;8818:168::-;;8924:1;8920;8916:6;8912:14;8909:1;8906:21;8901:1;8894:9;8887:17;8883:45;8880:2;;;8931:18;;:::i;:::-;-1:-1:-1;8971:9:1;;8870:116::o;8991:125::-;;9059:1;9056;9053:8;9050:2;;;9064:18;;:::i;:::-;-1:-1:-1;9101:9:1;;9040:76::o;9121:380::-;9206:1;9196:12;;9253:1;9243:12;;;9264:2;;9318:4;9310:6;9306:17;9296:27;;9264:2;9371;9363:6;9360:14;9340:18;9337:38;9334:2;;;9417:10;9412:3;9408:20;9405:1;9398:31;9452:4;9449:1;9442:15;9480:4;9477:1;9470:15;9334:2;;9176:325;;;:::o;9506:127::-;9567:10;9562:3;9558:20;9555:1;9548:31;9598:4;9595:1;9588:15;9622:4;9619:1;9612:15;9638:133;-1:-1:-1;;;;;9715:31:1;;9705:42;;9695:2;;9761:1;9758;9751:12;9695:2;9685:86;:::o

Swarm Source

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