ETH Price: $3,167.21 (-7.84%)
Gas: 9 Gwei

Token

Ethereal Collective Artist Editions (ECAE)
 

Overview

Max Total Supply

600 ECAE

Holders

149

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
vechknightvault.eth
0x27013982436c909a685c4e33a768ea0bb671fd73
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EtherealCollectiveArtistEditions

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 11: contract.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ERC1155.sol";
import "./ERC1155Supply.sol";

contract EtherealCollectiveArtistEditions is ERC1155Supply, Ownable  {

    // Contract name
    string public name;
    // Contract symbol
    string public symbol;

    address ownerAddress = 0x817A17FD73e3e3509FA3D534dBdAFD810b875c4c;

    constructor(
        string memory uri,
        string memory _symbol,
        string memory _name
    ) ERC1155(
        uri
    ) { 
        name = _name;
        symbol = _symbol;
       _mint(ownerAddress, 1, 100, "");
       _mint(ownerAddress, 2, 100, "");
       _mint(ownerAddress, 3, 100, "");
       _mint(ownerAddress, 4, 100, "");
       _mint(ownerAddress, 5, 100, "");
       _mint(ownerAddress, 6, 100, "");
    }

    function setUri(string memory _newUri) public onlyOwner {
        _setURI(_newUri);
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 11: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256 id) public view virtual override returns (string memory) {
        if (id == 1) {
            return string(abi.encodePacked(_uri, "1"));
        } else if (id == 2) {
            return string(abi.encodePacked(_uri, "2"));
        } else if (id == 3) {
            return string(abi.encodePacked(_uri, "3"));
        } else if (id == 4) {
            return string(abi.encodePacked(_uri, "4"));
        } else if (id == 5) {
            return string(abi.encodePacked(_uri, "5"));
        } else if (id == 6) {
            return string(abi.encodePacked(_uri, "6"));
        }
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @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, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 5 of 11: ERC1155Supply.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

import "./ERC1155.sol";

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

File 6 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 7 of 11: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 8 of 11: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 9 of 11: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 11: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 11 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600780546001600160a01b03191673817a17fd73e3e3509fa3d534dbdafd810b875c4c1790553480156200003757600080fd5b506040516200270a3803806200270a8339810160408190526200005a9162000814565b826200006681620001b5565b506200007233620001ce565b805162000087906005906020840190620006c3565b5081516200009d906006906020850190620006c3565b50600754604080516020810190915260008152620000cb916001600160a01b03169060019060649062000220565b600754604080516020810190915260008152620000f8916001600160a01b03169060029060649062000220565b60075460408051602081019091526000815262000125916001600160a01b03169060039060649062000220565b60075460408051602081019091526000815262000152916001600160a01b03169060049060649062000220565b6007546040805160208101909152600081526200017f916001600160a01b03169060059060649062000220565b600754604080516020810190915260008152620001ac916001600160a01b03169060069060649062000220565b50505062000b0f565b8051620001ca906002906020840190620006c3565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416620002865760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b33620002ac816000876200029a8862000347565b620002a58862000347565b8762000395565b6000848152602081815260408083206001600160a01b038916845290915281208054859290620002de9084906200092f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46200034081600087878787620004e0565b5050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811062000384576200038462000a37565b602090810291909101015292915050565b620003b0868686868686620004d860201b620009361760201c565b6001600160a01b038516620004445760005b83518110156200044257828181518110620003e157620003e162000a37565b60200260200101516003600086848151811062000402576200040262000a37565b6020026020010151815260200190815260200160002060008282546200042991906200092f565b909155506200043a90508162000a03565b9050620003c2565b505b6001600160a01b038416620004d85760005b8351811015620004d65782818151811062000475576200047562000a37565b60200260200101516003600086848151811062000496576200049662000a37565b602002602001015181526020019081526020016000206000828254620004bd91906200094a565b90915550620004ce90508162000a03565b905062000456565b505b505050505050565b620004ff846001600160a01b0316620006bd60201b6200093e1760201c565b15620004d85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906200053b9089908990889088908890600401620008d3565b602060405180830381600087803b1580156200055657600080fd5b505af192505050801562000589575060408051601f3d908101601f191682019092526200058691810190620007e1565b60015b6200064a576200059862000a63565b806308c379a01415620005d95750620005b062000a80565b80620005bd5750620005db565b8060405162461bcd60e51b81526004016200027d91906200091a565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016200027d565b6001600160e01b0319811663f23a6e6160e01b14620004d65760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016200027d565b3b151590565b828054620006d19062000997565b90600052602060002090601f016020900481019282620006f5576000855562000740565b82601f106200071057805160ff191683800117855562000740565b8280016001018555821562000740579182015b828111156200074057825182559160200191906001019062000723565b506200074e92915062000752565b5090565b5b808211156200074e576000815560010162000753565b600082601f8301126200077b57600080fd5b81516001600160401b0381111562000797576200079762000a4d565b604051620007b0601f8301601f191660200182620009d4565b818152846020838601011115620007c657600080fd5b620007d982602083016020870162000964565b949350505050565b600060208284031215620007f457600080fd5b81516001600160e01b0319811681146200080d57600080fd5b9392505050565b6000806000606084860312156200082a57600080fd5b83516001600160401b03808211156200084257600080fd5b620008508783880162000769565b945060208601519150808211156200086757600080fd5b620008758783880162000769565b935060408601519150808211156200088c57600080fd5b506200089b8682870162000769565b9150509250925092565b60008151808452620008bf81602086016020860162000964565b601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906200090f90830184620008a5565b979650505050505050565b6020815260006200080d6020830184620008a5565b6000821982111562000945576200094562000a21565b500190565b6000828210156200095f576200095f62000a21565b500390565b60005b838110156200098157818101518382015260200162000967565b8381111562000991576000848401525b50505050565b600181811c90821680620009ac57607f821691505b60208210811415620009ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715620009fc57620009fc62000a4d565b6040525050565b600060001982141562000a1a5762000a1a62000a21565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111562000a7d5760046000803e5060005160e01c5b90565b600060443d101562000a8f5790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171562000abf57505050505090565b828501915081518181111562000ad85750505050505090565b843d870101602082850101111562000af35750505050505090565b62000b0460208286010187620009d4565b509095945050505050565b611beb8062000b1f6000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c8063715018a6116100a2578063a22cb46511610071578063a22cb4651461021d578063bd85b03914610230578063e985e9c514610250578063f242432a1461028c578063f2fde38b1461029f57600080fd5b8063715018a6146101df5780638da5cb5b146101e757806395d89b41146102025780639b642de11461020a57600080fd5b80632eb2c2d6116100de5780632eb2c2d6146101805780633ccfd60b146101955780634e1273f41461019d5780634f558e79146101bd57600080fd5b8062fdd58e1461010f57806301ffc9a71461013557806306fdde03146101585780630e89341c1461016d575b600080fd5b61012261011d36600461146f565b6102b2565b6040519081526020015b60405180910390f35b61014861014336600461156a565b610349565b604051901515815260200161012c565b61016061039b565b60405161012c91906118c2565b61016061017b3660046115f5565b610429565b61019361018e366004611324565b610575565b005b61019361060c565b6101b06101ab366004611499565b610669565b60405161012c9190611881565b6101486101cb3660046115f5565b600090815260036020526040902054151590565b610193610793565b6004546040516001600160a01b03909116815260200161012c565b6101606107c9565b6101936102183660046115a4565b6107d6565b61019361022b366004611433565b61080c565b61012261023e3660046115f5565b60009081526003602052604090205490565b61014861025e3660046112f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61019361029a3660046113ce565b610817565b6101936102ad3660046112d6565b61089e565b60006001600160a01b0383166103235760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061037a57506001600160e01b031982166303a24d0760e21b145b8061039557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600580546103a890611a34565b80601f01602080910402602001604051908101604052809291908181526020018280546103d490611a34565b80156104215780601f106103f657610100808354040283529160200191610421565b820191906000526020600020905b81548152906001019060200180831161040457829003601f168201915b505050505081565b6060816001141561045c5760026040516020016104469190611787565b6040516020818303038152906040529050919050565b8160021415610477576002604051602001610446919061176a565b8160031415610492576002604051602001610446919061174d565b81600414156104ad5760026040516020016104469190611730565b81600514156104c857600260405160200161044691906117a4565b81600614156104e357600260405160200161044691906117c1565b600280546104f090611a34565b80601f016020809104026020016040519081016040528092919081815260200182805461051c90611a34565b80156105695780601f1061053e57610100808354040283529160200191610569565b820191906000526020600020905b81548152906001019060200180831161054c57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806105915750610591853361025e565b6105f85760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161031a565b6106058585858585610944565b5050505050565b6004546001600160a01b031633146106365760405162461bcd60e51b815260040161031a906119ac565b6040514790339082156108fc029083906000818181858888f19350505050158015610665573d6000803e3d6000fd5b5050565b606081518351146106ce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161031a565b6000835167ffffffffffffffff8111156106ea576106ea611ae3565b604051908082528060200260200182016040528015610713578160200160208202803683370190505b50905060005b845181101561078b5761075e85828151811061073757610737611acd565b602002602001015185838151811061075157610751611acd565b60200260200101516102b2565b82828151811061077057610770611acd565b602090810291909101015261078481611a9c565b9050610719565b509392505050565b6004546001600160a01b031633146107bd5760405162461bcd60e51b815260040161031a906119ac565b6107c76000610b27565b565b600680546103a890611a34565b6004546001600160a01b031633146108005760405162461bcd60e51b815260040161031a906119ac565b61080981610b79565b50565b610665338383610b8c565b6001600160a01b0385163314806108335750610833853361025e565b6108915760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161031a565b6106058585858585610c6d565b6004546001600160a01b031633146108c85760405162461bcd60e51b815260040161031a906119ac565b6001600160a01b03811661092d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031a565b61080981610b27565b505050505050565b3b151590565b81518351146109a65760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161031a565b6001600160a01b0384166109cc5760405162461bcd60e51b815260040161031a9061191d565b336109db818787878787610d99565b60005b8451811015610ac15760008582815181106109fb576109fb611acd565b602002602001015190506000858381518110610a1957610a19611acd565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610a695760405162461bcd60e51b815260040161031a90611962565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610aa6908490611a05565b9250508190555050505080610aba90611a9c565b90506109de565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b11929190611894565b60405180910390a4610936818787878787610ea5565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051610665906002906020840190611125565b816001600160a01b0316836001600160a01b03161415610c005760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161031a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610c935760405162461bcd60e51b815260040161031a9061191d565b33610cb2818787610ca388611010565b610cac88611010565b87610d99565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610cf35760405162461bcd60e51b815260040161031a90611962565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290610d30908490611a05565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d9082888888888861105b565b50505050505050565b6001600160a01b038516610e205760005b8351811015610e1e57828181518110610dc557610dc5611acd565b602002602001015160036000868481518110610de357610de3611acd565b602002602001015181526020019081526020016000206000828254610e089190611a05565b90915550610e17905081611a9c565b9050610daa565b505b6001600160a01b0384166109365760005b8351811015610d9057828181518110610e4c57610e4c611acd565b602002602001015160036000868481518110610e6a57610e6a611acd565b602002602001015181526020019081526020016000206000828254610e8f9190611a1d565b90915550610e9e905081611a9c565b9050610e31565b6001600160a01b0384163b156109365760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610ee990899089908890889088906004016117de565b602060405180830381600087803b158015610f0357600080fd5b505af1925050508015610f33575060408051601f3d908101601f19168201909252610f3091810190611587565b60015b610fe057610f3f611af9565b806308c379a01415610f795750610f54611b15565b80610f5f5750610f7b565b8060405162461bcd60e51b815260040161031a91906118c2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161031a565b6001600160e01b0319811663bc197c8160e01b14610d905760405162461bcd60e51b815260040161031a906118d5565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061104a5761104a611acd565b602090810291909101015292915050565b6001600160a01b0384163b156109365760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061109f908990899088908890889060040161183c565b602060405180830381600087803b1580156110b957600080fd5b505af19250505080156110e9575060408051601f3d908101601f191682019092526110e691810190611587565b60015b6110f557610f3f611af9565b6001600160e01b0319811663f23a6e6160e01b14610d905760405162461bcd60e51b815260040161031a906118d5565b82805461113190611a34565b90600052602060002090601f0160209004810192826111535760008555611199565b82601f1061116c57805160ff1916838001178555611199565b82800160010185558215611199579182015b8281111561119957825182559160200191906001019061117e565b506111a59291506111a9565b5090565b5b808211156111a557600081556001016111aa565b600067ffffffffffffffff8311156111d8576111d8611ae3565b6040516111ef601f8501601f191660200182611a6f565b80915083815284848401111561120457600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461123357600080fd5b919050565b600082601f83011261124957600080fd5b81356020611256826119e1565b6040516112638282611a6f565b8381528281019150858301600585901b8701840188101561128357600080fd5b60005b858110156112a257813584529284019290840190600101611286565b5090979650505050505050565b600082601f8301126112c057600080fd5b6112cf838335602085016111be565b9392505050565b6000602082840312156112e857600080fd5b6112cf8261121c565b6000806040838503121561130457600080fd5b61130d8361121c565b915061131b6020840161121c565b90509250929050565b600080600080600060a0868803121561133c57600080fd5b6113458661121c565b94506113536020870161121c565b9350604086013567ffffffffffffffff8082111561137057600080fd5b61137c89838a01611238565b9450606088013591508082111561139257600080fd5b61139e89838a01611238565b935060808801359150808211156113b457600080fd5b506113c1888289016112af565b9150509295509295909350565b600080600080600060a086880312156113e657600080fd5b6113ef8661121c565b94506113fd6020870161121c565b93506040860135925060608601359150608086013567ffffffffffffffff81111561142757600080fd5b6113c1888289016112af565b6000806040838503121561144657600080fd5b61144f8361121c565b91506020830135801515811461146457600080fd5b809150509250929050565b6000806040838503121561148257600080fd5b61148b8361121c565b946020939093013593505050565b600080604083850312156114ac57600080fd5b823567ffffffffffffffff808211156114c457600080fd5b818501915085601f8301126114d857600080fd5b813560206114e5826119e1565b6040516114f28282611a6f565b8381528281019150858301600585901b870184018b101561151257600080fd5b600096505b8487101561153c576115288161121c565b835260019690960195918301918301611517565b509650508601359250508082111561155357600080fd5b5061156085828601611238565b9150509250929050565b60006020828403121561157c57600080fd5b81356112cf81611b9f565b60006020828403121561159957600080fd5b81516112cf81611b9f565b6000602082840312156115b657600080fd5b813567ffffffffffffffff8111156115cd57600080fd5b8201601f810184136115de57600080fd5b6115ed848235602084016111be565b949350505050565b60006020828403121561160757600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561163e57815187529582019590820190600101611622565b509495945050505050565b6000815180845260005b8181101561166f57602081850181015186830182015201611653565b81811115611681576000602083870101525b50601f01601f19169290920160200192915050565b8054600090600181811c90808316806116b057607f831692505b60208084108214156116d257634e487b7160e01b600052602260045260246000fd5b8180156116e657600181146116f757611724565b60ff19861689528489019650611724565b60008881526020902060005b8681101561171c5781548b820152908501908301611703565b505084890196505b50505050505092915050565b600061173c8284611696565b600d60fa1b81526001019392505050565b60006117598284611696565b603360f81b81526001019392505050565b60006117768284611696565b601960f91b81526001019392505050565b60006117938284611696565b603160f81b81526001019392505050565b60006117b08284611696565b603560f81b81526001019392505050565b60006117cd8284611696565b601b60f91b81526001019392505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061180a9083018661160e565b828103606084015261181c818661160e565b905082810360808401526118308185611649565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061187690830184611649565b979650505050505050565b6020815260006112cf602083018461160e565b6040815260006118a7604083018561160e565b82810360208401526118b9818561160e565b95945050505050565b6020815260006112cf6020830184611649565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff8211156119fb576119fb611ae3565b5060051b60200190565b60008219821115611a1857611a18611ab7565b500190565b600082821015611a2f57611a2f611ab7565b500390565b600181811c90821680611a4857607f821691505b60208210811415611a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611a9557611a95611ae3565b6040525050565b6000600019821415611ab057611ab0611ab7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611b125760046000803e5060005160e01c5b90565b600060443d1015611b235790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611b5357505050505090565b8285019150815181811115611b6b5750505050505090565b843d8701016020828501011115611b855750505050505090565b611b9460208286010187611a6f565b509095945050505050565b6001600160e01b03198116811461080957600080fdfea2646970667358221220a91c64c8fe41493e8d74fb9a230fabea4e630617ea940393db4b327d018438b064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f657468657265616c2d636f6c6c6563746976652e6865726f6b756170702e636f6d2f6170692f313135352f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445434145000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023457468657265616c20436f6c6c656374697665204172746973742045646974696f6e730000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010a5760003560e01c8063715018a6116100a2578063a22cb46511610071578063a22cb4651461021d578063bd85b03914610230578063e985e9c514610250578063f242432a1461028c578063f2fde38b1461029f57600080fd5b8063715018a6146101df5780638da5cb5b146101e757806395d89b41146102025780639b642de11461020a57600080fd5b80632eb2c2d6116100de5780632eb2c2d6146101805780633ccfd60b146101955780634e1273f41461019d5780634f558e79146101bd57600080fd5b8062fdd58e1461010f57806301ffc9a71461013557806306fdde03146101585780630e89341c1461016d575b600080fd5b61012261011d36600461146f565b6102b2565b6040519081526020015b60405180910390f35b61014861014336600461156a565b610349565b604051901515815260200161012c565b61016061039b565b60405161012c91906118c2565b61016061017b3660046115f5565b610429565b61019361018e366004611324565b610575565b005b61019361060c565b6101b06101ab366004611499565b610669565b60405161012c9190611881565b6101486101cb3660046115f5565b600090815260036020526040902054151590565b610193610793565b6004546040516001600160a01b03909116815260200161012c565b6101606107c9565b6101936102183660046115a4565b6107d6565b61019361022b366004611433565b61080c565b61012261023e3660046115f5565b60009081526003602052604090205490565b61014861025e3660046112f1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61019361029a3660046113ce565b610817565b6101936102ad3660046112d6565b61089e565b60006001600160a01b0383166103235760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061037a57506001600160e01b031982166303a24d0760e21b145b8061039557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600580546103a890611a34565b80601f01602080910402602001604051908101604052809291908181526020018280546103d490611a34565b80156104215780601f106103f657610100808354040283529160200191610421565b820191906000526020600020905b81548152906001019060200180831161040457829003601f168201915b505050505081565b6060816001141561045c5760026040516020016104469190611787565b6040516020818303038152906040529050919050565b8160021415610477576002604051602001610446919061176a565b8160031415610492576002604051602001610446919061174d565b81600414156104ad5760026040516020016104469190611730565b81600514156104c857600260405160200161044691906117a4565b81600614156104e357600260405160200161044691906117c1565b600280546104f090611a34565b80601f016020809104026020016040519081016040528092919081815260200182805461051c90611a34565b80156105695780601f1061053e57610100808354040283529160200191610569565b820191906000526020600020905b81548152906001019060200180831161054c57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806105915750610591853361025e565b6105f85760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161031a565b6106058585858585610944565b5050505050565b6004546001600160a01b031633146106365760405162461bcd60e51b815260040161031a906119ac565b6040514790339082156108fc029083906000818181858888f19350505050158015610665573d6000803e3d6000fd5b5050565b606081518351146106ce5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161031a565b6000835167ffffffffffffffff8111156106ea576106ea611ae3565b604051908082528060200260200182016040528015610713578160200160208202803683370190505b50905060005b845181101561078b5761075e85828151811061073757610737611acd565b602002602001015185838151811061075157610751611acd565b60200260200101516102b2565b82828151811061077057610770611acd565b602090810291909101015261078481611a9c565b9050610719565b509392505050565b6004546001600160a01b031633146107bd5760405162461bcd60e51b815260040161031a906119ac565b6107c76000610b27565b565b600680546103a890611a34565b6004546001600160a01b031633146108005760405162461bcd60e51b815260040161031a906119ac565b61080981610b79565b50565b610665338383610b8c565b6001600160a01b0385163314806108335750610833853361025e565b6108915760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161031a565b6106058585858585610c6d565b6004546001600160a01b031633146108c85760405162461bcd60e51b815260040161031a906119ac565b6001600160a01b03811661092d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031a565b61080981610b27565b505050505050565b3b151590565b81518351146109a65760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161031a565b6001600160a01b0384166109cc5760405162461bcd60e51b815260040161031a9061191d565b336109db818787878787610d99565b60005b8451811015610ac15760008582815181106109fb576109fb611acd565b602002602001015190506000858381518110610a1957610a19611acd565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610a695760405162461bcd60e51b815260040161031a90611962565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610aa6908490611a05565b9250508190555050505080610aba90611a9c565b90506109de565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b11929190611894565b60405180910390a4610936818787878787610ea5565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051610665906002906020840190611125565b816001600160a01b0316836001600160a01b03161415610c005760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161031a565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610c935760405162461bcd60e51b815260040161031a9061191d565b33610cb2818787610ca388611010565b610cac88611010565b87610d99565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610cf35760405162461bcd60e51b815260040161031a90611962565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290610d30908490611a05565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d9082888888888861105b565b50505050505050565b6001600160a01b038516610e205760005b8351811015610e1e57828181518110610dc557610dc5611acd565b602002602001015160036000868481518110610de357610de3611acd565b602002602001015181526020019081526020016000206000828254610e089190611a05565b90915550610e17905081611a9c565b9050610daa565b505b6001600160a01b0384166109365760005b8351811015610d9057828181518110610e4c57610e4c611acd565b602002602001015160036000868481518110610e6a57610e6a611acd565b602002602001015181526020019081526020016000206000828254610e8f9190611a1d565b90915550610e9e905081611a9c565b9050610e31565b6001600160a01b0384163b156109365760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610ee990899089908890889088906004016117de565b602060405180830381600087803b158015610f0357600080fd5b505af1925050508015610f33575060408051601f3d908101601f19168201909252610f3091810190611587565b60015b610fe057610f3f611af9565b806308c379a01415610f795750610f54611b15565b80610f5f5750610f7b565b8060405162461bcd60e51b815260040161031a91906118c2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161031a565b6001600160e01b0319811663bc197c8160e01b14610d905760405162461bcd60e51b815260040161031a906118d5565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061104a5761104a611acd565b602090810291909101015292915050565b6001600160a01b0384163b156109365760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061109f908990899088908890889060040161183c565b602060405180830381600087803b1580156110b957600080fd5b505af19250505080156110e9575060408051601f3d908101601f191682019092526110e691810190611587565b60015b6110f557610f3f611af9565b6001600160e01b0319811663f23a6e6160e01b14610d905760405162461bcd60e51b815260040161031a906118d5565b82805461113190611a34565b90600052602060002090601f0160209004810192826111535760008555611199565b82601f1061116c57805160ff1916838001178555611199565b82800160010185558215611199579182015b8281111561119957825182559160200191906001019061117e565b506111a59291506111a9565b5090565b5b808211156111a557600081556001016111aa565b600067ffffffffffffffff8311156111d8576111d8611ae3565b6040516111ef601f8501601f191660200182611a6f565b80915083815284848401111561120457600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461123357600080fd5b919050565b600082601f83011261124957600080fd5b81356020611256826119e1565b6040516112638282611a6f565b8381528281019150858301600585901b8701840188101561128357600080fd5b60005b858110156112a257813584529284019290840190600101611286565b5090979650505050505050565b600082601f8301126112c057600080fd5b6112cf838335602085016111be565b9392505050565b6000602082840312156112e857600080fd5b6112cf8261121c565b6000806040838503121561130457600080fd5b61130d8361121c565b915061131b6020840161121c565b90509250929050565b600080600080600060a0868803121561133c57600080fd5b6113458661121c565b94506113536020870161121c565b9350604086013567ffffffffffffffff8082111561137057600080fd5b61137c89838a01611238565b9450606088013591508082111561139257600080fd5b61139e89838a01611238565b935060808801359150808211156113b457600080fd5b506113c1888289016112af565b9150509295509295909350565b600080600080600060a086880312156113e657600080fd5b6113ef8661121c565b94506113fd6020870161121c565b93506040860135925060608601359150608086013567ffffffffffffffff81111561142757600080fd5b6113c1888289016112af565b6000806040838503121561144657600080fd5b61144f8361121c565b91506020830135801515811461146457600080fd5b809150509250929050565b6000806040838503121561148257600080fd5b61148b8361121c565b946020939093013593505050565b600080604083850312156114ac57600080fd5b823567ffffffffffffffff808211156114c457600080fd5b818501915085601f8301126114d857600080fd5b813560206114e5826119e1565b6040516114f28282611a6f565b8381528281019150858301600585901b870184018b101561151257600080fd5b600096505b8487101561153c576115288161121c565b835260019690960195918301918301611517565b509650508601359250508082111561155357600080fd5b5061156085828601611238565b9150509250929050565b60006020828403121561157c57600080fd5b81356112cf81611b9f565b60006020828403121561159957600080fd5b81516112cf81611b9f565b6000602082840312156115b657600080fd5b813567ffffffffffffffff8111156115cd57600080fd5b8201601f810184136115de57600080fd5b6115ed848235602084016111be565b949350505050565b60006020828403121561160757600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561163e57815187529582019590820190600101611622565b509495945050505050565b6000815180845260005b8181101561166f57602081850181015186830182015201611653565b81811115611681576000602083870101525b50601f01601f19169290920160200192915050565b8054600090600181811c90808316806116b057607f831692505b60208084108214156116d257634e487b7160e01b600052602260045260246000fd5b8180156116e657600181146116f757611724565b60ff19861689528489019650611724565b60008881526020902060005b8681101561171c5781548b820152908501908301611703565b505084890196505b50505050505092915050565b600061173c8284611696565b600d60fa1b81526001019392505050565b60006117598284611696565b603360f81b81526001019392505050565b60006117768284611696565b601960f91b81526001019392505050565b60006117938284611696565b603160f81b81526001019392505050565b60006117b08284611696565b603560f81b81526001019392505050565b60006117cd8284611696565b601b60f91b81526001019392505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061180a9083018661160e565b828103606084015261181c818661160e565b905082810360808401526118308185611649565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061187690830184611649565b979650505050505050565b6020815260006112cf602083018461160e565b6040815260006118a7604083018561160e565b82810360208401526118b9818561160e565b95945050505050565b6020815260006112cf6020830184611649565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff8211156119fb576119fb611ae3565b5060051b60200190565b60008219821115611a1857611a18611ab7565b500190565b600082821015611a2f57611a2f611ab7565b500390565b600181811c90821680611a4857607f821691505b60208210811415611a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611a9557611a95611ae3565b6040525050565b6000600019821415611ab057611ab0611ab7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611b125760046000803e5060005160e01c5b90565b600060443d1015611b235790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611b5357505050505090565b8285019150815181811115611b6b5750505050505090565b843d8701016020828501011115611b855750505050505090565b611b9460208286010187611a6f565b509095945050505050565b6001600160e01b03198116811461080957600080fdfea2646970667358221220a91c64c8fe41493e8d74fb9a230fabea4e630617ea940393db4b327d018438b064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f657468657265616c2d636f6c6c6563746976652e6865726f6b756170702e636f6d2f6170692f313135352f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445434145000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023457468657265616c20436f6c6c656374697665204172746973742045646974696f6e730000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : uri (string): https://ethereal-collective.herokuapp.com/api/1155/
Arg [1] : _symbol (string): ECAE
Arg [2] : _name (string): Ethereal Collective Artist Editions

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000033
Arg [4] : 68747470733a2f2f657468657265616c2d636f6c6c6563746976652e6865726f
Arg [5] : 6b756170702e636f6d2f6170692f313135352f00000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4543414500000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [9] : 457468657265616c20436f6c6c65637469766520417274697374204564697469
Arg [10] : 6f6e730000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

145:945:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2719:231:2;;;;;;:::i;:::-;;:::i;:::-;;;18441:25:11;;;18429:2;18414:18;2719:231:2;;;;;;;;1207:310;;;;;;:::i;:::-;;:::i;:::-;;;13159:14:11;;13152:22;13134:41;;13122:2;13107:18;1207:310:2;12994:187:11;245:18:10;;;:::i;:::-;;;;;;;:::i;1928:640:2:-;;;;;;:::i;:::-;;:::i;4658:442::-;;;;;;:::i;:::-;;:::i;:::-;;947:140:10;;;:::i;3116:524:2:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;913:122:3:-;;;;;;:::i;:::-;970:4;791:16;;;:12;:16;;;;;;-1:-1:-1;;;913:122:3;1714:103:9;;;:::i;1063:87::-;1136:6;;1063:87;;-1:-1:-1;;;;;1136:6:9;;;10800:51:11;;10788:2;10773:18;1063:87:9;10654:203:11;294:20:10;;;:::i;848:91::-;;;;;;:::i;:::-;;:::i;3713:155:2:-;;;;;;:::i;:::-;;:::i;702:113:3:-;;;;;;:::i;:::-;764:7;791:16;;;:12;:16;;;;;;;702:113;3940:168:2;;;;;;:::i;:::-;-1:-1:-1;;;;;4063:27:2;;;4039:4;4063:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3940:168;4180:401;;;;;;:::i;:::-;;:::i;1972:201:9:-;;;;;;:::i;:::-;;:::i;2719:231:2:-;2805:7;-1:-1:-1;;;;;2833:21:2;;2825:77;;;;-1:-1:-1;;;2825:77:2;;14442:2:11;2825:77:2;;;14424:21:11;14481:2;14461:18;;;14454:30;14520:34;14500:18;;;14493:62;-1:-1:-1;;;14571:18:11;;;14564:41;14622:19;;2825:77:2;;;;;;;;;-1:-1:-1;2920:9:2;:13;;;;;;;;;;;-1:-1:-1;;;;;2920:22:2;;;;;;;;;;;;2719:231::o;1207:310::-;1309:4;-1:-1:-1;;;;;;1346:41:2;;-1:-1:-1;;;1346:41:2;;:110;;-1:-1:-1;;;;;;;1404:52:2;;-1:-1:-1;;;1404:52:2;1346:110;:163;;;-1:-1:-1;;;;;;;;;;963:40:4;;;1473:36:2;1326:183;1207:310;-1:-1:-1;;1207:310:2:o;245:18:10:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1928:640:2:-;1991:13;2021:2;2027:1;2021:7;2017:522;;;2076:4;2059:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;2045:42;;1928:640;;;:::o;2017:522::-;2109:2;2115:1;2109:7;2105:434;;;2164:4;2147:27;;;;;;;;:::i;2105:434::-;2197:2;2203:1;2197:7;2193:346;;;2252:4;2235:27;;;;;;;;:::i;2193:346::-;2285:2;2291:1;2285:7;2281:258;;;2340:4;2323:27;;;;;;;;:::i;2281:258::-;2373:2;2379:1;2373:7;2369:170;;;2428:4;2411:27;;;;;;;;:::i;2369:170::-;2461:2;2467:1;2461:7;2457:82;;;2516:4;2499:27;;;;;;;;:::i;2457:82::-;2556:4;2549:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1928:640;;;:::o;4658:442::-;-1:-1:-1;;;;;4891:20:2;;736:10:1;4891:20:2;;:60;;-1:-1:-1;4915:36:2;4932:4;736:10:1;3940:168:2;:::i;4915:36::-;4869:160;;;;-1:-1:-1;;;4869:160:2;;16077:2:11;4869:160:2;;;16059:21:11;16116:2;16096:18;;;16089:30;16155:34;16135:18;;;16128:62;-1:-1:-1;;;16206:18:11;;;16199:48;16264:19;;4869:160:2;15875:414:11;4869:160:2;5040:52;5063:4;5069:2;5073:3;5078:7;5087:4;5040:22;:52::i;:::-;4658:442;;;;;:::o;947:140:10:-;1136:6:9;;-1:-1:-1;;;;;1136:6:9;736:10:1;1283:23:9;1275:68;;;;-1:-1:-1;;;1275:68:9;;;;;;;:::i;:::-;1042:37:10::1;::::0;1010:21:::1;::::0;1050:10:::1;::::0;1042:37;::::1;;;::::0;1010:21;;995:12:::1;1042:37:::0;995:12;1042:37;1010:21;1050:10;1042:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;984:103;947:140::o:0;3116:524:2:-;3272:16;3333:3;:10;3314:8;:15;:29;3306:83;;;;-1:-1:-1;;;3306:83:2;;17678:2:11;3306:83:2;;;17660:21:11;17717:2;17697:18;;;17690:30;17756:34;17736:18;;;17729:62;-1:-1:-1;;;17807:18:11;;;17800:39;17856:19;;3306:83:2;17476:405:11;3306:83:2;3402:30;3449:8;:15;3435:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3435:30:2;;3402:63;;3483:9;3478:122;3502:8;:15;3498:1;:19;3478:122;;;3558:30;3568:8;3577:1;3568:11;;;;;;;;:::i;:::-;;;;;;;3581:3;3585:1;3581:6;;;;;;;;:::i;:::-;;;;;;;3558:9;:30::i;:::-;3539:13;3553:1;3539:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;3519:3;;;:::i;:::-;;;3478:122;;;-1:-1:-1;3619:13:2;3116:524;-1:-1:-1;;;3116:524:2:o;1714:103:9:-;1136:6;;-1:-1:-1;;;;;1136:6:9;736:10:1;1283:23:9;1275:68;;;;-1:-1:-1;;;1275:68:9;;;;;;;:::i;:::-;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;294:20:10:-;;;;;;;:::i;848:91::-;1136:6:9;;-1:-1:-1;;;;;1136:6:9;736:10:1;1283:23:9;1275:68;;;;-1:-1:-1;;;1275:68:9;;;;;;;:::i;:::-;915:16:10::1;923:7;915;:16::i;:::-;848:91:::0;:::o;3713:155:2:-;3808:52;736:10:1;3841:8:2;3851;3808:18;:52::i;4180:401::-;-1:-1:-1;;;;;4388:20:2;;736:10:1;4388:20:2;;:60;;-1:-1:-1;4412:36:2;4429:4;736:10:1;3940:168:2;:::i;4412:36::-;4366:151;;;;-1:-1:-1;;;4366:151:2;;15261:2:11;4366:151:2;;;15243:21:11;15300:2;15280:18;;;15273:30;15339:34;15319:18;;;15312:62;-1:-1:-1;;;15390:18:11;;;15383:39;15439:19;;4366:151:2;15059:405:11;4366:151:2;4528:45;4546:4;4552:2;4556;4560:6;4568:4;4528:17;:45::i;1972:201:9:-;1136:6;;-1:-1:-1;;;;;1136:6:9;736:10:1;1283:23:9;1275:68;;;;-1:-1:-1;;;1275:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;2061:22:9;::::1;2053:73;;;::::0;-1:-1:-1;;;2053:73:9;;14854:2:11;2053:73:9::1;::::0;::::1;14836:21:11::0;14893:2;14873:18;;;14866:30;14932:34;14912:18;;;14905:62;-1:-1:-1;;;14983:18:11;;;14976:36;15029:19;;2053:73:9::1;14652:402:11::0;2053:73:9::1;2137:28;2156:8;2137:18;:28::i;14215:221:2:-:0;;;;;;;:::o;797:387:0:-;1120:20;1168:8;;;797:387::o;6742:1074:2:-;6969:7;:14;6955:3;:10;:28;6947:81;;;;-1:-1:-1;;;6947:81:2;;18088:2:11;6947:81:2;;;18070:21:11;18127:2;18107:18;;;18100:30;18166:34;18146:18;;;18139:62;-1:-1:-1;;;18217:18:11;;;18210:38;18265:19;;6947:81:2;17886:404:11;6947:81:2;-1:-1:-1;;;;;7047:16:2;;7039:66;;;;-1:-1:-1;;;7039:66:2;;;;;;;:::i;:::-;736:10:1;7162:60:2;736:10:1;7193:4:2;7199:2;7203:3;7208:7;7217:4;7162:20;:60::i;:::-;7240:9;7235:421;7259:3;:10;7255:1;:14;7235:421;;;7291:10;7304:3;7308:1;7304:6;;;;;;;;:::i;:::-;;;;;;;7291:19;;7325:14;7342:7;7350:1;7342:10;;;;;;;;:::i;:::-;;;;;;;;;;;;7369:19;7391:13;;;;;;;;;;-1:-1:-1;;;;;7391:19:2;;;;;;;;;;;;7342:10;;-1:-1:-1;7433:21:2;;;;7425:76;;;;-1:-1:-1;;;7425:76:2;;;;;;;:::i;:::-;7545:9;:13;;;;;;;;;;;-1:-1:-1;;;;;7545:19:2;;;;;;;;;;7567:20;;;7545:42;;7617:17;;;;;;;:27;;7567:20;;7545:9;7617:27;;7567:20;;7617:27;:::i;:::-;;;;;;;;7276:380;;;7271:3;;;;:::i;:::-;;;7235:421;;;;7703:2;-1:-1:-1;;;;;7673:47:2;7697:4;-1:-1:-1;;;;;7673:47:2;7687:8;-1:-1:-1;;;;;7673:47:2;;7707:3;7712:7;7673:47;;;;;;;:::i;:::-;;;;;;;;7733:75;7769:8;7779:4;7785:2;7789:3;7794:7;7803:4;7733:35;:75::i;2333:191:9:-;2426:6;;;-1:-1:-1;;;;;2443:17:9;;;-1:-1:-1;;;;;;2443:17:9;;;;;;;2476:40;;2426:6;;;2443:17;2426:6;;2476:40;;2407:16;;2476:40;2396:128;2333:191;:::o;8660:88:2:-;8727:13;;;;:4;;:13;;;;;:::i;12928:331::-;13083:8;-1:-1:-1;;;;;13074:17:2;:5;-1:-1:-1;;;;;13074:17:2;;;13066:71;;;;-1:-1:-1;;;13066:71:2;;17268:2:11;13066:71:2;;;17250:21:11;17307:2;17287:18;;;17280:30;17346:34;17326:18;;;17319:62;-1:-1:-1;;;17397:18:11;;;17390:39;17446:19;;13066:71:2;17066:405:11;13066:71:2;-1:-1:-1;;;;;13148:25:2;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;13148:46:2;;;;;;;;;;13210:41;;13134::11;;;13210::2;;13107:18:11;13210:41:2;;;;;;;12928:331;;;:::o;5564:820::-;-1:-1:-1;;;;;5752:16:2;;5744:66;;;;-1:-1:-1;;;5744:66:2;;;;;;;:::i;:::-;736:10:1;5867:96:2;736:10:1;5898:4:2;5904:2;5908:21;5926:2;5908:17;:21::i;:::-;5931:25;5949:6;5931:17;:25::i;:::-;5958:4;5867:20;:96::i;:::-;5976:19;5998:13;;;;;;;;;;;-1:-1:-1;;;;;5998:19:2;;;;;;;;;;6036:21;;;;6028:76;;;;-1:-1:-1;;;6028:76:2;;;;;;;:::i;:::-;6140:9;:13;;;;;;;;;;;-1:-1:-1;;;;;6140:19:2;;;;;;;;;;6162:20;;;6140:42;;6204:17;;;;;;;:27;;6162:20;;6140:9;6204:27;;6162:20;;6204:27;:::i;:::-;;;;-1:-1:-1;;6249:46:2;;;18651:25:11;;;18707:2;18692:18;;18685:34;;;-1:-1:-1;;;;;6249:46:2;;;;;;;;;;;;;;18624:18:11;6249:46:2;;;;;;;6308:68;6339:8;6349:4;6355:2;6359;6363:6;6371:4;6308:30;:68::i;:::-;5733:651;;5564:820;;;;;:::o;1110:655:3:-;-1:-1:-1;;;;;1432:18:3;;1428:160;;1472:9;1467:110;1491:3;:10;1487:1;:14;1467:110;;;1551:7;1559:1;1551:10;;;;;;;;:::i;:::-;;;;;;;1527:12;:20;1540:3;1544:1;1540:6;;;;;;;;:::i;:::-;;;;;;;1527:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;1503:3:3;;-1:-1:-1;1503:3:3;;:::i;:::-;;;1467:110;;;;1428:160;-1:-1:-1;;;;;1604:16:3;;1600:158;;1642:9;1637:110;1661:3;:10;1657:1;:14;1637:110;;;1721:7;1729:1;1721:10;;;;;;;;:::i;:::-;;;;;;;1697:12;:20;1710:3;1714:1;1710:6;;;;;;;;:::i;:::-;;;;;;;1697:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;1673:3:3;;-1:-1:-1;1673:3:3;;:::i;:::-;;;1637:110;;15196:813:2;-1:-1:-1;;;;;15436:13:2;;1120:20:0;1168:8;15432:570:2;;15472:79;;-1:-1:-1;;;15472:79:2;;-1:-1:-1;;;;;15472:43:2;;;;;:79;;15516:8;;15526:4;;15532:3;;15537:7;;15546:4;;15472:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15472:79:2;;;;;;;;-1:-1:-1;;15472:79:2;;;;;;;;;;;;:::i;:::-;;;15468:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15864:6;15857:14;;-1:-1:-1;;;15857:14:2;;;;;;;;:::i;15468:523::-;;;15913:62;;-1:-1:-1;;;15913:62:2;;13612:2:11;15913:62:2;;;13594:21:11;13651:2;13631:18;;;13624:30;13690:34;13670:18;;;13663:62;-1:-1:-1;;;13741:18:11;;;13734:50;13801:19;;15913:62:2;13410:416:11;15468:523:2;-1:-1:-1;;;;;;15633:60:2;;-1:-1:-1;;;15633:60:2;15629:159;;15718:50;;-1:-1:-1;;;15718:50:2;;;;;;;:::i;16017:198::-;16137:16;;;16151:1;16137:16;;;;;;;;;16083;;16112:22;;16137:16;;;;;;;;;;;;-1:-1:-1;16137:16:2;16112:41;;16175:7;16164:5;16170:1;16164:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;16202:5;16017:198;-1:-1:-1;;16017:198:2:o;14444:744::-;-1:-1:-1;;;;;14659:13:2;;1120:20:0;1168:8;14655:526:2;;14695:72;;-1:-1:-1;;;14695:72:2;;-1:-1:-1;;;;;14695:38:2;;;;;:72;;14734:8;;14744:4;;14750:2;;14754:6;;14762:4;;14695:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14695:72:2;;;;;;;;-1:-1:-1;;14695:72:2;;;;;;;;;;;;:::i;:::-;;;14691:479;;;;:::i;:::-;-1:-1:-1;;;;;;14817:55:2;;-1:-1:-1;;;14817:55:2;14813:154;;14897:50;;-1:-1:-1;;;14897:50:2;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:11;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:11;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:11;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:11;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:11;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:11;;665:735;-1:-1:-1;;;;;;;665:735:11:o;1405:220::-;1447:5;1500:3;1493:4;1485:6;1481:17;1477:27;1467:55;;1518:1;1515;1508:12;1467:55;1540:79;1615:3;1606:6;1593:20;1586:4;1578:6;1574:17;1540:79;:::i;:::-;1531:88;1405:220;-1:-1:-1;;;1405:220:11:o;1630:186::-;1689:6;1742:2;1730:9;1721:7;1717:23;1713:32;1710:52;;;1758:1;1755;1748:12;1710:52;1781:29;1800:9;1781:29;:::i;1821:260::-;1889:6;1897;1950:2;1938:9;1929:7;1925:23;1921:32;1918:52;;;1966:1;1963;1956:12;1918:52;1989:29;2008:9;1989:29;:::i;:::-;1979:39;;2037:38;2071:2;2060:9;2056:18;2037:38;:::i;:::-;2027:48;;1821:260;;;;;:::o;2086:943::-;2240:6;2248;2256;2264;2272;2325:3;2313:9;2304:7;2300:23;2296:33;2293:53;;;2342:1;2339;2332:12;2293:53;2365:29;2384:9;2365:29;:::i;:::-;2355:39;;2413:38;2447:2;2436:9;2432:18;2413:38;:::i;:::-;2403:48;;2502:2;2491:9;2487:18;2474:32;2525:18;2566:2;2558:6;2555:14;2552:34;;;2582:1;2579;2572:12;2552:34;2605:61;2658:7;2649:6;2638:9;2634:22;2605:61;:::i;:::-;2595:71;;2719:2;2708:9;2704:18;2691:32;2675:48;;2748:2;2738:8;2735:16;2732:36;;;2764:1;2761;2754:12;2732:36;2787:63;2842:7;2831:8;2820:9;2816:24;2787:63;:::i;:::-;2777:73;;2903:3;2892:9;2888:19;2875:33;2859:49;;2933:2;2923:8;2920:16;2917:36;;;2949:1;2946;2939:12;2917:36;;2972:51;3015:7;3004:8;2993:9;2989:24;2972:51;:::i;:::-;2962:61;;;2086:943;;;;;;;;:::o;3034:606::-;3138:6;3146;3154;3162;3170;3223:3;3211:9;3202:7;3198:23;3194:33;3191:53;;;3240:1;3237;3230:12;3191:53;3263:29;3282:9;3263:29;:::i;:::-;3253:39;;3311:38;3345:2;3334:9;3330:18;3311:38;:::i;:::-;3301:48;;3396:2;3385:9;3381:18;3368:32;3358:42;;3447:2;3436:9;3432:18;3419:32;3409:42;;3502:3;3491:9;3487:19;3474:33;3530:18;3522:6;3519:30;3516:50;;;3562:1;3559;3552:12;3516:50;3585:49;3626:7;3617:6;3606:9;3602:22;3585:49;:::i;3645:347::-;3710:6;3718;3771:2;3759:9;3750:7;3746:23;3742:32;3739:52;;;3787:1;3784;3777:12;3739:52;3810:29;3829:9;3810:29;:::i;:::-;3800:39;;3889:2;3878:9;3874:18;3861:32;3936:5;3929:13;3922:21;3915:5;3912:32;3902:60;;3958:1;3955;3948:12;3902:60;3981:5;3971:15;;;3645:347;;;;;:::o;3997:254::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;4165:29;4184:9;4165:29;:::i;:::-;4155:39;4241:2;4226:18;;;;4213:32;;-1:-1:-1;;;3997:254:11:o;4256:1219::-;4374:6;4382;4435:2;4423:9;4414:7;4410:23;4406:32;4403:52;;;4451:1;4448;4441:12;4403:52;4491:9;4478:23;4520:18;4561:2;4553:6;4550:14;4547:34;;;4577:1;4574;4567:12;4547:34;4615:6;4604:9;4600:22;4590:32;;4660:7;4653:4;4649:2;4645:13;4641:27;4631:55;;4682:1;4679;4672:12;4631:55;4718:2;4705:16;4740:4;4763:43;4803:2;4763:43;:::i;:::-;4835:2;4829:9;4847:31;4875:2;4867:6;4847:31;:::i;:::-;4913:18;;;4947:15;;;;-1:-1:-1;4982:11:11;;;5024:1;5020:10;;;5012:19;;5008:28;;5005:41;-1:-1:-1;5002:61:11;;;5059:1;5056;5049:12;5002:61;5081:1;5072:10;;5091:169;5105:2;5102:1;5099:9;5091:169;;;5162:23;5181:3;5162:23;:::i;:::-;5150:36;;5123:1;5116:9;;;;;5206:12;;;;5238;;5091:169;;;-1:-1:-1;5279:6:11;-1:-1:-1;;5323:18:11;;5310:32;;-1:-1:-1;;5354:16:11;;;5351:36;;;5383:1;5380;5373:12;5351:36;;5406:63;5461:7;5450:8;5439:9;5435:24;5406:63;:::i;:::-;5396:73;;;4256:1219;;;;;:::o;5480:245::-;5538:6;5591:2;5579:9;5570:7;5566:23;5562:32;5559:52;;;5607:1;5604;5597:12;5559:52;5646:9;5633:23;5665:30;5689:5;5665:30;:::i;5730:249::-;5799:6;5852:2;5840:9;5831:7;5827:23;5823:32;5820:52;;;5868:1;5865;5858:12;5820:52;5900:9;5894:16;5919:30;5943:5;5919:30;:::i;5984:450::-;6053:6;6106:2;6094:9;6085:7;6081:23;6077:32;6074:52;;;6122:1;6119;6112:12;6074:52;6162:9;6149:23;6195:18;6187:6;6184:30;6181:50;;;6227:1;6224;6217:12;6181:50;6250:22;;6303:4;6295:13;;6291:27;-1:-1:-1;6281:55:11;;6332:1;6329;6322:12;6281:55;6355:73;6420:7;6415:2;6402:16;6397:2;6393;6389:11;6355:73;:::i;:::-;6345:83;5984:450;-1:-1:-1;;;;5984:450:11:o;6439:180::-;6498:6;6551:2;6539:9;6530:7;6526:23;6522:32;6519:52;;;6567:1;6564;6557:12;6519:52;-1:-1:-1;6590:23:11;;6439:180;-1:-1:-1;6439:180:11:o;6624:435::-;6677:3;6715:5;6709:12;6742:6;6737:3;6730:19;6768:4;6797:2;6792:3;6788:12;6781:19;;6834:2;6827:5;6823:14;6855:1;6865:169;6879:6;6876:1;6873:13;6865:169;;;6940:13;;6928:26;;6974:12;;;;7009:15;;;;6901:1;6894:9;6865:169;;;-1:-1:-1;7050:3:11;;6624:435;-1:-1:-1;;;;;6624:435:11:o;7064:471::-;7105:3;7143:5;7137:12;7170:6;7165:3;7158:19;7195:1;7205:162;7219:6;7216:1;7213:13;7205:162;;;7281:4;7337:13;;;7333:22;;7327:29;7309:11;;;7305:20;;7298:59;7234:12;7205:162;;;7385:6;7382:1;7379:13;7376:87;;;7451:1;7444:4;7435:6;7430:3;7426:16;7422:27;7415:38;7376:87;-1:-1:-1;7517:2:11;7496:15;-1:-1:-1;;7492:29:11;7483:39;;;;7524:4;7479:50;;7064:471;-1:-1:-1;;7064:471:11:o;7540:973::-;7625:12;;7590:3;;7680:1;7700:18;;;;7753;;;;7780:61;;7834:4;7826:6;7822:17;7812:27;;7780:61;7860:2;7908;7900:6;7897:14;7877:18;7874:38;7871:161;;;7954:10;7949:3;7945:20;7942:1;7935:31;7989:4;7986:1;7979:15;8017:4;8014:1;8007:15;7871:161;8048:18;8075:104;;;;8193:1;8188:319;;;;8041:466;;8075:104;-1:-1:-1;;8108:24:11;;8096:37;;8153:16;;;;-1:-1:-1;8075:104:11;;8188:319;18991:1;18984:14;;;19028:4;19015:18;;8282:1;8296:165;8310:6;8307:1;8304:13;8296:165;;;8388:14;;8375:11;;;8368:35;8431:16;;;;8325:10;;8296:165;;;8300:3;;8490:6;8485:3;8481:16;8474:23;;8041:466;;;;;;;7540:973;;;;:::o;8518:351::-;8747:3;8775:38;8809:3;8801:6;8775:38;:::i;:::-;-1:-1:-1;;;8822:15:11;;8861:1;8853:10;;8518:351;-1:-1:-1;;;8518:351:11:o;8874:::-;9103:3;9131:38;9165:3;9157:6;9131:38;:::i;:::-;-1:-1:-1;;;9178:15:11;;9217:1;9209:10;;8874:351;-1:-1:-1;;;8874:351:11:o;9230:::-;9459:3;9487:38;9521:3;9513:6;9487:38;:::i;:::-;-1:-1:-1;;;9534:15:11;;9573:1;9565:10;;9230:351;-1:-1:-1;;;9230:351:11:o;9586:::-;9815:3;9843:38;9877:3;9869:6;9843:38;:::i;:::-;-1:-1:-1;;;9890:15:11;;9929:1;9921:10;;9586:351;-1:-1:-1;;;9586:351:11:o;9942:::-;10171:3;10199:38;10233:3;10225:6;10199:38;:::i;:::-;-1:-1:-1;;;10246:15:11;;10285:1;10277:10;;9942:351;-1:-1:-1;;;9942:351:11:o;10298:::-;10527:3;10555:38;10589:3;10581:6;10555:38;:::i;:::-;-1:-1:-1;;;10602:15:11;;10641:1;10633:10;;10298:351;-1:-1:-1;;;10298:351:11:o;10862:826::-;-1:-1:-1;;;;;11259:15:11;;;11241:34;;11311:15;;11306:2;11291:18;;11284:43;11221:3;11358:2;11343:18;;11336:31;;;11184:4;;11390:57;;11427:19;;11419:6;11390:57;:::i;:::-;11495:9;11487:6;11483:22;11478:2;11467:9;11463:18;11456:50;11529:44;11566:6;11558;11529:44;:::i;:::-;11515:58;;11622:9;11614:6;11610:22;11604:3;11593:9;11589:19;11582:51;11650:32;11675:6;11667;11650:32;:::i;:::-;11642:40;10862:826;-1:-1:-1;;;;;;;;10862:826:11:o;11693:560::-;-1:-1:-1;;;;;11990:15:11;;;11972:34;;12042:15;;12037:2;12022:18;;12015:43;12089:2;12074:18;;12067:34;;;12132:2;12117:18;;12110:34;;;11952:3;12175;12160:19;;12153:32;;;11915:4;;12202:45;;12227:19;;12219:6;12202:45;:::i;:::-;12194:53;11693:560;-1:-1:-1;;;;;;;11693:560:11:o;12258:261::-;12437:2;12426:9;12419:21;12400:4;12457:56;12509:2;12498:9;12494:18;12486:6;12457:56;:::i;12524:465::-;12781:2;12770:9;12763:21;12744:4;12807:56;12859:2;12848:9;12844:18;12836:6;12807:56;:::i;:::-;12911:9;12903:6;12899:22;12894:2;12883:9;12879:18;12872:50;12939:44;12976:6;12968;12939:44;:::i;:::-;12931:52;12524:465;-1:-1:-1;;;;;12524:465:11:o;13186:219::-;13335:2;13324:9;13317:21;13298:4;13355:44;13395:2;13384:9;13380:18;13372:6;13355:44;:::i;13831:404::-;14033:2;14015:21;;;14072:2;14052:18;;;14045:30;14111:34;14106:2;14091:18;;14084:62;-1:-1:-1;;;14177:2:11;14162:18;;14155:38;14225:3;14210:19;;13831:404::o;15469:401::-;15671:2;15653:21;;;15710:2;15690:18;;;15683:30;15749:34;15744:2;15729:18;;15722:62;-1:-1:-1;;;15815:2:11;15800:18;;15793:35;15860:3;15845:19;;15469:401::o;16294:406::-;16496:2;16478:21;;;16535:2;16515:18;;;16508:30;16574:34;16569:2;16554:18;;16547:62;-1:-1:-1;;;16640:2:11;16625:18;;16618:40;16690:3;16675:19;;16294:406::o;16705:356::-;16907:2;16889:21;;;16926:18;;;16919:30;16985:34;16980:2;16965:18;;16958:62;17052:2;17037:18;;16705:356::o;18730:183::-;18790:4;18823:18;18815:6;18812:30;18809:56;;;18845:18;;:::i;:::-;-1:-1:-1;18890:1:11;18886:14;18902:4;18882:25;;18730:183::o;19044:128::-;19084:3;19115:1;19111:6;19108:1;19105:13;19102:39;;;19121:18;;:::i;:::-;-1:-1:-1;19157:9:11;;19044:128::o;19177:125::-;19217:4;19245:1;19242;19239:8;19236:34;;;19250:18;;:::i;:::-;-1:-1:-1;19287:9:11;;19177:125::o;19307:380::-;19386:1;19382:12;;;;19429;;;19450:61;;19504:4;19496:6;19492:17;19482:27;;19450:61;19557:2;19549:6;19546:14;19526:18;19523:38;19520:161;;;19603:10;19598:3;19594:20;19591:1;19584:31;19638:4;19635:1;19628:15;19666:4;19663:1;19656:15;19520:161;;19307:380;;;:::o;19692:249::-;19802:2;19783:13;;-1:-1:-1;;19779:27:11;19767:40;;19837:18;19822:34;;19858:22;;;19819:62;19816:88;;;19884:18;;:::i;:::-;19920:2;19913:22;-1:-1:-1;;19692:249:11:o;19946:135::-;19985:3;-1:-1:-1;;20006:17:11;;20003:43;;;20026:18;;:::i;:::-;-1:-1:-1;20073:1:11;20062:13;;19946:135::o;20086:127::-;20147:10;20142:3;20138:20;20135:1;20128:31;20178:4;20175:1;20168:15;20202:4;20199:1;20192:15;20218:127;20279:10;20274:3;20270:20;20267:1;20260:31;20310:4;20307:1;20300:15;20334:4;20331:1;20324:15;20350:127;20411:10;20406:3;20402:20;20399:1;20392:31;20442:4;20439:1;20432:15;20466:4;20463:1;20456:15;20482:179;20517:3;20559:1;20541:16;20538:23;20535:120;;;20605:1;20602;20599;20584:23;-1:-1:-1;20642:1:11;20636:8;20631:3;20627:18;20535:120;20482:179;:::o;20666:671::-;20705:3;20747:4;20729:16;20726:26;20723:39;;;20666:671;:::o;20723:39::-;20789:2;20783:9;-1:-1:-1;;20854:16:11;20850:25;;20847:1;20783:9;20826:50;20905:4;20899:11;20929:16;20964:18;21035:2;21028:4;21020:6;21016:17;21013:25;21008:2;21000:6;20997:14;20994:45;20991:58;;;21042:5;;;;;20666:671;:::o;20991:58::-;21079:6;21073:4;21069:17;21058:28;;21115:3;21109:10;21142:2;21134:6;21131:14;21128:27;;;21148:5;;;;;;20666:671;:::o;21128:27::-;21232:2;21213:16;21207:4;21203:27;21199:36;21192:4;21183:6;21178:3;21174:16;21170:27;21167:69;21164:82;;;21239:5;;;;;;20666:671;:::o;21164:82::-;21255:57;21306:4;21297:6;21289;21285:19;21281:30;21275:4;21255:57;:::i;:::-;-1:-1:-1;21328:3:11;;20666:671;-1:-1:-1;;;;;20666:671:11:o;21342:131::-;-1:-1:-1;;;;;;21416:32:11;;21406:43;;21396:71;;21463:1;21460;21453:12

Swarm Source

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