ETH Price: $3,321.86 (-4.93%)

Token

Free Mints = Communism (FM=C)
 

Overview

Max Total Supply

1,917 FM=C

Holders

545

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 FM=C
0x29c9e0c4ca8ecc4b5a74f1261eb76d934ae6c460
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:
FreeMintsAreCommunism

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-09
*/

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

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
}

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

interface IERC721A {
    error ApprovalCallerNotOwnerNorApproved();
    error ApprovalQueryForNonexistentToken();
    error ApproveToCaller();
    error BalanceQueryForZeroAddress();
    error MintToZeroAddress();
    error MintZeroQuantity();
    error OwnerQueryForNonexistentToken();
    error TransferCallerNotOwnerNorApproved();
    error TransferFromIncorrectOwner();
    error TransferToNonERC721ReceiverImplementer();
    error TransferToZeroAddress();
    error URIQueryForNonexistentToken();
    error MintERC2309QuantityExceedsLimit();
    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;
    uint256 private constant BITPOS_NUMBER_MINTED = 64;
    uint256 private constant BITPOS_NUMBER_BURNED = 128;
    uint256 private constant BITPOS_AUX = 192;
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;
    uint256 private constant BITPOS_START_TIMESTAMP = 160;
    uint256 private constant BITMASK_BURNED = 1 << 224;
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;
    uint256 private constant BITPOS_EXTRA_DATA = 232;
    uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;
    uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1;
    uint256 private _currentIndex;
    string private _name;
    string private _symbol;
    mapping(uint256 => uint256) private _packedOwnerships;
    mapping(address => uint256) private _packedAddressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view virtual returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view virtual returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA);
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, BITMASK_ADDRESS)
            // `owner | (block.timestamp << BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

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

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << BITPOS_NEXT_INITIALIZED`.
            result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, '');
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        // Overflows are incredibly unrealistic.
        // `balance` and `numberMinted` have a maximum limit of 2**64.
        // `tokenId` has a maximum limit of 2**256.
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the `balance` and `numberMinted`.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 tokenId = startTokenId;
            uint256 end = startTokenId + quantity;
            do {
                emit Transfer(address(0), to, tokenId++);
            } while (tokenId < end);

            _currentIndex = end;
        }
    }

    function _getApprovedAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
        // The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`.
        assembly {
            // Compute the slot.
            mstore(0x00, tokenId)
            mstore(0x20, tokenApprovalsPtr.slot)
            approvedAddressSlot := keccak256(0x00, 0x40)
            // Load the slot's value from storage.
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function _isOwnerOrApproved(
        address approvedAddress,
        address from,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            // Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean.
            from := and(from, BITMASK_ADDRESS)
            // Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
            msgSender := and(msgSender, BITMASK_ADDRESS)
            // `msgSender == from || msgSender == approvedAddress`.
            result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);

        // The nested ifs save around 20+ gas over a compound boolean condition.
        if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        // Clear approvals from the previous owner.
        assembly {
            if approvedAddress {
                // This is equivalent to `delete _tokenApprovals[tokenId]`.
                sstore(approvedAddressSlot, 0)
            }
        }

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
    }

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit),
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length,
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for {
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } {
                // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }

            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}

contract FreeMintsAreCommunism is ERC721A, Ownable {
    bool _revealed = false;
    string private baseURI = "ipfs://QmWiYFdz7cCgiVWMBcsRjgDLHTwVhj3A4X2ssrNuQSdKgQ";

    constructor() ERC721A("Free Mints = Communism", "FM=C") {}

    receive() external payable {
        if(msg.value > 0) {
            (bool sent, ) = payable(owner()).call{value: msg.value}("");
            require(sent, "Failed to send Ether");
        }

        unchecked {
            if(1 + totalSupply() <= 1917) {
                _safeMint(msg.sender, 1);
            }
        }
    }
    
    function setURI(bool revealed, string calldata _baseURI) external onlyOwner {
        _revealed = revealed;
        baseURI = _baseURI;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        if (_revealed) {
            return string(abi.encodePacked(baseURI, Strings.toString(tokenId), ".json"));
        } else {
            return string(abi.encodePacked(baseURI));
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenId","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":"bool","name":"revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6007805460ff60a01b1916905560e060405260356080818152906200172d60a0398051620000369160089160209091019062000127565b503480156200004457600080fd5b50604080518082018252601681527f46726565204d696e7473203d20436f6d6d756e69736d00000000000000000000602080830191825283518085019094526004845263464d3d4360e01b908401528151919291620000a69160019162000127565b508051620000bc90600290602084019062000127565b5050600160005550620000cf33620000d5565b6200020a565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013590620001cd565b90600052602060002090601f016020900481019282620001595760008555620001a4565b82601f106200017457805160ff1916838001178555620001a4565b82800160010185558215620001a4579182015b82811115620001a457825182559160200191906001019062000187565b50620001b2929150620001b6565b5090565b5b80821115620001b25760008155600101620001b7565b600181811c90821680620001e257607f821691505b602082108114156200020457634e487b7160e01b600052602260045260246000fd5b50919050565b611513806200021a6000396000f3fe60806040526004361061010d5760003560e01c8063715018a611610095578063b88d4fde11610064578063b88d4fde146103ae578063c2a70fac146103ce578063c87b56dd146103ee578063e985e9c51461040e578063f2fde38b1461045757600080fd5b8063715018a6146103465780638da5cb5b1461035b57806395d89b4114610379578063a22cb4651461038e57600080fd5b806318160ddd116100dc57806318160ddd146102a357806323b872dd146102c657806342842e0e146102e65780636352211e1461030657806370a082311461032657600080fd5b806301ffc9a7146101f457806306fdde0314610229578063081812fc1461024b578063095ea7b31461028357600080fd5b366101ef5734156101ca57600061012c6007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610176576040519150601f19603f3d011682016040523d82523d6000602084013e61017b565b606091505b50509050806101c85760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b505b61077d6101da6000546000190190565b600101116101ed576101ed336001610477565b005b600080fd5b34801561020057600080fd5b5061021461020f366004610f9e565b610495565b60405190151581526020015b60405180910390f35b34801561023557600080fd5b5061023e6104e7565b6040516102209190611013565b34801561025757600080fd5b5061026b610266366004611026565b610579565b6040516001600160a01b039091168152602001610220565b34801561028f57600080fd5b506101ed61029e366004611056565b6105bd565b3480156102af57600080fd5b50600054600019015b604051908152602001610220565b3480156102d257600080fd5b506101ed6102e1366004611080565b61065d565b3480156102f257600080fd5b506101ed610301366004611080565b6107ee565b34801561031257600080fd5b5061026b610321366004611026565b61080e565b34801561033257600080fd5b506102b86103413660046110bc565b610819565b34801561035257600080fd5b506101ed610868565b34801561036757600080fd5b506007546001600160a01b031661026b565b34801561038557600080fd5b5061023e61087c565b34801561039a57600080fd5b506101ed6103a93660046110e7565b61088b565b3480156103ba57600080fd5b506101ed6103c9366004611130565b610921565b3480156103da57600080fd5b506101ed6103e936600461120c565b61096b565b3480156103fa57600080fd5b5061023e610409366004611026565b610996565b34801561041a57600080fd5b5061021461042936600461128f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561046357600080fd5b506101ed6104723660046110bc565b6109f4565b610491828260405180602001604052806000815250610a6d565b5050565b60006301ffc9a760e01b6001600160e01b0319831614806104c657506380ac58cd60e01b6001600160e01b03198316145b806104e15750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600180546104f6906112b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610522906112b9565b801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058482610ada565b6105a1576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006105c88261080e565b9050336001600160a01b03821614610601576105e48133610429565b610601576040516367d9dca160e11b815260040160405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061066882610b0f565b9050836001600160a01b0316816001600160a01b03161461069b5760405162a1148160e81b815260040160405180910390fd5b60008281526005602052604090208054338082146001600160a01b038816909114176106e8576106cb8633610429565b6106e857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661070f57604051633a954ecd60e21b815260040160405180910390fd5b801561071a57600082555b6001600160a01b038681166000908152600460205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260036020526040902055600160e11b83166107a557600184016000818152600360205260409020546107a35760005481146107a35760008181526003602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b61080983838360405180602001604052806000815250610921565b505050565b60006104e182610b0f565b60006001600160a01b038216610842576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b610870610b7f565b61087a6000610bd9565b565b6060600280546104f6906112b9565b6001600160a01b0382163314156108b55760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61092c84848461065d565b6001600160a01b0383163b156109655761094884848484610c2b565b610965576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b610973610b7f565b6007805460ff60a01b1916600160a01b8515150217905561096560088383610eef565b600754606090600160a01b900460ff16156109dd5760086109b683610d14565b6040516020016109c792919061138e565b6040516020818303038152906040529050919050565b60086040516020016109c791906113c3565b919050565b6109fc610b7f565b6001600160a01b038116610a615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101bf565b610a6a81610bd9565b50565b610a778383610e12565b6001600160a01b0383163b15610809576000548281035b610aa16000868380600101945086610c2b565b610abe576040516368d2bf6b60e11b815260040160405180910390fd5b818110610a8e578160005414610ad357600080fd5b5050505050565b600081600111158015610aee575060005482105b80156104e1575050600090815260036020526040902054600160e01b161590565b60008180600111610b6657600054811015610b6657600081815260036020526040902054600160e01b8116610b64575b80610b5d575060001901600081815260036020526040902054610b3f565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b6007546001600160a01b0316331461087a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101bf565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610c609033908990889088906004016113cf565b6020604051808303816000875af1925050508015610c9b575060408051601f3d908101601f19168201909252610c989181019061140c565b60015b610cf6573d808015610cc9576040519150601f19603f3d011682016040523d82523d6000602084013e610cce565b606091505b508051610cee576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610d385750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d625780610d4c8161143f565b9150610d5b9050600a83611470565b9150610d3c565b60008167ffffffffffffffff811115610d7d57610d7d61111a565b6040519080825280601f01601f191660200182016040528015610da7576020820181803683370190505b5090505b8415610d0c57610dbc600183611484565b9150610dc9600a8661149b565b610dd49060306114af565b60f81b818381518110610de957610de96114c7565b60200101906001600160f81b031916908160001a905350610e0b600a86611470565b9450610dab565b6000546001600160a01b038316610e3b57604051622e076360e81b815260040160405180910390fd5b81610e595760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260046020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260036020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210610ea35760005550505050565b828054610efb906112b9565b90600052602060002090601f016020900481019282610f1d5760008555610f63565b82601f10610f365782800160ff19823516178555610f63565b82800160010185558215610f63579182015b82811115610f63578235825591602001919060010190610f48565b50610f6f929150610f73565b5090565b5b80821115610f6f5760008155600101610f74565b6001600160e01b031981168114610a6a57600080fd5b600060208284031215610fb057600080fd5b8135610b5d81610f88565b60005b83811015610fd6578181015183820152602001610fbe565b838111156109655750506000910152565b60008151808452610fff816020860160208601610fbb565b601f01601f19169290920160200192915050565b602081526000610b5d6020830184610fe7565b60006020828403121561103857600080fd5b5035919050565b80356001600160a01b03811681146109ef57600080fd5b6000806040838503121561106957600080fd5b6110728361103f565b946020939093013593505050565b60008060006060848603121561109557600080fd5b61109e8461103f565b92506110ac6020850161103f565b9150604084013590509250925092565b6000602082840312156110ce57600080fd5b610b5d8261103f565b803580151581146109ef57600080fd5b600080604083850312156110fa57600080fd5b6111038361103f565b9150611111602084016110d7565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561114657600080fd5b61114f8561103f565b935061115d6020860161103f565b925060408501359150606085013567ffffffffffffffff8082111561118157600080fd5b818701915087601f83011261119557600080fd5b8135818111156111a7576111a761111a565b604051601f8201601f19908116603f011681019083821181831017156111cf576111cf61111a565b816040528281528a60208487010111156111e857600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006040848603121561122157600080fd5b61122a846110d7565b9250602084013567ffffffffffffffff8082111561124757600080fd5b818601915086601f83011261125b57600080fd5b81358181111561126a57600080fd5b87602082850101111561127c57600080fd5b6020830194508093505050509250925092565b600080604083850312156112a257600080fd5b6112ab8361103f565b91506111116020840161103f565b600181811c908216806112cd57607f821691505b602082108114156112ee57634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c908083168061130e57607f831692505b602080841082141561133057634e487b7160e01b600052602260045260246000fd5b818015611344576001811461135557611382565b60ff19861689528489019650611382565b60008881526020902060005b8681101561137a5781548b820152908501908301611361565b505084890196505b50505050505092915050565b600061139a82856112f4565b83516113aa818360208801610fbb565b64173539b7b760d91b9101908152600501949350505050565b6000610b5d82846112f4565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061140290830184610fe7565b9695505050505050565b60006020828403121561141e57600080fd5b8151610b5d81610f88565b634e487b7160e01b600052601160045260246000fd5b600060001982141561145357611453611429565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261147f5761147f61145a565b500490565b60008282101561149657611496611429565b500390565b6000826114aa576114aa61145a565b500690565b600082198211156114c2576114c2611429565b500190565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f62a70d793465aa534e9a9fe034a8ae99d6ff57650f9be495bb39384d58e31b064736f6c634300080c0033697066733a2f2f516d57695946647a376343676956574d426373526a67444c48547756686a33413458327373724e755153644b6751

Deployed Bytecode

0x60806040526004361061010d5760003560e01c8063715018a611610095578063b88d4fde11610064578063b88d4fde146103ae578063c2a70fac146103ce578063c87b56dd146103ee578063e985e9c51461040e578063f2fde38b1461045757600080fd5b8063715018a6146103465780638da5cb5b1461035b57806395d89b4114610379578063a22cb4651461038e57600080fd5b806318160ddd116100dc57806318160ddd146102a357806323b872dd146102c657806342842e0e146102e65780636352211e1461030657806370a082311461032657600080fd5b806301ffc9a7146101f457806306fdde0314610229578063081812fc1461024b578063095ea7b31461028357600080fd5b366101ef5734156101ca57600061012c6007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d8060008114610176576040519150601f19603f3d011682016040523d82523d6000602084013e61017b565b606091505b50509050806101c85760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b505b61077d6101da6000546000190190565b600101116101ed576101ed336001610477565b005b600080fd5b34801561020057600080fd5b5061021461020f366004610f9e565b610495565b60405190151581526020015b60405180910390f35b34801561023557600080fd5b5061023e6104e7565b6040516102209190611013565b34801561025757600080fd5b5061026b610266366004611026565b610579565b6040516001600160a01b039091168152602001610220565b34801561028f57600080fd5b506101ed61029e366004611056565b6105bd565b3480156102af57600080fd5b50600054600019015b604051908152602001610220565b3480156102d257600080fd5b506101ed6102e1366004611080565b61065d565b3480156102f257600080fd5b506101ed610301366004611080565b6107ee565b34801561031257600080fd5b5061026b610321366004611026565b61080e565b34801561033257600080fd5b506102b86103413660046110bc565b610819565b34801561035257600080fd5b506101ed610868565b34801561036757600080fd5b506007546001600160a01b031661026b565b34801561038557600080fd5b5061023e61087c565b34801561039a57600080fd5b506101ed6103a93660046110e7565b61088b565b3480156103ba57600080fd5b506101ed6103c9366004611130565b610921565b3480156103da57600080fd5b506101ed6103e936600461120c565b61096b565b3480156103fa57600080fd5b5061023e610409366004611026565b610996565b34801561041a57600080fd5b5061021461042936600461128f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561046357600080fd5b506101ed6104723660046110bc565b6109f4565b610491828260405180602001604052806000815250610a6d565b5050565b60006301ffc9a760e01b6001600160e01b0319831614806104c657506380ac58cd60e01b6001600160e01b03198316145b806104e15750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600180546104f6906112b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610522906112b9565b801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058482610ada565b6105a1576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006105c88261080e565b9050336001600160a01b03821614610601576105e48133610429565b610601576040516367d9dca160e11b815260040160405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061066882610b0f565b9050836001600160a01b0316816001600160a01b03161461069b5760405162a1148160e81b815260040160405180910390fd5b60008281526005602052604090208054338082146001600160a01b038816909114176106e8576106cb8633610429565b6106e857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661070f57604051633a954ecd60e21b815260040160405180910390fd5b801561071a57600082555b6001600160a01b038681166000908152600460205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260036020526040902055600160e11b83166107a557600184016000818152600360205260409020546107a35760005481146107a35760008181526003602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b61080983838360405180602001604052806000815250610921565b505050565b60006104e182610b0f565b60006001600160a01b038216610842576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b610870610b7f565b61087a6000610bd9565b565b6060600280546104f6906112b9565b6001600160a01b0382163314156108b55760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61092c84848461065d565b6001600160a01b0383163b156109655761094884848484610c2b565b610965576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b610973610b7f565b6007805460ff60a01b1916600160a01b8515150217905561096560088383610eef565b600754606090600160a01b900460ff16156109dd5760086109b683610d14565b6040516020016109c792919061138e565b6040516020818303038152906040529050919050565b60086040516020016109c791906113c3565b919050565b6109fc610b7f565b6001600160a01b038116610a615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101bf565b610a6a81610bd9565b50565b610a778383610e12565b6001600160a01b0383163b15610809576000548281035b610aa16000868380600101945086610c2b565b610abe576040516368d2bf6b60e11b815260040160405180910390fd5b818110610a8e578160005414610ad357600080fd5b5050505050565b600081600111158015610aee575060005482105b80156104e1575050600090815260036020526040902054600160e01b161590565b60008180600111610b6657600054811015610b6657600081815260036020526040902054600160e01b8116610b64575b80610b5d575060001901600081815260036020526040902054610b3f565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b6007546001600160a01b0316331461087a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101bf565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610c609033908990889088906004016113cf565b6020604051808303816000875af1925050508015610c9b575060408051601f3d908101601f19168201909252610c989181019061140c565b60015b610cf6573d808015610cc9576040519150601f19603f3d011682016040523d82523d6000602084013e610cce565b606091505b508051610cee576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610d385750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d625780610d4c8161143f565b9150610d5b9050600a83611470565b9150610d3c565b60008167ffffffffffffffff811115610d7d57610d7d61111a565b6040519080825280601f01601f191660200182016040528015610da7576020820181803683370190505b5090505b8415610d0c57610dbc600183611484565b9150610dc9600a8661149b565b610dd49060306114af565b60f81b818381518110610de957610de96114c7565b60200101906001600160f81b031916908160001a905350610e0b600a86611470565b9450610dab565b6000546001600160a01b038316610e3b57604051622e076360e81b815260040160405180910390fd5b81610e595760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260046020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260036020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210610ea35760005550505050565b828054610efb906112b9565b90600052602060002090601f016020900481019282610f1d5760008555610f63565b82601f10610f365782800160ff19823516178555610f63565b82800160010185558215610f63579182015b82811115610f63578235825591602001919060010190610f48565b50610f6f929150610f73565b5090565b5b80821115610f6f5760008155600101610f74565b6001600160e01b031981168114610a6a57600080fd5b600060208284031215610fb057600080fd5b8135610b5d81610f88565b60005b83811015610fd6578181015183820152602001610fbe565b838111156109655750506000910152565b60008151808452610fff816020860160208601610fbb565b601f01601f19169290920160200192915050565b602081526000610b5d6020830184610fe7565b60006020828403121561103857600080fd5b5035919050565b80356001600160a01b03811681146109ef57600080fd5b6000806040838503121561106957600080fd5b6110728361103f565b946020939093013593505050565b60008060006060848603121561109557600080fd5b61109e8461103f565b92506110ac6020850161103f565b9150604084013590509250925092565b6000602082840312156110ce57600080fd5b610b5d8261103f565b803580151581146109ef57600080fd5b600080604083850312156110fa57600080fd5b6111038361103f565b9150611111602084016110d7565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561114657600080fd5b61114f8561103f565b935061115d6020860161103f565b925060408501359150606085013567ffffffffffffffff8082111561118157600080fd5b818701915087601f83011261119557600080fd5b8135818111156111a7576111a761111a565b604051601f8201601f19908116603f011681019083821181831017156111cf576111cf61111a565b816040528281528a60208487010111156111e857600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006040848603121561122157600080fd5b61122a846110d7565b9250602084013567ffffffffffffffff8082111561124757600080fd5b818601915086601f83011261125b57600080fd5b81358181111561126a57600080fd5b87602082850101111561127c57600080fd5b6020830194508093505050509250925092565b600080604083850312156112a257600080fd5b6112ab8361103f565b91506111116020840161103f565b600181811c908216806112cd57607f821691505b602082108114156112ee57634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c908083168061130e57607f831692505b602080841082141561133057634e487b7160e01b600052602260045260246000fd5b818015611344576001811461135557611382565b60ff19861689528489019650611382565b60008881526020902060005b8681101561137a5781548b820152908501908301611361565b505084890196505b50505050505092915050565b600061139a82856112f4565b83516113aa818360208801610fbb565b64173539b7b760d91b9101908152600501949350505050565b6000610b5d82846112f4565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061140290830184610fe7565b9695505050505050565b60006020828403121561141e57600080fd5b8151610b5d81610f88565b634e487b7160e01b600052601160045260246000fd5b600060001982141561145357611453611429565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261147f5761147f61145a565b500490565b60008282101561149657611496611429565b500390565b6000826114aa576114aa61145a565b500690565b600082198211156114c2576114c2611429565b500190565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f62a70d793465aa534e9a9fe034a8ae99d6ff57650f9be495bb39384d58e31b064736f6c634300080c0033

Deployed Bytecode Sourcemap

23633:1094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23916:9;:13;23913:156;;23947:9;23970:7;1471:6;;-1:-1:-1;;;;;1471:6:0;;1398:87;23970:7;-1:-1:-1;;;;;23962:21:0;23991:9;23962:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23946:59;;;24028:4;24020:37;;;;-1:-1:-1;;;24020:37:0;;426:2:1;24020:37:0;;;408:21:1;465:2;445:18;;;438:30;-1:-1:-1;;;484:18:1;;;477:50;544:18;;24020:37:0;;;;;;;;;23931:138;23913:156;24130:4;24113:13;6920:7;7117:13;-1:-1:-1;;7117:31:0;;6859:308;24113:13;24109:1;:17;:25;24106:89;;24155:24;24165:10;24177:1;24155:9;:24::i;:::-;23633:1094;;;;;7177:352;;;;;;;;;;-1:-1:-1;7177:352:0;;;;;:::i;:::-;;:::i;:::-;;;1124:14:1;;1117:22;1099:41;;1087:2;1072:18;7177:352:0;;;;;;;;11143:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12523:212::-;;;;;;;;;;-1:-1:-1;12523:212:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2251:32:1;;;2233:51;;2221:2;2206:18;12523:212:0;2087:203:1;12121:394:0;;;;;;;;;;-1:-1:-1;12121:394:0;;;;;:::i;:::-;;:::i;6859:308::-;;;;;;;;;;-1:-1:-1;6920:7:0;7117:13;-1:-1:-1;;7117:31:0;6859:308;;;2878:25:1;;;2866:2;2851:18;6859:308:0;2732:177:1;17650:2691:0;;;;;;;;;;-1:-1:-1;17650:2691:0;;;;;:::i;:::-;;:::i;13231:185::-;;;;;;;;;;-1:-1:-1;13231:185:0;;;;;:::i;:::-;;:::i;10983:152::-;;;;;;;;;;-1:-1:-1;10983:152:0;;;;;:::i;:::-;;:::i;7537:232::-;;;;;;;;;;-1:-1:-1;7537:232:0;;;;;:::i;:::-;;:::i;2046:103::-;;;;;;;;;;;;;:::i;1398:87::-;;;;;;;;;;-1:-1:-1;1471:6:0;;-1:-1:-1;;;;;1471:6:0;1398:87;;11251:104;;;;;;;;;;;;;:::i;12743:308::-;;;;;;;;;;-1:-1:-1;12743:308:0;;;;;:::i;:::-;;:::i;13424:399::-;;;;;;;;;;-1:-1:-1;13424:399:0;;;;;:::i;:::-;;:::i;24225:144::-;;;;;;;;;;-1:-1:-1;24225:144:0;;;;;:::i;:::-;;:::i;24377:347::-;;;;;;;;;;-1:-1:-1;24377:347:0;;;;;:::i;:::-;;:::i;13059:164::-;;;;;;;;;;-1:-1:-1;13059:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;13180:25:0;;;13156:4;13180:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;13059:164;2304:201;;;;;;;;;;-1:-1:-1;2304:201:0;;;;;:::i;:::-;;:::i;14120:112::-;14197:27;14207:2;14211:8;14197:27;;;;;;;;;;;;:9;:27::i;:::-;14120:112;;:::o;7177:352::-;7262:4;-1:-1:-1;;;;;;;;;7299:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;7376:25:0;;;7299:102;:179;;;-1:-1:-1;;;;;;;;;;7453:25:0;;;7299:179;7279:199;7177:352;-1:-1:-1;;7177:352:0:o;11143:100::-;11197:13;11230:5;11223:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11143:100;:::o;12523:212::-;12599:7;12624:16;12632:7;12624;:16::i;:::-;12619:64;;12649:34;;-1:-1:-1;;;12649:34:0;;;;;;;;;;;12619:64;-1:-1:-1;12703:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;12703:24:0;;12523:212::o;12121:394::-;12202:13;12218:16;12226:7;12218;:16::i;:::-;12202:32;-1:-1:-1;21632:10:0;-1:-1:-1;;;;;12251:28:0;;;12247:175;;12299:44;12316:5;21632:10;13059:164;:::i;12299:44::-;12294:128;;12371:35;;-1:-1:-1;;;12371:35:0;;;;;;;;;;;12294:128;12434:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;12434:29:0;-1:-1:-1;;;;;12434:29:0;;;;;;;;;12479:28;;12434:24;;12479:28;;;;;;;12191:324;12121:394;;:::o;17650:2691::-;17784:27;17814;17833:7;17814:18;:27::i;:::-;17784:57;;17899:4;-1:-1:-1;;;;;17858:45:0;17874:19;-1:-1:-1;;;;;17858:45:0;;17854:86;;17912:28;;-1:-1:-1;;;17912:28:0;;;;;;;;;;;17854:86;17954:27;16731:21;;;16558:15;16773:4;16766:36;16855:4;16839:21;;16945:26;;21632:10;17593:30;;;-1:-1:-1;;;;;17291:26:0;;17572:19;;;17569:55;18133:174;;18220:43;18237:4;21632:10;13059:164;:::i;18220:43::-;18215:92;;18272:35;;-1:-1:-1;;;18272:35:0;;;;;;;;;;;18215:92;-1:-1:-1;;;;;18324:16:0;;18320:52;;18349:23;;-1:-1:-1;;;18349:23:0;;;;;;;;;;;18320:52;18465:15;18462:160;;;18605:1;18584:19;18577:30;18462:160;-1:-1:-1;;;;;19000:24:0;;;;;;;:18;:24;;;;;;18998:26;;-1:-1:-1;;18998:26:0;;;19069:22;;;;;;;;;19067:24;;-1:-1:-1;19067:24:0;;;10936:11;10912:22;10908:40;10895:62;-1:-1:-1;;;10895:62:0;19362:26;;;;:17;:26;;;;;:174;-1:-1:-1;;;19656:46:0;;19652:626;;19760:1;19750:11;;19728:19;19883:30;;;:17;:30;;;;;;19879:384;;20021:13;;20006:11;:28;20002:242;;20168:30;;;;:17;:30;;;;;:52;;;20002:242;19709:569;19652:626;20325:7;20321:2;-1:-1:-1;;;;;20306:27:0;20315:4;-1:-1:-1;;;;;20306:27:0;;;;;;;;;;;17773:2568;;;17650:2691;;;:::o;13231:185::-;13369:39;13386:4;13392:2;13396:7;13369:39;;;;;;;;;;;;:16;:39::i;:::-;13231:185;;;:::o;10983:152::-;11055:7;11098:27;11117:7;11098:18;:27::i;7537:232::-;7609:7;-1:-1:-1;;;;;7633:19:0;;7629:60;;7661:28;;-1:-1:-1;;;7661:28:0;;;;;;;;;;;7629:60;-1:-1:-1;;;;;;7707:25:0;;;;;:18;:25;;;;;;5435:13;7707:54;;7537:232::o;2046:103::-;1284:13;:11;:13::i;:::-;2111:30:::1;2138:1;2111:18;:30::i;:::-;2046:103::o:0;11251:104::-;11307:13;11340:7;11333:14;;;;;:::i;12743:308::-;-1:-1:-1;;;;;12842:31:0;;21632:10;12842:31;12838:61;;;12882:17;;-1:-1:-1;;;12882:17:0;;;;;;;;;;;12838:61;21632:10;12912:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;12912:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;12912:60:0;;;;;;;;;;12988:55;;1099:41:1;;;12912:49:0;;21632:10;12988:55;;1072:18:1;12988:55:0;;;;;;;12743:308;;:::o;13424:399::-;13591:31;13604:4;13610:2;13614:7;13591:12;:31::i;:::-;-1:-1:-1;;;;;13637:14:0;;;:19;13633:183;;13676:56;13707:4;13713:2;13717:7;13726:5;13676:30;:56::i;:::-;13671:145;;13760:40;;-1:-1:-1;;;13760:40:0;;;;;;;;;;;13671:145;13424:399;;;;:::o;24225:144::-;1284:13;:11;:13::i;:::-;24312:9:::1;:20:::0;;-1:-1:-1;;;;24312:20:0::1;-1:-1:-1::0;;;24312:20:0;::::1;;;;::::0;;24343:18:::1;:7;24353:8:::0;;24343:18:::1;:::i;24377:347::-:0;24530:9;;24495:13;;-1:-1:-1;;;24530:9:0;;;;24526:191;;;24587:7;24596:25;24613:7;24596:16;:25::i;:::-;24570:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24556:76;;24377:347;;;:::o;24526:191::-;24696:7;24679:25;;;;;;;;:::i;24526:191::-;24377:347;;;:::o;2304:201::-;1284:13;:11;:13::i;:::-;-1:-1:-1;;;;;2393:22:0;::::1;2385:73;;;::::0;-1:-1:-1;;;2385:73:0;;8508:2:1;2385:73:0::1;::::0;::::1;8490:21:1::0;8547:2;8527:18;;;8520:30;8586:34;8566:18;;;8559:62;-1:-1:-1;;;8637:18:1;;;8630:36;8683:19;;2385:73:0::1;8306:402:1::0;2385:73:0::1;2469:28;2488:8;2469:18;:28::i;:::-;2304:201:::0;:::o;14240:689::-;14371:19;14377:2;14381:8;14371:5;:19::i;:::-;-1:-1:-1;;;;;14432:14:0;;;:19;14428:483;;14472:11;14486:13;14534:14;;;14567:233;14598:62;14637:1;14641:2;14645:7;;;;;;14654:5;14598:30;:62::i;:::-;14593:167;;14696:40;;-1:-1:-1;;;14696:40:0;;;;;;;;;;;14593:167;14795:3;14787:5;:11;14567:233;;14882:3;14865:13;;:20;14861:34;;14887:8;;;14861:34;14453:458;;14240:689;;;:::o;13831:281::-;13896:4;13952:7;6731:1;13933:26;;:66;;;;;13986:13;;13976:7;:23;13933:66;:152;;;;-1:-1:-1;;14037:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;14037:43:0;:48;;13831:281::o;8531:1129::-;8598:7;8633;;6731:1;8682:23;8678:915;;8735:13;;8728:4;:20;8724:869;;;8773:14;8790:23;;;:17;:23;;;;;;-1:-1:-1;;;8879:23:0;;8875:699;;9398:113;9405:11;9398:113;;-1:-1:-1;;;9476:6:0;9458:25;;;;:17;:25;;;;;;9398:113;;;9544:6;8531:1129;-1:-1:-1;;;8531:1129:0:o;8875:699::-;8750:843;8724:869;9621:31;;-1:-1:-1;;;9621:31:0;;;;;;;;;;;1563:132;1471:6;;-1:-1:-1;;;;;1471:6:0;21632:10;1627:23;1619:68;;;;-1:-1:-1;;;1619:68:0;;8915:2:1;1619:68:0;;;8897:21:1;;;8934:18;;;8927:30;8993:34;8973:18;;;8966:62;9045:18;;1619:68:0;8713:356:1;2665:191:0;2758:6;;;-1:-1:-1;;;;;2775:17:0;;;-1:-1:-1;;;;;;2775:17:0;;;;;;;2808:40;;2758:6;;;2775:17;2758:6;;2808:40;;2739:16;;2808:40;2728:128;2665:191;:::o;20349:716::-;20533:88;;-1:-1:-1;;;20533:88:0;;20512:4;;-1:-1:-1;;;;;20533:45:0;;;;;:88;;21632:10;;20600:4;;20606:7;;20615:5;;20533:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20533:88:0;;;;;;;;-1:-1:-1;;20533:88:0;;;;;;;;;;;;:::i;:::-;;;20529:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20816:13:0;;20812:235;;20862:40;;-1:-1:-1;;;20862:40:0;;;;;;;;;;;20812:235;21005:6;20999:13;20990:6;20986:2;20982:15;20975:38;20529:529;-1:-1:-1;;;;;;20692:64:0;-1:-1:-1;;;20692:64:0;;-1:-1:-1;20529:529:0;20349:716;;;;;;:::o;151:532::-;207:13;237:10;233:53;;-1:-1:-1;;264:10:0;;;;;;;;;;;;-1:-1:-1;;;264:10:0;;;;;151:532::o;233:53::-;311:5;296:12;352:78;359:9;;352:78;;385:8;;;;:::i;:::-;;-1:-1:-1;408:10:0;;-1:-1:-1;416:2:0;408:10;;:::i;:::-;;;352:78;;;440:19;472:6;462:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;462:17:0;;440:39;;490:154;497:10;;490:154;;524:11;534:1;524:11;;:::i;:::-;;-1:-1:-1;593:10:0;601:2;593:5;:10;:::i;:::-;580:24;;:2;:24;:::i;:::-;567:39;;550:6;557;550:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;550:56:0;;;;;;;;-1:-1:-1;621:11:0;630:2;621:11;;:::i;:::-;;;490:154;;14937:1392;15010:20;15033:13;-1:-1:-1;;;;;15061:16:0;;15057:48;;15086:19;;-1:-1:-1;;;15086:19:0;;;;;;;;;;;15057:48;15120:13;15116:44;;15142:18;;-1:-1:-1;;;15142:18:0;;;;;;;;;;;15116:44;-1:-1:-1;;;;;15574:22:0;;;;;;:18;:22;;5503:2;15574:22;;:70;;15612:31;15600:44;;15574:70;;;10936:11;10912:22;10908:40;-1:-1:-1;12079:15:0;;12054:23;12050:45;10905:51;10895:62;15887:31;;;;:17;:31;;;;;:173;15905:12;16136:23;;;16174:101;16201:35;;16226:9;;;;;-1:-1:-1;;;;;16201:35:0;;;16218:1;;16201:35;;16218:1;;16201:35;16270:3;16260:7;:13;16174:101;;16291:13;:19;-1:-1:-1;;;;14937:1392:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;573:131:1;-1:-1:-1;;;;;;647:32:1;;637:43;;627:71;;694:1;691;684:12;709:245;767:6;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:30;918:5;894:30;:::i;1151:258::-;1223:1;1233:113;1247:6;1244:1;1241:13;1233:113;;;1323:11;;;1317:18;1304:11;;;1297:39;1269:2;1262:10;1233:113;;;1364:6;1361:1;1358:13;1355:48;;;-1:-1:-1;;1399:1:1;1381:16;;1374:27;1151:258::o;1414:::-;1456:3;1494:5;1488:12;1521:6;1516:3;1509:19;1537:63;1593:6;1586:4;1581:3;1577:14;1570:4;1563:5;1559:16;1537:63;:::i;:::-;1654:2;1633:15;-1:-1:-1;;1629:29:1;1620:39;;;;1661:4;1616:50;;1414:258;-1:-1:-1;;1414:258:1:o;1677:220::-;1826:2;1815:9;1808:21;1789:4;1846:45;1887:2;1876:9;1872:18;1864:6;1846:45;:::i;1902:180::-;1961:6;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;-1:-1:-1;2053:23:1;;1902:180;-1:-1:-1;1902:180:1:o;2295:173::-;2363:20;;-1:-1:-1;;;;;2412:31:1;;2402:42;;2392:70;;2458:1;2455;2448:12;2473:254;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2641:29;2660:9;2641:29;:::i;:::-;2631:39;2717:2;2702:18;;;;2689:32;;-1:-1:-1;;;2473:254:1:o;2914:328::-;2991:6;2999;3007;3060:2;3048:9;3039:7;3035:23;3031:32;3028:52;;;3076:1;3073;3066:12;3028:52;3099:29;3118:9;3099:29;:::i;:::-;3089:39;;3147:38;3181:2;3170:9;3166:18;3147:38;:::i;:::-;3137:48;;3232:2;3221:9;3217:18;3204:32;3194:42;;2914:328;;;;;:::o;3247:186::-;3306:6;3359:2;3347:9;3338:7;3334:23;3330:32;3327:52;;;3375:1;3372;3365:12;3327:52;3398:29;3417:9;3398:29;:::i;3438:160::-;3503:20;;3559:13;;3552:21;3542:32;;3532:60;;3588:1;3585;3578:12;3603:254;3668:6;3676;3729:2;3717:9;3708:7;3704:23;3700:32;3697:52;;;3745:1;3742;3735:12;3697:52;3768:29;3787:9;3768:29;:::i;:::-;3758:39;;3816:35;3847:2;3836:9;3832:18;3816:35;:::i;:::-;3806:45;;3603:254;;;;;:::o;3862:127::-;3923:10;3918:3;3914:20;3911:1;3904:31;3954:4;3951:1;3944:15;3978:4;3975:1;3968:15;3994:1138;4089:6;4097;4105;4113;4166:3;4154:9;4145:7;4141:23;4137:33;4134:53;;;4183:1;4180;4173:12;4134:53;4206:29;4225:9;4206:29;:::i;:::-;4196:39;;4254:38;4288:2;4277:9;4273:18;4254:38;:::i;:::-;4244:48;;4339:2;4328:9;4324:18;4311:32;4301:42;;4394:2;4383:9;4379:18;4366:32;4417:18;4458:2;4450:6;4447:14;4444:34;;;4474:1;4471;4464:12;4444:34;4512:6;4501:9;4497:22;4487:32;;4557:7;4550:4;4546:2;4542:13;4538:27;4528:55;;4579:1;4576;4569:12;4528:55;4615:2;4602:16;4637:2;4633;4630:10;4627:36;;;4643:18;;:::i;:::-;4718:2;4712:9;4686:2;4772:13;;-1:-1:-1;;4768:22:1;;;4792:2;4764:31;4760:40;4748:53;;;4816:18;;;4836:22;;;4813:46;4810:72;;;4862:18;;:::i;:::-;4902:10;4898:2;4891:22;4937:2;4929:6;4922:18;4977:7;4972:2;4967;4963;4959:11;4955:20;4952:33;4949:53;;;4998:1;4995;4988:12;4949:53;5054:2;5049;5045;5041:11;5036:2;5028:6;5024:15;5011:46;5099:1;5094:2;5089;5081:6;5077:15;5073:24;5066:35;5120:6;5110:16;;;;;;;3994:1138;;;;;;;:::o;5137:660::-;5214:6;5222;5230;5283:2;5271:9;5262:7;5258:23;5254:32;5251:52;;;5299:1;5296;5289:12;5251:52;5322:26;5338:9;5322:26;:::i;:::-;5312:36;;5399:2;5388:9;5384:18;5371:32;5422:18;5463:2;5455:6;5452:14;5449:34;;;5479:1;5476;5469:12;5449:34;5517:6;5506:9;5502:22;5492:32;;5562:7;5555:4;5551:2;5547:13;5543:27;5533:55;;5584:1;5581;5574:12;5533:55;5624:2;5611:16;5650:2;5642:6;5639:14;5636:34;;;5666:1;5663;5656:12;5636:34;5711:7;5706:2;5697:6;5693:2;5689:15;5685:24;5682:37;5679:57;;;5732:1;5729;5722:12;5679:57;5763:2;5759;5755:11;5745:21;;5785:6;5775:16;;;;;5137:660;;;;;:::o;5802:260::-;5870:6;5878;5931:2;5919:9;5910:7;5906:23;5902:32;5899:52;;;5947:1;5944;5937:12;5899:52;5970:29;5989:9;5970:29;:::i;:::-;5960:39;;6018:38;6052:2;6041:9;6037:18;6018:38;:::i;6067:380::-;6146:1;6142:12;;;;6189;;;6210:61;;6264:4;6256:6;6252:17;6242:27;;6210:61;6317:2;6309:6;6306:14;6286:18;6283:38;6280:161;;;6363:10;6358:3;6354:20;6351:1;6344:31;6398:4;6395:1;6388:15;6426:4;6423:1;6416:15;6280:161;;6067:380;;;:::o;6578:973::-;6663:12;;6628:3;;6718:1;6738:18;;;;6791;;;;6818:61;;6872:4;6864:6;6860:17;6850:27;;6818:61;6898:2;6946;6938:6;6935:14;6915:18;6912:38;6909:161;;;6992:10;6987:3;6983:20;6980:1;6973:31;7027:4;7024:1;7017:15;7055:4;7052:1;7045:15;6909:161;7086:18;7113:104;;;;7231:1;7226:319;;;;7079:466;;7113:104;-1:-1:-1;;7146:24:1;;7134:37;;7191:16;;;;-1:-1:-1;7113:104:1;;7226:319;6525:1;6518:14;;;6562:4;6549:18;;7320:1;7334:165;7348:6;7345:1;7342:13;7334:165;;;7426:14;;7413:11;;;7406:35;7469:16;;;;7363:10;;7334:165;;;7338:3;;7528:6;7523:3;7519:16;7512:23;;7079:466;;;;;;;6578:973;;;;:::o;7556:543::-;7833:3;7861:38;7895:3;7887:6;7861:38;:::i;:::-;7928:6;7922:13;7944:52;7989:6;7985:2;7978:4;7970:6;7966:17;7944:52;:::i;:::-;-1:-1:-1;;;8018:15:1;;8042:22;;;8091:1;8080:13;;7556:543;-1:-1:-1;;;;7556:543:1:o;8104:197::-;8232:3;8257:38;8291:3;8283:6;8257:38;:::i;9074:489::-;-1:-1:-1;;;;;9343:15:1;;;9325:34;;9395:15;;9390:2;9375:18;;9368:43;9442:2;9427:18;;9420:34;;;9490:3;9485:2;9470:18;;9463:31;;;9268:4;;9511:46;;9537:19;;9529:6;9511:46;:::i;:::-;9503:54;9074:489;-1:-1:-1;;;;;;9074:489:1:o;9568:249::-;9637:6;9690:2;9678:9;9669:7;9665:23;9661:32;9658:52;;;9706:1;9703;9696:12;9658:52;9738:9;9732:16;9757:30;9781:5;9757:30;:::i;9822:127::-;9883:10;9878:3;9874:20;9871:1;9864:31;9914:4;9911:1;9904:15;9938:4;9935:1;9928:15;9954:135;9993:3;-1:-1:-1;;10014:17:1;;10011:43;;;10034:18;;:::i;:::-;-1:-1:-1;10081:1:1;10070:13;;9954:135::o;10094:127::-;10155:10;10150:3;10146:20;10143:1;10136:31;10186:4;10183:1;10176:15;10210:4;10207:1;10200:15;10226:120;10266:1;10292;10282:35;;10297:18;;:::i;:::-;-1:-1:-1;10331:9:1;;10226:120::o;10351:125::-;10391:4;10419:1;10416;10413:8;10410:34;;;10424:18;;:::i;:::-;-1:-1:-1;10461:9:1;;10351:125::o;10481:112::-;10513:1;10539;10529:35;;10544:18;;:::i;:::-;-1:-1:-1;10578:9:1;;10481:112::o;10598:128::-;10638:3;10669:1;10665:6;10662:1;10659:13;10656:39;;;10675:18;;:::i;:::-;-1:-1:-1;10711:9:1;;10598:128::o;10731:127::-;10792:10;10787:3;10783:20;10780:1;10773:31;10823:4;10820:1;10813:15;10847:4;10844:1;10837:15

Swarm Source

ipfs://f62a70d793465aa534e9a9fe034a8ae99d6ff57650f9be495bb39384d58e31b0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.