Token
Overview ERC-1155
Total Supply:
0 N/A
Holders:
21 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Gen1ERC1155
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.9 <0.9.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; contract Gen1ERC1155 is ERC1155, Ownable, ReentrancyGuard, Pausable { uint public tokensCount = 510; string private _uri; mapping(address => bool) private _mintApprovals; constructor(string memory _baseUri) ERC1155(string( abi.encodePacked( _baseUri, "{id}.json" ) )) { _uri = _baseUri; } modifier existId(uint _tokenid) { require(_tokenid <= tokensCount, "Invalid token id"); _; } modifier existIds(uint[] memory _tokenIds) { for(uint i=0; i < _tokenIds.length; i++){ require(_tokenIds[i] <= tokensCount, "Invalid token id"); } _; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function setURI(string memory newuri) external onlyOwner { _uri = newuri; } function setMintApprovalForAll(address operator, bool approved) external onlyOwner { _mintApprovals[operator] = approved; } function isMintApprovedForAll(address operator) public view returns (bool) { return _mintApprovals[operator]; } // contract mint function function mint(address to, uint tokenId, uint amount) external existId(tokenId){ require( isMintApprovedForAll(msg.sender) || owner() == msg.sender, "ERC1155: caller is not owner nor approved" ); _mint(to, tokenId, amount, ""); } function mintBatch(address to, uint[] memory tokenIds, uint[] memory amounts) external existIds(tokenIds) { require( isMintApprovedForAll(msg.sender) || owner() == msg.sender, "ERC1155: caller is not owner nor approved" ); _mintBatch(to, tokenIds, amounts, ""); } function getWalletToken() external view returns(uint[] memory){ uint256[] memory tokens = new uint256[](tokensCount); for(uint256 i = 0; i < tokensCount; i++ ){ tokens[i] = balanceOf(msg.sender, i+1); } return(tokens); } function uri(uint256 _tokenId) override public view existId(_tokenId) returns (string memory) { return string( abi.encodePacked( _uri, Strings.toString(_tokenId),".json" ) ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; import "../IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must 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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./extensions/IERC1155MetadataURI.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) 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: address zero is not a valid owner"); 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 token 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: caller is not token 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {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 `ids` and `amounts` 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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; import "../ERC1155.sol"; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { 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()); } }
// 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "../IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseUri","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":[{"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":[],"name":"getWalletToken","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"address","name":"operator","type":"address"}],"name":"isMintApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setMintApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensCount","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526101fe6006553480156200001757600080fd5b506040516200418b3803806200418b83398181016040528101906200003d91906200040b565b80604051602001620000509190620004f9565b6040516020818303038152906040526200007081620000d460201b60201c565b506200009162000085620000f060201b60201c565b620000f860201b60201c565b60016004819055506000600560006101000a81548160ff0219169083151502179055508060079080519060200190620000cc929190620001be565b505062000584565b8060029080519060200190620000ec929190620001be565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001cc906200054e565b90600052602060002090601f016020900481019282620001f057600085556200023c565b82601f106200020b57805160ff19168380011785556200023c565b828001600101855582156200023c579182015b828111156200023b5782518255916020019190600101906200021e565b5b5090506200024b91906200024f565b5090565b5b808211156200026a57600081600090555060010162000250565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002d7826200028c565b810181811067ffffffffffffffff82111715620002f957620002f86200029d565b5b80604052505050565b60006200030e6200026e565b90506200031c8282620002cc565b919050565b600067ffffffffffffffff8211156200033f576200033e6200029d565b5b6200034a826200028c565b9050602081019050919050565b60005b83811015620003775780820151818401526020810190506200035a565b8381111562000387576000848401525b50505050565b6000620003a46200039e8462000321565b62000302565b905082815260208101848484011115620003c357620003c262000287565b5b620003d084828562000357565b509392505050565b600082601f830112620003f057620003ef62000282565b5b8151620004028482602086016200038d565b91505092915050565b60006020828403121562000424576200042362000278565b5b600082015167ffffffffffffffff8111156200044557620004446200027d565b5b6200045384828501620003d8565b91505092915050565b600081519050919050565b600081905092915050565b60006200047f826200045c565b6200048b818562000467565b93506200049d81856020860162000357565b80840191505092915050565b7f7b69647d2e6a736f6e0000000000000000000000000000000000000000000000600082015250565b6000620004e160098362000467565b9150620004ee82620004a9565b600982019050919050565b600062000507828462000472565b91506200051482620004d2565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056757607f821691505b602082108114156200057e576200057d6200051f565b5b50919050565b613bf780620005946000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063715018a6116100b8578063a64ed8ba1161007c578063a64ed8ba14610313578063a9c7b71214610331578063d81d0a151461034d578063e985e9c514610369578063f242432a14610399578063f2fde38b146103b557610136565b8063715018a6146102a75780638456cb59146102b15780638a478477146102bb5780638da5cb5b146102d9578063a22cb465146102f757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102035780633a4a67ab1461021f5780633f4ba83a1461024f5780634e1273f4146102595780635c975abb1461028957610136565b8062fdd58e1461013b57806301ffc9a71461016b57806302fe53051461019b5780630e89341c146101b7578063156e29f6146101e7575b600080fd5b610155600480360381019061015091906122f7565b6103d1565b6040516101629190612346565b60405180910390f35b610185600480360381019061018091906123b9565b61049a565b6040516101929190612401565b60405180910390f35b6101b560048036038101906101b09190612562565b61057c565b005b6101d160048036038101906101cc91906125ab565b61059e565b6040516101de9190612660565b60405180910390f35b61020160048036038101906101fc9190612682565b610619565b005b61021d6004803603810190610218919061283e565b610705565b005b6102396004803603810190610234919061290d565b6107a6565b6040516102469190612401565b60405180910390f35b6102576107fc565b005b610273600480360381019061026e91906129fd565b61080e565b6040516102809190612b33565b60405180910390f35b610291610927565b60405161029e9190612401565b60405180910390f35b6102af61093e565b005b6102b9610952565b005b6102c3610964565b6040516102d09190612b33565b60405180910390f35b6102e1610a12565b6040516102ee9190612b64565b60405180910390f35b610311600480360381019061030c9190612bab565b610a3c565b005b61031b610a52565b6040516103289190612346565b60405180910390f35b61034b60048036038101906103469190612bab565b610a58565b005b61036760048036038101906103629190612beb565b610abb565b005b610383600480360381019061037e9190612c76565b610be1565b6040516103909190612401565b60405180910390f35b6103b360048036038101906103ae9190612cb6565b610c75565b005b6103cf60048036038101906103ca919061290d565b610d16565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043990612dbf565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610575575061057482610d9a565b5b9050919050565b610584610e04565b806007908051906020019061059a9291906121ac565b5050565b6060816006548111156105e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105dd90612e2b565b60405180910390fd5b60076105f184610e82565b604051602001610602929190612fc8565b604051602081830303815290604052915050919050565b8160065481111561065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065690612e2b565b60405180910390fd5b610668336107a6565b806106a557503373ffffffffffffffffffffffffffffffffffffffff1661068d610a12565b73ffffffffffffffffffffffffffffffffffffffff16145b6106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db90613069565b60405180910390fd5b6106ff84848460405180602001604052806000815250610fe3565b50505050565b61070d611194565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061075357506107528561074d611194565b610be1565b5b610792576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610789906130fb565b60405180910390fd5b61079f858585858561119c565b5050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610804610e04565b61080c6114be565b565b60608151835114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b9061318d565b60405180910390fd5b6000835167ffffffffffffffff81111561087157610870612437565b5b60405190808252806020026020018201604052801561089f5781602001602082028036833780820191505090505b50905060005b845181101561091c576108ec8582815181106108c4576108c36131ad565b5b60200260200101518583815181106108df576108de6131ad565b5b60200260200101516103d1565b8282815181106108ff576108fe6131ad565b5b602002602001018181525050806109159061320b565b90506108a5565b508091505092915050565b6000600560009054906101000a900460ff16905090565b610946610e04565b6109506000611521565b565b61095a610e04565b6109626115e7565b565b6060600060065467ffffffffffffffff81111561098457610983612437565b5b6040519080825280602002602001820160405280156109b25781602001602082028036833780820191505090505b50905060005b600654811015610a0a576109d8336001836109d39190613254565b6103d1565b8282815181106109eb576109ea6131ad565b5b6020026020010181815250508080610a029061320b565b9150506109b8565b508091505090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a4e610a47611194565b838361164a565b5050565b60065481565b610a60610e04565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b8160005b8151811015610b3a57600654828281518110610ade57610add6131ad565b5b60200260200101511115610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90612e2b565b60405180910390fd5b8080610b329061320b565b915050610abf565b50610b44336107a6565b80610b8157503373ffffffffffffffffffffffffffffffffffffffff16610b69610a12565b73ffffffffffffffffffffffffffffffffffffffff16145b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613069565b60405180910390fd5b610bdb848484604051806020016040528060008152506117b7565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610c7d611194565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cc35750610cc285610cbd611194565b610be1565b5b610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf9906130fb565b60405180910390fd5b610d0f85858585856119e4565b5050505050565b610d1e610e04565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d859061331c565b60405180910390fd5b610d9781611521565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e0c611194565b73ffffffffffffffffffffffffffffffffffffffff16610e2a610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613388565b60405180910390fd5b565b60606000821415610eca576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610fde565b600082905060005b60008214610efc578080610ee59061320b565b915050600a82610ef591906133d7565b9150610ed2565b60008167ffffffffffffffff811115610f1857610f17612437565b5b6040519080825280601f01601f191660200182016040528015610f4a5781602001600182028036833780820191505090505b5090505b60008514610fd757600182610f639190613408565b9150600a85610f72919061343c565b6030610f7e9190613254565b60f81b818381518110610f9457610f936131ad565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610fd091906133d7565b9450610f4e565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104a906134df565b60405180910390fd5b600061105d611194565b9050600061106a85611c80565b9050600061107785611c80565b905061108883600089858589611cfa565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110e79190613254565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516111659291906134ff565b60405180910390a461117c83600089858589611d18565b61118b83600089898989611d20565b50505050505050565b600033905090565b81518351146111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d79061359a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112479061362c565b60405180910390fd5b600061125a611194565b905061126a818787878787611cfa565b60005b845181101561141b57600085828151811061128b5761128a6131ad565b5b6020026020010151905060008583815181106112aa576112a96131ad565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561134b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611342906136be565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114009190613254565b92505081905550505050806114149061320b565b905061126d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114929291906136de565b60405180910390a46114a8818787878787611d18565b6114b6818787878787611f07565b505050505050565b6114c66120ee565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61150a611194565b6040516115179190612b64565b60405180910390a1565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6115ef612137565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611633611194565b6040516116409190612b64565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b090613787565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117aa9190612401565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e906134df565b60405180910390fd5b815183511461186b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118629061359a565b60405180910390fd5b6000611875611194565b905061188681600087878787611cfa565b60005b845181101561193f578381815181106118a5576118a46131ad565b5b60200260200101516000808784815181106118c3576118c26131ad565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119259190613254565b9250508190555080806119379061320b565b915050611889565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119b79291906136de565b60405180910390a46119ce81600087878787611d18565b6119dd81600087878787611f07565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b9061362c565b60405180910390fd5b6000611a5e611194565b90506000611a6b85611c80565b90506000611a7885611c80565b9050611a88838989858589611cfa565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906136be565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd49190613254565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611c519291906134ff565b60405180910390a4611c67848a8a86868a611d18565b611c75848a8a8a8a8a611d20565b505050505050505050565b60606000600167ffffffffffffffff811115611c9f57611c9e612437565b5b604051908082528060200260200182016040528015611ccd5781602001602082028036833780820191505090505b5090508281600081518110611ce557611ce46131ad565b5b60200260200101818152505080915050919050565b611d02612137565b611d10868686868686612181565b505050505050565b505050505050565b611d3f8473ffffffffffffffffffffffffffffffffffffffff16612189565b15611eff578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d859594939291906137fc565b602060405180830381600087803b158015611d9f57600080fd5b505af1925050508015611dd057506040513d601f19601f82011682018060405250810190611dcd919061386b565b60015b611e7657611ddc6138a5565b806308c379a01415611e395750611df16138c7565b80611dfc5750611e3b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e309190612660565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d906139cf565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490613a61565b60405180910390fd5b505b505050505050565b611f268473ffffffffffffffffffffffffffffffffffffffff16612189565b156120e6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f6c959493929190613a81565b602060405180830381600087803b158015611f8657600080fd5b505af1925050508015611fb757506040513d601f19601f82011682018060405250810190611fb4919061386b565b60015b61205d57611fc36138a5565b806308c379a014156120205750611fd86138c7565b80611fe35750612022565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120179190612660565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612054906139cf565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90613a61565b60405180910390fd5b505b505050505050565b6120f6610927565b612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90613b35565b60405180910390fd5b565b61213f610927565b1561217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690613ba1565b60405180910390fd5b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546121b890612e7a565b90600052602060002090601f0160209004810192826121da5760008555612221565b82601f106121f357805160ff1916838001178555612221565b82800160010185558215612221579182015b82811115612220578251825591602001919060010190612205565b5b50905061222e9190612232565b5090565b5b8082111561224b576000816000905550600101612233565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061228e82612263565b9050919050565b61229e81612283565b81146122a957600080fd5b50565b6000813590506122bb81612295565b92915050565b6000819050919050565b6122d4816122c1565b81146122df57600080fd5b50565b6000813590506122f1816122cb565b92915050565b6000806040838503121561230e5761230d612259565b5b600061231c858286016122ac565b925050602061232d858286016122e2565b9150509250929050565b612340816122c1565b82525050565b600060208201905061235b6000830184612337565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61239681612361565b81146123a157600080fd5b50565b6000813590506123b38161238d565b92915050565b6000602082840312156123cf576123ce612259565b5b60006123dd848285016123a4565b91505092915050565b60008115159050919050565b6123fb816123e6565b82525050565b600060208201905061241660008301846123f2565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61246f82612426565b810181811067ffffffffffffffff8211171561248e5761248d612437565b5b80604052505050565b60006124a161224f565b90506124ad8282612466565b919050565b600067ffffffffffffffff8211156124cd576124cc612437565b5b6124d682612426565b9050602081019050919050565b82818337600083830152505050565b6000612505612500846124b2565b612497565b90508281526020810184848401111561252157612520612421565b5b61252c8482856124e3565b509392505050565b600082601f8301126125495761254861241c565b5b81356125598482602086016124f2565b91505092915050565b60006020828403121561257857612577612259565b5b600082013567ffffffffffffffff8111156125965761259561225e565b5b6125a284828501612534565b91505092915050565b6000602082840312156125c1576125c0612259565b5b60006125cf848285016122e2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126125780820151818401526020810190506125f7565b83811115612621576000848401525b50505050565b6000612632826125d8565b61263c81856125e3565b935061264c8185602086016125f4565b61265581612426565b840191505092915050565b6000602082019050818103600083015261267a8184612627565b905092915050565b60008060006060848603121561269b5761269a612259565b5b60006126a9868287016122ac565b93505060206126ba868287016122e2565b92505060406126cb868287016122e2565b9150509250925092565b600067ffffffffffffffff8211156126f0576126ef612437565b5b602082029050602081019050919050565b600080fd5b6000612719612714846126d5565b612497565b9050808382526020820190506020840283018581111561273c5761273b612701565b5b835b81811015612765578061275188826122e2565b84526020840193505060208101905061273e565b5050509392505050565b600082601f8301126127845761278361241c565b5b8135612794848260208601612706565b91505092915050565b600067ffffffffffffffff8211156127b8576127b7612437565b5b6127c182612426565b9050602081019050919050565b60006127e16127dc8461279d565b612497565b9050828152602081018484840111156127fd576127fc612421565b5b6128088482856124e3565b509392505050565b600082601f8301126128255761282461241c565b5b81356128358482602086016127ce565b91505092915050565b600080600080600060a0868803121561285a57612859612259565b5b6000612868888289016122ac565b9550506020612879888289016122ac565b945050604086013567ffffffffffffffff81111561289a5761289961225e565b5b6128a68882890161276f565b935050606086013567ffffffffffffffff8111156128c7576128c661225e565b5b6128d38882890161276f565b925050608086013567ffffffffffffffff8111156128f4576128f361225e565b5b61290088828901612810565b9150509295509295909350565b60006020828403121561292357612922612259565b5b6000612931848285016122ac565b91505092915050565b600067ffffffffffffffff82111561295557612954612437565b5b602082029050602081019050919050565b60006129796129748461293a565b612497565b9050808382526020820190506020840283018581111561299c5761299b612701565b5b835b818110156129c557806129b188826122ac565b84526020840193505060208101905061299e565b5050509392505050565b600082601f8301126129e4576129e361241c565b5b81356129f4848260208601612966565b91505092915050565b60008060408385031215612a1457612a13612259565b5b600083013567ffffffffffffffff811115612a3257612a3161225e565b5b612a3e858286016129cf565b925050602083013567ffffffffffffffff811115612a5f57612a5e61225e565b5b612a6b8582860161276f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612aaa816122c1565b82525050565b6000612abc8383612aa1565b60208301905092915050565b6000602082019050919050565b6000612ae082612a75565b612aea8185612a80565b9350612af583612a91565b8060005b83811015612b26578151612b0d8882612ab0565b9750612b1883612ac8565b925050600181019050612af9565b5085935050505092915050565b60006020820190508181036000830152612b4d8184612ad5565b905092915050565b612b5e81612283565b82525050565b6000602082019050612b796000830184612b55565b92915050565b612b88816123e6565b8114612b9357600080fd5b50565b600081359050612ba581612b7f565b92915050565b60008060408385031215612bc257612bc1612259565b5b6000612bd0858286016122ac565b9250506020612be185828601612b96565b9150509250929050565b600080600060608486031215612c0457612c03612259565b5b6000612c12868287016122ac565b935050602084013567ffffffffffffffff811115612c3357612c3261225e565b5b612c3f8682870161276f565b925050604084013567ffffffffffffffff811115612c6057612c5f61225e565b5b612c6c8682870161276f565b9150509250925092565b60008060408385031215612c8d57612c8c612259565b5b6000612c9b858286016122ac565b9250506020612cac858286016122ac565b9150509250929050565b600080600080600060a08688031215612cd257612cd1612259565b5b6000612ce0888289016122ac565b9550506020612cf1888289016122ac565b9450506040612d02888289016122e2565b9350506060612d13888289016122e2565b925050608086013567ffffffffffffffff811115612d3457612d3361225e565b5b612d4088828901612810565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612da9602a836125e3565b9150612db482612d4d565b604082019050919050565b60006020820190508181036000830152612dd881612d9c565b9050919050565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b6000612e156010836125e3565b9150612e2082612ddf565b602082019050919050565b60006020820190508181036000830152612e4481612e08565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e9257607f821691505b60208210811415612ea657612ea5612e4b565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612ed981612e7a565b612ee38186612eac565b94506001821660008114612efe5760018114612f0f57612f42565b60ff19831686528186019350612f42565b612f1885612eb7565b60005b83811015612f3a57815481890152600182019150602081019050612f1b565b838801955050505b50505092915050565b6000612f56826125d8565b612f608185612eac565b9350612f708185602086016125f4565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612fb2600583612eac565b9150612fbd82612f7c565b600582019050919050565b6000612fd48285612ecc565b9150612fe08284612f4b565b9150612feb82612fa5565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006130536029836125e3565b915061305e82612ff7565b604082019050919050565b6000602082019050818103600083015261308281613046565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b60006130e5602f836125e3565b91506130f082613089565b604082019050919050565b60006020820190508181036000830152613114816130d8565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006131776029836125e3565b91506131828261311b565b604082019050919050565b600060208201905081810360008301526131a68161316a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613216826122c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613249576132486131dc565b5b600182019050919050565b600061325f826122c1565b915061326a836122c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561329f5761329e6131dc565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133066026836125e3565b9150613311826132aa565b604082019050919050565b60006020820190508181036000830152613335816132f9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006133726020836125e3565b915061337d8261333c565b602082019050919050565b600060208201905081810360008301526133a181613365565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133e2826122c1565b91506133ed836122c1565b9250826133fd576133fc6133a8565b5b828204905092915050565b6000613413826122c1565b915061341e836122c1565b925082821015613431576134306131dc565b5b828203905092915050565b6000613447826122c1565b9150613452836122c1565b925082613462576134616133a8565b5b828206905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006134c96021836125e3565b91506134d48261346d565b604082019050919050565b600060208201905081810360008301526134f8816134bc565b9050919050565b60006040820190506135146000830185612337565b6135216020830184612337565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006135846028836125e3565b915061358f82613528565b604082019050919050565b600060208201905081810360008301526135b381613577565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136166025836125e3565b9150613621826135ba565b604082019050919050565b6000602082019050818103600083015261364581613609565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006136a8602a836125e3565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b600060408201905081810360008301526136f88185612ad5565b9050818103602083015261370c8184612ad5565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006137716029836125e3565b915061377c82613715565b604082019050919050565b600060208201905081810360008301526137a081613764565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006137ce826137a7565b6137d881856137b2565b93506137e88185602086016125f4565b6137f181612426565b840191505092915050565b600060a0820190506138116000830188612b55565b61381e6020830187612b55565b61382b6040830186612337565b6138386060830185612337565b818103608083015261384a81846137c3565b90509695505050505050565b6000815190506138658161238d565b92915050565b60006020828403121561388157613880612259565b5b600061388f84828501613856565b91505092915050565b60008160e01c9050919050565b600060033d11156138c45760046000803e6138c1600051613898565b90505b90565b600060443d10156138d75761395a565b6138df61224f565b60043d036004823e80513d602482011167ffffffffffffffff8211171561390757505061395a565b808201805167ffffffffffffffff811115613925575050505061395a565b80602083010160043d03850181111561394257505050505061395a565b61395182602001850186612466565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006139b96034836125e3565b91506139c48261395d565b604082019050919050565b600060208201905081810360008301526139e8816139ac565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613a4b6028836125e3565b9150613a56826139ef565b604082019050919050565b60006020820190508181036000830152613a7a81613a3e565b9050919050565b600060a082019050613a966000830188612b55565b613aa36020830187612b55565b8181036040830152613ab58186612ad5565b90508181036060830152613ac98185612ad5565b90508181036080830152613add81846137c3565b90509695505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613b1f6014836125e3565b9150613b2a82613ae9565b602082019050919050565b60006020820190508181036000830152613b4e81613b12565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613b8b6010836125e3565b9150613b9682613b55565b602082019050919050565b60006020820190508181036000830152613bba81613b7e565b905091905056fea2646970667358221220972a39d93175687f4fe8e440d5875db817de396b498217ac6da14771d33906bf64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75642f697066732f516d647a6e457041436e4a566277364c65637637637958434b5548646b58597941777656706a6545616d525563332f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75642f697066732f516d647a6e457041436e4a566277364c65637637637958434b5548646b58597941777656706a6545616d525563332f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseUri (string): https://powerplins.mypinata.cloud/ipfs/QmdznEpACnJVbw6Lecv7cyXCKUHdkXYyAwvVpjeEamRUc3/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [2] : 68747470733a2f2f706f776572706c696e732e6d7970696e6174612e636c6f75
Arg [3] : 642f697066732f516d647a6e457041436e4a566277364c65637637637958434b
Arg [4] : 5548646b58597941777656706a6545616d525563332f00000000000000000000
Deployed ByteCode Sourcemap
620:2657:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:227:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1747:87:16;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3022:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2140:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4065:427:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1981:123:16;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1388:63;;;:::i;:::-;;2569:508:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1615:84:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:0;;;:::i;:::-;;1323:59:16;;;:::i;:::-;;2747:269;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3145:153:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;694:29:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1840:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2426:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3365:166:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:395;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2081:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:227:3;2271:7;2317:1;2298:21;;:7;:21;;;;2290:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2383:9;:13;2393:2;2383:13;;;;;;;;;;;:22;2397:7;2383:22;;;;;;;;;;;;;;;;2376:29;;2185:227;;;;:::o;1236:305::-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;1747:87:16:-;1094:13:0;:11;:13::i;:::-;1821:6:16::1;1814:4;:13;;;;;;;;;;;;:::i;:::-;;1747:87:::0;:::o;3022:252::-;3101:13;3082:8;1070:11;;1058:8;:23;;1050:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3187:4:::1;3209:26;3226:8;3209:16;:26::i;:::-;3153:104;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3126:141;;3022:252:::0;;;;:::o;2140:280::-;2210:7;1070:11;;1058:8;:23;;1050:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;2249:32:::1;2270:10;2249:20;:32::i;:::-;:57;;;;2296:10;2285:21;;:7;:5;:7::i;:::-;:21;;;2249:57;2228:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;2383:30;2389:2;2393:7;2402:6;2383:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;2140:280:::0;;;;:::o;4065:427:3:-;4298:12;:10;:12::i;:::-;4290:20;;:4;:20;;;:60;;;;4314:36;4331:4;4337:12;:10;:12::i;:::-;4314:16;:36::i;:::-;4290:60;4269:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;4433:52;4456:4;4462:2;4466:3;4471:7;4480:4;4433:22;:52::i;:::-;4065:427;;;;;:::o;1981:123:16:-;2050:4;2073:14;:24;2088:8;2073:24;;;;;;;;;;;;;;;;;;;;;;;;;2066:31;;1981:123;;;:::o;1388:63::-;1094:13:0;:11;:13::i;:::-;1434:10:16::1;:8;:10::i;:::-;1388:63::o:0;2569:508:3:-;2720:16;2779:3;:10;2760:8;:15;:29;2752:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:30;2893:8;:15;2879:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2846:63;;2925:9;2920:120;2944:8;:15;2940:1;:19;2920:120;;;2999:30;3009:8;3018:1;3009:11;;;;;;;;:::i;:::-;;;;;;;;3022:3;3026:1;3022:6;;;;;;;;:::i;:::-;;;;;;;;2999:9;:30::i;:::-;2980:13;2994:1;2980:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2961:3;;;;:::i;:::-;;;2920:120;;;;3057:13;3050:20;;;2569:508;;;;:::o;1615:84:1:-;1662:4;1685:7;;;;;;;;;;;1678:14;;1615:84;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1323:59:16:-;1094:13:0;:11;:13::i;:::-;1367:8:16::1;:6;:8::i;:::-;1323:59::o:0;2747:269::-;2795:13;2819:23;2859:11;;2845:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:52;;2885:9;2881:105;2904:11;;2900:1;:15;2881:105;;;2949:26;2959:10;2973:1;2971;:3;;;;:::i;:::-;2949:9;:26::i;:::-;2936:6;2943:1;2936:9;;;;;;;;:::i;:::-;;;;;;;:39;;;;;2917:3;;;;;:::i;:::-;;;;2881:105;;;;3002:6;2995:14;;;2747:269;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;3145:153:3:-;3239:52;3258:12;:10;:12::i;:::-;3272:8;3282;3239:18;:52::i;:::-;3145:153;;:::o;694:29:16:-;;;;:::o;1840:135::-;1094:13:0;:11;:13::i;:::-;1960:8:16::1;1933:14;:24;1948:8;1933:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;1840:135:::0;;:::o;2426:315::-;2522:8;1183:6;1179:121;1197:9;:16;1193:1;:20;1179:121;;;1257:11;;1241:9;1251:1;1241:12;;;;;;;;:::i;:::-;;;;;;;;:27;;1233:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1215:3;;;;;:::i;:::-;;;;1179:121;;;;2563:32:::1;2584:10;2563:20;:32::i;:::-;:57;;;;2610:10;2599:21;;:7;:5;:7::i;:::-;:21;;;2563:57;2542:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;2697:37;2708:2;2712:8;2722:7;2697:37;;;;;;;;;;;::::0;:10:::1;:37::i;:::-;2426:315:::0;;;;:::o;3365:166:3:-;3464:4;3487:18;:27;3506:7;3487:27;;;;;;;;;;;;;;;:37;3515:8;3487:37;;;;;;;;;;;;;;;;;;;;;;;;;3480:44;;3365:166;;;;:::o;3598:395::-;3806:12;:10;:12::i;:::-;3798:20;;:4;:20;;;:60;;;;3822:36;3839:4;3845:12;:10;:12::i;:::-;3822:16;:36::i;:::-;3798:60;3777:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;3941:45;3959:4;3965:2;3969;3973:6;3981:4;3941:17;:45::i;:::-;3598:395;;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;829:155:14:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;392:703:13:-;448:13;674:1;665:5;:10;661:51;;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;8632:709:3:-;8793:1;8779:16;;:2;:16;;;;8771:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8844:16;8863:12;:10;:12::i;:::-;8844:31;;8885:20;8908:21;8926:2;8908:17;:21::i;:::-;8885:44;;8939:24;8966:25;8984:6;8966:17;:25::i;:::-;8939:52;;9002:66;9023:8;9041:1;9045:2;9049:3;9054:7;9063:4;9002:20;:66::i;:::-;9100:6;9079:9;:13;9089:2;9079:13;;;;;;;;;;;:17;9093:2;9079:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9158:2;9121:52;;9154:1;9121:52;;9136:8;9121:52;;;9162:2;9166:6;9121:52;;;;;;;:::i;:::-;;;;;;;;9184:65;9204:8;9222:1;9226:2;9230:3;9235:7;9244:4;9184:19;:65::i;:::-;9260:74;9291:8;9309:1;9313:2;9317;9321:6;9329:4;9260:30;:74::i;:::-;8761:580;;;8632:709;;;;:::o;640:96:12:-;693:7;719:10;712:17;;640:96;:::o;6235:1115:3:-;6455:7;:14;6441:3;:10;:28;6433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6546:1;6532:16;;:2;:16;;;;6524:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6601:16;6620:12;:10;:12::i;:::-;6601:31;;6643:60;6664:8;6674:4;6680:2;6684:3;6689:7;6698:4;6643:20;:60::i;:::-;6719:9;6714:411;6738:3;:10;6734:1;:14;6714:411;;;6769:10;6782:3;6786:1;6782:6;;;;;;;;:::i;:::-;;;;;;;;6769:19;;6802:14;6819:7;6827:1;6819:10;;;;;;;;:::i;:::-;;;;;;;;6802:27;;6844:19;6866:9;:13;6876:2;6866:13;;;;;;;;;;;:19;6880:4;6866:19;;;;;;;;;;;;;;;;6844:41;;6922:6;6907:11;:21;;6899:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7053:6;7039:11;:20;7017:9;:13;7027:2;7017:13;;;;;;;;;;;:19;7031:4;7017:19;;;;;;;;;;;;;;;:42;;;;7108:6;7087:9;:13;7097:2;7087:13;;;;;;;;;;;:17;7101:2;7087:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6755:370;;;6750:3;;;;:::i;:::-;;;6714:411;;;;7170:2;7140:47;;7164:4;7140:47;;7154:8;7140:47;;;7174:3;7179:7;7140:47;;;;;;;:::i;:::-;;;;;;;;7198:59;7218:8;7228:4;7234:2;7238:3;7243:7;7252:4;7198:19;:59::i;:::-;7268:75;7304:8;7314:4;7320:2;7324:3;7329:7;7338:4;7268:35;:75::i;:::-;6423:927;6235:1115;;;;;:::o;2433:117:1:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:7;;:15;;;;;;;;;;;;;;;;;;2521:22;2530:12;:10;:12::i;:::-;2521:22;;;;;;:::i;:::-;;;;;;;;2433:117::o:0;:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;2186:115:1:-;1239:19;:17;:19::i;:::-;2255:4:::1;2245:7;;:14;;;;;;;;;;;;;;;;;;2274:20;2281:12;:10;:12::i;:::-;2274:20;;;;;;:::i;:::-;;;;;;;;2186:115::o:0;12912:323:3:-;13062:8;13053:17;;:5;:17;;;;13045:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13164:8;13126:18;:25;13145:5;13126:25;;;;;;;;;;;;;;;:35;13152:8;13126:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13209:8;13187:41;;13202:5;13187:41;;;13219:8;13187:41;;;;;;:::i;:::-;;;;;;;;12912:323;;;:::o;9731:791::-;9917:1;9903:16;;:2;:16;;;;9895:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9989:7;:14;9975:3;:10;:28;9967:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10059:16;10078:12;:10;:12::i;:::-;10059:31;;10101:66;10122:8;10140:1;10144:2;10148:3;10153:7;10162:4;10101:20;:66::i;:::-;10183:9;10178:101;10202:3;:10;10198:1;:14;10178:101;;;10258:7;10266:1;10258:10;;;;;;;;:::i;:::-;;;;;;;;10233:9;:17;10243:3;10247:1;10243:6;;;;;;;;:::i;:::-;;;;;;;;10233:17;;;;;;;;;;;:21;10251:2;10233:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;10214:3;;;;;:::i;:::-;;;;10178:101;;;;10330:2;10294:53;;10326:1;10294:53;;10308:8;10294:53;;;10334:3;10339:7;10294:53;;;;;;;:::i;:::-;;;;;;;;10358:65;10378:8;10396:1;10400:2;10404:3;10409:7;10418:4;10358:19;:65::i;:::-;10434:81;10470:8;10488:1;10492:2;10496:3;10501:7;10510:4;10434:35;:81::i;:::-;9885:637;9731:791;;;;:::o;4942:947::-;5137:1;5123:16;;:2;:16;;;;5115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5192:16;5211:12;:10;:12::i;:::-;5192:31;;5233:20;5256:21;5274:2;5256:17;:21::i;:::-;5233:44;;5287:24;5314:25;5332:6;5314:17;:25::i;:::-;5287:52;;5350:60;5371:8;5381:4;5387:2;5391:3;5396:7;5405:4;5350:20;:60::i;:::-;5421:19;5443:9;:13;5453:2;5443:13;;;;;;;;;;;:19;5457:4;5443:19;;;;;;;;;;;;;;;;5421:41;;5495:6;5480:11;:21;;5472:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5618:6;5604:11;:20;5582:9;:13;5592:2;5582:13;;;;;;;;;;;:19;5596:4;5582:19;;;;;;;;;;;;;;;:42;;;;5665:6;5644:9;:13;5654:2;5644:13;;;;;;;;;;;:17;5658:2;5644:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5718:2;5687:46;;5712:4;5687:46;;5702:8;5687:46;;;5722:2;5726:6;5687:46;;;;;;;:::i;:::-;;;;;;;;5744:59;5764:8;5774:4;5780:2;5784:3;5789:7;5798:4;5744:19;:59::i;:::-;5814:68;5845:8;5855:4;5861:2;5865;5869:6;5877:4;5814:30;:68::i;:::-;5105:784;;;;4942:947;;;;;:::o;17066:193::-;17132:16;17160:22;17199:1;17185:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17160:41;;17222:7;17211:5;17217:1;17211:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17247:5;17240:12;;;17066:193;;;:::o;1457:284:16:-;1239:19:1;:17;:19::i;:::-;1668:66:16::1;1695:8;1705:4;1711:2;1715:3;1720:7;1729:4;1668:26;:66::i;:::-;1457:284:::0;;;;;;:::o;15318:213:3:-;;;;;;;:::o;15537:725::-;15744:15;:2;:13;;;:15::i;:::-;15740:516;;;15796:2;15779:38;;;15818:8;15828:4;15834:2;15838:6;15846:4;15779:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15775:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16122:6;16115:14;;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;;;16169:62;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;15912:43;;;15900:55;;;:8;:55;;;;15896:152;;15979:50;;;;;;;;;;:::i;:::-;;;;;;;;15896:152;15852:210;15740:516;15537:725;;;;;;:::o;16268:792::-;16500:15;:2;:13;;;:15::i;:::-;16496:558;;;16552:2;16535:43;;;16579:8;16589:4;16595:3;16600:7;16609:4;16535:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16531:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16920:6;16913:14;;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;;;16967:62;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;16705:48;;;16693:60;;;:8;:60;;;;16689:157;;16777:50;;;;;;;;;;:::i;:::-;;;;;;;;16689:157;16615:245;16496:558;16268:792;;;;;;:::o;1945:106:1:-;2011:8;:6;:8::i;:::-;2003:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:106::o;1767:::-;1837:8;:6;:8::i;:::-;1836:9;1828:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1767:106::o;14171:214:3:-;;;;;;;:::o;1175:320:11:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:17:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:619::-;7636:6;7644;7652;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7798:117;7954:2;7980:53;8025:7;8016:6;8005:9;8001:22;7980:53;:::i;:::-;7970:63;;7925:118;8082:2;8108:53;8153:7;8144:6;8133:9;8129:22;8108:53;:::i;:::-;8098:63;;8053:118;7559:619;;;;;:::o;8184:311::-;8261:4;8351:18;8343:6;8340:30;8337:56;;;8373:18;;:::i;:::-;8337:56;8423:4;8415:6;8411:17;8403:25;;8483:4;8477;8473:15;8465:23;;8184:311;;;:::o;8501:117::-;8610:1;8607;8600:12;8641:710;8737:5;8762:81;8778:64;8835:6;8778:64;:::i;:::-;8762:81;:::i;:::-;8753:90;;8863:5;8892:6;8885:5;8878:21;8926:4;8919:5;8915:16;8908:23;;8979:4;8971:6;8967:17;8959:6;8955:30;9008:3;9000:6;8997:15;8994:122;;;9027:79;;:::i;:::-;8994:122;9142:6;9125:220;9159:6;9154:3;9151:15;9125:220;;;9234:3;9263:37;9296:3;9284:10;9263:37;:::i;:::-;9258:3;9251:50;9330:4;9325:3;9321:14;9314:21;;9201:144;9185:4;9180:3;9176:14;9169:21;;9125:220;;;9129:21;8743:608;;8641:710;;;;;:::o;9374:370::-;9445:5;9494:3;9487:4;9479:6;9475:17;9471:27;9461:122;;9502:79;;:::i;:::-;9461:122;9619:6;9606:20;9644:94;9734:3;9726:6;9719:4;9711:6;9707:17;9644:94;:::i;:::-;9635:103;;9451:293;9374:370;;;;:::o;9750:307::-;9811:4;9901:18;9893:6;9890:30;9887:56;;;9923:18;;:::i;:::-;9887:56;9961:29;9983:6;9961:29;:::i;:::-;9953:37;;10045:4;10039;10035:15;10027:23;;9750:307;;;:::o;10063:410::-;10140:5;10165:65;10181:48;10222:6;10181:48;:::i;:::-;10165:65;:::i;:::-;10156:74;;10253:6;10246:5;10239:21;10291:4;10284:5;10280:16;10329:3;10320:6;10315:3;10311:16;10308:25;10305:112;;;10336:79;;:::i;:::-;10305:112;10426:41;10460:6;10455:3;10450;10426:41;:::i;:::-;10146:327;10063:410;;;;;:::o;10492:338::-;10547:5;10596:3;10589:4;10581:6;10577:17;10573:27;10563:122;;10604:79;;:::i;:::-;10563:122;10721:6;10708:20;10746:78;10820:3;10812:6;10805:4;10797:6;10793:17;10746:78;:::i;:::-;10737:87;;10553:277;10492:338;;;;:::o;10836:1509::-;10990:6;10998;11006;11014;11022;11071:3;11059:9;11050:7;11046:23;11042:33;11039:120;;;11078:79;;:::i;:::-;11039:120;11198:1;11223:53;11268:7;11259:6;11248:9;11244:22;11223:53;:::i;:::-;11213:63;;11169:117;11325:2;11351:53;11396:7;11387:6;11376:9;11372:22;11351:53;:::i;:::-;11341:63;;11296:118;11481:2;11470:9;11466:18;11453:32;11512:18;11504:6;11501:30;11498:117;;;11534:79;;:::i;:::-;11498:117;11639:78;11709:7;11700:6;11689:9;11685:22;11639:78;:::i;:::-;11629:88;;11424:303;11794:2;11783:9;11779:18;11766:32;11825:18;11817:6;11814:30;11811:117;;;11847:79;;:::i;:::-;11811:117;11952:78;12022:7;12013:6;12002:9;11998:22;11952:78;:::i;:::-;11942:88;;11737:303;12107:3;12096:9;12092:19;12079:33;12139:18;12131:6;12128:30;12125:117;;;12161:79;;:::i;:::-;12125:117;12266:62;12320:7;12311:6;12300:9;12296:22;12266:62;:::i;:::-;12256:72;;12050:288;10836:1509;;;;;;;;:::o;12351:329::-;12410:6;12459:2;12447:9;12438:7;12434:23;12430:32;12427:119;;;12465:79;;:::i;:::-;12427:119;12585:1;12610:53;12655:7;12646:6;12635:9;12631:22;12610:53;:::i;:::-;12600:63;;12556:117;12351:329;;;;:::o;12686:311::-;12763:4;12853:18;12845:6;12842:30;12839:56;;;12875:18;;:::i;:::-;12839:56;12925:4;12917:6;12913:17;12905:25;;12985:4;12979;12975:15;12967:23;;12686:311;;;:::o;13020:710::-;13116:5;13141:81;13157:64;13214:6;13157:64;:::i;:::-;13141:81;:::i;:::-;13132:90;;13242:5;13271:6;13264:5;13257:21;13305:4;13298:5;13294:16;13287:23;;13358:4;13350:6;13346:17;13338:6;13334:30;13387:3;13379:6;13376:15;13373:122;;;13406:79;;:::i;:::-;13373:122;13521:6;13504:220;13538:6;13533:3;13530:15;13504:220;;;13613:3;13642:37;13675:3;13663:10;13642:37;:::i;:::-;13637:3;13630:50;13709:4;13704:3;13700:14;13693:21;;13580:144;13564:4;13559:3;13555:14;13548:21;;13504:220;;;13508:21;13122:608;;13020:710;;;;;:::o;13753:370::-;13824:5;13873:3;13866:4;13858:6;13854:17;13850:27;13840:122;;13881:79;;:::i;:::-;13840:122;13998:6;13985:20;14023:94;14113:3;14105:6;14098:4;14090:6;14086:17;14023:94;:::i;:::-;14014:103;;13830:293;13753:370;;;;:::o;14129:894::-;14247:6;14255;14304:2;14292:9;14283:7;14279:23;14275:32;14272:119;;;14310:79;;:::i;:::-;14272:119;14458:1;14447:9;14443:17;14430:31;14488:18;14480:6;14477:30;14474:117;;;14510:79;;:::i;:::-;14474:117;14615:78;14685:7;14676:6;14665:9;14661:22;14615:78;:::i;:::-;14605:88;;14401:302;14770:2;14759:9;14755:18;14742:32;14801:18;14793:6;14790:30;14787:117;;;14823:79;;:::i;:::-;14787:117;14928:78;14998:7;14989:6;14978:9;14974:22;14928:78;:::i;:::-;14918:88;;14713:303;14129:894;;;;;:::o;15029:114::-;15096:6;15130:5;15124:12;15114:22;;15029:114;;;:::o;15149:184::-;15248:11;15282:6;15277:3;15270:19;15322:4;15317:3;15313:14;15298:29;;15149:184;;;;:::o;15339:132::-;15406:4;15429:3;15421:11;;15459:4;15454:3;15450:14;15442:22;;15339:132;;;:::o;15477:108::-;15554:24;15572:5;15554:24;:::i;:::-;15549:3;15542:37;15477:108;;:::o;15591:179::-;15660:10;15681:46;15723:3;15715:6;15681:46;:::i;:::-;15759:4;15754:3;15750:14;15736:28;;15591:179;;;;:::o;15776:113::-;15846:4;15878;15873:3;15869:14;15861:22;;15776:113;;;:::o;15925:732::-;16044:3;16073:54;16121:5;16073:54;:::i;:::-;16143:86;16222:6;16217:3;16143:86;:::i;:::-;16136:93;;16253:56;16303:5;16253:56;:::i;:::-;16332:7;16363:1;16348:284;16373:6;16370:1;16367:13;16348:284;;;16449:6;16443:13;16476:63;16535:3;16520:13;16476:63;:::i;:::-;16469:70;;16562:60;16615:6;16562:60;:::i;:::-;16552:70;;16408:224;16395:1;16392;16388:9;16383:14;;16348:284;;;16352:14;16648:3;16641:10;;16049:608;;;15925:732;;;;:::o;16663:373::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16893:9;16887:4;16883:20;16879:1;16868:9;16864:17;16857:47;16921:108;17024:4;17015:6;16921:108;:::i;:::-;16913:116;;16663:373;;;;:::o;17042:118::-;17129:24;17147:5;17129:24;:::i;:::-;17124:3;17117:37;17042:118;;:::o;17166:222::-;17259:4;17297:2;17286:9;17282:18;17274:26;;17310:71;17378:1;17367:9;17363:17;17354:6;17310:71;:::i;:::-;17166:222;;;;:::o;17394:116::-;17464:21;17479:5;17464:21;:::i;:::-;17457:5;17454:32;17444:60;;17500:1;17497;17490:12;17444:60;17394:116;:::o;17516:133::-;17559:5;17597:6;17584:20;17575:29;;17613:30;17637:5;17613:30;:::i;:::-;17516:133;;;;:::o;17655:468::-;17720:6;17728;17777:2;17765:9;17756:7;17752:23;17748:32;17745:119;;;17783:79;;:::i;:::-;17745:119;17903:1;17928:53;17973:7;17964:6;17953:9;17949:22;17928:53;:::i;:::-;17918:63;;17874:117;18030:2;18056:50;18098:7;18089:6;18078:9;18074:22;18056:50;:::i;:::-;18046:60;;18001:115;17655:468;;;;;:::o;18129:1039::-;18256:6;18264;18272;18321:2;18309:9;18300:7;18296:23;18292:32;18289:119;;;18327:79;;:::i;:::-;18289:119;18447:1;18472:53;18517:7;18508:6;18497:9;18493:22;18472:53;:::i;:::-;18462:63;;18418:117;18602:2;18591:9;18587:18;18574:32;18633:18;18625:6;18622:30;18619:117;;;18655:79;;:::i;:::-;18619:117;18760:78;18830:7;18821:6;18810:9;18806:22;18760:78;:::i;:::-;18750:88;;18545:303;18915:2;18904:9;18900:18;18887:32;18946:18;18938:6;18935:30;18932:117;;;18968:79;;:::i;:::-;18932:117;19073:78;19143:7;19134:6;19123:9;19119:22;19073:78;:::i;:::-;19063:88;;18858:303;18129:1039;;;;;:::o;19174:474::-;19242:6;19250;19299:2;19287:9;19278:7;19274:23;19270:32;19267:119;;;19305:79;;:::i;:::-;19267:119;19425:1;19450:53;19495:7;19486:6;19475:9;19471:22;19450:53;:::i;:::-;19440:63;;19396:117;19552:2;19578:53;19623:7;19614:6;19603:9;19599:22;19578:53;:::i;:::-;19568:63;;19523:118;19174:474;;;;;:::o;19654:1089::-;19758:6;19766;19774;19782;19790;19839:3;19827:9;19818:7;19814:23;19810:33;19807:120;;;19846:79;;:::i;:::-;19807:120;19966:1;19991:53;20036:7;20027:6;20016:9;20012:22;19991:53;:::i;:::-;19981:63;;19937:117;20093:2;20119:53;20164:7;20155:6;20144:9;20140:22;20119:53;:::i;:::-;20109:63;;20064:118;20221:2;20247:53;20292:7;20283:6;20272:9;20268:22;20247:53;:::i;:::-;20237:63;;20192:118;20349:2;20375:53;20420:7;20411:6;20400:9;20396:22;20375:53;:::i;:::-;20365:63;;20320:118;20505:3;20494:9;20490:19;20477:33;20537:18;20529:6;20526:30;20523:117;;;20559:79;;:::i;:::-;20523:117;20664:62;20718:7;20709:6;20698:9;20694:22;20664:62;:::i;:::-;20654:72;;20448:288;19654:1089;;;;;;;;:::o;20749:229::-;20889:34;20885:1;20877:6;20873:14;20866:58;20958:12;20953:2;20945:6;20941:15;20934:37;20749:229;:::o;20984:366::-;21126:3;21147:67;21211:2;21206:3;21147:67;:::i;:::-;21140:74;;21223:93;21312:3;21223:93;:::i;:::-;21341:2;21336:3;21332:12;21325:19;;20984:366;;;:::o;21356:419::-;21522:4;21560:2;21549:9;21545:18;21537:26;;21609:9;21603:4;21599:20;21595:1;21584:9;21580:17;21573:47;21637:131;21763:4;21637:131;:::i;:::-;21629:139;;21356:419;;;:::o;21781:166::-;21921:18;21917:1;21909:6;21905:14;21898:42;21781:166;:::o;21953:366::-;22095:3;22116:67;22180:2;22175:3;22116:67;:::i;:::-;22109:74;;22192:93;22281:3;22192:93;:::i;:::-;22310:2;22305:3;22301:12;22294:19;;21953:366;;;:::o;22325:419::-;22491:4;22529:2;22518:9;22514:18;22506:26;;22578:9;22572:4;22568:20;22564:1;22553:9;22549:17;22542:47;22606:131;22732:4;22606:131;:::i;:::-;22598:139;;22325:419;;;:::o;22750:180::-;22798:77;22795:1;22788:88;22895:4;22892:1;22885:15;22919:4;22916:1;22909:15;22936:320;22980:6;23017:1;23011:4;23007:12;22997:22;;23064:1;23058:4;23054:12;23085:18;23075:81;;23141:4;23133:6;23129:17;23119:27;;23075:81;23203:2;23195:6;23192:14;23172:18;23169:38;23166:84;;;23222:18;;:::i;:::-;23166:84;22987:269;22936:320;;;:::o;23262:148::-;23364:11;23401:3;23386:18;;23262:148;;;;:::o;23416:141::-;23465:4;23488:3;23480:11;;23511:3;23508:1;23501:14;23545:4;23542:1;23532:18;23524:26;;23416:141;;;:::o;23587:845::-;23690:3;23727:5;23721:12;23756:36;23782:9;23756:36;:::i;:::-;23808:89;23890:6;23885:3;23808:89;:::i;:::-;23801:96;;23928:1;23917:9;23913:17;23944:1;23939:137;;;;24090:1;24085:341;;;;23906:520;;23939:137;24023:4;24019:9;24008;24004:25;23999:3;23992:38;24059:6;24054:3;24050:16;24043:23;;23939:137;;24085:341;24152:38;24184:5;24152:38;:::i;:::-;24212:1;24226:154;24240:6;24237:1;24234:13;24226:154;;;24314:7;24308:14;24304:1;24299:3;24295:11;24288:35;24364:1;24355:7;24351:15;24340:26;;24262:4;24259:1;24255:12;24250:17;;24226:154;;;24409:6;24404:3;24400:16;24393:23;;24092:334;;23906:520;;23694:738;;23587:845;;;;:::o;24438:377::-;24544:3;24572:39;24605:5;24572:39;:::i;:::-;24627:89;24709:6;24704:3;24627:89;:::i;:::-;24620:96;;24725:52;24770:6;24765:3;24758:4;24751:5;24747:16;24725:52;:::i;:::-;24802:6;24797:3;24793:16;24786:23;;24548:267;24438:377;;;;:::o;24821:155::-;24961:7;24957:1;24949:6;24945:14;24938:31;24821:155;:::o;24982:400::-;25142:3;25163:84;25245:1;25240:3;25163:84;:::i;:::-;25156:91;;25256:93;25345:3;25256:93;:::i;:::-;25374:1;25369:3;25365:11;25358:18;;24982:400;;;:::o;25388:695::-;25666:3;25688:92;25776:3;25767:6;25688:92;:::i;:::-;25681:99;;25797:95;25888:3;25879:6;25797:95;:::i;:::-;25790:102;;25909:148;26053:3;25909:148;:::i;:::-;25902:155;;26074:3;26067:10;;25388:695;;;;;:::o;26089:228::-;26229:34;26225:1;26217:6;26213:14;26206:58;26298:11;26293:2;26285:6;26281:15;26274:36;26089:228;:::o;26323:366::-;26465:3;26486:67;26550:2;26545:3;26486:67;:::i;:::-;26479:74;;26562:93;26651:3;26562:93;:::i;:::-;26680:2;26675:3;26671:12;26664:19;;26323:366;;;:::o;26695:419::-;26861:4;26899:2;26888:9;26884:18;26876:26;;26948:9;26942:4;26938:20;26934:1;26923:9;26919:17;26912:47;26976:131;27102:4;26976:131;:::i;:::-;26968:139;;26695:419;;;:::o;27120:234::-;27260:34;27256:1;27248:6;27244:14;27237:58;27329:17;27324:2;27316:6;27312:15;27305:42;27120:234;:::o;27360:366::-;27502:3;27523:67;27587:2;27582:3;27523:67;:::i;:::-;27516:74;;27599:93;27688:3;27599:93;:::i;:::-;27717:2;27712:3;27708:12;27701:19;;27360:366;;;:::o;27732:419::-;27898:4;27936:2;27925:9;27921:18;27913:26;;27985:9;27979:4;27975:20;27971:1;27960:9;27956:17;27949:47;28013:131;28139:4;28013:131;:::i;:::-;28005:139;;27732:419;;;:::o;28157:228::-;28297:34;28293:1;28285:6;28281:14;28274:58;28366:11;28361:2;28353:6;28349:15;28342:36;28157:228;:::o;28391:366::-;28533:3;28554:67;28618:2;28613:3;28554:67;:::i;:::-;28547:74;;28630:93;28719:3;28630:93;:::i;:::-;28748:2;28743:3;28739:12;28732:19;;28391:366;;;:::o;28763:419::-;28929:4;28967:2;28956:9;28952:18;28944:26;;29016:9;29010:4;29006:20;29002:1;28991:9;28987:17;28980:47;29044:131;29170:4;29044:131;:::i;:::-;29036:139;;28763:419;;;:::o;29188:180::-;29236:77;29233:1;29226:88;29333:4;29330:1;29323:15;29357:4;29354:1;29347:15;29374:180;29422:77;29419:1;29412:88;29519:4;29516:1;29509:15;29543:4;29540:1;29533:15;29560:233;29599:3;29622:24;29640:5;29622:24;:::i;:::-;29613:33;;29668:66;29661:5;29658:77;29655:103;;;29738:18;;:::i;:::-;29655:103;29785:1;29778:5;29774:13;29767:20;;29560:233;;;:::o;29799:305::-;29839:3;29858:20;29876:1;29858:20;:::i;:::-;29853:25;;29892:20;29910:1;29892:20;:::i;:::-;29887:25;;30046:1;29978:66;29974:74;29971:1;29968:81;29965:107;;;30052:18;;:::i;:::-;29965:107;30096:1;30093;30089:9;30082:16;;29799:305;;;;:::o;30110:225::-;30250:34;30246:1;30238:6;30234:14;30227:58;30319:8;30314:2;30306:6;30302:15;30295:33;30110:225;:::o;30341:366::-;30483:3;30504:67;30568:2;30563:3;30504:67;:::i;:::-;30497:74;;30580:93;30669:3;30580:93;:::i;:::-;30698:2;30693:3;30689:12;30682:19;;30341:366;;;:::o;30713:419::-;30879:4;30917:2;30906:9;30902:18;30894:26;;30966:9;30960:4;30956:20;30952:1;30941:9;30937:17;30930:47;30994:131;31120:4;30994:131;:::i;:::-;30986:139;;30713:419;;;:::o;31138:182::-;31278:34;31274:1;31266:6;31262:14;31255:58;31138:182;:::o;31326:366::-;31468:3;31489:67;31553:2;31548:3;31489:67;:::i;:::-;31482:74;;31565:93;31654:3;31565:93;:::i;:::-;31683:2;31678:3;31674:12;31667:19;;31326:366;;;:::o;31698:419::-;31864:4;31902:2;31891:9;31887:18;31879:26;;31951:9;31945:4;31941:20;31937:1;31926:9;31922:17;31915:47;31979:131;32105:4;31979:131;:::i;:::-;31971:139;;31698:419;;;:::o;32123:180::-;32171:77;32168:1;32161:88;32268:4;32265:1;32258:15;32292:4;32289:1;32282:15;32309:185;32349:1;32366:20;32384:1;32366:20;:::i;:::-;32361:25;;32400:20;32418:1;32400:20;:::i;:::-;32395:25;;32439:1;32429:35;;32444:18;;:::i;:::-;32429:35;32486:1;32483;32479:9;32474:14;;32309:185;;;;:::o;32500:191::-;32540:4;32560:20;32578:1;32560:20;:::i;:::-;32555:25;;32594:20;32612:1;32594:20;:::i;:::-;32589:25;;32633:1;32630;32627:8;32624:34;;;32638:18;;:::i;:::-;32624:34;32683:1;32680;32676:9;32668:17;;32500:191;;;;:::o;32697:176::-;32729:1;32746:20;32764:1;32746:20;:::i;:::-;32741:25;;32780:20;32798:1;32780:20;:::i;:::-;32775:25;;32819:1;32809:35;;32824:18;;:::i;:::-;32809:35;32865:1;32862;32858:9;32853:14;;32697:176;;;;:::o;32879:220::-;33019:34;33015:1;33007:6;33003:14;32996:58;33088:3;33083:2;33075:6;33071:15;33064:28;32879:220;:::o;33105:366::-;33247:3;33268:67;33332:2;33327:3;33268:67;:::i;:::-;33261:74;;33344:93;33433:3;33344:93;:::i;:::-;33462:2;33457:3;33453:12;33446:19;;33105:366;;;:::o;33477:419::-;33643:4;33681:2;33670:9;33666:18;33658:26;;33730:9;33724:4;33720:20;33716:1;33705:9;33701:17;33694:47;33758:131;33884:4;33758:131;:::i;:::-;33750:139;;33477:419;;;:::o;33902:332::-;34023:4;34061:2;34050:9;34046:18;34038:26;;34074:71;34142:1;34131:9;34127:17;34118:6;34074:71;:::i;:::-;34155:72;34223:2;34212:9;34208:18;34199:6;34155:72;:::i;:::-;33902:332;;;;;:::o;34240:227::-;34380:34;34376:1;34368:6;34364:14;34357:58;34449:10;34444:2;34436:6;34432:15;34425:35;34240:227;:::o;34473:366::-;34615:3;34636:67;34700:2;34695:3;34636:67;:::i;:::-;34629:74;;34712:93;34801:3;34712:93;:::i;:::-;34830:2;34825:3;34821:12;34814:19;;34473:366;;;:::o;34845:419::-;35011:4;35049:2;35038:9;35034:18;35026:26;;35098:9;35092:4;35088:20;35084:1;35073:9;35069:17;35062:47;35126:131;35252:4;35126:131;:::i;:::-;35118:139;;34845:419;;;:::o;35270:224::-;35410:34;35406:1;35398:6;35394:14;35387:58;35479:7;35474:2;35466:6;35462:15;35455:32;35270:224;:::o;35500:366::-;35642:3;35663:67;35727:2;35722:3;35663:67;:::i;:::-;35656:74;;35739:93;35828:3;35739:93;:::i;:::-;35857:2;35852:3;35848:12;35841:19;;35500:366;;;:::o;35872:419::-;36038:4;36076:2;36065:9;36061:18;36053:26;;36125:9;36119:4;36115:20;36111:1;36100:9;36096:17;36089:47;36153:131;36279:4;36153:131;:::i;:::-;36145:139;;35872:419;;;:::o;36297:229::-;36437:34;36433:1;36425:6;36421:14;36414:58;36506:12;36501:2;36493:6;36489:15;36482:37;36297:229;:::o;36532:366::-;36674:3;36695:67;36759:2;36754:3;36695:67;:::i;:::-;36688:74;;36771:93;36860:3;36771:93;:::i;:::-;36889:2;36884:3;36880:12;36873:19;;36532:366;;;:::o;36904:419::-;37070:4;37108:2;37097:9;37093:18;37085:26;;37157:9;37151:4;37147:20;37143:1;37132:9;37128:17;37121:47;37185:131;37311:4;37185:131;:::i;:::-;37177:139;;36904:419;;;:::o;37329:634::-;37550:4;37588:2;37577:9;37573:18;37565:26;;37637:9;37631:4;37627:20;37623:1;37612:9;37608:17;37601:47;37665:108;37768:4;37759:6;37665:108;:::i;:::-;37657:116;;37820:9;37814:4;37810:20;37805:2;37794:9;37790:18;37783:48;37848:108;37951:4;37942:6;37848:108;:::i;:::-;37840:116;;37329:634;;;;;:::o;37969:228::-;38109:34;38105:1;38097:6;38093:14;38086:58;38178:11;38173:2;38165:6;38161:15;38154:36;37969:228;:::o;38203:366::-;38345:3;38366:67;38430:2;38425:3;38366:67;:::i;:::-;38359:74;;38442:93;38531:3;38442:93;:::i;:::-;38560:2;38555:3;38551:12;38544:19;;38203:366;;;:::o;38575:419::-;38741:4;38779:2;38768:9;38764:18;38756:26;;38828:9;38822:4;38818:20;38814:1;38803:9;38799:17;38792:47;38856:131;38982:4;38856:131;:::i;:::-;38848:139;;38575:419;;;:::o;39000:98::-;39051:6;39085:5;39079:12;39069:22;;39000:98;;;:::o;39104:168::-;39187:11;39221:6;39216:3;39209:19;39261:4;39256:3;39252:14;39237:29;;39104:168;;;;:::o;39278:360::-;39364:3;39392:38;39424:5;39392:38;:::i;:::-;39446:70;39509:6;39504:3;39446:70;:::i;:::-;39439:77;;39525:52;39570:6;39565:3;39558:4;39551:5;39547:16;39525:52;:::i;:::-;39602:29;39624:6;39602:29;:::i;:::-;39597:3;39593:39;39586:46;;39368:270;39278:360;;;;:::o;39644:751::-;39867:4;39905:3;39894:9;39890:19;39882:27;;39919:71;39987:1;39976:9;39972:17;39963:6;39919:71;:::i;:::-;40000:72;40068:2;40057:9;40053:18;40044:6;40000:72;:::i;:::-;40082;40150:2;40139:9;40135:18;40126:6;40082:72;:::i;:::-;40164;40232:2;40221:9;40217:18;40208:6;40164:72;:::i;:::-;40284:9;40278:4;40274:20;40268:3;40257:9;40253:19;40246:49;40312:76;40383:4;40374:6;40312:76;:::i;:::-;40304:84;;39644:751;;;;;;;;:::o;40401:141::-;40457:5;40488:6;40482:13;40473:22;;40504:32;40530:5;40504:32;:::i;:::-;40401:141;;;;:::o;40548:349::-;40617:6;40666:2;40654:9;40645:7;40641:23;40637:32;40634:119;;;40672:79;;:::i;:::-;40634:119;40792:1;40817:63;40872:7;40863:6;40852:9;40848:22;40817:63;:::i;:::-;40807:73;;40763:127;40548:349;;;;:::o;40903:106::-;40947:8;40996:5;40991:3;40987:15;40966:36;;40903:106;;;:::o;41015:183::-;41050:3;41088:1;41070:16;41067:23;41064:128;;;41126:1;41123;41120;41105:23;41148:34;41179:1;41173:8;41148:34;:::i;:::-;41141:41;;41064:128;41015:183;:::o;41204:711::-;41243:3;41281:4;41263:16;41260:26;41257:39;;;41289:5;;41257:39;41318:20;;:::i;:::-;41393:1;41375:16;41371:24;41368:1;41362:4;41347:49;41426:4;41420:11;41525:16;41518:4;41510:6;41506:17;41503:39;41470:18;41462:6;41459:30;41443:113;41440:146;;;41571:5;;;;41440:146;41617:6;41611:4;41607:17;41653:3;41647:10;41680:18;41672:6;41669:30;41666:43;;;41702:5;;;;;;41666:43;41750:6;41743:4;41738:3;41734:14;41730:27;41809:1;41791:16;41787:24;41781:4;41777:35;41772:3;41769:44;41766:57;;;41816:5;;;;;;;41766:57;41833;41881:6;41875:4;41871:17;41863:6;41859:30;41853:4;41833:57;:::i;:::-;41906:3;41899:10;;41247:668;;;;;41204:711;;:::o;41921:239::-;42061:34;42057:1;42049:6;42045:14;42038:58;42130:22;42125:2;42117:6;42113:15;42106:47;41921:239;:::o;42166:366::-;42308:3;42329:67;42393:2;42388:3;42329:67;:::i;:::-;42322:74;;42405:93;42494:3;42405:93;:::i;:::-;42523:2;42518:3;42514:12;42507:19;;42166:366;;;:::o;42538:419::-;42704:4;42742:2;42731:9;42727:18;42719:26;;42791:9;42785:4;42781:20;42777:1;42766:9;42762:17;42755:47;42819:131;42945:4;42819:131;:::i;:::-;42811:139;;42538:419;;;:::o;42963:227::-;43103:34;43099:1;43091:6;43087:14;43080:58;43172:10;43167:2;43159:6;43155:15;43148:35;42963:227;:::o;43196:366::-;43338:3;43359:67;43423:2;43418:3;43359:67;:::i;:::-;43352:74;;43435:93;43524:3;43435:93;:::i;:::-;43553:2;43548:3;43544:12;43537:19;;43196:366;;;:::o;43568:419::-;43734:4;43772:2;43761:9;43757:18;43749:26;;43821:9;43815:4;43811:20;43807:1;43796:9;43792:17;43785:47;43849:131;43975:4;43849:131;:::i;:::-;43841:139;;43568:419;;;:::o;43993:1053::-;44316:4;44354:3;44343:9;44339:19;44331:27;;44368:71;44436:1;44425:9;44421:17;44412:6;44368:71;:::i;:::-;44449:72;44517:2;44506:9;44502:18;44493:6;44449:72;:::i;:::-;44568:9;44562:4;44558:20;44553:2;44542:9;44538:18;44531:48;44596:108;44699:4;44690:6;44596:108;:::i;:::-;44588:116;;44751:9;44745:4;44741:20;44736:2;44725:9;44721:18;44714:48;44779:108;44882:4;44873:6;44779:108;:::i;:::-;44771:116;;44935:9;44929:4;44925:20;44919:3;44908:9;44904:19;44897:49;44963:76;45034:4;45025:6;44963:76;:::i;:::-;44955:84;;43993:1053;;;;;;;;:::o;45052:170::-;45192:22;45188:1;45180:6;45176:14;45169:46;45052:170;:::o;45228:366::-;45370:3;45391:67;45455:2;45450:3;45391:67;:::i;:::-;45384:74;;45467:93;45556:3;45467:93;:::i;:::-;45585:2;45580:3;45576:12;45569:19;;45228:366;;;:::o;45600:419::-;45766:4;45804:2;45793:9;45789:18;45781:26;;45853:9;45847:4;45843:20;45839:1;45828:9;45824:17;45817:47;45881:131;46007:4;45881:131;:::i;:::-;45873:139;;45600:419;;;:::o;46025:166::-;46165:18;46161:1;46153:6;46149:14;46142:42;46025:166;:::o;46197:366::-;46339:3;46360:67;46424:2;46419:3;46360:67;:::i;:::-;46353:74;;46436:93;46525:3;46436:93;:::i;:::-;46554:2;46549:3;46545:12;46538:19;;46197:366;;;:::o;46569:419::-;46735:4;46773:2;46762:9;46758:18;46750:26;;46822:9;46816:4;46812:20;46808:1;46797:9;46793:17;46786:47;46850:131;46976:4;46850:131;:::i;:::-;46842:139;;46569:419;;;:::o
Metadata Hash
ipfs://972a39d93175687f4fe8e440d5875db817de396b498217ac6da14771d33906bf