ETH Price: $3,491.17 (+1.10%)

Token

Punk Doodled Apes (PDA)
 

Overview

Max Total Supply

5,000 PDA

Holders

404

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
8 PDA
0xfcb66c281af9ad2fc8358c0a7ac75e2b95bf0d8e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Punk Doodled Apes is a collection of 5000 NFTs. Heavily inspired by by the 2 well known NFT collection in the space Larva Lads and Doodles. It is a community driven project, the community decide where the project goes.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NFTArtGenBase

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-15
*/

// Sources flattened with hardhat v2.8.0 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/token/ERC721/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File @openzeppelin/contracts/token/ERC721/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]
// 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 @openzeppelin/contracts/utils/[email protected]
// 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 @openzeppelin/contracts/utils/introspection/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


// File @openzeppelin/contracts/token/ERC721/[email protected]
// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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


// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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);
    }
}


// File contracts/NFTArtGen.sol

pragma solidity ^0.8.4;



// 
// Built by https://nft-generator.art
// 
contract NFTArtGen is ERC721, Ownable {
    string internal baseUri;

    uint256 public cost = 0.05 ether;
    uint32 public maxPerMint = 5;
    uint32 public maxPerWallet = 20;
    uint32 public supply = 0;
    uint32 public totalSupply = 0;
    bool public open = false;
    mapping(address => uint256) internal addressMintedMap;

    uint32 private commission = 49; // 4.9%
    address private author = 0x460Fd5059E7301680fA53E63bbBF7272E643e89C;

    constructor(
        string memory _uri,
        string memory _name,
        string memory _symbol,
        uint32 _totalSupply,
        uint256 _cost,
        bool _open
    ) ERC721(_name, _symbol) {
        baseUri = _uri;
        totalSupply = _totalSupply;
        cost = _cost;
        open = _open;
    }

    // ------ Author Only ------

    function setCommission(uint32 _commision) public {
        require(msg.sender == author, "Incorrect Address");
        commission = _commision;
    }

    // ------ Owner Only ------

    function setCost(uint256 _cost) public onlyOwner {
        cost = _cost;
    }

    function setOpen(bool _open) public onlyOwner {
        open = _open;
    }

    function setMaxPerWallet(uint32 _max) public onlyOwner {
        maxPerWallet = _max;
    }

    function setMaxPerMint(uint32 _max) public onlyOwner {
        maxPerMint = _max;
    }

    function airdrop(address[] calldata to) public onlyOwner {
        for (uint32 i = 0; i < to.length; i++) {
            require(1 + supply <= totalSupply, "Limit reached");
            _safeMint(to[i], ++supply, "");
        }
    }

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

    // ------ Mint! ------

    function mint(uint32 count) external payable preMintChecks(count) {
        require(open == true, "Mint not open");
        performMint(count);
    }

    function performMint(uint32 count) internal {
        for (uint32 i = 0; i < count; i++) {
            _safeMint(msg.sender, ++supply, "");
        }
        
        addressMintedMap[msg.sender] += count;

        (bool success, ) = payable(author).call{
            value: (msg.value * commission) / 1000
        }("");
        require(success);
    }

    // ------ Read ------

    // ------ Modifiers ------

    modifier preMintChecks(uint32 count) {
        require(count > 0, "Mint at least one.");
        require(count < maxPerMint + 1, "Max mint reached.");
        require(msg.value >= cost * count, "Not enough fund.");
        require(supply + count < totalSupply + 1, "Mint sold out");
        require(
            addressMintedMap[msg.sender] + count <= maxPerWallet,
            "Max total mint reached"
        );
        _;
    }
}


// File contracts/extensions/Base.sol

pragma solidity ^0.8.4;

contract NFTArtGenBase is NFTArtGen {
    constructor(
        string memory _uri,
        string memory _name,
        string memory _symbol,
        uint32 _totalSupply,
        uint256 _cost,
        bool _open
    ) NFTArtGen(_uri, _name, _symbol, _totalSupply, _cost, _open) {}

    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_tokenId <= supply, "Not minted yet");

        return
            string(
                abi.encodePacked(baseUri, Strings.toString(_tokenId), ".json")
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint32","name":"_totalSupply","type":"uint32"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"bool","name":"_open","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"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[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"cost","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":"maxPerMint","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint32","name":"_commision","type":"uint32"}],"name":"setCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","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":"uint32","name":"","type":"uint32"}],"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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266b1a2bc2ec50000600855600980546001600160881b031916641400000005179055600b805477460fd5059e7301680fa53e63bbbf7272e643e89c000000316001600160c01b03199091161790553480156200005f57600080fd5b50604051620024f6380380620024f683398101604081905262000082916200030b565b85858585858584848160009080519060200190620000a29291906200019c565b508051620000b89060019060208401906200019c565b505050620000d5620000cf6200014660201b60201c565b6200014a565b8551620000ea9060079060208901906200019c565b5060098054600893909355901515600160801b0260ff60801b1963ffffffff9094166c01000000000000000000000000029390931664ffffffffff60601b19909216919091179190911790555062000423975050505050505050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001aa90620003d0565b90600052602060002090601f016020900481019282620001ce576000855562000219565b82601f10620001e957805160ff191683800117855562000219565b8280016001018555821562000219579182015b8281111562000219578251825591602001919060010190620001fc565b50620002279291506200022b565b5090565b5b808211156200022757600081556001016200022c565b805180151581146200025357600080fd5b919050565b600082601f83011262000269578081fd5b81516001600160401b03808211156200028657620002866200040d565b604051601f8301601f19908116603f01168101908282118183101715620002b157620002b16200040d565b81604052838152602092508683858801011115620002cd578485fd5b8491505b83821015620002f05785820183015181830184015290820190620002d1565b838211156200030157848385830101525b9695505050505050565b60008060008060008060c0878903121562000324578182fd5b86516001600160401b03808211156200033b578384fd5b620003498a838b0162000258565b975060208901519150808211156200035f578384fd5b6200036d8a838b0162000258565b9650604089015191508082111562000383578384fd5b506200039289828a0162000258565b945050606087015163ffffffff81168114620003ac578283fd5b60808801519093509150620003c460a0880162000242565b90509295509295509295565b600181811c90821680620003e557607f821691505b602082108114156200040757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6120c380620004336000396000f3fe6080604052600436106101cd5760003560e01c80636352211e116100f7578063a22cb46511610095578063e985e9c511610064578063e985e9c514610529578063f2fde38b14610572578063f8048d8f14610592578063fcfff16f146105b257600080fd5b8063a22cb465146104b6578063a71bbebe146104d6578063b88d4fde146104e9578063c87b56dd1461050957600080fd5b8063715018a6116100d1578063715018a61461044e578063729ad39e146104635780638da5cb5b1461048357806395d89b41146104a157600080fd5b80636352211e146103ee5780636fdca5e01461040e57806370a082311461042e57600080fd5b806318160ddd1161016f57806342842e0e1161013e57806342842e0e1461036c57806344a0d68a1461038c578063453c2310146103ac578063507e094f146103d157600080fd5b806318160ddd1461030057806323b872dd146103245780633006b543146103445780633ccfd60b1461036457600080fd5b8063081812fc116101ab578063081812fc14610262578063092501a01461029a578063095ea7b3146102bc57806313faede6146102dc57600080fd5b806301ffc9a7146101d2578063047fc9aa1461020757806306fdde0314610240575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611c53565b6105d3565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5060095461022b90600160401b900463ffffffff1681565b60405163ffffffff90911681526020016101fe565b34801561024c57600080fd5b50610255610625565b6040516101fe9190611e06565b34801561026e57600080fd5b5061028261027d366004611c8b565b6106b7565b6040516001600160a01b0390911681526020016101fe565b3480156102a657600080fd5b506102ba6102b5366004611ca3565b610751565b005b3480156102c857600080fd5b506102ba6102d7366004611ba0565b6107c3565b3480156102e857600080fd5b506102f260085481565b6040519081526020016101fe565b34801561030c57600080fd5b5060095461022b90600160601b900463ffffffff1681565b34801561033057600080fd5b506102ba61033f366004611a67565b6108d9565b34801561035057600080fd5b506102ba61035f366004611ca3565b61090a565b6102ba61095c565b34801561037857600080fd5b506102ba610387366004611a67565b6109de565b34801561039857600080fd5b506102ba6103a7366004611c8b565b6109f9565b3480156103b857600080fd5b5060095461022b90640100000000900463ffffffff1681565b3480156103dd57600080fd5b5060095461022b9063ffffffff1681565b3480156103fa57600080fd5b50610282610409366004611c8b565b610a28565b34801561041a57600080fd5b506102ba610429366004611c39565b610a9f565b34801561043a57600080fd5b506102f2610449366004611a14565b610ae7565b34801561045a57600080fd5b506102ba610b6e565b34801561046f57600080fd5b506102ba61047e366004611bc9565b610ba4565b34801561048f57600080fd5b506006546001600160a01b0316610282565b3480156104ad57600080fd5b50610255610cee565b3480156104c257600080fd5b506102ba6104d1366004611b77565b610cfd565b6102ba6104e4366004611ca3565b610d0c565b3480156104f557600080fd5b506102ba610504366004611aa2565b610f5d565b34801561051557600080fd5b50610255610524366004611c8b565b610f95565b34801561053557600080fd5b506101f2610544366004611a35565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561057e57600080fd5b506102ba61058d366004611a14565b61101a565b34801561059e57600080fd5b506102ba6105ad366004611ca3565b6110b2565b3480156105be57600080fd5b506009546101f290600160801b900460ff1681565b60006001600160e01b031982166380ac58cd60e01b148061060457506001600160e01b03198216635b5e139f60e01b145b8061061f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461063490611fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461066090611fa7565b80156106ad5780601f10610682576101008083540402835291602001916106ad565b820191906000526020600020905b81548152906001019060200180831161069057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107355760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600b5464010000000090046001600160a01b031633146107a75760405162461bcd60e51b8152602060048201526011602482015270496e636f7272656374204164647265737360781b604482015260640161072c565b600b805463ffffffff191663ffffffff92909216919091179055565b60006107ce82610a28565b9050806001600160a01b0316836001600160a01b0316141561083c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161072c565b336001600160a01b038216148061085857506108588133610544565b6108ca5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161072c565b6108d483836110f8565b505050565b6108e33382611166565b6108ff5760405162461bcd60e51b815260040161072c90611ea0565b6108d483838361125d565b6006546001600160a01b031633146109345760405162461bcd60e51b815260040161072c90611e6b565b6009805463ffffffff9092166401000000000267ffffffff0000000019909216919091179055565b6006546001600160a01b031633146109865760405162461bcd60e51b815260040161072c90611e6b565b604051600090339047908381818185875af1925050503d80600081146109c8576040519150601f19603f3d011682016040523d82523d6000602084013e6109cd565b606091505b50509050806109db57600080fd5b50565b6108d483838360405180602001604052806000815250610f5d565b6006546001600160a01b03163314610a235760405162461bcd60e51b815260040161072c90611e6b565b600855565b6000818152600260205260408120546001600160a01b03168061061f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161072c565b6006546001600160a01b03163314610ac95760405162461bcd60e51b815260040161072c90611e6b565b60098054911515600160801b0260ff60801b19909216919091179055565b60006001600160a01b038216610b525760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161072c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610b985760405162461bcd60e51b815260040161072c90611e6b565b610ba260006113fd565b565b6006546001600160a01b03163314610bce5760405162461bcd60e51b815260040161072c90611e6b565b60005b63ffffffff81168211156108d45760095463ffffffff600160601b8204811691610c0591600160401b909104166001611f09565b63ffffffff161115610c495760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b604482015260640161072c565b610cdc83838363ffffffff16818110610c7257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c879190611a14565b60098054600890610ca490600160401b900463ffffffff16611ffd565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff166040518060200160405280600081525061144f565b80610ce681611ffd565b915050610bd1565b60606001805461063490611fa7565b610d08338383611482565b5050565b8060008163ffffffff1611610d585760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b604482015260640161072c565b600954610d6c9063ffffffff166001611f09565b63ffffffff168163ffffffff1610610dba5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161072c565b8063ffffffff16600854610dce9190611f45565b341015610e105760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161072c565b600954610e2b90600160601b900463ffffffff166001611f09565b60095463ffffffff91821691610e4b918491600160401b90910416611f09565b63ffffffff1610610e8e5760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d081cdbdb19081bdd5d609a1b604482015260640161072c565b600954336000908152600a602052604090205463ffffffff640100000000909204821691610ebf9190841690611ef1565b1115610f065760405162461bcd60e51b815260206004820152601660248201527513585e081d1bdd185b081b5a5b9d081c995858da195960521b604482015260640161072c565b600954600160801b900460ff161515600114610f545760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b604482015260640161072c565b610d0882611551565b610f673383611166565b610f835760405162461bcd60e51b815260040161072c90611ea0565b610f8f8484848461164c565b50505050565b600954606090600160401b900463ffffffff16821115610fe85760405162461bcd60e51b815260206004820152600e60248201526d139bdd081b5a5b9d1959081e595d60921b604482015260640161072c565b6007610ff38361167f565b604051602001611004929190611d0f565b6040516020818303038152906040529050919050565b6006546001600160a01b031633146110445760405162461bcd60e51b815260040161072c90611e6b565b6001600160a01b0381166110a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072c565b6109db816113fd565b6006546001600160a01b031633146110dc5760405162461bcd60e51b815260040161072c90611e6b565b6009805463ffffffff191663ffffffff92909216919091179055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061112d82610a28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166111df5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161072c565b60006111ea83610a28565b9050806001600160a01b0316846001600160a01b031614806112255750836001600160a01b031661121a846106b7565b6001600160a01b0316145b8061125557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661127082610a28565b6001600160a01b0316146112d85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161072c565b6001600160a01b03821661133a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161072c565b6113456000826110f8565b6001600160a01b038316600090815260036020526040812080546001929061136e908490611f64565b90915550506001600160a01b038216600090815260036020526040812080546001929061139c908490611ef1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6114598383611799565b61146660008484846118db565b6108d45760405162461bcd60e51b815260040161072c90611e19565b816001600160a01b0316836001600160a01b031614156114e45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161072c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60005b8163ffffffff168163ffffffff16101561159c5761158a336009600881819054906101000a900463ffffffff16610ca490611ffd565b8061159481611ffd565b915050611554565b50336000908152600a60205260408120805463ffffffff841692906115c2908490611ef1565b9091555050600b546000906001600160a01b03640100000000820416906103e8906115f39063ffffffff1634611f45565b6115fd9190611f31565b604051600081818185875af1925050503d8060008114611639576040519150601f19603f3d011682016040523d82523d6000602084013e61163e565b606091505b5050905080610d0857600080fd5b61165784848461125d565b611663848484846118db565b610f8f5760405162461bcd60e51b815260040161072c90611e19565b6060816116a35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116cd57806116b781611fe2565b91506116c69050600a83611f31565b91506116a7565b60008167ffffffffffffffff8111156116f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611720576020820181803683370190505b5090505b841561125557611735600183611f64565b9150611742600a86612021565b61174d906030611ef1565b60f81b81838151811061177057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611792600a86611f31565b9450611724565b6001600160a01b0382166117ef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161072c565b6000818152600260205260409020546001600160a01b0316156118545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072c565b6001600160a01b038216600090815260036020526040812080546001929061187d908490611ef1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156119dd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061191f903390899088908890600401611dc9565b602060405180830381600087803b15801561193957600080fd5b505af1925050508015611969575060408051601f3d908101601f1916820190925261196691810190611c6f565b60015b6119c3573d808015611997576040519150601f19603f3d011682016040523d82523d6000602084013e61199c565b606091505b5080516119bb5760405162461bcd60e51b815260040161072c90611e19565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611255565b506001949350505050565b80356001600160a01b03811681146119ff57600080fd5b919050565b803580151581146119ff57600080fd5b600060208284031215611a25578081fd5b611a2e826119e8565b9392505050565b60008060408385031215611a47578081fd5b611a50836119e8565b9150611a5e602084016119e8565b90509250929050565b600080600060608486031215611a7b578081fd5b611a84846119e8565b9250611a92602085016119e8565b9150604084013590509250925092565b60008060008060808587031215611ab7578081fd5b611ac0856119e8565b9350611ace602086016119e8565b925060408501359150606085013567ffffffffffffffff80821115611af1578283fd5b818701915087601f830112611b04578283fd5b813581811115611b1657611b16612061565b604051601f8201601f19908116603f01168101908382118183101715611b3e57611b3e612061565b816040528281528a6020848701011115611b56578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611b89578182fd5b611b92836119e8565b9150611a5e60208401611a04565b60008060408385031215611bb2578182fd5b611bbb836119e8565b946020939093013593505050565b60008060208385031215611bdb578182fd5b823567ffffffffffffffff80821115611bf2578384fd5b818501915085601f830112611c05578384fd5b813581811115611c13578485fd5b8660208260051b8501011115611c27578485fd5b60209290920196919550909350505050565b600060208284031215611c4a578081fd5b611a2e82611a04565b600060208284031215611c64578081fd5b8135611a2e81612077565b600060208284031215611c80578081fd5b8151611a2e81612077565b600060208284031215611c9c578081fd5b5035919050565b600060208284031215611cb4578081fd5b813563ffffffff81168114611a2e578182fd5b60008151808452611cdf816020860160208601611f7b565b601f01601f19169290920160200192915050565b60008151611d05818560208601611f7b565b9290920192915050565b600080845482600182811c915080831680611d2b57607f831692505b6020808410821415611d4b57634e487b7160e01b87526022600452602487fd5b818015611d5f5760018114611d7057611d9c565b60ff19861689528489019650611d9c565b60008b815260209020885b86811015611d945781548b820152908501908301611d7b565b505084890196505b505050505050611dc0611daf8286611cf3565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611dfc90830184611cc7565b9695505050505050565b602081526000611a2e6020830184611cc7565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611f0457611f04612035565b500190565b600063ffffffff808316818516808303821115611f2857611f28612035565b01949350505050565b600082611f4057611f4061204b565b500490565b6000816000190483118215151615611f5f57611f5f612035565b500290565b600082821015611f7657611f76612035565b500390565b60005b83811015611f96578181015183820152602001611f7e565b83811115610f8f5750506000910152565b600181811c90821680611fbb57607f821691505b60208210811415611fdc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611ff657611ff6612035565b5060010190565b600063ffffffff8083168181141561201757612017612035565b6001019392505050565b6000826120305761203061204b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109db57600080fdfea26469706673582212208a0eaf8d3185c71bb1d0f8ca33377a601c4aaea05c5b0227f29ba8397a734db564736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656962787a75637434356666326a326a6c786b6e6c636479617336617866726a7a677834796e366f7435647370647a3634336f676b712f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001150756e6b20446f6f646c6564204170657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035044410000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80636352211e116100f7578063a22cb46511610095578063e985e9c511610064578063e985e9c514610529578063f2fde38b14610572578063f8048d8f14610592578063fcfff16f146105b257600080fd5b8063a22cb465146104b6578063a71bbebe146104d6578063b88d4fde146104e9578063c87b56dd1461050957600080fd5b8063715018a6116100d1578063715018a61461044e578063729ad39e146104635780638da5cb5b1461048357806395d89b41146104a157600080fd5b80636352211e146103ee5780636fdca5e01461040e57806370a082311461042e57600080fd5b806318160ddd1161016f57806342842e0e1161013e57806342842e0e1461036c57806344a0d68a1461038c578063453c2310146103ac578063507e094f146103d157600080fd5b806318160ddd1461030057806323b872dd146103245780633006b543146103445780633ccfd60b1461036457600080fd5b8063081812fc116101ab578063081812fc14610262578063092501a01461029a578063095ea7b3146102bc57806313faede6146102dc57600080fd5b806301ffc9a7146101d2578063047fc9aa1461020757806306fdde0314610240575b600080fd5b3480156101de57600080fd5b506101f26101ed366004611c53565b6105d3565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5060095461022b90600160401b900463ffffffff1681565b60405163ffffffff90911681526020016101fe565b34801561024c57600080fd5b50610255610625565b6040516101fe9190611e06565b34801561026e57600080fd5b5061028261027d366004611c8b565b6106b7565b6040516001600160a01b0390911681526020016101fe565b3480156102a657600080fd5b506102ba6102b5366004611ca3565b610751565b005b3480156102c857600080fd5b506102ba6102d7366004611ba0565b6107c3565b3480156102e857600080fd5b506102f260085481565b6040519081526020016101fe565b34801561030c57600080fd5b5060095461022b90600160601b900463ffffffff1681565b34801561033057600080fd5b506102ba61033f366004611a67565b6108d9565b34801561035057600080fd5b506102ba61035f366004611ca3565b61090a565b6102ba61095c565b34801561037857600080fd5b506102ba610387366004611a67565b6109de565b34801561039857600080fd5b506102ba6103a7366004611c8b565b6109f9565b3480156103b857600080fd5b5060095461022b90640100000000900463ffffffff1681565b3480156103dd57600080fd5b5060095461022b9063ffffffff1681565b3480156103fa57600080fd5b50610282610409366004611c8b565b610a28565b34801561041a57600080fd5b506102ba610429366004611c39565b610a9f565b34801561043a57600080fd5b506102f2610449366004611a14565b610ae7565b34801561045a57600080fd5b506102ba610b6e565b34801561046f57600080fd5b506102ba61047e366004611bc9565b610ba4565b34801561048f57600080fd5b506006546001600160a01b0316610282565b3480156104ad57600080fd5b50610255610cee565b3480156104c257600080fd5b506102ba6104d1366004611b77565b610cfd565b6102ba6104e4366004611ca3565b610d0c565b3480156104f557600080fd5b506102ba610504366004611aa2565b610f5d565b34801561051557600080fd5b50610255610524366004611c8b565b610f95565b34801561053557600080fd5b506101f2610544366004611a35565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561057e57600080fd5b506102ba61058d366004611a14565b61101a565b34801561059e57600080fd5b506102ba6105ad366004611ca3565b6110b2565b3480156105be57600080fd5b506009546101f290600160801b900460ff1681565b60006001600160e01b031982166380ac58cd60e01b148061060457506001600160e01b03198216635b5e139f60e01b145b8061061f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461063490611fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461066090611fa7565b80156106ad5780601f10610682576101008083540402835291602001916106ad565b820191906000526020600020905b81548152906001019060200180831161069057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107355760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600b5464010000000090046001600160a01b031633146107a75760405162461bcd60e51b8152602060048201526011602482015270496e636f7272656374204164647265737360781b604482015260640161072c565b600b805463ffffffff191663ffffffff92909216919091179055565b60006107ce82610a28565b9050806001600160a01b0316836001600160a01b0316141561083c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161072c565b336001600160a01b038216148061085857506108588133610544565b6108ca5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161072c565b6108d483836110f8565b505050565b6108e33382611166565b6108ff5760405162461bcd60e51b815260040161072c90611ea0565b6108d483838361125d565b6006546001600160a01b031633146109345760405162461bcd60e51b815260040161072c90611e6b565b6009805463ffffffff9092166401000000000267ffffffff0000000019909216919091179055565b6006546001600160a01b031633146109865760405162461bcd60e51b815260040161072c90611e6b565b604051600090339047908381818185875af1925050503d80600081146109c8576040519150601f19603f3d011682016040523d82523d6000602084013e6109cd565b606091505b50509050806109db57600080fd5b50565b6108d483838360405180602001604052806000815250610f5d565b6006546001600160a01b03163314610a235760405162461bcd60e51b815260040161072c90611e6b565b600855565b6000818152600260205260408120546001600160a01b03168061061f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161072c565b6006546001600160a01b03163314610ac95760405162461bcd60e51b815260040161072c90611e6b565b60098054911515600160801b0260ff60801b19909216919091179055565b60006001600160a01b038216610b525760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161072c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610b985760405162461bcd60e51b815260040161072c90611e6b565b610ba260006113fd565b565b6006546001600160a01b03163314610bce5760405162461bcd60e51b815260040161072c90611e6b565b60005b63ffffffff81168211156108d45760095463ffffffff600160601b8204811691610c0591600160401b909104166001611f09565b63ffffffff161115610c495760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b604482015260640161072c565b610cdc83838363ffffffff16818110610c7257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c879190611a14565b60098054600890610ca490600160401b900463ffffffff16611ffd565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff166040518060200160405280600081525061144f565b80610ce681611ffd565b915050610bd1565b60606001805461063490611fa7565b610d08338383611482565b5050565b8060008163ffffffff1611610d585760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b604482015260640161072c565b600954610d6c9063ffffffff166001611f09565b63ffffffff168163ffffffff1610610dba5760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b604482015260640161072c565b8063ffffffff16600854610dce9190611f45565b341015610e105760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b604482015260640161072c565b600954610e2b90600160601b900463ffffffff166001611f09565b60095463ffffffff91821691610e4b918491600160401b90910416611f09565b63ffffffff1610610e8e5760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d081cdbdb19081bdd5d609a1b604482015260640161072c565b600954336000908152600a602052604090205463ffffffff640100000000909204821691610ebf9190841690611ef1565b1115610f065760405162461bcd60e51b815260206004820152601660248201527513585e081d1bdd185b081b5a5b9d081c995858da195960521b604482015260640161072c565b600954600160801b900460ff161515600114610f545760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b604482015260640161072c565b610d0882611551565b610f673383611166565b610f835760405162461bcd60e51b815260040161072c90611ea0565b610f8f8484848461164c565b50505050565b600954606090600160401b900463ffffffff16821115610fe85760405162461bcd60e51b815260206004820152600e60248201526d139bdd081b5a5b9d1959081e595d60921b604482015260640161072c565b6007610ff38361167f565b604051602001611004929190611d0f565b6040516020818303038152906040529050919050565b6006546001600160a01b031633146110445760405162461bcd60e51b815260040161072c90611e6b565b6001600160a01b0381166110a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161072c565b6109db816113fd565b6006546001600160a01b031633146110dc5760405162461bcd60e51b815260040161072c90611e6b565b6009805463ffffffff191663ffffffff92909216919091179055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061112d82610a28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166111df5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161072c565b60006111ea83610a28565b9050806001600160a01b0316846001600160a01b031614806112255750836001600160a01b031661121a846106b7565b6001600160a01b0316145b8061125557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661127082610a28565b6001600160a01b0316146112d85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161072c565b6001600160a01b03821661133a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161072c565b6113456000826110f8565b6001600160a01b038316600090815260036020526040812080546001929061136e908490611f64565b90915550506001600160a01b038216600090815260036020526040812080546001929061139c908490611ef1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6114598383611799565b61146660008484846118db565b6108d45760405162461bcd60e51b815260040161072c90611e19565b816001600160a01b0316836001600160a01b031614156114e45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161072c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60005b8163ffffffff168163ffffffff16101561159c5761158a336009600881819054906101000a900463ffffffff16610ca490611ffd565b8061159481611ffd565b915050611554565b50336000908152600a60205260408120805463ffffffff841692906115c2908490611ef1565b9091555050600b546000906001600160a01b03640100000000820416906103e8906115f39063ffffffff1634611f45565b6115fd9190611f31565b604051600081818185875af1925050503d8060008114611639576040519150601f19603f3d011682016040523d82523d6000602084013e61163e565b606091505b5050905080610d0857600080fd5b61165784848461125d565b611663848484846118db565b610f8f5760405162461bcd60e51b815260040161072c90611e19565b6060816116a35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156116cd57806116b781611fe2565b91506116c69050600a83611f31565b91506116a7565b60008167ffffffffffffffff8111156116f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611720576020820181803683370190505b5090505b841561125557611735600183611f64565b9150611742600a86612021565b61174d906030611ef1565b60f81b81838151811061177057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611792600a86611f31565b9450611724565b6001600160a01b0382166117ef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161072c565b6000818152600260205260409020546001600160a01b0316156118545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161072c565b6001600160a01b038216600090815260036020526040812080546001929061187d908490611ef1565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156119dd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061191f903390899088908890600401611dc9565b602060405180830381600087803b15801561193957600080fd5b505af1925050508015611969575060408051601f3d908101601f1916820190925261196691810190611c6f565b60015b6119c3573d808015611997576040519150601f19603f3d011682016040523d82523d6000602084013e61199c565b606091505b5080516119bb5760405162461bcd60e51b815260040161072c90611e19565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611255565b506001949350505050565b80356001600160a01b03811681146119ff57600080fd5b919050565b803580151581146119ff57600080fd5b600060208284031215611a25578081fd5b611a2e826119e8565b9392505050565b60008060408385031215611a47578081fd5b611a50836119e8565b9150611a5e602084016119e8565b90509250929050565b600080600060608486031215611a7b578081fd5b611a84846119e8565b9250611a92602085016119e8565b9150604084013590509250925092565b60008060008060808587031215611ab7578081fd5b611ac0856119e8565b9350611ace602086016119e8565b925060408501359150606085013567ffffffffffffffff80821115611af1578283fd5b818701915087601f830112611b04578283fd5b813581811115611b1657611b16612061565b604051601f8201601f19908116603f01168101908382118183101715611b3e57611b3e612061565b816040528281528a6020848701011115611b56578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611b89578182fd5b611b92836119e8565b9150611a5e60208401611a04565b60008060408385031215611bb2578182fd5b611bbb836119e8565b946020939093013593505050565b60008060208385031215611bdb578182fd5b823567ffffffffffffffff80821115611bf2578384fd5b818501915085601f830112611c05578384fd5b813581811115611c13578485fd5b8660208260051b8501011115611c27578485fd5b60209290920196919550909350505050565b600060208284031215611c4a578081fd5b611a2e82611a04565b600060208284031215611c64578081fd5b8135611a2e81612077565b600060208284031215611c80578081fd5b8151611a2e81612077565b600060208284031215611c9c578081fd5b5035919050565b600060208284031215611cb4578081fd5b813563ffffffff81168114611a2e578182fd5b60008151808452611cdf816020860160208601611f7b565b601f01601f19169290920160200192915050565b60008151611d05818560208601611f7b565b9290920192915050565b600080845482600182811c915080831680611d2b57607f831692505b6020808410821415611d4b57634e487b7160e01b87526022600452602487fd5b818015611d5f5760018114611d7057611d9c565b60ff19861689528489019650611d9c565b60008b815260209020885b86811015611d945781548b820152908501908301611d7b565b505084890196505b505050505050611dc0611daf8286611cf3565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611dfc90830184611cc7565b9695505050505050565b602081526000611a2e6020830184611cc7565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611f0457611f04612035565b500190565b600063ffffffff808316818516808303821115611f2857611f28612035565b01949350505050565b600082611f4057611f4061204b565b500490565b6000816000190483118215151615611f5f57611f5f612035565b500290565b600082821015611f7657611f76612035565b500390565b60005b83811015611f96578181015183820152602001611f7e565b83811115610f8f5750506000910152565b600181811c90821680611fbb57607f821691505b60208210811415611fdc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611ff657611ff6612035565b5060010190565b600063ffffffff8083168181141561201757612017612035565b6001019392505050565b6000826120305761203061204b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109db57600080fdfea26469706673582212208a0eaf8d3185c71bb1d0f8ca33377a601c4aaea05c5b0227f29ba8397a734db564736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656962787a75637434356666326a326a6c786b6e6c636479617336617866726a7a677834796e366f7435647370647a3634336f676b712f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001150756e6b20446f6f646c6564204170657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035044410000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): ipfs://bafybeibxzuct45ff2j2jlxknlcdyas6axfrjzgx4yn6ot5dspdz643ogkq/
Arg [1] : _name (string): Punk Doodled Apes
Arg [2] : _symbol (string): PDA
Arg [3] : _totalSupply (uint32): 5000
Arg [4] : _cost (uint256): 0
Arg [5] : _open (bool): False

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [7] : 697066733a2f2f6261667962656962787a75637434356666326a326a6c786b6e
Arg [8] : 6c636479617336617866726a7a677834796e366f7435647370647a3634336f67
Arg [9] : 6b712f0000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [11] : 50756e6b20446f6f646c65642041706573000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [13] : 5044410000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39382:639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21302:305;;;;;;;;;;-1:-1:-1;21302:305:0;;;;;:::i;:::-;;:::i;:::-;;;7743:14:1;;7736:22;7718:41;;7706:2;7691:18;21302:305:0;;;;;;;;36580:24;;;;;;;;;;-1:-1:-1;36580:24:0;;;;-1:-1:-1;;;36580:24:0;;;;;;;;;17420:10:1;17408:23;;;17390:42;;17378:2;17363:18;36580:24:0;17345:93:1;22247:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23806:221::-;;;;;;;;;;-1:-1:-1;23806:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7041:32:1;;;7023:51;;7011:2;6996:18;23806:221:0;6978:102:1;37229:152:0;;;;;;;;;;-1:-1:-1;37229:152:0;;;;;:::i;:::-;;:::i;:::-;;23329:411;;;;;;;;;;-1:-1:-1;23329:411:0;;;;;:::i;:::-;;:::i;36468:32::-;;;;;;;;;;;;;;;;;;;17210:25:1;;;17198:2;17183:18;36468:32:0;17165:76:1;36611:29:0;;;;;;;;;;-1:-1:-1;36611:29:0;;;;-1:-1:-1;;;36611:29:0;;;;;;24556:339;;;;;;;;;;-1:-1:-1;24556:339:0;;;;;:::i;:::-;;:::i;37597:93::-;;;;;;;;;;-1:-1:-1;37597:93:0;;;;;:::i;:::-;;:::i;38040:192::-;;;:::i;24966:185::-;;;;;;;;;;-1:-1:-1;24966:185:0;;;;;:::i;:::-;;:::i;37424:80::-;;;;;;;;;;-1:-1:-1;37424:80:0;;;;;:::i;:::-;;:::i;36542:31::-;;;;;;;;;;-1:-1:-1;36542:31:0;;;;;;;;;;;36507:28;;;;;;;;;;-1:-1:-1;36507:28:0;;;;;;;;21941:239;;;;;;;;;;-1:-1:-1;21941:239:0;;;;;:::i;:::-;;:::i;37512:77::-;;;;;;;;;;-1:-1:-1;37512:77:0;;;;;:::i;:::-;;:::i;21671:208::-;;;;;;;;;;-1:-1:-1;21671:208:0;;;;;:::i;:::-;;:::i;35457:103::-;;;;;;;;;;;;;:::i;37795:237::-;;;;;;;;;;-1:-1:-1;37795:237:0;;;;;:::i;:::-;;:::i;34806:87::-;;;;;;;;;;-1:-1:-1;34879:6:0;;-1:-1:-1;;;;;34879:6:0;34806:87;;22416:104;;;;;;;;;;;;;:::i;24099:155::-;;;;;;;;;;-1:-1:-1;24099:155:0;;;;;:::i;:::-;;:::i;38270:152::-;;;;;;:::i;:::-;;:::i;25222:328::-;;;;;;;;;;-1:-1:-1;25222:328:0;;;;;:::i;:::-;;:::i;39680:338::-;;;;;;;;;;-1:-1:-1;39680:338:0;;;;;:::i;:::-;;:::i;24325:164::-;;;;;;;;;;-1:-1:-1;24325:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24446:25:0;;;24422:4;24446:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24325:164;35715:201;;;;;;;;;;-1:-1:-1;35715:201:0;;;;;:::i;:::-;;:::i;37698:89::-;;;;;;;;;;-1:-1:-1;37698:89:0;;;;;:::i;:::-;;:::i;36647:24::-;;;;;;;;;;-1:-1:-1;36647:24:0;;;;-1:-1:-1;;;36647:24:0;;;;;;21302:305;21404:4;-1:-1:-1;;;;;;21441:40:0;;-1:-1:-1;;;21441:40:0;;:105;;-1:-1:-1;;;;;;;21498:48:0;;-1:-1:-1;;;21498:48:0;21441:105;:158;;;-1:-1:-1;;;;;;;;;;19853:40:0;;;21563:36;21421:178;21302:305;-1:-1:-1;;21302:305:0:o;22247:100::-;22301:13;22334:5;22327:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22247:100;:::o;23806:221::-;23882:7;27149:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27149:16:0;23902:73;;;;-1:-1:-1;;;23902:73:0;;13194:2:1;23902:73:0;;;13176:21:1;13233:2;13213:18;;;13206:30;13272:34;13252:18;;;13245:62;-1:-1:-1;;;13323:18:1;;;13316:42;13375:19;;23902:73:0;;;;;;;;;-1:-1:-1;23995:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23995:24:0;;23806:221::o;37229:152::-;37311:6;;;;;-1:-1:-1;;;;;37311:6:0;37297:10;:20;37289:50;;;;-1:-1:-1;;;37289:50:0;;15882:2:1;37289:50:0;;;15864:21:1;15921:2;15901:18;;;15894:30;-1:-1:-1;;;15940:18:1;;;15933:47;15997:18;;37289:50:0;15854:167:1;37289:50:0;37350:10;:23;;-1:-1:-1;;37350:23:0;;;;;;;;;;;;37229:152::o;23329:411::-;23410:13;23426:23;23441:7;23426:14;:23::i;:::-;23410:39;;23474:5;-1:-1:-1;;;;;23468:11:0;:2;-1:-1:-1;;;;;23468:11:0;;;23460:57;;;;-1:-1:-1;;;23460:57:0;;14720:2:1;23460:57:0;;;14702:21:1;14759:2;14739:18;;;14732:30;14798:34;14778:18;;;14771:62;-1:-1:-1;;;14849:18:1;;;14842:31;14890:19;;23460:57:0;14692:223:1;23460:57:0;16615:10;-1:-1:-1;;;;;23552:21:0;;;;:62;;-1:-1:-1;23577:37:0;23594:5;16615:10;24325:164;:::i;23577:37::-;23530:168;;;;-1:-1:-1;;;23530:168:0;;11587:2:1;23530:168:0;;;11569:21:1;11626:2;11606:18;;;11599:30;11665:34;11645:18;;;11638:62;11736:26;11716:18;;;11709:54;11780:19;;23530:168:0;11559:246:1;23530:168:0;23711:21;23720:2;23724:7;23711:8;:21::i;:::-;23329:411;;;:::o;24556:339::-;24751:41;16615:10;24784:7;24751:18;:41::i;:::-;24743:103;;;;-1:-1:-1;;;24743:103:0;;;;;;;:::i;:::-;24859:28;24869:4;24875:2;24879:7;24859:9;:28::i;37597:93::-;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;37663:12:::1;:19:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;37663:19:0;;::::1;::::0;;;::::1;::::0;;37597:93::o;38040:192::-;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;38115:82:::1;::::0;38097:12:::1;::::0;38123:10:::1;::::0;38161:21:::1;::::0;38097:12;38115:82;38097:12;38115:82;38161:21;38123:10;38115:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38096:101;;;38216:7;38208:16;;;::::0;::::1;;35097:1;38040:192::o:0;24966:185::-;25104:39;25121:4;25127:2;25131:7;25104:39;;;;;;;;;;;;:16;:39::i;37424:80::-;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;37484:4:::1;:12:::0;37424:80::o;21941:239::-;22013:7;22049:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22049:16:0;22084:19;22076:73;;;;-1:-1:-1;;;22076:73:0;;12423:2:1;22076:73:0;;;12405:21:1;12462:2;12442:18;;;12435:30;12501:34;12481:18;;;12474:62;-1:-1:-1;;;12552:18:1;;;12545:39;12601:19;;22076:73:0;12395:231:1;37512:77:0;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;37569:4:::1;:12:::0;;;::::1;;-1:-1:-1::0;;;37569:12:0::1;-1:-1:-1::0;;;;37569:12:0;;::::1;::::0;;;::::1;::::0;;37512:77::o;21671:208::-;21743:7;-1:-1:-1;;;;;21771:19:0;;21763:74;;;;-1:-1:-1;;;21763:74:0;;12012:2:1;21763:74:0;;;11994:21:1;12051:2;12031:18;;;12024:30;12090:34;12070:18;;;12063:62;-1:-1:-1;;;12141:18:1;;;12134:40;12191:19;;21763:74:0;11984:232:1;21763:74:0;-1:-1:-1;;;;;;21855:16:0;;;;;:9;:16;;;;;;;21671:208::o;35457:103::-;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;35522:30:::1;35549:1;35522:18;:30::i;:::-;35457:103::o:0;37795:237::-;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;37868:8:::1;37863:162;37882:13;::::0;::::1;::::0;-1:-1:-1;37863:162:0::1;;;37939:11;::::0;::::1;-1:-1:-1::0;;;37939:11:0;::::1;::::0;::::1;::::0;37925:10:::1;::::0;-1:-1:-1;;;37929:6:0;;::::1;;37925:1;:10;:::i;:::-;:25;;;;37917:51;;;::::0;-1:-1:-1;;;37917:51:0;;10832:2:1;37917:51:0::1;::::0;::::1;10814:21:1::0;10871:2;10851:18;;;10844:30;-1:-1:-1;;;10890:18:1;;;10883:43;10943:18;;37917:51:0::1;10804:163:1::0;37917:51:0::1;37983:30;37993:2;;37996:1;37993:5;;;;;;;-1:-1:-1::0;;;37993:5:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38002:6;38000:8:::0;;38002:6:::1;::::0;38000:8:::1;::::0;-1:-1:-1;;;38000:8:0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37983:30;;;;;;;;;;;;;::::0;:9:::1;:30::i;:::-;37897:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37863:162;;22416:104:::0;22472:13;22505:7;22498:14;;;;;:::i;24099:155::-;24194:52;16615:10;24227:8;24237;24194:18;:52::i;:::-;24099:155;;:::o;38270:152::-;38329:5;38929:1;38921:5;:9;;;38913:40;;;;-1:-1:-1;;;38913:40:0;;16919:2:1;38913:40:0;;;16901:21:1;16958:2;16938:18;;;16931:30;-1:-1:-1;;;16977:18:1;;;16970:48;17035:18;;38913:40:0;16891:168:1;38913:40:0;38980:10;;:14;;:10;;;:14;:::i;:::-;38972:22;;:5;:22;;;38964:52;;;;-1:-1:-1;;;38964:52:0;;16573:2:1;38964:52:0;;;16555:21:1;16612:2;16592:18;;;16585:30;-1:-1:-1;;;16631:18:1;;;16624:47;16688:18;;38964:52:0;16545:167:1;38964:52:0;39055:5;39048:12;;:4;;:12;;;;:::i;:::-;39035:9;:25;;39027:54;;;;-1:-1:-1;;;39027:54:0;;16228:2:1;39027:54:0;;;16210:21:1;16267:2;16247:18;;;16240:30;-1:-1:-1;;;16286:18:1;;;16279:46;16342:18;;39027:54:0;16200:166:1;39027:54:0;39117:11;;:15;;-1:-1:-1;;;39117:11:0;;;;39131:1;39117:15;:::i;:::-;39100:6;;:32;;;;;:14;;39109:5;;-1:-1:-1;;;39100:6:0;;;;:14;:::i;:::-;:32;;;39092:58;;;;-1:-1:-1;;;39092:58:0;;14378:2:1;39092:58:0;;;14360:21:1;14417:2;14397:18;;;14390:30;-1:-1:-1;;;14436:18:1;;;14429:43;14489:18;;39092:58:0;14350:163:1;39092:58:0;39223:12;;39200:10;39183:28;;;;:16;:28;;;;;;39223:12;;;;;;;;39183:36;;;;;;;:::i;:::-;:52;;39161:124;;;;-1:-1:-1;;;39161:124:0;;9722:2:1;39161:124:0;;;9704:21:1;9761:2;9741:18;;;9734:30;-1:-1:-1;;;9780:18:1;;;9773:52;9842:18;;39161:124:0;9694:172:1;39161:124:0;38355:4:::1;::::0;-1:-1:-1;;;38355:4:0;::::1;;;:12;;38363:4;38355:12;38347:38;;;::::0;-1:-1:-1;;;38347:38:0;;15122:2:1;38347:38:0::1;::::0;::::1;15104:21:1::0;15161:2;15141:18;;;15134:30;-1:-1:-1;;;15180:18:1;;;15173:43;15233:18;;38347:38:0::1;15094:163:1::0;38347:38:0::1;38396:18;38408:5;38396:11;:18::i;25222:328::-:0;25397:41;16615:10;25430:7;25397:18;:41::i;:::-;25389:103;;;;-1:-1:-1;;;25389:103:0;;;;;;;:::i;:::-;25503:39;25517:4;25523:2;25527:7;25536:5;25503:13;:39::i;:::-;25222:328;;;;:::o;39680:338::-;39850:6;;39799:13;;-1:-1:-1;;;39850:6:0;;;;39838:18;;;39830:45;;;;-1:-1:-1;;;39830:45:0;;8615:2:1;39830:45:0;;;8597:21:1;8654:2;8634:18;;;8627:30;-1:-1:-1;;;8673:18:1;;;8666:44;8727:18;;39830:45:0;8587:164:1;39830:45:0;39950:7;39959:26;39976:8;39959:16;:26::i;:::-;39933:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39888:122;;39680:338;;;:::o;35715:201::-;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35804:22:0;::::1;35796:73;;;::::0;-1:-1:-1;;;35796:73:0;;8958:2:1;35796:73:0::1;::::0;::::1;8940:21:1::0;8997:2;8977:18;;;8970:30;9036:34;9016:18;;;9009:62;-1:-1:-1;;;9087:18:1;;;9080:36;9133:19;;35796:73:0::1;8930:228:1::0;35796:73:0::1;35880:28;35899:8;35880:18;:28::i;37698:89::-:0;34879:6;;-1:-1:-1;;;;;34879:6:0;16615:10;35026:23;35018:68;;;;-1:-1:-1;;;35018:68:0;;;;;;;:::i;:::-;37762:10:::1;:17:::0;;-1:-1:-1;;37762:17:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;37698:89::o;31042:174::-;31117:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31117:29:0;-1:-1:-1;;;;;31117:29:0;;;;;;;;:24;;31171:23;31117:24;31171:14;:23::i;:::-;-1:-1:-1;;;;;31162:46:0;;;;;;;;;;;31042:174;;:::o;27354:348::-;27447:4;27149:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27149:16:0;27464:73;;;;-1:-1:-1;;;27464:73:0;;11174:2:1;27464:73:0;;;11156:21:1;11213:2;11193:18;;;11186:30;11252:34;11232:18;;;11225:62;-1:-1:-1;;;11303:18:1;;;11296:42;11355:19;;27464:73:0;11146:234:1;27464:73:0;27548:13;27564:23;27579:7;27564:14;:23::i;:::-;27548:39;;27617:5;-1:-1:-1;;;;;27606:16:0;:7;-1:-1:-1;;;;;27606:16:0;;:51;;;;27650:7;-1:-1:-1;;;;;27626:31:0;:20;27638:7;27626:11;:20::i;:::-;-1:-1:-1;;;;;27626:31:0;;27606:51;:87;;;-1:-1:-1;;;;;;24446:25:0;;;24422:4;24446:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27661:32;27598:96;27354:348;-1:-1:-1;;;;27354:348:0:o;30346:578::-;30505:4;-1:-1:-1;;;;;30478:31:0;:23;30493:7;30478:14;:23::i;:::-;-1:-1:-1;;;;;30478:31:0;;30470:85;;;;-1:-1:-1;;;30470:85:0;;13968:2:1;30470:85:0;;;13950:21:1;14007:2;13987:18;;;13980:30;14046:34;14026:18;;;14019:62;-1:-1:-1;;;14097:18:1;;;14090:39;14146:19;;30470:85:0;13940:231:1;30470:85:0;-1:-1:-1;;;;;30574:16:0;;30566:65;;;;-1:-1:-1;;;30566:65:0;;10073:2:1;30566:65:0;;;10055:21:1;10112:2;10092:18;;;10085:30;10151:34;10131:18;;;10124:62;-1:-1:-1;;;10202:18:1;;;10195:34;10246:19;;30566:65:0;10045:226:1;30566:65:0;30748:29;30765:1;30769:7;30748:8;:29::i;:::-;-1:-1:-1;;;;;30790:15:0;;;;;;:9;:15;;;;;:20;;30809:1;;30790:15;:20;;30809:1;;30790:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30821:13:0;;;;;;:9;:13;;;;;:18;;30838:1;;30821:13;:18;;30838:1;;30821:18;:::i;:::-;;;;-1:-1:-1;;30850:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30850:21:0;-1:-1:-1;;;;;30850:21:0;;;;;;;;;30889:27;;30850:16;;30889:27;;;;;;;30346:578;;;:::o;36076:191::-;36169:6;;;-1:-1:-1;;;;;36186:17:0;;;-1:-1:-1;;;;;;36186:17:0;;;;;;;36219:40;;36169:6;;;36186:17;36169:6;;36219:40;;36150:16;;36219:40;36076:191;;:::o;28381:321::-;28511:18;28517:2;28521:7;28511:5;:18::i;:::-;28562:54;28593:1;28597:2;28601:7;28610:5;28562:22;:54::i;:::-;28540:154;;;;-1:-1:-1;;;28540:154:0;;;;;;;:::i;31358:315::-;31513:8;-1:-1:-1;;;;;31504:17:0;:5;-1:-1:-1;;;;;31504:17:0;;;31496:55;;;;-1:-1:-1;;;31496:55:0;;10478:2:1;31496:55:0;;;10460:21:1;10517:2;10497:18;;;10490:30;10556:27;10536:18;;;10529:55;10601:18;;31496:55:0;10450:175:1;31496:55:0;-1:-1:-1;;;;;31562:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;31562:46:0;;;;;;;;;;31624:41;;7718::1;;;31624::0;;7691:18:1;31624:41:0;;;;;;;31358:315;;;:::o;38430:364::-;38490:8;38485:97;38508:5;38504:9;;:1;:9;;;38485:97;;;38535:35;38545:10;38559:6;;38557:8;;;;;;;;;;;;;;:::i;38535:35::-;38515:3;;;;:::i;:::-;;;;38485:97;;;-1:-1:-1;38619:10:0;38602:28;;;;:16;:28;;;;;:37;;;;;;:28;:37;;;;;:::i;:::-;;;;-1:-1:-1;;38679:6:0;;38653:12;;-1:-1:-1;;;;;38679:6:0;;;;;38740:4;;38714:22;;38726:10;;38714:9;:22;:::i;:::-;38713:31;;;;:::i;:::-;38671:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38652:107;;;38778:7;38770:16;;;;;26432:315;26589:28;26599:4;26605:2;26609:7;26589:9;:28::i;:::-;26636:48;26659:4;26665:2;26669:7;26678:5;26636:22;:48::i;:::-;26628:111;;;;-1:-1:-1;;;26628:111:0;;;;;;;:::i;17118:723::-;17174:13;17395:10;17391:53;;-1:-1:-1;;17422:10:0;;;;;;;;;;;;-1:-1:-1;;;17422:10:0;;;;;17118:723::o;17391:53::-;17469:5;17454:12;17510:78;17517:9;;17510:78;;17543:8;;;;:::i;:::-;;-1:-1:-1;17566:10:0;;-1:-1:-1;17574:2:0;17566:10;;:::i;:::-;;;17510:78;;;17598:19;17630:6;17620:17;;;;;;-1:-1:-1;;;17620:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17620:17:0;;17598:39;;17648:154;17655:10;;17648:154;;17682:11;17692:1;17682:11;;:::i;:::-;;-1:-1:-1;17751:10:0;17759:2;17751:5;:10;:::i;:::-;17738:24;;:2;:24;:::i;:::-;17725:39;;17708:6;17715;17708:14;;;;;;-1:-1:-1;;;17708:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17708:56:0;;;;;;;;-1:-1:-1;17779:11:0;17788:2;17779:11;;:::i;:::-;;;17648:154;;29038:382;-1:-1:-1;;;;;29118:16:0;;29110:61;;;;-1:-1:-1;;;29110:61:0;;12833:2:1;29110:61:0;;;12815:21:1;;;12852:18;;;12845:30;12911:34;12891:18;;;12884:62;12963:18;;29110:61:0;12805:182:1;29110:61:0;27125:4;27149:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27149:16:0;:30;29182:58;;;;-1:-1:-1;;;29182:58:0;;9365:2:1;29182:58:0;;;9347:21:1;9404:2;9384:18;;;9377:30;9443;9423:18;;;9416:58;9491:18;;29182:58:0;9337:178:1;29182:58:0;-1:-1:-1;;;;;29311:13:0;;;;;;:9;:13;;;;;:18;;29328:1;;29311:13;:18;;29328:1;;29311:18;:::i;:::-;;;;-1:-1:-1;;29340:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29340:21:0;-1:-1:-1;;;;;29340:21:0;;;;;;;;29379:33;;29340:16;;;29379:33;;29340:16;;29379:33;29038:382;;:::o;32238:799::-;32393:4;-1:-1:-1;;;;;32414:13:0;;8844:20;8892:8;32410:620;;32450:72;;-1:-1:-1;;;32450:72:0;;-1:-1:-1;;;;;32450:36:0;;;;;:72;;16615:10;;32501:4;;32507:7;;32516:5;;32450:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32450:72:0;;;;;;;;-1:-1:-1;;32450:72:0;;;;;;;;;;;;:::i;:::-;;;32446:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32692:13:0;;32688:272;;32735:60;;-1:-1:-1;;;32735:60:0;;;;;;;:::i;32688:272::-;32910:6;32904:13;32895:6;32891:2;32887:15;32880:38;32446:529;-1:-1:-1;;;;;;32573:51:0;-1:-1:-1;;;32573:51:0;;-1:-1:-1;32566:58:0;;32410:620;-1:-1:-1;33014:4:0;32238:799;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:160::-;257:20;;313:13;;306:21;296:32;;286:2;;342:1;339;332:12;357:196;416:6;469:2;457:9;448:7;444:23;440:32;437:2;;;490:6;482;475:22;437:2;518:29;537:9;518:29;:::i;:::-;508:39;427:126;-1:-1:-1;;;427:126:1:o;558:270::-;626:6;634;687:2;675:9;666:7;662:23;658:32;655:2;;;708:6;700;693:22;655:2;736:29;755:9;736:29;:::i;:::-;726:39;;784:38;818:2;807:9;803:18;784:38;:::i;:::-;774:48;;645:183;;;;;:::o;833:338::-;910:6;918;926;979:2;967:9;958:7;954:23;950:32;947:2;;;1000:6;992;985:22;947:2;1028:29;1047:9;1028:29;:::i;:::-;1018:39;;1076:38;1110:2;1099:9;1095:18;1076:38;:::i;:::-;1066:48;;1161:2;1150:9;1146:18;1133:32;1123:42;;937:234;;;;;:::o;1176:1183::-;1271:6;1279;1287;1295;1348:3;1336:9;1327:7;1323:23;1319:33;1316:2;;;1370:6;1362;1355:22;1316:2;1398:29;1417:9;1398:29;:::i;:::-;1388:39;;1446:38;1480:2;1469:9;1465:18;1446:38;:::i;:::-;1436:48;;1531:2;1520:9;1516:18;1503:32;1493:42;;1586:2;1575:9;1571:18;1558:32;1609:18;1650:2;1642:6;1639:14;1636:2;;;1671:6;1663;1656:22;1636:2;1714:6;1703:9;1699:22;1689:32;;1759:7;1752:4;1748:2;1744:13;1740:27;1730:2;;1786:6;1778;1771:22;1730:2;1827;1814:16;1849:2;1845;1842:10;1839:2;;;1855:18;;:::i;:::-;1930:2;1924:9;1898:2;1984:13;;-1:-1:-1;;1980:22:1;;;2004:2;1976:31;1972:40;1960:53;;;2028:18;;;2048:22;;;2025:46;2022:2;;;2074:18;;:::i;:::-;2114:10;2110:2;2103:22;2149:2;2141:6;2134:18;2189:7;2184:2;2179;2175;2171:11;2167:20;2164:33;2161:2;;;2215:6;2207;2200:22;2161:2;2276;2271;2267;2263:11;2258:2;2250:6;2246:15;2233:46;2299:15;;;2316:2;2295:24;2288:40;;;;1306:1053;;;;-1:-1:-1;1306:1053:1;;-1:-1:-1;;;;1306:1053:1:o;2364:264::-;2429:6;2437;2490:2;2478:9;2469:7;2465:23;2461:32;2458:2;;;2511:6;2503;2496:22;2458:2;2539:29;2558:9;2539:29;:::i;:::-;2529:39;;2587:35;2618:2;2607:9;2603:18;2587:35;:::i;2633:264::-;2701:6;2709;2762:2;2750:9;2741:7;2737:23;2733:32;2730:2;;;2783:6;2775;2768:22;2730:2;2811:29;2830:9;2811:29;:::i;:::-;2801:39;2887:2;2872:18;;;;2859:32;;-1:-1:-1;;;2720:177:1:o;2902:665::-;2988:6;2996;3049:2;3037:9;3028:7;3024:23;3020:32;3017:2;;;3070:6;3062;3055:22;3017:2;3115:9;3102:23;3144:18;3185:2;3177:6;3174:14;3171:2;;;3206:6;3198;3191:22;3171:2;3249:6;3238:9;3234:22;3224:32;;3294:7;3287:4;3283:2;3279:13;3275:27;3265:2;;3321:6;3313;3306:22;3265:2;3366;3353:16;3392:2;3384:6;3381:14;3378:2;;;3413:6;3405;3398:22;3378:2;3471:7;3466:2;3456:6;3453:1;3449:14;3445:2;3441:23;3437:32;3434:45;3431:2;;;3497:6;3489;3482:22;3431:2;3533;3525:11;;;;;3555:6;;-1:-1:-1;3007:560:1;;-1:-1:-1;;;;3007:560:1:o;3572:190::-;3628:6;3681:2;3669:9;3660:7;3656:23;3652:32;3649:2;;;3702:6;3694;3687:22;3649:2;3730:26;3746:9;3730:26;:::i;3767:255::-;3825:6;3878:2;3866:9;3857:7;3853:23;3849:32;3846:2;;;3899:6;3891;3884:22;3846:2;3943:9;3930:23;3962:30;3986:5;3962:30;:::i;4027:259::-;4096:6;4149:2;4137:9;4128:7;4124:23;4120:32;4117:2;;;4170:6;4162;4155:22;4117:2;4207:9;4201:16;4226:30;4250:5;4226:30;:::i;4291:190::-;4350:6;4403:2;4391:9;4382:7;4378:23;4374:32;4371:2;;;4424:6;4416;4409:22;4371:2;-1:-1:-1;4452:23:1;;4361:120;-1:-1:-1;4361:120:1:o;4486:296::-;4544:6;4597:2;4585:9;4576:7;4572:23;4568:32;4565:2;;;4618:6;4610;4603:22;4565:2;4662:9;4649:23;4712:10;4705:5;4701:22;4694:5;4691:33;4681:2;;4743:6;4735;4728:22;4787:257;4828:3;4866:5;4860:12;4893:6;4888:3;4881:19;4909:63;4965:6;4958:4;4953:3;4949:14;4942:4;4935:5;4931:16;4909:63;:::i;:::-;5026:2;5005:15;-1:-1:-1;;5001:29:1;4992:39;;;;5033:4;4988:50;;4836:208;-1:-1:-1;;4836:208:1:o;5049:185::-;5091:3;5129:5;5123:12;5144:52;5189:6;5184:3;5177:4;5170:5;5166:16;5144:52;:::i;:::-;5212:16;;;;;5099:135;-1:-1:-1;;5099:135:1:o;5357:1305::-;5634:3;5663;5698:6;5692:13;5728:3;5750:1;5778:9;5774:2;5770:18;5760:28;;5838:2;5827:9;5823:18;5860;5850:2;;5904:4;5896:6;5892:17;5882:27;;5850:2;5930;5978;5970:6;5967:14;5947:18;5944:38;5941:2;;;-1:-1:-1;;;6005:33:1;;6061:4;6058:1;6051:15;6091:4;6012:3;6079:17;5941:2;6122:18;6149:104;;;;6267:1;6262:322;;;;6115:469;;6149:104;-1:-1:-1;;6182:24:1;;6170:37;;6227:16;;;;-1:-1:-1;6149:104:1;;6262:322;17490:4;17509:17;;;17559:4;17543:21;;6357:3;6373:165;6387:6;6384:1;6381:13;6373:165;;;6465:14;;6452:11;;;6445:35;6508:16;;;;6402:10;;6373:165;;;6377:3;;6567:6;6562:3;6558:16;6551:23;;6115:469;;;;;;;6600:56;6625:30;6651:3;6643:6;6625:30;:::i;:::-;-1:-1:-1;;;5299:20:1;;5344:1;5335:11;;5289:63;6600:56;6593:63;5642:1020;-1:-1:-1;;;;;5642:1020:1:o;7085:488::-;-1:-1:-1;;;;;7354:15:1;;;7336:34;;7406:15;;7401:2;7386:18;;7379:43;7453:2;7438:18;;7431:34;;;7501:3;7496:2;7481:18;;7474:31;;;7279:4;;7522:45;;7547:19;;7539:6;7522:45;:::i;:::-;7514:53;7288:285;-1:-1:-1;;;;;;7288:285:1:o;7770:219::-;7919:2;7908:9;7901:21;7882:4;7939:44;7979:2;7968:9;7964:18;7956:6;7939:44;:::i;7994:414::-;8196:2;8178:21;;;8235:2;8215:18;;;8208:30;8274:34;8269:2;8254:18;;8247:62;-1:-1:-1;;;8340:2:1;8325:18;;8318:48;8398:3;8383:19;;8168:240::o;13405:356::-;13607:2;13589:21;;;13626:18;;;13619:30;13685:34;13680:2;13665:18;;13658:62;13752:2;13737:18;;13579:182::o;15262:413::-;15464:2;15446:21;;;15503:2;15483:18;;;15476:30;15542:34;15537:2;15522:18;;15515:62;-1:-1:-1;;;15608:2:1;15593:18;;15586:47;15665:3;15650:19;;15436:239::o;17575:128::-;17615:3;17646:1;17642:6;17639:1;17636:13;17633:2;;;17652:18;;:::i;:::-;-1:-1:-1;17688:9:1;;17623:80::o;17708:228::-;17747:3;17775:10;17812:2;17809:1;17805:10;17842:2;17839:1;17835:10;17873:3;17869:2;17865:12;17860:3;17857:21;17854:2;;;17881:18;;:::i;:::-;17917:13;;17755:181;-1:-1:-1;;;;17755:181:1:o;17941:120::-;17981:1;18007;17997:2;;18012:18;;:::i;:::-;-1:-1:-1;18046:9:1;;17987:74::o;18066:168::-;18106:7;18172:1;18168;18164:6;18160:14;18157:1;18154:21;18149:1;18142:9;18135:17;18131:45;18128:2;;;18179:18;;:::i;:::-;-1:-1:-1;18219:9:1;;18118:116::o;18239:125::-;18279:4;18307:1;18304;18301:8;18298:2;;;18312:18;;:::i;:::-;-1:-1:-1;18349:9:1;;18288:76::o;18369:258::-;18441:1;18451:113;18465:6;18462:1;18459:13;18451:113;;;18541:11;;;18535:18;18522:11;;;18515:39;18487:2;18480:10;18451:113;;;18582:6;18579:1;18576:13;18573:2;;;-1:-1:-1;;18617:1:1;18599:16;;18592:27;18422:205::o;18632:380::-;18711:1;18707:12;;;;18754;;;18775:2;;18829:4;18821:6;18817:17;18807:27;;18775:2;18882;18874:6;18871:14;18851:18;18848:38;18845:2;;;18928:10;18923:3;18919:20;18916:1;18909:31;18963:4;18960:1;18953:15;18991:4;18988:1;18981:15;18845:2;;18687:325;;;:::o;19017:135::-;19056:3;-1:-1:-1;;19077:17:1;;19074:2;;;19097:18;;:::i;:::-;-1:-1:-1;19144:1:1;19133:13;;19064:88::o;19157:201::-;19195:3;19223:10;19268:2;19261:5;19257:14;19295:2;19286:7;19283:15;19280:2;;;19301:18;;:::i;:::-;19350:1;19337:15;;19203:155;-1:-1:-1;;;19203:155:1:o;19363:112::-;19395:1;19421;19411:2;;19426:18;;:::i;:::-;-1:-1:-1;19460:9:1;;19401:74::o;19480:127::-;19541:10;19536:3;19532:20;19529:1;19522:31;19572:4;19569:1;19562:15;19596:4;19593:1;19586:15;19612:127;19673:10;19668:3;19664:20;19661:1;19654:31;19704:4;19701:1;19694:15;19728:4;19725:1;19718:15;19744:127;19805:10;19800:3;19796:20;19793:1;19786:31;19836:4;19833:1;19826:15;19860:4;19857:1;19850:15;19876:131;-1:-1:-1;;;;;;19950:32:1;;19940:43;;19930:2;;19997:1;19994;19987:12

Swarm Source

ipfs://8a0eaf8d3185c71bb1d0f8ca33377a601c4aaea05c5b0227f29ba8397a734db5
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.