Token

Overview CRC1155

Total Supply:
0 N/A

Holders:
2 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
COCNFT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-04-07
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)



/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }
}

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)



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





// OpenZeppelin Contracts v4.4.1 (access/Ownable.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);
    }
}


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)




// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.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;
}


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.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.
     *
     * NOTE: 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.
     *
     * NOTE: 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);
}


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.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);
}




// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.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;
    }
}


/**
 * @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) public view virtual override returns (string memory) {
        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;
    }
}


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Pausable.sol)





// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)





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

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

    bool private _paused;

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

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

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

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

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

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


/**
 * @dev ERC1155 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Pausable is ERC1155, Pausable {
    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    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);

        require(!paused(), "ERC1155Pausable: token transfer while paused");
    }
}


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.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];
            }
        }
    }
}


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)




// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)



/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


contract COCNFT is Ownable, ERC1155, ERC1155Pausable, ERC1155Supply {
    using SafeERC20 for IERC20;

    uint256 public _totalNFTs = 100;
    uint256 public _mintedNFTs = 0;
    uint256 public _costPerNFT = 200 * 10**9;
    IERC20 public _token = IERC20(0xdA15d334Bc2BD2D7faa62CB4b2f22B5584492840);

    constructor(string memory uri_) ERC1155(uri_) {}

    function mint(uint256 _mintAmount) public {
        require(!paused(), "the contract is paused");
        require(_mintAmount > 0, "need to mint at least 1 NFT");

        require(
            _mintedNFTs + _mintAmount <= _totalNFTs,
            "max NFT limit exceeded"
        );

        uint256 userallowance = _token.allowance(msg.sender, address(this));

        require(
            _costPerNFT * _mintAmount < userallowance,
            "not enough allowance"
        );
        uint256 totalCost = _costPerNFT * _mintAmount;

        _token.safeTransferFrom(msg.sender, address(this), totalCost);

        uint256[] memory ids = new uint256[](_mintAmount);
        uint256[] memory amounts = new uint256[](_mintAmount);

        for (uint256 i = 1; i <= _mintAmount; i++) {
            ids[i - 1] = _mintedNFTs + i;
            amounts[i - 1] = 1;
        }
        super._mintBatch(msg.sender, ids, amounts, "");
        _mintedNFTs = _mintedNFTs + _mintAmount;
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal override(ERC1155, ERC1155Pausable, ERC1155Supply) {}

    function totalMinted() external view returns (uint256) {
        return _mintedNFTs;
    }

    function setCostPerNFT(uint256 costPerNFT_) public onlyOwner {
        _costPerNFT = costPerNFT_;
    }

    function setTotalNFTs(uint256 totalNFTs_) public onlyOwner {
        _totalNFTs = totalNFTs_;
    }

    function setUri(string memory uri_) public onlyOwner {
        super._setURI(uri_);
    }

    function emergencyTokenWithdraw(address token_, uint256 _amount)
        external
        onlyOwner
    {
        IERC20 token = IERC20(token_);

        uint256 amount = _amount;

        if (amount > token.balanceOf(address(this))) {
            amount = token.balanceOf(address(this));
        }

        token.safeTransfer(address(msg.sender), amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri_","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_costPerNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintedNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"address","name":"token_","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyTokenWithdraw","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"costPerNFT_","type":"uint256"}],"name":"setCostPerNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalNFTs_","type":"uint256"}],"name":"setTotalNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","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":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260646006556000600755642e90edd000600855600980546001600160a01b03191673da15d334bc2bd2d7faa62cb4b2f22b55844928401790553480156200004a57600080fd5b50604051620027f7380380620027f78339810160408190526200006d91620001b2565b80620000826200007c6200009f565b620000a3565b6200008d81620000f3565b50506004805460ff19169055620002d4565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051620001089060039060208401906200010c565b5050565b8280546200011a9062000281565b90600052602060002090601f0160209004810192826200013e576000855562000189565b82601f106200015957805160ff191683800117855562000189565b8280016001018555821562000189579182015b82811115620001895782518255916020019190600101906200016c565b50620001979291506200019b565b5090565b5b808211156200019757600081556001016200019c565b60006020808385031215620001c5578182fd5b82516001600160401b0380821115620001dc578384fd5b818501915085601f830112620001f0578384fd5b815181811115620002055762000205620002be565b604051601f8201601f19168101850183811182821017156200022b576200022b620002be565b604052818152838201850188101562000242578586fd5b8592505b8183101562000265578383018501518184018601529184019162000246565b818311156200027657858583830101525b979650505050505050565b6002810460018216806200029657607f821691505b60208210811415620002b857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61251380620002e46000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c80638da5cb5b116100c3578063bd85b0391161007c578063bd85b039146102bc578063debc7891146102cf578063e985e9c5146102d7578063ecd0c0c3146102ea578063f242432a146102f2578063f2fde38b1461030557610157565b80638da5cb5b1461025e5780639b642de114610273578063a0712d6814610286578063a22cb46514610299578063a2309ff8146102ac578063ab09048c146102b457610157565b80634e1273f4116101155780634e1273f4146101f55780634f558e7914610215578063536dd3f0146102285780635c975abb1461023b578063715018a61461024357806375340b6b1461024b57610157565b8062fdd58e1461015c57806301ffc9a7146101855780630e89341c146101a55780632eb2c2d6146101c5578063317cb151146101da5780634545e10c146101ed575b600080fd5b61016f61016a3660046119dd565b610318565b60405161017c91906122ad565b60405180910390f35b610198610193366004611ae0565b610371565b60405161017c9190611d5c565b6101b86101b3366004611b66565b6103b9565b60405161017c9190611d67565b6101d86101d336600461189e565b61044d565b005b6101d86101e83660046119dd565b6104ab565b61016f61060a565b610208610203366004611a06565b610610565b60405161017c9190611d1b565b610198610223366004611b66565b610730565b6101d8610236366004611b66565b610743565b610198610787565b6101d8610791565b6101d8610259366004611b66565b6107dc565b610266610820565b60405161017c9190611c18565b6101d8610281366004611b18565b61082f565b6101d8610294366004611b66565b61087a565b6101d86102a73660046119a7565b610b3d565b61016f610b53565b61016f610b59565b61016f6102ca366004611b66565b610b5f565b61016f610b71565b6101986102e536600461186c565b610b77565b610266610ba5565b6101d8610300366004611944565b610bb4565b6101d8610313366004611852565b610c0b565b60006001600160a01b0383166103495760405162461bcd60e51b815260040161034090611e16565b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103a257506001600160e01b031982166303a24d0760e21b145b806103b157506103b182610c79565b90505b919050565b6060600380546103c89061238c565b80601f01602080910402602001604051908101604052809291908181526020018280546103f49061238c565b80156104415780601f1061041657610100808354040283529160200191610441565b820191906000526020600020905b81548152906001019060200180831161042457829003601f168201915b50505050509050919050565b610455610c92565b6001600160a01b0316856001600160a01b0316148061047b575061047b856102e5610c92565b6104975760405162461bcd60e51b815260040161034090611f7b565b6104a48585858585610c96565b5050505050565b6104b3610c92565b6001600160a01b03166104c4610820565b6001600160a01b0316146104ea5760405162461bcd60e51b815260040161034090612047565b6040516370a0823160e01b8152829082906001600160a01b038316906370a082319061051a903090600401611c18565b60206040518083038186803b15801561053257600080fd5b505afa158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a9190611b7e565b8111156105f0576040516370a0823160e01b81526001600160a01b038316906370a082319061059d903090600401611c18565b60206040518083038186803b1580156105b557600080fd5b505afa1580156105c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ed9190611b7e565b90505b6106046001600160a01b0383163383610e6a565b50505050565b60075481565b606081518351146106335760405162461bcd60e51b8152600401610340906121a4565b6000835167ffffffffffffffff81111561065d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610686578160200160208202803683370190505b50905060005b8451811015610728576106ed8582815181106106b857634e487b7160e01b600052603260045260246000fd5b60200260200101518583815181106106e057634e487b7160e01b600052603260045260246000fd5b6020026020010151610318565b82828151811061070d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610721816123c7565b905061068c565b509392505050565b60008061073c83610b5f565b1192915050565b61074b610c92565b6001600160a01b031661075c610820565b6001600160a01b0316146107825760405162461bcd60e51b815260040161034090612047565b600655565b60045460ff165b90565b610799610c92565b6001600160a01b03166107aa610820565b6001600160a01b0316146107d05760405162461bcd60e51b815260040161034090612047565b6107da6000610ec5565b565b6107e4610c92565b6001600160a01b03166107f5610820565b6001600160a01b03161461081b5760405162461bcd60e51b815260040161034090612047565b600855565b6000546001600160a01b031690565b610837610c92565b6001600160a01b0316610848610820565b6001600160a01b03161461086e5760405162461bcd60e51b815260040161034090612047565b61087781610f15565b50565b610882610787565b1561089f5760405162461bcd60e51b81526004016103409061207c565b600081116108bf5760405162461bcd60e51b815260040161034090612276565b600654816007546108d09190612312565b11156108ee5760405162461bcd60e51b815260040161034090611fcd565b600954604051636eb1769f60e11b81526000916001600160a01b03169063dd62ed3e906109219033903090600401611c2c565b60206040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190611b7e565b90508082600854610982919061232a565b1061099f5760405162461bcd60e51b8152600401610340906120ac565b6000826008546109af919061232a565b6009549091506109ca906001600160a01b0316333084610f28565b60008367ffffffffffffffff8111156109f357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610a1c578160200160208202803683370190505b50905060008467ffffffffffffffff811115610a4857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610a71578160200160208202803683370190505b50905060015b858111610b095780600754610a8c9190612312565b83610a98600184612349565b81518110610ab657634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600182610ace8284612349565b81518110610aec57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610b01816123c7565b915050610a77565b50610b2533838360405180602001604052806000815250610f49565b84600754610b339190612312565b6007555050505050565b610b4f610b48610c92565b83836110cb565b5050565b60075490565b60065481565b60009081526005602052604090205490565b60085481565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6009546001600160a01b031681565b610bbc610c92565b6001600160a01b0316856001600160a01b03161480610be25750610be2856102e5610c92565b610bfe5760405162461bcd60e51b815260040161034090611ea7565b6104a4858585858561116e565b610c13610c92565b6001600160a01b0316610c24610820565b6001600160a01b031614610c4a5760405162461bcd60e51b815260040161034090612047565b6001600160a01b038116610c705760405162461bcd60e51b815260040161034090611e61565b61087781610ec5565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b8151835114610cb75760405162461bcd60e51b8152600401610340906121ed565b6001600160a01b038416610cdd5760405162461bcd60e51b815260040161034090611f36565b6000610ce7610c92565b9050610cf7818787878787610e62565b60005b8451811015610dfc576000858281518110610d2557634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610d5157634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526001835260408082206001600160a01b038e168352909352919091205490915081811015610da25760405162461bcd60e51b815260040161034090611ffd565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610de1908490612312565b9250508190555050505080610df5906123c7565b9050610cfa565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e4c929190611d2e565b60405180910390a4610e628187878787876112b5565b505050505050565b610ec08363a9059cbb60e01b8484604051602401610e89929190611d02565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526113c3565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051610b4f9060039060208401906116bf565b610604846323b872dd60e01b858585604051602401610e8993929190611ca4565b6001600160a01b038416610f6f5760405162461bcd60e51b815260040161034090612235565b8151835114610f905760405162461bcd60e51b8152600401610340906121ed565b6000610f9a610c92565b9050610fab81600087878787610e62565b60005b845181101561106357838181518110610fd757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600087848151811061100357634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461104b9190612312565b9091555081905061105b816123c7565b915050610fae565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110b4929190611d2e565b60405180910390a46104a4816000878787876112b5565b816001600160a01b0316836001600160a01b031614156110fd5760405162461bcd60e51b815260040161034090612111565b6001600160a01b0383811660008181526002602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611161908590611d5c565b60405180910390a3505050565b6001600160a01b0384166111945760405162461bcd60e51b815260040161034090611f36565b600061119e610c92565b90506111be8187876111af88611452565b6111b888611452565b87610e62565b60008481526001602090815260408083206001600160a01b038a168452909152902054838110156112015760405162461bcd60e51b815260040161034090611ffd565b60008581526001602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611240908490612312565b92505081905550856001600160a01b0316876001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516112969291906122b6565b60405180910390a46112ac8288888888886114ab565b50505050505050565b6112c7846001600160a01b031661157c565b15610e625760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113009089908990889088908890600401611c46565b602060405180830381600087803b15801561131a57600080fd5b505af192505050801561134a575060408051601f3d908101601f1916820190925261134791810190611afc565b60015b61139357611356612414565b80611361575061137b565b8060405162461bcd60e51b81526004016103409190611d67565b60405162461bcd60e51b815260040161034090611d7a565b6001600160e01b0319811663bc197c8160e01b146112ac5760405162461bcd60e51b815260040161034090611dce565b6000611418826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115ad9092919063ffffffff16565b805190915015610ec057808060200190518101906114369190611ac4565b610ec05760405162461bcd60e51b81526004016103409061215a565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061149a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6114bd846001600160a01b031661157c565b15610e625760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906114f69089908990889088908890600401611cc8565b602060405180830381600087803b15801561151057600080fd5b505af1925050508015611540575060408051601f3d908101601f1916820190925261153d91810190611afc565b60015b61154c57611356612414565b6001600160e01b0319811663f23a6e6160e01b146112ac5760405162461bcd60e51b815260040161034090611dce565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60606115bc84846000856115c6565b90505b9392505050565b6060824710156115e85760405162461bcd60e51b815260040161034090611ef0565b6115f18561157c565b61160d5760405162461bcd60e51b8152600401610340906120da565b600080866001600160a01b031685876040516116299190611bfc565b60006040518083038185875af1925050503d8060008114611666576040519150601f19603f3d011682016040523d82523d6000602084013e61166b565b606091505b509150915061167b828286611686565b979650505050505050565b606083156116955750816115bf565b8251156116a55782518084602001fd5b8160405162461bcd60e51b81526004016103409190611d67565b8280546116cb9061238c565b90600052602060002090601f0160209004810192826116ed5760008555611733565b82601f1061170657805160ff1916838001178555611733565b82800160010185558215611733579182015b82811115611733578251825591602001919060010190611718565b5061173f929150611743565b5090565b5b8082111561173f5760008155600101611744565b600067ffffffffffffffff831115611772576117726123f8565b611785601f8401601f19166020016122c4565b905082815283838301111561179957600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146103b457600080fd5b600082601f8301126117d7578081fd5b813560206117ec6117e7836122ee565b6122c4565b8281528181019085830183850287018401881015611808578586fd5b855b858110156118265781358452928401929084019060010161180a565b5090979650505050505050565b600082601f830112611843578081fd5b6115bf83833560208501611758565b600060208284031215611863578081fd5b6115bf826117b0565b6000806040838503121561187e578081fd5b611887836117b0565b9150611895602084016117b0565b90509250929050565b600080600080600060a086880312156118b5578081fd5b6118be866117b0565b94506118cc602087016117b0565b9350604086013567ffffffffffffffff808211156118e8578283fd5b6118f489838a016117c7565b94506060880135915080821115611909578283fd5b61191589838a016117c7565b9350608088013591508082111561192a578283fd5b5061193788828901611833565b9150509295509295909350565b600080600080600060a0868803121561195b578081fd5b611964866117b0565b9450611972602087016117b0565b93506040860135925060608601359150608086013567ffffffffffffffff81111561199b578182fd5b61193788828901611833565b600080604083850312156119b9578182fd5b6119c2836117b0565b915060208301356119d2816124b9565b809150509250929050565b600080604083850312156119ef578182fd5b6119f8836117b0565b946020939093013593505050565b60008060408385031215611a18578182fd5b823567ffffffffffffffff80821115611a2f578384fd5b818501915085601f830112611a42578384fd5b81356020611a526117e7836122ee565b82815281810190858301838502870184018b1015611a6e578889fd5b8896505b84871015611a9757611a83816117b0565b835260019690960195918301918301611a72565b5096505086013592505080821115611aad578283fd5b50611aba858286016117c7565b9150509250929050565b600060208284031215611ad5578081fd5b81516115bf816124b9565b600060208284031215611af1578081fd5b81356115bf816124c7565b600060208284031215611b0d578081fd5b81516115bf816124c7565b600060208284031215611b29578081fd5b813567ffffffffffffffff811115611b3f578182fd5b8201601f81018413611b4f578182fd5b611b5e84823560208401611758565b949350505050565b600060208284031215611b77578081fd5b5035919050565b600060208284031215611b8f578081fd5b5051919050565b6000815180845260208085019450808401835b83811015611bc557815187529582019590820190600101611ba9565b509495945050505050565b60008151808452611be8816020860160208601612360565b601f01601f19169290920160200192915050565b60008251611c0e818460208701612360565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0386811682528516602082015260a060408201819052600090611c7290830186611b96565b8281036060840152611c848186611b96565b90508281036080840152611c988185611bd0565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061167b90830184611bd0565b6001600160a01b03929092168252602082015260400190565b6000602082526115bf6020830184611b96565b600060408252611d416040830185611b96565b8281036020840152611d538185611b96565b95945050505050565b901515815260200190565b6000602082526115bf6020830184611bd0565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b6020808252601490820152736e6f7420656e6f75676820616c6c6f77616e636560601b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601b908201527f6e65656420746f206d696e74206174206c656173742031204e46540000000000604082015260600190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156122e6576122e66123f8565b604052919050565b600067ffffffffffffffff821115612308576123086123f8565b5060209081020190565b60008219821115612325576123256123e2565b500190565b6000816000190483118215151615612344576123446123e2565b500290565b60008282101561235b5761235b6123e2565b500390565b60005b8381101561237b578181015183820152602001612363565b838111156106045750506000910152565b6002810460018216806123a057607f821691505b602082108114156123c157634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156123db576123db6123e2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d10156124245761078e565b600481823e6308c379a0612438825161240e565b146124425761078e565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715612472575050505061078e565b8284019250825191508082111561248c575050505061078e565b503d830160208284010111156124a45750505061078e565b601f01601f1916810160200160405291505090565b801515811461087757600080fd5b6001600160e01b03198116811461087757600080fdfea26469706673582212200c2e71d0ac84d4d6c742d23369c303d91016a031a9e415b672faf972344863a664736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6d696e74696e672e636174736f6663726f2e636f6d2f6e66742f7b69647d2e6a736f6e000000000000000000000000000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6d696e74696e672e636174736f6663726f2e636f6d2f6e66742f7b69647d2e6a736f6e000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : uri_ (string): https://minting.catsofcro.com/nft/{id}.json

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [2] : 68747470733a2f2f6d696e74696e672e636174736f6663726f2e636f6d2f6e66
Arg [3] : 742f7b69647d2e6a736f6e000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

47802:2453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22651:231;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21674:310;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22395:105::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24590:442::-;;;;;;:::i;:::-;;:::i;:::-;;49877:375;;;;;;:::i;:::-;;:::i;47950:30::-;;;:::i;23048:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40242:122::-;;;;;;:::i;:::-;;:::i;49669:101::-;;;;;;:::i;:::-;;:::i;37298:86::-;;;:::i;11761:103::-;;;:::i;49556:105::-;;;;;;:::i;:::-;;:::i;11110:87::-;;;:::i;:::-;;;;;;;:::i;49778:91::-;;;;;;:::i;:::-;;:::i;48172:1005::-;;;;;;:::i;:::-;;:::i;23645:155::-;;;;;;:::i;:::-;;:::i;49456:92::-;;;:::i;47912:31::-;;;:::i;40031:113::-;;;;;;:::i;:::-;;:::i;47987:40::-;;;:::i;23872:168::-;;;;;;:::i;:::-;;:::i;48034:73::-;;;:::i;24112:401::-;;;;;;:::i;:::-;;:::i;12019:201::-;;;;;;:::i;:::-;;:::i;22651:231::-;22737:7;-1:-1:-1;;;;;22765:21:0;;22757:77;;;;-1:-1:-1;;;22757:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;22852:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;22852:22:0;;;;;;;;;;;;22651:231::o;21674:310::-;21776:4;-1:-1:-1;;;;;;21813:41:0;;-1:-1:-1;;;21813:41:0;;:110;;-1:-1:-1;;;;;;;21871:52:0;;-1:-1:-1;;;21871:52:0;21813:110;:163;;;;21940:36;21964:11;21940:23;:36::i;:::-;21793:183;;21674:310;;;;:::o;22395:105::-;22455:13;22488:4;22481:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22395:105;;;:::o;24590:442::-;24831:12;:10;:12::i;:::-;-1:-1:-1;;;;;24823:20:0;:4;-1:-1:-1;;;;;24823:20:0;;:60;;;;24847:36;24864:4;24870:12;:10;:12::i;24847:36::-;24801:160;;;;-1:-1:-1;;;24801:160:0;;;;;;;:::i;:::-;24972:52;24995:4;25001:2;25005:3;25010:7;25019:4;24972:22;:52::i;:::-;24590:442;;;;;:::o;49877:375::-;11341:12;:10;:12::i;:::-;-1:-1:-1;;;;;11330:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;11330:23:0;;11322:68;;;;-1:-1:-1;;;11322:68:0;;;;;;;:::i;:::-;50087:30:::1;::::0;-1:-1:-1;;;50087:30:0;;50017:6;;50054:7;;-1:-1:-1;;;;;50087:15:0;::::1;::::0;::::1;::::0;:30:::1;::::0;50111:4:::1;::::0;50087:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50078:6;:39;50074:111;;;50143:30;::::0;-1:-1:-1;;;50143:30:0;;-1:-1:-1;;;;;50143:15:0;::::1;::::0;::::1;::::0;:30:::1;::::0;50167:4:::1;::::0;50143:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50134:39;;50074:111;50197:47;-1:-1:-1::0;;;;;50197:18:0;::::1;50224:10;50237:6:::0;50197:18:::1;:47::i;:::-;11401:1;;49877:375:::0;;:::o;47950:30::-;;;;:::o;23048:524::-;23204:16;23265:3;:10;23246:8;:15;:29;23238:83;;;;-1:-1:-1;;;23238:83:0;;;;;;;:::i;:::-;23334:30;23381:8;:15;23367:30;;;;;;-1:-1:-1;;;23367:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23367:30:0;;23334:63;;23415:9;23410:122;23434:8;:15;23430:1;:19;23410:122;;;23490:30;23500:8;23509:1;23500:11;;;;;;-1:-1:-1;;;23500:11:0;;;;;;;;;;;;;;;23513:3;23517:1;23513:6;;;;;;-1:-1:-1;;;23513:6:0;;;;;;;;;;;;;;;23490:9;:30::i;:::-;23471:13;23485:1;23471:16;;;;;;-1:-1:-1;;;23471:16:0;;;;;;;;;;;;;;;;;;:49;23451:3;;;:::i;:::-;;;23410:122;;;-1:-1:-1;23551:13:0;23048:524;-1:-1:-1;;;23048:524:0:o;40242:122::-;40299:4;40355:1;40323:29;40349:2;40323:25;:29::i;:::-;:33;;40242:122;-1:-1:-1;;40242:122:0:o;49669:101::-;11341:12;:10;:12::i;:::-;-1:-1:-1;;;;;11330:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;11330:23:0;;11322:68;;;;-1:-1:-1;;;11322:68:0;;;;;;;:::i;:::-;49739:10:::1;:23:::0;49669:101::o;37298:86::-;37369:7;;;;37298:86;;:::o;11761:103::-;11341:12;:10;:12::i;:::-;-1:-1:-1;;;;;11330:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;11330:23:0;;11322:68;;;;-1:-1:-1;;;11322:68:0;;;;;;;:::i;:::-;11826:30:::1;11853:1;11826:18;:30::i;:::-;11761:103::o:0;49556:105::-;11341:12;:10;:12::i;:::-;-1:-1:-1;;;;;11330:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;11330:23:0;;11322:68;;;;-1:-1:-1;;;11322:68:0;;;;;;;:::i;:::-;49628:11:::1;:25:::0;49556:105::o;11110:87::-;11156:7;11183:6;-1:-1:-1;;;;;11183:6:0;11110:87;:::o;49778:91::-;11341:12;:10;:12::i;:::-;-1:-1:-1;;;;;11330:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;11330:23:0;;11322:68;;;;-1:-1:-1;;;11322:68:0;;;;;;;:::i;:::-;49842:19:::1;49856:4;49842:13;:19::i;:::-;49778:91:::0;:::o;48172:1005::-;48234:8;:6;:8::i;:::-;48233:9;48225:44;;;;-1:-1:-1;;;48225:44:0;;;;;;;:::i;:::-;48302:1;48288:11;:15;48280:55;;;;-1:-1:-1;;;48280:55:0;;;;;;;:::i;:::-;48399:10;;48384:11;48370;;:25;;;;:::i;:::-;:39;;48348:111;;;;-1:-1:-1;;;48348:111:0;;;;;;;:::i;:::-;48496:6;;:43;;-1:-1:-1;;;48496:43:0;;48472:21;;-1:-1:-1;;;;;48496:6:0;;:16;;:43;;48513:10;;48533:4;;48496:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48472:67;;48602:13;48588:11;48574;;:25;;;;:::i;:::-;:41;48552:111;;;;-1:-1:-1;;;48552:111:0;;;;;;;:::i;:::-;48674:17;48708:11;48694;;:25;;;;:::i;:::-;48732:6;;48674:45;;-1:-1:-1;48732:61:0;;-1:-1:-1;;;;;48732:6:0;48756:10;48776:4;48674:45;48732:23;:61::i;:::-;48806:20;48843:11;48829:26;;;;;;-1:-1:-1;;;48829:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48829:26:0;;48806:49;;48866:24;48907:11;48893:26;;;;;;-1:-1:-1;;;48893:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48893:26:0;-1:-1:-1;48866:53:0;-1:-1:-1;48949:1:0;48932:131;48957:11;48952:1;:16;48932:131;;49017:1;49003:11;;:15;;;;:::i;:::-;48990:3;48994:5;48998:1;48994;:5;:::i;:::-;48990:10;;;;;;-1:-1:-1;;;48990:10:0;;;;;;;;;;;;;;;;;;:28;49050:1;49033:7;49041:5;49050:1;49041;:5;:::i;:::-;49033:14;;;;;;-1:-1:-1;;;49033:14:0;;;;;;;;;;;;;;;;;;:18;48970:3;;;;:::i;:::-;;;;48932:131;;;;49073:46;49090:10;49102:3;49107:7;49073:46;;;;;;;;;;;;:16;:46::i;:::-;49158:11;49144;;:25;;;;:::i;:::-;49130:11;:39;-1:-1:-1;;;;;48172:1005:0:o;23645:155::-;23740:52;23759:12;:10;:12::i;:::-;23773:8;23783;23740:18;:52::i;:::-;23645:155;;:::o;49456:92::-;49529:11;;49456:92;:::o;47912:31::-;;;;:::o;40031:113::-;40093:7;40120:16;;;:12;:16;;;;;;;40031:113::o;47987:40::-;;;;:::o;23872:168::-;-1:-1:-1;;;;;23995:27:0;;;23971:4;23995:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;23872:168::o;48034:73::-;;;-1:-1:-1;;;;;48034:73:0;;:::o;24112:401::-;24328:12;:10;:12::i;:::-;-1:-1:-1;;;;;24320:20:0;:4;-1:-1:-1;;;;;24320:20:0;;:60;;;;24344:36;24361:4;24367:12;:10;:12::i;24344:36::-;24298:151;;;;-1:-1:-1;;;24298:151:0;;;;;;;:::i;:::-;24460:45;24478:4;24484:2;24488;24492:6;24500:4;24460:17;:45::i;12019:201::-;11341:12;:10;:12::i;:::-;-1:-1:-1;;;;;11330:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;11330:23:0;;11322:68;;;;-1:-1:-1;;;11322:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12108:22:0;::::1;12100:73;;;;-1:-1:-1::0;;;12100:73:0::1;;;;;;;:::i;:::-;12184:28;12203:8;12184:18;:28::i;20598:157::-:0;-1:-1:-1;;;;;;20707:40:0;;-1:-1:-1;;;20707:40:0;20598:157;;;:::o;9904:98::-;9984:10;9904:98;:::o;26674:1074::-;26901:7;:14;26887:3;:10;:28;26879:81;;;;-1:-1:-1;;;26879:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26979:16:0;;26971:66;;;;-1:-1:-1;;;26971:66:0;;;;;;;:::i;:::-;27050:16;27069:12;:10;:12::i;:::-;27050:31;;27094:60;27115:8;27125:4;27131:2;27135:3;27140:7;27149:4;27094:20;:60::i;:::-;27172:9;27167:421;27191:3;:10;27187:1;:14;27167:421;;;27223:10;27236:3;27240:1;27236:6;;;;;;-1:-1:-1;;;27236:6:0;;;;;;;;;;;;;;;27223:19;;27257:14;27274:7;27282:1;27274:10;;;;;;-1:-1:-1;;;27274:10:0;;;;;;;;;;;;;;;;;;;;27301:19;27323:13;;;:9;:13;;;;;;-1:-1:-1;;;;;27323:19:0;;;;;;;;;;;;27274:10;;-1:-1:-1;27365:21:0;;;;27357:76;;;;-1:-1:-1;;;27357:76:0;;;;;;;:::i;:::-;27477:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;27477:19:0;;;;;;;;;;27499:20;;;27477:42;;27549:17;;;;;;;:27;;27499:20;;27477:13;27549:27;;27499:20;;27549:27;:::i;:::-;;;;;;;;27167:421;;;27203:3;;;;:::i;:::-;;;27167:421;;;;27635:2;-1:-1:-1;;;;;27605:47:0;27629:4;-1:-1:-1;;;;;27605:47:0;27619:8;-1:-1:-1;;;;;27605:47:0;;27639:3;27644:7;27605:47;;;;;;;:::i;:::-;;;;;;;;27665:75;27701:8;27711:4;27717:2;27721:3;27726:7;27735:4;27665:35;:75::i;:::-;26674:1074;;;;;;:::o;44504:211::-;44621:86;44641:5;44671:23;;;44696:2;44700:5;44648:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;44648:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;44648:58:0;-1:-1:-1;;;;;;44648:58:0;;;;;;;;;;44621:19;:86::i;:::-;44504:211;;;:::o;12380:191::-;12454:16;12473:6;;-1:-1:-1;;;;;12490:17:0;;;-1:-1:-1;;;;;;12490:17:0;;;;;;12523:40;;12473:6;;;;;;;12523:40;;12454:16;12523:40;12380:191;;:::o;28592:88::-;28659:13;;;;:4;;:13;;;;;:::i;44723:248::-;44867:96;44887:5;44917:27;;;44946:4;44952:2;44956:5;44894:68;;;;;;;;;;:::i;29991:735::-;-1:-1:-1;;;;;30169:16:0;;30161:62;;;;-1:-1:-1;;;30161:62:0;;;;;;;:::i;:::-;30256:7;:14;30242:3;:10;:28;30234:81;;;;-1:-1:-1;;;30234:81:0;;;;;;;:::i;:::-;30328:16;30347:12;:10;:12::i;:::-;30328:31;;30372:66;30393:8;30411:1;30415:2;30419:3;30424:7;30433:4;30372:20;:66::i;:::-;30456:9;30451:103;30475:3;:10;30471:1;:14;30451:103;;;30532:7;30540:1;30532:10;;;;;;-1:-1:-1;;;30532:10:0;;;;;;;;;;;;;;;30507:9;:17;30517:3;30521:1;30517:6;;;;;;-1:-1:-1;;;30517:6:0;;;;;;;;;;;;;;;30507:17;;;;;;;;;;;:21;30525:2;-1:-1:-1;;;;;30507:21:0;-1:-1:-1;;;;;30507:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;30487:3:0;;-1:-1:-1;30487:3:0;;;:::i;:::-;;;;30451:103;;;;30607:2;-1:-1:-1;;;;;30571:53:0;30603:1;-1:-1:-1;;;;;30571:53:0;30585:8;-1:-1:-1;;;;;30571:53:0;;30611:3;30616:7;30571:53;;;;;;;:::i;:::-;;;;;;;;30637:81;30673:8;30691:1;30695:2;30699:3;30704:7;30713:4;30637:35;:81::i;32860:331::-;33015:8;-1:-1:-1;;;;;33006:17:0;:5;-1:-1:-1;;;;;33006:17:0;;;32998:71;;;;-1:-1:-1;;;32998:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33080:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;33080:46:0;;;;;;;33142:41;;;;;33080:46;;33142:41;:::i;:::-;;;;;;;;32860:331;;;:::o;25496:820::-;-1:-1:-1;;;;;25684:16:0;;25676:66;;;;-1:-1:-1;;;25676:66:0;;;;;;;:::i;:::-;25755:16;25774:12;:10;:12::i;:::-;25755:31;;25799:96;25820:8;25830:4;25836:2;25840:21;25858:2;25840:17;:21::i;:::-;25863:25;25881:6;25863:17;:25::i;:::-;25890:4;25799:20;:96::i;:::-;25908:19;25930:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;25930:19:0;;;;;;;;;;25968:21;;;;25960:76;;;;-1:-1:-1;;;25960:76:0;;;;;;;:::i;:::-;26072:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;26072:19:0;;;;;;;;;;26094:20;;;26072:42;;26136:17;;;;;;;:27;;26094:20;;26072:13;26136:27;;26094:20;;26136:27;:::i;:::-;;;;;;;;26212:2;-1:-1:-1;;;;;26181:46:0;26206:4;-1:-1:-1;;;;;26181:46:0;26196:8;-1:-1:-1;;;;;26181:46:0;;26216:2;26220:6;26181:46;;;;;;;:::i;:::-;;;;;;;;26240:68;26271:8;26281:4;26287:2;26291;26295:6;26303:4;26240:30;:68::i;:::-;25496:820;;;;;;;:::o;35128:813::-;35368:15;:2;-1:-1:-1;;;;;35368:13:0;;:15::i;:::-;35364:570;;;35404:79;;-1:-1:-1;;;35404:79:0;;-1:-1:-1;;;;;35404:43:0;;;;;:79;;35448:8;;35458:4;;35464:3;;35469:7;;35478:4;;35404:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35404:79:0;;;;;;;;-1:-1:-1;;35404:79:0;;;;;;;;;;;;:::i;:::-;;;35400:523;;;;:::i;:::-;;;;;;;;35796:6;35789:14;;-1:-1:-1;;;35789:14:0;;;;;;;;:::i;35400:523::-;35845:62;;-1:-1:-1;;;35845:62:0;;;;;;;:::i;35400:523::-;-1:-1:-1;;;;;;35565:60:0;;-1:-1:-1;;;35565:60:0;35561:159;;35650:50;;-1:-1:-1;;;35650:50:0;;;;;;;:::i;47077:716::-;47501:23;47527:69;47555:4;47527:69;;;;;;;;;;;;;;;;;47535:5;-1:-1:-1;;;;;47527:27:0;;;:69;;;;;:::i;:::-;47611:17;;47501:95;;-1:-1:-1;47611:21:0;47607:179;;47708:10;47697:30;;;;;;;;;;;;:::i;:::-;47689:85;;;;-1:-1:-1;;;47689:85:0;;;;;;;:::i;35949:198::-;36069:16;;;36083:1;36069:16;;;;;;;;;36015;;36044:22;;36069:16;;;;;;;;;;;;-1:-1:-1;36069:16:0;36044:41;;36107:7;36096:5;36102:1;36096:8;;;;;;-1:-1:-1;;;36096:8:0;;;;;;;;;;;;;;;;;;:18;36134:5;35949:198;-1:-1:-1;;35949:198:0:o;34376:744::-;34591:15;:2;-1:-1:-1;;;;;34591:13:0;;:15::i;:::-;34587:526;;;34627:72;;-1:-1:-1;;;34627:72:0;;-1:-1:-1;;;;;34627:38:0;;;;;:72;;34666:8;;34676:4;;34682:2;;34686:6;;34694:4;;34627:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34627:72:0;;;;;;;;-1:-1:-1;;34627:72:0;;;;;;;;;;;;:::i;:::-;;;34623:479;;;;:::i;:::-;-1:-1:-1;;;;;;34749:55:0;;-1:-1:-1;;;34749:55:0;34745:154;;34829:50;;-1:-1:-1;;;34829:50:0;;;;;;;:::i;2034:326::-;2094:4;2351:1;2329:7;-1:-1:-1;;;;;2329:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;2034:326;-1:-1:-1;;2034:326:0:o;4779:229::-;4916:12;4948:52;4970:6;4978:4;4984:1;4987:12;4948:21;:52::i;:::-;4941:59;;4779:229;;;;;;:::o;5899:510::-;6069:12;6127:5;6102:21;:30;;6094:81;;;;-1:-1:-1;;;6094:81:0;;;;;;;:::i;:::-;6194:18;6205:6;6194:10;:18::i;:::-;6186:60;;;;-1:-1:-1;;;6186:60:0;;;;;;;:::i;:::-;6260:12;6274:23;6301:6;-1:-1:-1;;;;;6301:11:0;6320:5;6327:4;6301:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6259:73;;;;6350:51;6367:7;6376:10;6388:12;6350:16;:51::i;:::-;6343:58;5899:510;-1:-1:-1;;;;;;;5899:510:0:o;8585:712::-;8735:12;8764:7;8760:530;;;-1:-1:-1;8795:10:0;8788:17;;8760:530;8909:17;;:21;8905:374;;9107:10;9101:17;9168:15;9155:10;9151:2;9147:19;9140:44;9055:148;9250:12;9243:20;;-1:-1:-1;;;9243:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:705;;721:3;714:4;706:6;702:17;698:27;688:2;;743:5;736;729:20;688:2;783:6;770:20;809:4;833:65;848:49;894:2;848:49;:::i;:::-;833:65;:::i;:::-;932:15;;;963:12;;;;995:15;;;1041:11;;;1029:24;;1025:33;;1022:42;-1:-1:-1;1019:2:1;;;1081:5;1074;1067:20;1019:2;1107:5;1121:163;1135:2;1132:1;1129:9;1121:163;;;1192:17;;1180:30;;1230:12;;;;1262;;;;1153:1;1146:9;1121:163;;;-1:-1:-1;1302:5:1;;678:635;-1:-1:-1;;;;;;;678:635:1:o;1318:232::-;;1415:3;1408:4;1400:6;1396:17;1392:27;1382:2;;1437:5;1430;1423:20;1382:2;1463:81;1540:3;1531:6;1518:20;1511:4;1503:6;1499:17;1463:81;:::i;1555:198::-;;1667:2;1655:9;1646:7;1642:23;1638:32;1635:2;;;1688:6;1680;1673:22;1635:2;1716:31;1737:9;1716:31;:::i;1758:274::-;;;1887:2;1875:9;1866:7;1862:23;1858:32;1855:2;;;1908:6;1900;1893:22;1855:2;1936:31;1957:9;1936:31;:::i;:::-;1926:41;;1986:40;2022:2;2011:9;2007:18;1986:40;:::i;:::-;1976:50;;1845:187;;;;;:::o;2037:1001::-;;;;;;2276:3;2264:9;2255:7;2251:23;2247:33;2244:2;;;2298:6;2290;2283:22;2244:2;2326:31;2347:9;2326:31;:::i;:::-;2316:41;;2376:40;2412:2;2401:9;2397:18;2376:40;:::i;:::-;2366:50;;2467:2;2456:9;2452:18;2439:32;2490:18;2531:2;2523:6;2520:14;2517:2;;;2552:6;2544;2537:22;2517:2;2580:67;2639:7;2630:6;2619:9;2615:22;2580:67;:::i;:::-;2570:77;;2700:2;2689:9;2685:18;2672:32;2656:48;;2729:2;2719:8;2716:16;2713:2;;;2750:6;2742;2735:22;2713:2;2778:69;2839:7;2828:8;2817:9;2813:24;2778:69;:::i;:::-;2768:79;;2900:3;2889:9;2885:19;2872:33;2856:49;;2930:2;2920:8;2917:16;2914:2;;;2951:6;2943;2936:22;2914:2;;2979:53;3024:7;3013:8;3002:9;2998:24;2979:53;:::i;:::-;2969:63;;;2234:804;;;;;;;;:::o;3043:632::-;;;;;;3232:3;3220:9;3211:7;3207:23;3203:33;3200:2;;;3254:6;3246;3239:22;3200:2;3282:31;3303:9;3282:31;:::i;:::-;3272:41;;3332:40;3368:2;3357:9;3353:18;3332:40;:::i;:::-;3322:50;;3419:2;3408:9;3404:18;3391:32;3381:42;;3470:2;3459:9;3455:18;3442:32;3432:42;;3525:3;3514:9;3510:19;3497:33;3553:18;3545:6;3542:30;3539:2;;;3590:6;3582;3575:22;3539:2;3618:51;3661:7;3652:6;3641:9;3637:22;3618:51;:::i;3680:329::-;;;3806:2;3794:9;3785:7;3781:23;3777:32;3774:2;;;3827:6;3819;3812:22;3774:2;3855:31;3876:9;3855:31;:::i;:::-;3845:41;;3936:2;3925:9;3921:18;3908:32;3949:30;3973:5;3949:30;:::i;:::-;3998:5;3988:15;;;3764:245;;;;;:::o;4014:266::-;;;4143:2;4131:9;4122:7;4118:23;4114:32;4111:2;;;4164:6;4156;4149:22;4111:2;4192:31;4213:9;4192:31;:::i;:::-;4182:41;4270:2;4255:18;;;;4242:32;;-1:-1:-1;;;4101:179:1:o;4285:1226::-;;;4464:2;4452:9;4443:7;4439:23;4435:32;4432:2;;;4485:6;4477;4470:22;4432:2;4530:9;4517:23;4559:18;4600:2;4592:6;4589:14;4586:2;;;4621:6;4613;4606:22;4586:2;4664:6;4653:9;4649:22;4639:32;;4709:7;4702:4;4698:2;4694:13;4690:27;4680:2;;4736:6;4728;4721:22;4680:2;4777;4764:16;4799:4;4823:65;4838:49;4884:2;4838:49;:::i;4823:65::-;4922:15;;;4953:12;;;;4985:11;;;5023;;;5015:20;;5011:29;;5008:42;-1:-1:-1;5005:2:1;;;5068:6;5060;5053:22;5005:2;5095:6;5086:15;;5110:171;5124:2;5121:1;5118:9;5110:171;;;5181:25;5202:3;5181:25;:::i;:::-;5169:38;;5142:1;5135:9;;;;;5227:12;;;;5259;;5110:171;;;-1:-1:-1;5300:5:1;-1:-1:-1;;5343:18:1;;5330:32;;-1:-1:-1;;5374:16:1;;;5371:2;;;5408:6;5400;5393:22;5371:2;;5436:69;5497:7;5486:8;5475:9;5471:24;5436:69;:::i;:::-;5426:79;;;4422:1089;;;;;:::o;5516:257::-;;5636:2;5624:9;5615:7;5611:23;5607:32;5604:2;;;5657:6;5649;5642:22;5604:2;5694:9;5688:16;5713:30;5737:5;5713:30;:::i;5778:257::-;;5889:2;5877:9;5868:7;5864:23;5860:32;5857:2;;;5910:6;5902;5895:22;5857:2;5954:9;5941:23;5973:32;5999:5;5973:32;:::i;6040:261::-;;6162:2;6150:9;6141:7;6137:23;6133:32;6130:2;;;6183:6;6175;6168:22;6130:2;6220:9;6214:16;6239:32;6265:5;6239:32;:::i;6306:482::-;;6428:2;6416:9;6407:7;6403:23;6399:32;6396:2;;;6449:6;6441;6434:22;6396:2;6494:9;6481:23;6527:18;6519:6;6516:30;6513:2;;;6564:6;6556;6549:22;6513:2;6592:22;;6645:4;6637:13;;6633:27;-1:-1:-1;6623:2:1;;6679:6;6671;6664:22;6623:2;6707:75;6774:7;6769:2;6756:16;6751:2;6747;6743:11;6707:75;:::i;:::-;6697:85;6386:402;-1:-1:-1;;;;6386:402:1:o;6793:190::-;;6905:2;6893:9;6884:7;6880:23;6876:32;6873:2;;;6926:6;6918;6911:22;6873:2;-1:-1:-1;6954:23:1;;6863:120;-1:-1:-1;6863:120:1:o;6988:194::-;;7111:2;7099:9;7090:7;7086:23;7082:32;7079:2;;;7132:6;7124;7117:22;7079:2;-1:-1:-1;7160:16:1;;7069:113;-1:-1:-1;7069:113:1:o;7187:443::-;;7284:5;7278:12;7311:6;7306:3;7299:19;7337:4;7366:2;7361:3;7357:12;7350:19;;7403:2;7396:5;7392:14;7424:3;7436:169;7450:6;7447:1;7444:13;7436:169;;;7511:13;;7499:26;;7545:12;;;;7580:15;;;;7472:1;7465:9;7436:169;;;-1:-1:-1;7621:3:1;;7254:376;-1:-1:-1;;;;;7254:376:1:o;7635:259::-;;7716:5;7710:12;7743:6;7738:3;7731:19;7759:63;7815:6;7808:4;7803:3;7799:14;7792:4;7785:5;7781:16;7759:63;:::i;:::-;7876:2;7855:15;-1:-1:-1;;7851:29:1;7842:39;;;;7883:4;7838:50;;7686:208;-1:-1:-1;;7686:208:1:o;7899:274::-;;8066:6;8060:13;8082:53;8128:6;8123:3;8116:4;8108:6;8104:17;8082:53;:::i;:::-;8151:16;;;;;8036:137;-1:-1:-1;;8036:137:1:o;8178:203::-;-1:-1:-1;;;;;8342:32:1;;;;8324:51;;8312:2;8297:18;;8279:102::o;8386:304::-;-1:-1:-1;;;;;8616:15:1;;;8598:34;;8668:15;;8663:2;8648:18;;8641:43;8548:2;8533:18;;8515:175::o;8695:840::-;-1:-1:-1;;;;;9092:15:1;;;9074:34;;9144:15;;9139:2;9124:18;;9117:43;9054:3;9191:2;9176:18;;9169:31;;;8695:840;;9223:63;;9266:19;;9258:6;9223:63;:::i;:::-;9334:9;9326:6;9322:22;9317:2;9306:9;9302:18;9295:50;9368;9411:6;9403;9368:50;:::i;:::-;9354:64;;9467:9;9459:6;9455:22;9449:3;9438:9;9434:19;9427:51;9495:34;9522:6;9514;9495:34;:::i;:::-;9487:42;9026:509;-1:-1:-1;;;;;;;;9026:509:1:o;9540:375::-;-1:-1:-1;;;;;9798:15:1;;;9780:34;;9850:15;;;;9845:2;9830:18;;9823:43;9897:2;9882:18;;9875:34;;;;9730:2;9715:18;;9697:218::o;9920:562::-;-1:-1:-1;;;;;10217:15:1;;;10199:34;;10269:15;;10264:2;10249:18;;10242:43;10316:2;10301:18;;10294:34;;;10359:2;10344:18;;10337:34;;;10179:3;10402;10387:19;;10380:32;;;9920:562;;10429:47;;10456:19;;10448:6;10429:47;:::i;10487:274::-;-1:-1:-1;;;;;10679:32:1;;;;10661:51;;10743:2;10728:18;;10721:34;10649:2;10634:18;;10616:145::o;10766:267::-;;10945:2;10934:9;10927:21;10965:62;11023:2;11012:9;11008:18;11000:6;10965:62;:::i;11038:477::-;;11295:2;11284:9;11277:21;11321:62;11379:2;11368:9;11364:18;11356:6;11321:62;:::i;:::-;11431:9;11423:6;11419:22;11414:2;11403:9;11399:18;11392:50;11459;11502:6;11494;11459:50;:::i;:::-;11451:58;11267:248;-1:-1:-1;;;;;11267:248:1:o;11520:187::-;11685:14;;11678:22;11660:41;;11648:2;11633:18;;11615:92::o;11935:221::-;;12084:2;12073:9;12066:21;12104:46;12146:2;12135:9;12131:18;12123:6;12104:46;:::i;12161:416::-;12363:2;12345:21;;;12402:2;12382:18;;;12375:30;12441:34;12436:2;12421:18;;12414:62;-1:-1:-1;;;12507:2:1;12492:18;;12485:50;12567:3;12552:19;;12335:242::o;12582:404::-;12784:2;12766:21;;;12823:2;12803:18;;;12796:30;12862:34;12857:2;12842:18;;12835:62;-1:-1:-1;;;12928:2:1;12913:18;;12906:38;12976:3;12961:19;;12756:230::o;12991:407::-;13193:2;13175:21;;;13232:2;13212:18;;;13205:30;13271:34;13266:2;13251:18;;13244:62;-1:-1:-1;;;13337:2:1;13322:18;;13315:41;13388:3;13373:19;;13165:233::o;13403:402::-;13605:2;13587:21;;;13644:2;13624:18;;;13617:30;13683:34;13678:2;13663:18;;13656:62;-1:-1:-1;;;13749:2:1;13734:18;;13727:36;13795:3;13780:19;;13577:228::o;13810:405::-;14012:2;13994:21;;;14051:2;14031:18;;;14024:30;14090:34;14085:2;14070:18;;14063:62;-1:-1:-1;;;14156:2:1;14141:18;;14134:39;14205:3;14190:19;;13984:231::o;14220:402::-;14422:2;14404:21;;;14461:2;14441:18;;;14434:30;14500:34;14495:2;14480:18;;14473:62;-1:-1:-1;;;14566:2:1;14551:18;;14544:36;14612:3;14597:19;;14394:228::o;14627:401::-;14829:2;14811:21;;;14868:2;14848:18;;;14841:30;14907:34;14902:2;14887:18;;14880:62;-1:-1:-1;;;14973:2:1;14958:18;;14951:35;15018:3;15003:19;;14801:227::o;15033:414::-;15235:2;15217:21;;;15274:2;15254:18;;;15247:30;15313:34;15308:2;15293:18;;15286:62;-1:-1:-1;;;15379:2:1;15364:18;;15357:48;15437:3;15422:19;;15207:240::o;15452:346::-;15654:2;15636:21;;;15693:2;15673:18;;;15666:30;-1:-1:-1;;;15727:2:1;15712:18;;15705:52;15789:2;15774:18;;15626:172::o;15803:406::-;16005:2;15987:21;;;16044:2;16024:18;;;16017:30;16083:34;16078:2;16063:18;;16056:62;-1:-1:-1;;;16149:2:1;16134:18;;16127:40;16199:3;16184:19;;15977:232::o;16214:356::-;16416:2;16398:21;;;16435:18;;;16428:30;16494:34;16489:2;16474:18;;16467:62;16561:2;16546:18;;16388:182::o;16575:346::-;16777:2;16759:21;;;16816:2;16796:18;;;16789:30;-1:-1:-1;;;16850:2:1;16835:18;;16828:52;16912:2;16897:18;;16749:172::o;16926:344::-;17128:2;17110:21;;;17167:2;17147:18;;;17140:30;-1:-1:-1;;;17201:2:1;17186:18;;17179:50;17261:2;17246:18;;17100:170::o;17275:353::-;17477:2;17459:21;;;17516:2;17496:18;;;17489:30;17555:31;17550:2;17535:18;;17528:59;17619:2;17604:18;;17449:179::o;17633:405::-;17835:2;17817:21;;;17874:2;17854:18;;;17847:30;17913:34;17908:2;17893:18;;17886:62;-1:-1:-1;;;17979:2:1;17964:18;;17957:39;18028:3;18013:19;;17807:231::o;18043:406::-;18245:2;18227:21;;;18284:2;18264:18;;;18257:30;18323:34;18318:2;18303:18;;18296:62;-1:-1:-1;;;18389:2:1;18374:18;;18367:40;18439:3;18424:19;;18217:232::o;18454:405::-;18656:2;18638:21;;;18695:2;18675:18;;;18668:30;18734:34;18729:2;18714:18;;18707:62;-1:-1:-1;;;18800:2:1;18785:18;;18778:39;18849:3;18834:19;;18628:231::o;18864:404::-;19066:2;19048:21;;;19105:2;19085:18;;;19078:30;19144:34;19139:2;19124:18;;19117:62;-1:-1:-1;;;19210:2:1;19195:18;;19188:38;19258:3;19243:19;;19038:230::o;19273:397::-;19475:2;19457:21;;;19514:2;19494:18;;;19487:30;19553:34;19548:2;19533:18;;19526:62;-1:-1:-1;;;19619:2:1;19604:18;;19597:31;19660:3;19645:19;;19447:223::o;19675:351::-;19877:2;19859:21;;;19916:2;19896:18;;;19889:30;19955:29;19950:2;19935:18;;19928:57;20017:2;20002:18;;19849:177::o;20031:::-;20177:25;;;20165:2;20150:18;;20132:76::o;20213:248::-;20387:25;;;20443:2;20428:18;;20421:34;20375:2;20360:18;;20342:119::o;20466:251::-;20536:2;20530:9;20566:17;;;20613:18;20598:34;;20634:22;;;20595:62;20592:2;;;20660:18;;:::i;:::-;20696:2;20689:22;20510:207;;-1:-1:-1;20510:207:1:o;20722:192::-;;20821:18;20813:6;20810:30;20807:2;;;20843:18;;:::i;:::-;-1:-1:-1;20903:4:1;20884:17;;;20880:28;;20797:117::o;20919:128::-;;20990:1;20986:6;20983:1;20980:13;20977:2;;;20996:18;;:::i;:::-;-1:-1:-1;21032:9:1;;20967:80::o;21052:168::-;;21158:1;21154;21150:6;21146:14;21143:1;21140:21;21135:1;21128:9;21121:17;21117:45;21114:2;;;21165:18;;:::i;:::-;-1:-1:-1;21205:9:1;;21104:116::o;21225:125::-;;21293:1;21290;21287:8;21284:2;;;21298:18;;:::i;:::-;-1:-1:-1;21335:9:1;;21274:76::o;21355:258::-;21427:1;21437:113;21451:6;21448:1;21445:13;21437:113;;;21527:11;;;21521:18;21508:11;;;21501:39;21473:2;21466:10;21437:113;;;21568:6;21565:1;21562:13;21559:2;;;-1:-1:-1;;21603:1:1;21585:16;;21578:27;21408:205::o;21618:380::-;21703:1;21693:12;;21750:1;21740:12;;;21761:2;;21815:4;21807:6;21803:17;21793:27;;21761:2;21868;21860:6;21857:14;21837:18;21834:38;21831:2;;;21914:10;21909:3;21905:20;21902:1;21895:31;21949:4;21946:1;21939:15;21977:4;21974:1;21967:15;21831:2;;21673:325;;;:::o;22003:135::-;;-1:-1:-1;;22063:17:1;;22060:2;;;22083:18;;:::i;:::-;-1:-1:-1;22130:1:1;22119:13;;22050:88::o;22143:127::-;22204:10;22199:3;22195:20;22192:1;22185:31;22235:4;22232:1;22225:15;22259:4;22256:1;22249:15;22275:127;22336:10;22331:3;22327:20;22324:1;22317:31;22367:4;22364:1;22357:15;22391:4;22388:1;22381:15;22407:88;22482:3;22478:15;;22464:31::o;22500:764::-;;22581:4;22563:16;22560:26;22557:2;;;22589:5;;22557:2;22630:1;22625:3;22620;22605:27;22692:10;22654:36;22685:3;22679:10;22654:36;:::i;:::-;22651:52;22641:2;;22707:5;;22641:2;22741;22735:9;22781:16;-1:-1:-1;;22777:29:1;22774:1;22735:9;22753:54;22836:4;22830:11;22860:16;22895:18;22966:2;22959:4;22951:6;22947:17;22944:25;22939:2;22931:6;22928:14;22925:45;22922:2;;;22973:5;;;;;;22922:2;23010:6;23004:4;23000:17;22989:28;;23046:3;23040:10;23026:24;;23073:2;23065:6;23062:14;23059:2;;;23079:5;;;;;;23059:2;;23140:16;23134:4;23130:27;23123:4;23114:6;23109:3;23105:16;23101:27;23098:60;23095:2;;;23161:5;;;;;23095:2;23226;23205:15;-1:-1:-1;;23201:29:1;23192:39;;23233:4;23188:50;23184:2;23177:62;23196:3;-1:-1:-1;;22547:717:1;:::o;23269:120::-;23357:5;23350:13;23343:21;23336:5;23333:32;23323:2;;23379:1;23376;23369:12;23394:133;-1:-1:-1;;;;;;23470:32:1;;23460:43;;23450:2;;23517:1;23514;23507:12

Swarm Source

ipfs://0c2e71d0ac84d4d6c742d23369c303d91016a031a9e415b672faf972344863a6
Loading