ETH Price: $3,808.02 (+4.22%)

Token

ERC-20: BitcoinCats404 (404Cats)
 

Overview

Max Total Supply

1,650 404Cats

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
BitcoinCats404

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999999 runs

Other Settings:
istanbul EvmVersion
File 1 of 8 : BitcoinCats404.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC404/ERC404PlusPausable.sol";

contract BitcoinCats404 is ERC404PlusPausable {
    uint256 public constant MAX_SUPPLY = 10000 * 1E18;
    string private _baseUri;

    mapping(address => bool) public whitelistTransfer;

    constructor() ERC404Plus("BitcoinCats404", "404Cats", 18, 0, msg.sender) {
        whitelistTransfer[address(0)] = true;
        emit ERC20Transfer(address(0), msg.sender, balanceOf[msg.sender] = 0);
    }

    function mint(address to, uint256 amount) public onlyOwner {
        amount = amount * (10 ** decimals);
        require((totalSupply += amount) <= MAX_SUPPLY, 'Error: amount');
        balanceOf[to] += amount;
        emit ERC20Transfer(address(0), to, amount);
    }

    function setBaseUri(string memory newUri) public onlyOwner {
        _baseUri = newUri;
    }

    function setNameSymbol(
        string memory _name,
        string memory _symbol
    ) public onlyOwner {
        _setNameSymbol(_name, _symbol);
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        if (bytes(_baseUri).length > 0) {
            return string(abi.encodePacked(_baseUri, Strings.toString((tokenId - 1) % 10000 + 1), ".json"));
        } else {
            return 'null';
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amountOrId
    ) internal virtual override {
        if (!whitelistTransfer[from]) super._beforeTokenTransfer(from, to, amountOrId);
    }

    function setWhitelistTransfer(address account, bool isAdd) public onlyOwner {
        if (whitelistTransfer[account] != isAdd) {
            whitelistTransfer[account] = isAdd;
        }
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }
}

File 2 of 8 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// 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;
    }
}

File 4 of 8 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 5 of 8 : ERC404Plus.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ERC721Receiver.sol";

abstract contract ERC404Plus is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** _decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    function setSelfWhitelist(bool state) public {
        require(balanceOf[msg.sender] == 0,'Balance > 0');
        whitelist[msg.sender] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
            (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
            (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

File 6 of 8 : ERC404PlusPausable.sol
pragma solidity ^0.8.0;

import "./ERC404Plus.sol";
import "@openzeppelin/contracts/security/Pausable.sol";

abstract contract ERC404PlusPausable is ERC404Plus, Pausable {

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amountOrId
    ) internal virtual {
        require(!paused(), "ERC404Pausable: transfer paused");
    }

    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual override {
        _beforeTokenTransfer(from, to, amountOrId);
        super.transferFrom(from, to, amountOrId);
    }

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        _beforeTokenTransfer(msg.sender, to, amount);
        return super.transfer(to, amount);
    }
}

File 7 of 8 : ERC721Receiver.sol
pragma solidity ^0.8.0;

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

File 8 of 8 : Ownable.sol
pragma solidity ^0.8.0;

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "evmVersion": "istanbul",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","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":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSelfWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isAdd","type":"bool"}],"name":"setWhitelistTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b50604080518082018252600e81526d109a5d18dbda5b90d85d1ccd0c0d60921b602080830191909152825180840190935260078352663430344361747360c81b9083015290601260003380806200007b576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508451620000d9906001906020880190620001c8565b508351620000ef906002906020870190620001c8565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526200012783600a620002b7565b62000133908362000385565b6003555050600d805460ff199081169091557ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3758054909116600117905550503360008181526005602052604080822082905551919250907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148790620001ba9083815260200190565b60405180910390a3620003fa565b828054620001d690620003a7565b90600052602060002090601f016020900481019282620001fa576000855562000245565b82601f106200021557805160ff191683800117855562000245565b8280016001018555821562000245579182015b828111156200024557825182559160200191906001019062000228565b506200025392915062000257565b5090565b5b8082111562000253576000815560010162000258565b600181815b80851115620002af578160001904821115620002935762000293620003e4565b80851615620002a157918102915b93841c939080029062000273565b509250929050565b6000620002c860ff841683620002cf565b9392505050565b600082620002e0575060016200037f565b81620002ef575060006200037f565b8160018114620003085760028114620003135762000333565b60019150506200037f565b60ff841115620003275762000327620003e4565b50506001821b6200037f565b5060208310610133831016604e8410600b841016171562000358575081810a6200037f565b6200036483836200026e565b80600019048211156200037b576200037b620003e4565b0290505b92915050565b6000816000190483118215151615620003a257620003a2620003e4565b500290565b600181811c90821680620003bc57607f821691505b60208210811415620003de57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160f81c612a7662000427600039600081816102ca015281816108c70152611b5b0152612a766000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806366a16cad1161010f578063a22cb465116100a2578063ce3ab21111610071578063ce3ab21114610492578063dd62ed3e146104a5578063e985e9c5146104d0578063f2fde38b146104fe57600080fd5b8063a22cb46514610446578063a9059cbb14610459578063b88d4fde1461046c578063c87b56dd1461047f57600080fd5b80638da5cb5b116100de5780638da5cb5b146103e857806395d89b41146104085780639b19251a14610410578063a0bcfc7f1461043357600080fd5b806366a16cad1461038a5780636c7b4ef81461039d57806370a08231146103c05780638456cb59146103e057600080fd5b80633f4ba83a11610187578063504334c211610156578063504334c21461034657806353d6fd59146103595780635c975abb1461036c5780636352211e1461037757600080fd5b80633f4ba83a1461030f57806340c10f191461031757806342842e0e1461032a5780634f02c4201461033d57600080fd5b806323b872dd116101c357806323b872dd146102a85780632b968958146102bd578063313ce567146102c557806332cb6b0c146102fe57600080fd5b806306fdde03146101f5578063081812fc14610213578063095ea7b31461026e57806318160ddd14610291575b600080fd5b6101fd610511565b60405161020a9190612689565b60405180910390f35b6102496102213660046124cb565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161020a565b61028161027c3660046123ab565b61059f565b604051901515815260200161020a565b61029a60035481565b60405190815260200161020a565b6102bb6102b63660046122aa565b610756565b005b6102bb610771565b6102ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161020a565b61029a69021e19e0c9bab240000081565b6102bb610816565b6102bb6103253660046123ab565b610871565b6102bb6103383660046122aa565b610a16565b61029a60045481565b6102bb610354366004612467565b610b5e565b6102bb610367366004612381565b610bbd565b600d5460ff16610281565b6102496103853660046124cb565b610c64565b6102bb610398366004612381565b610cc5565b6102816103ab36600461225c565b600f6020526000908152604090205460ff1681565b61029a6103ce36600461225c565b60056020526000908152604090205481565b6102bb610d9e565b6000546102499073ffffffffffffffffffffffffffffffffffffffff1681565b6101fd610df7565b61028161041e36600461225c565b600c6020526000908152604090205460ff1681565b6102bb610441366004612432565b610e04565b6102bb610454366004612381565b610e68565b6102816104673660046123ab565b610ef8565b6102bb61047a3660046122e6565b610f16565b6101fd61048d3660046124cb565b611053565b6102bb6104a03660046123d5565b6110f9565b61029a6104b3366004612277565b600660209081526000928352604080842090915290825290205481565b6102816104de366004612277565b600860209081526000928352604080842090915290825290205460ff1681565b6102bb61050c36600461225c565b6111ae565b6001805461051e906128b4565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906128b4565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b505050505081565b600060045482111580156105b35750600082115b156106e35760008281526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480159061061e575073ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832033845290915290205460ff16155b15610655576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35061074c565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6107618383836112bc565b61076c8383836112f4565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107c2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b60005473ffffffffffffffffffffffffffffffffffffffff163314610867576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086f6117d8565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ed7f0000000000000000000000000000000000000000000000000000000000000000600a612767565b6108f79082612830565b905069021e19e0c9bab2400000816003600082825461091691906126da565b9250508190551115610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4572726f723a20616d6f756e740000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548392906109be9084906126da565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487906020015b60405180910390a35050565b610a21838383610756565b73ffffffffffffffffffffffffffffffffffffffff82163b15801590610b2757506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b158015610aca57600080fd5b505af1158015610ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0291906123f0565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561076c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610baf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb982826118b9565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610cc0576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d16576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16151581151514610bb95773ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080548215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091161790555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610def576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086f6118e0565b6002805461051e906128b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e55576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610bb990600e9060208401906120e4565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610a0a565b6000610f053384846112bc565b610f0f83836119a0565b9392505050565b610f21858585610756565b73ffffffffffffffffffffffffffffffffffffffff84163b1580159061101557506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a0290610f9e9033908a9089908990899060040161260a565b602060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff091906123f0565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561104c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60606000600e8054611064906128b4565b905011156110c057600e61109961271061107f60018661286d565b6110899190612941565b6110949060016126da565b6119ad565b6040516020016110aa929190612500565b6040516020818303038152906040529050919050565b505060408051808201909152600481527f6e756c6c00000000000000000000000000000000000000000000000000000000602082015290565b3360009081526005602052604090205415611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f42616c616e6365203e20300000000000000000000000000000000000000000006044820152606401610980565b336000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111ff576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661124c576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff1661076c5761076c838383611ae7565b60045481116117395760008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461135d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166113aa576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff841614801590611401575073ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832033845290915290205460ff16155b8015611431575060008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15611468576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611470611b54565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020526040812080549091906114a590849061286d565b909155506114b39050611b54565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832080549096019095558582526009815284822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690941790556007815284822080549093169092559186168252600a905290812080546115429060019061286d565b81548110611552576115526129e2565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff87168352600a82526040808420868552600b909352909220548154929350839281106115a3576115a36129e2565b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff86168152600a909152604090208054806115e5576115e56129b3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255838252600b81526040808320548484528184205573ffffffffffffffffffffffffffffffffffffffff8616808452600a83529083208054600181810183558286529385200186905592529054611674919061286d565b6000838152600b6020526040808220929092559051839173ffffffffffffffffffffffffffffffffffffffff80871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487611722611b54565b60405190815260200160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117cd5761179b828261286d565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083203384529091529020555b61104c848484611b86565b600d5460ff16611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610980565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b81516118cc9060019060208501906120e4565b50805161076c9060029060208401906120e4565b600d5460ff161561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610980565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861188f3390565b6000610f0f338484611b86565b6060816119ed57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a175780611a0181612908565b9150611a109050600a836126f2565b91506119f1565b60008167ffffffffffffffff811115611a3257611a32612a11565b6040519080825280601f01601f191660200182016040528015611a5c576020820181803683370190505b5090505b8415611adf57611a7160018361286d565b9150611a7e600a86612941565b611a899060306126da565b60f81b818381518110611a9e57611a9e6129e2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611ad8600a866126f2565b9450611a60565b949350505050565b600d5460ff161561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433430345061757361626c653a207472616e7366657220706175736564006044820152606401610980565b6000611b817f0000000000000000000000000000000000000000000000000000000000000000600a612767565b905090565b600080611b91611b54565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600560205260408082208054948a1683529082205492825293945091929091869190611bda838661286d565b909155505073ffffffffffffffffffffffffffffffffffffffff808716600090815260056020908152604080832080548a019055928a168252600c9052205460ff16611c905773ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812054611c519085906126f2565b611c5b85856126f2565b611c65919061286d565b905060005b81811015611c8d57611c7b89611da3565b80611c8581612908565b915050611c6a565b50505b73ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16611d2f576000611cc984836126f2565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260056020526040902054611cfa9086906126f2565b611d04919061286d565b905060005b81811015611d2c57611d1a88611f5b565b80611d2481612908565b915050611d09565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611d8e91815260200190565b60405180910390a35060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611df0576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604081208054611e239060019061286d565b81548110611e3357611e336129e2565b90600052602060002001549050600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611e8e57611e8e6129b3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255828252600b815260408083208390556009825280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600790925280832080549092169091555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff8116611fa8576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546001019081905560008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff161561200f576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260096020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155808452600a8352908320805460018181018355828652938520018590559252905461208c919061286d565b6000828152600b6020526040808220929092559051829173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546120f0906128b4565b90600052602060002090601f0160209004810192826121125760008555612158565b82601f1061212b57805160ff1916838001178555612158565b82800160010185558215612158579182015b8281111561215857825182559160200191906001019061213d565b50612164929150612168565b5090565b5b808211156121645760008155600101612169565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cc057600080fd5b80358015158114610cc057600080fd5b600082601f8301126121c257600080fd5b813567ffffffffffffffff808211156121dd576121dd612a11565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561222357612223612a11565b8160405283815286602085880101111561223c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561226e57600080fd5b610f0f8261217d565b6000806040838503121561228a57600080fd5b6122938361217d565b91506122a16020840161217d565b90509250929050565b6000806000606084860312156122bf57600080fd5b6122c88461217d565b92506122d66020850161217d565b9150604084013590509250925092565b6000806000806000608086880312156122fe57600080fd5b6123078661217d565b94506123156020870161217d565b935060408601359250606086013567ffffffffffffffff8082111561233957600080fd5b818801915088601f83011261234d57600080fd5b81358181111561235c57600080fd5b89602082850101111561236e57600080fd5b9699959850939650602001949392505050565b6000806040838503121561239457600080fd5b61239d8361217d565b91506122a1602084016121a1565b600080604083850312156123be57600080fd5b6123c78361217d565b946020939093013593505050565b6000602082840312156123e757600080fd5b610f0f826121a1565b60006020828403121561240257600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610f0f57600080fd5b60006020828403121561244457600080fd5b813567ffffffffffffffff81111561245b57600080fd5b611adf848285016121b1565b6000806040838503121561247a57600080fd5b823567ffffffffffffffff8082111561249257600080fd5b61249e868387016121b1565b935060208501359150808211156124b457600080fd5b506124c1858286016121b1565b9150509250929050565b6000602082840312156124dd57600080fd5b5035919050565b600081516124f6818560208601612884565b9290920192915050565b600080845481600182811c91508083168061251c57607f831692505b6020808410821415612555577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156125695760018114612598576125c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506125c5565b60008b81526020902060005b868110156125bd5781548b8201529085019083016125a4565b505084890196505b5050505050506126016125d882866124e4565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b60208152600082518060208401526126a8816040850160208701612884565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156126ed576126ed612955565b500190565b60008261270157612701612984565b500490565b600181815b8085111561275f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561274557612745612955565b8085161561275257918102915b93841c939080029061270b565b509250929050565b6000610f0f60ff84168360008261278057506001610750565b8161278d57506000610750565b81600181146127a357600281146127ad576127c9565b6001915050610750565b60ff8411156127be576127be612955565b50506001821b610750565b5060208310610133831016604e8410600b84101617156127ec575081810a610750565b6127f68383612706565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561282857612828612955565b029392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561286857612868612955565b500290565b60008282101561287f5761287f612955565b500390565b60005b8381101561289f578181015183820152602001612887565b838111156128ae576000848401525b50505050565b600181811c908216806128c857607f821691505b60208210811415612902577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561293a5761293a612955565b5060010190565b60008261295057612950612984565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220c1c6132d003c42c7403102a7aca1fb1db1db5503d19157b71b0a7ccc5033835a64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806366a16cad1161010f578063a22cb465116100a2578063ce3ab21111610071578063ce3ab21114610492578063dd62ed3e146104a5578063e985e9c5146104d0578063f2fde38b146104fe57600080fd5b8063a22cb46514610446578063a9059cbb14610459578063b88d4fde1461046c578063c87b56dd1461047f57600080fd5b80638da5cb5b116100de5780638da5cb5b146103e857806395d89b41146104085780639b19251a14610410578063a0bcfc7f1461043357600080fd5b806366a16cad1461038a5780636c7b4ef81461039d57806370a08231146103c05780638456cb59146103e057600080fd5b80633f4ba83a11610187578063504334c211610156578063504334c21461034657806353d6fd59146103595780635c975abb1461036c5780636352211e1461037757600080fd5b80633f4ba83a1461030f57806340c10f191461031757806342842e0e1461032a5780634f02c4201461033d57600080fd5b806323b872dd116101c357806323b872dd146102a85780632b968958146102bd578063313ce567146102c557806332cb6b0c146102fe57600080fd5b806306fdde03146101f5578063081812fc14610213578063095ea7b31461026e57806318160ddd14610291575b600080fd5b6101fd610511565b60405161020a9190612689565b60405180910390f35b6102496102213660046124cb565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161020a565b61028161027c3660046123ab565b61059f565b604051901515815260200161020a565b61029a60035481565b60405190815260200161020a565b6102bb6102b63660046122aa565b610756565b005b6102bb610771565b6102ec7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff909116815260200161020a565b61029a69021e19e0c9bab240000081565b6102bb610816565b6102bb6103253660046123ab565b610871565b6102bb6103383660046122aa565b610a16565b61029a60045481565b6102bb610354366004612467565b610b5e565b6102bb610367366004612381565b610bbd565b600d5460ff16610281565b6102496103853660046124cb565b610c64565b6102bb610398366004612381565b610cc5565b6102816103ab36600461225c565b600f6020526000908152604090205460ff1681565b61029a6103ce36600461225c565b60056020526000908152604090205481565b6102bb610d9e565b6000546102499073ffffffffffffffffffffffffffffffffffffffff1681565b6101fd610df7565b61028161041e36600461225c565b600c6020526000908152604090205460ff1681565b6102bb610441366004612432565b610e04565b6102bb610454366004612381565b610e68565b6102816104673660046123ab565b610ef8565b6102bb61047a3660046122e6565b610f16565b6101fd61048d3660046124cb565b611053565b6102bb6104a03660046123d5565b6110f9565b61029a6104b3366004612277565b600660209081526000928352604080842090915290825290205481565b6102816104de366004612277565b600860209081526000928352604080842090915290825290205460ff1681565b6102bb61050c36600461225c565b6111ae565b6001805461051e906128b4565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906128b4565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b505050505081565b600060045482111580156105b35750600082115b156106e35760008281526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480159061061e575073ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832033845290915290205460ff16155b15610655576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526007602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35061074c565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6107618383836112bc565b61076c8383836112f4565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107c2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b60005473ffffffffffffffffffffffffffffffffffffffff163314610867576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086f6117d8565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108ed7f0000000000000000000000000000000000000000000000000000000000000012600a612767565b6108f79082612830565b905069021e19e0c9bab2400000816003600082825461091691906126da565b9250508190551115610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4572726f723a20616d6f756e740000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260056020526040812080548392906109be9084906126da565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487906020015b60405180910390a35050565b610a21838383610756565b73ffffffffffffffffffffffffffffffffffffffff82163b15801590610b2757506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b158015610aca57600080fd5b505af1158015610ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0291906123f0565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561076c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610baf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bb982826118b9565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c0e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610cc0576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d16576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600f602052604090205460ff16151581151514610bb95773ffffffffffffffffffffffffffffffffffffffff82166000908152600f6020526040902080548215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091161790555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610def576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086f6118e0565b6002805461051e906128b4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e55576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051610bb990600e9060208401906120e4565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610a0a565b6000610f053384846112bc565b610f0f83836119a0565b9392505050565b610f21858585610756565b73ffffffffffffffffffffffffffffffffffffffff84163b1580159061101557506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a0290610f9e9033908a9089908990899060040161260a565b602060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff091906123f0565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b1561104c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60606000600e8054611064906128b4565b905011156110c057600e61109961271061107f60018661286d565b6110899190612941565b6110949060016126da565b6119ad565b6040516020016110aa929190612500565b6040516020818303038152906040529050919050565b505060408051808201909152600481527f6e756c6c00000000000000000000000000000000000000000000000000000000602082015290565b3360009081526005602052604090205415611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f42616c616e6365203e20300000000000000000000000000000000000000000006044820152606401610980565b336000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111ff576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661124c576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff1661076c5761076c838383611ae7565b60045481116117395760008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461135d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166113aa576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff841614801590611401575073ffffffffffffffffffffffffffffffffffffffff8316600090815260086020908152604080832033845290915290205460ff16155b8015611431575060008181526007602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15611468576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611470611b54565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260056020526040812080549091906114a590849061286d565b909155506114b39050611b54565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832080549096019095558582526009815284822080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690941790556007815284822080549093169092559186168252600a905290812080546115429060019061286d565b81548110611552576115526129e2565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff87168352600a82526040808420868552600b909352909220548154929350839281106115a3576115a36129e2565b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff86168152600a909152604090208054806115e5576115e56129b3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255838252600b81526040808320548484528184205573ffffffffffffffffffffffffffffffffffffffff8616808452600a83529083208054600181810183558286529385200186905592529054611674919061286d565b6000838152600b6020526040808220929092559051839173ffffffffffffffffffffffffffffffffffffffff80871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487611722611b54565b60405190815260200160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117cd5761179b828261286d565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083203384529091529020555b61104c848484611b86565b600d5460ff16611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610980565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b81516118cc9060019060208501906120e4565b50805161076c9060029060208401906120e4565b600d5460ff161561194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610980565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861188f3390565b6000610f0f338484611b86565b6060816119ed57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a175780611a0181612908565b9150611a109050600a836126f2565b91506119f1565b60008167ffffffffffffffff811115611a3257611a32612a11565b6040519080825280601f01601f191660200182016040528015611a5c576020820181803683370190505b5090505b8415611adf57611a7160018361286d565b9150611a7e600a86612941565b611a899060306126da565b60f81b818381518110611a9e57611a9e6129e2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611ad8600a866126f2565b9450611a60565b949350505050565b600d5460ff161561076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433430345061757361626c653a207472616e7366657220706175736564006044820152606401610980565b6000611b817f0000000000000000000000000000000000000000000000000000000000000012600a612767565b905090565b600080611b91611b54565b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600560205260408082208054948a1683529082205492825293945091929091869190611bda838661286d565b909155505073ffffffffffffffffffffffffffffffffffffffff808716600090815260056020908152604080832080548a019055928a168252600c9052205460ff16611c905773ffffffffffffffffffffffffffffffffffffffff8716600090815260056020526040812054611c519085906126f2565b611c5b85856126f2565b611c65919061286d565b905060005b81811015611c8d57611c7b89611da3565b80611c8581612908565b915050611c6a565b50505b73ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16611d2f576000611cc984836126f2565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260056020526040902054611cfa9086906126f2565b611d04919061286d565b905060005b81811015611d2c57611d1a88611f5b565b80611d2481612908565b915050611d09565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051611d8e91815260200190565b60405180910390a35060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611df0576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604081208054611e239060019061286d565b81548110611e3357611e336129e2565b90600052602060002001549050600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480611e8e57611e8e6129b3565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908101839055909201909255828252600b815260408083208390556009825280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600790925280832080549092169091555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff8116611fa8576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546001019081905560008181526009602052604090205473ffffffffffffffffffffffffffffffffffffffff161561200f576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260096020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8716908117909155808452600a8352908320805460018181018355828652938520018590559252905461208c919061286d565b6000828152600b6020526040808220929092559051829173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546120f0906128b4565b90600052602060002090601f0160209004810192826121125760008555612158565b82601f1061212b57805160ff1916838001178555612158565b82800160010185558215612158579182015b8281111561215857825182559160200191906001019061213d565b50612164929150612168565b5090565b5b808211156121645760008155600101612169565b803573ffffffffffffffffffffffffffffffffffffffff81168114610cc057600080fd5b80358015158114610cc057600080fd5b600082601f8301126121c257600080fd5b813567ffffffffffffffff808211156121dd576121dd612a11565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561222357612223612a11565b8160405283815286602085880101111561223c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561226e57600080fd5b610f0f8261217d565b6000806040838503121561228a57600080fd5b6122938361217d565b91506122a16020840161217d565b90509250929050565b6000806000606084860312156122bf57600080fd5b6122c88461217d565b92506122d66020850161217d565b9150604084013590509250925092565b6000806000806000608086880312156122fe57600080fd5b6123078661217d565b94506123156020870161217d565b935060408601359250606086013567ffffffffffffffff8082111561233957600080fd5b818801915088601f83011261234d57600080fd5b81358181111561235c57600080fd5b89602082850101111561236e57600080fd5b9699959850939650602001949392505050565b6000806040838503121561239457600080fd5b61239d8361217d565b91506122a1602084016121a1565b600080604083850312156123be57600080fd5b6123c78361217d565b946020939093013593505050565b6000602082840312156123e757600080fd5b610f0f826121a1565b60006020828403121561240257600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114610f0f57600080fd5b60006020828403121561244457600080fd5b813567ffffffffffffffff81111561245b57600080fd5b611adf848285016121b1565b6000806040838503121561247a57600080fd5b823567ffffffffffffffff8082111561249257600080fd5b61249e868387016121b1565b935060208501359150808211156124b457600080fd5b506124c1858286016121b1565b9150509250929050565b6000602082840312156124dd57600080fd5b5035919050565b600081516124f6818560208601612884565b9290920192915050565b600080845481600182811c91508083168061251c57607f831692505b6020808410821415612555577f4e487b710000000000000000000000000000000000000000000000000000000086526022600452602486fd5b8180156125695760018114612598576125c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506125c5565b60008b81526020902060005b868110156125bd5781548b8201529085019083016125a4565b505084890196505b5050505050506126016125d882866124e4565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b60208152600082518060208401526126a8816040850160208701612884565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600082198211156126ed576126ed612955565b500190565b60008261270157612701612984565b500490565b600181815b8085111561275f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561274557612745612955565b8085161561275257918102915b93841c939080029061270b565b509250929050565b6000610f0f60ff84168360008261278057506001610750565b8161278d57506000610750565b81600181146127a357600281146127ad576127c9565b6001915050610750565b60ff8411156127be576127be612955565b50506001821b610750565b5060208310610133831016604e8410600b84101617156127ec575081810a610750565b6127f68383612706565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561282857612828612955565b029392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561286857612868612955565b500290565b60008282101561287f5761287f612955565b500390565b60005b8381101561289f578181015183820152602001612887565b838111156128ae576000848401525b50505050565b600181811c908216806128c857607f821691505b60208210811415612902577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561293a5761293a612955565b5060010190565b60008261295057612950612984565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220c1c6132d003c42c7403102a7aca1fb1db1db5503d19157b71b0a7ccc5033835a64736f6c63430008070033

Loading...
Loading
Loading...
Loading
[ 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.