ERC-1155
Overview
Max Total Supply
0
Holders
14,938
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Crypt2_Models
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-03-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; 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); } 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); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } 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); } contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); 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}. * * 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` * * 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}. * * 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 a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract Crypt2_Models is Ownable, ERC1155 { // Base URI string private baseURI; string public name; constructor() ERC1155( 'https://assets.zloadr.com/fruit/metadata/{id}.json' ) { setName('Crypt2 Fruit Models'); } function setURI(string memory _newuri) public onlyOwner { _setURI(_newuri); } function setName(string memory _name) public onlyOwner { name = _name; } function mintBatch(uint256[] memory ids, uint256[] memory amounts) public onlyOwner { _mintBatch(msg.sender, ids, amounts, ''); } function mint(uint256 id, uint256 amount) public onlyOwner { _mint(msg.sender, id, amount, ''); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806060016040528060328152602001620020b260329139620000406200003a62000091565b62000095565b6200004b81620000e5565b5060408051808201909152601381527f437279707432204672756974204d6f64656c730000000000000000000000000060208201526200008b90620000fe565b62000289565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051620000fa90600390602084019062000171565b5050565b6200010862000091565b6001600160a01b03166200011b62000162565b6001600160a01b0316146200014d5760405162461bcd60e51b8152600401620001449062000217565b60405180910390fd5b8051620000fa90600590602084019062000171565b6000546001600160a01b031690565b8280546200017f906200024c565b90600052602060002090601f016020900481019282620001a35760008555620001ee565b82601f10620001be57805160ff1916838001178555620001ee565b82800160010185558215620001ee579182015b82811115620001ee578251825591602001919060010190620001d1565b50620001fc92915062000200565b5090565b5b80821115620001fc576000815560010162000201565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6002810460018216806200026157607f821691505b602082108114156200028357634e487b7160e01b600052602260045260246000fd5b50919050565b611e1980620002996000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063d351cfdc11610066578063d351cfdc14610213578063e985e9c514610226578063f242432a14610239578063f2fde38b1461024c576100ff565b8063715018a6146101d05780638da5cb5b146101d8578063a22cb465146101ed578063c47f002714610200576100ff565b80630e89341c116100d35780630e89341c146101775780631b2ef1ca1461018a5780632eb2c2d61461019d5780634e1273f4146101b0576100ff565b8062fdd58e1461010457806301ffc9a71461012d57806302fe53051461014d57806306fdde0314610162575b600080fd5b6101176101123660046114f1565b61025f565b6040516101249190611c23565b60405180910390f35b61014061013b366004611622565b6102b8565b604051610124919061185e565b61016061015b36600461165a565b610300565b005b61016a61034b565b6040516101249190611869565b61016a6101853660046116a8565b6103d9565b6101606101983660046116c0565b61046d565b6101606101ab3660046113ae565b6104cb565b6101c36101be36600461151a565b610529565b604051610124919061181d565b610160610649565b6101e0610694565b6040516101249190611766565b6101606101fb3660046114b7565b6106a4565b61016061020e36600461165a565b6106b6565b6101606102213660046115d8565b610708565b61014061023436600461137c565b610762565b610160610247366004611454565b610790565b61016061025a366004611362565b6107e7565b60006001600160a01b0383166102905760405162461bcd60e51b815260040161028790611918565b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806102e957506001600160e01b031982166303a24d0760e21b145b806102f857506102f882610855565b90505b919050565b61030861086e565b6001600160a01b0316610319610694565b6001600160a01b03161461033f5760405162461bcd60e51b815260040161028790611ad3565b61034881610872565b50565b6005805461035890611ca0565b80601f016020809104026020016040519081016040528092919081815260200182805461038490611ca0565b80156103d15780601f106103a6576101008083540402835291602001916103d1565b820191906000526020600020905b8154815290600101906020018083116103b457829003601f168201915b505050505081565b6060600380546103e890611ca0565b80601f016020809104026020016040519081016040528092919081815260200182805461041490611ca0565b80156104615780601f1061043657610100808354040283529160200191610461565b820191906000526020600020905b81548152906001019060200180831161044457829003601f168201915b50505050509050919050565b61047561086e565b6001600160a01b0316610486610694565b6001600160a01b0316146104ac5760405162461bcd60e51b815260040161028790611ad3565b6104c733838360405180602001604052806000815250610885565b5050565b6104d361086e565b6001600160a01b0316856001600160a01b031614806104f957506104f98561023461086e565b6105155760405162461bcd60e51b815260040161028790611a37565b6105228585858585610998565b5050505050565b6060815183511461054c5760405162461bcd60e51b815260040161028790611b51565b6000835167ffffffffffffffff81111561057657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561059f578160200160208202803683370190505b50905060005b8451811015610641576106068582815181106105d157634e487b7160e01b600052603260045260246000fd5b60200260200101518583815181106105f957634e487b7160e01b600052603260045260246000fd5b602002602001015161025f565b82828151811061062657634e487b7160e01b600052603260045260246000fd5b602090810291909101015261063a81611cdb565b90506105a5565b509392505050565b61065161086e565b6001600160a01b0316610662610694565b6001600160a01b0316146106885760405162461bcd60e51b815260040161028790611ad3565b6106926000610b7a565b565b6000546001600160a01b03165b90565b6104c76106af61086e565b8383610bca565b6106be61086e565b6001600160a01b03166106cf610694565b6001600160a01b0316146106f55760405162461bcd60e51b815260040161028790611ad3565b80516104c79060059060208401906111c8565b61071061086e565b6001600160a01b0316610721610694565b6001600160a01b0316146107475760405162461bcd60e51b815260040161028790611ad3565b6104c733838360405180602001604052806000815250610c6d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b61079861086e565b6001600160a01b0316856001600160a01b031614806107be57506107be8561023461086e565b6107da5760405162461bcd60e51b8152600401610287906119a9565b6105228585858585610dfe565b6107ef61086e565b6001600160a01b0316610800610694565b6001600160a01b0316146108265760405162461bcd60e51b815260040161028790611ad3565b6001600160a01b03811661084c5760405162461bcd60e51b815260040161028790611963565b61034881610b7a565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b80516104c79060039060208401906111c8565b6001600160a01b0384166108ab5760405162461bcd60e51b815260040161028790611be2565b60006108b561086e565b905060006108c285610f5f565b905060006108cf85610f5f565b90506108e083600089858589610b72565b60008681526001602090815260408083206001600160a01b038b16845290915281208054879290610912908490611c88565b92505081905550866001600160a01b031660006001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610969929190611c2c565b60405180910390a461098083600089858589610b72565b61098f83600089898989610fb8565b50505050505050565b81518351146109b95760405162461bcd60e51b815260040161028790611b9a565b6001600160a01b0384166109df5760405162461bcd60e51b8152600401610287906119f2565b60006109e961086e565b90506109f9818787878787610b72565b60005b8451811015610afe576000858281518110610a2757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610a5357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526001835260408082206001600160a01b038e168352909352919091205490915081811015610aa45760405162461bcd60e51b815260040161028790611a89565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610ae3908490611c88565b9250508190555050505080610af790611cdb565b90506109fc565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b4e929190611830565b60405180910390a4610b64818787878787610b72565b610b728187878787876110c6565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b03161415610bfc5760405162461bcd60e51b815260040161028790611b08565b6001600160a01b0383811660008181526002602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610c6090859061185e565b60405180910390a3505050565b6001600160a01b038416610c935760405162461bcd60e51b815260040161028790611be2565b8151835114610cb45760405162461bcd60e51b815260040161028790611b9a565b6000610cbe61086e565b9050610ccf81600087878787610b72565b60005b8451811015610d8757838181518110610cfb57634e487b7160e01b600052603260045260246000fd5b602002602001015160016000878481518110610d2757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610d6f9190611c88565b90915550819050610d7f81611cdb565b915050610cd2565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610dd8929190611830565b60405180910390a4610def81600087878787610b72565b610522816000878787876110c6565b6001600160a01b038416610e245760405162461bcd60e51b8152600401610287906119f2565b6000610e2e61086e565b90506000610e3b85610f5f565b90506000610e4885610f5f565b9050610e58838989858589610b72565b60008681526001602090815260408083206001600160a01b038c16845290915290205485811015610e9b5760405162461bcd60e51b815260040161028790611a89565b60008781526001602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290610eda908490611c88565b92505081905550876001600160a01b0316896001600160a01b0316856001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051610f30929190611c2c565b60405180910390a4610f46848a8a86868a610b72565b610f54848a8a8a8a8a610fb8565b505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610fa757634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b610fca846001600160a01b0316611197565b15610b725760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061100390899089908890889088906004016117d8565b602060405180830381600087803b15801561101d57600080fd5b505af192505050801561104d575060408051601f3d908101601f1916820190925261104a9181019061163e565b60015b61109657611059611d28565b80611064575061107e565b8060405162461bcd60e51b81526004016102879190611869565b60405162461bcd60e51b81526004016102879061187c565b6001600160e01b0319811663f23a6e6160e01b1461098f5760405162461bcd60e51b8152600401610287906118d0565b6110d8846001600160a01b0316611197565b15610b725760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611111908990899088908890889060040161177a565b602060405180830381600087803b15801561112b57600080fd5b505af192505050801561115b575060408051601f3d908101601f191682019092526111589181019061163e565b60015b61116757611059611d28565b6001600160e01b0319811663bc197c8160e01b1461098f5760405162461bcd60e51b8152600401610287906118d0565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b8280546111d490611ca0565b90600052602060002090601f0160209004810192826111f6576000855561123c565b82601f1061120f57805160ff191683800117855561123c565b8280016001018555821561123c579182015b8281111561123c578251825591602001919060010190611221565b5061124892915061124c565b5090565b5b80821115611248576000815560010161124d565b600067ffffffffffffffff83111561127b5761127b611d0c565b61128e601f8401601f1916602001611c3a565b90508281528383830111156112a257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146102fb57600080fd5b600082601f8301126112e0578081fd5b813560206112f56112f083611c64565b611c3a565b8281528181019085830183850287018401881015611311578586fd5b855b8581101561132f57813584529284019290840190600101611313565b5090979650505050505050565b600082601f83011261134c578081fd5b61135b83833560208501611261565b9392505050565b600060208284031215611373578081fd5b61135b826112b9565b6000806040838503121561138e578081fd5b611397836112b9565b91506113a5602084016112b9565b90509250929050565b600080600080600060a086880312156113c5578081fd5b6113ce866112b9565b94506113dc602087016112b9565b9350604086013567ffffffffffffffff808211156113f8578283fd5b61140489838a016112d0565b94506060880135915080821115611419578283fd5b61142589838a016112d0565b9350608088013591508082111561143a578283fd5b506114478882890161133c565b9150509295509295909350565b600080600080600060a0868803121561146b578081fd5b611474866112b9565b9450611482602087016112b9565b93506040860135925060608601359150608086013567ffffffffffffffff8111156114ab578182fd5b6114478882890161133c565b600080604083850312156114c9578182fd5b6114d2836112b9565b9150602083013580151581146114e6578182fd5b809150509250929050565b60008060408385031215611503578182fd5b61150c836112b9565b946020939093013593505050565b6000806040838503121561152c578182fd5b823567ffffffffffffffff80821115611543578384fd5b818501915085601f830112611556578384fd5b813560206115666112f083611c64565b82815281810190858301838502870184018b1015611582578889fd5b8896505b848710156115ab57611597816112b9565b835260019690960195918301918301611586565b50965050860135925050808211156115c1578283fd5b506115ce858286016112d0565b9150509250929050565b600080604083850312156115ea578182fd5b823567ffffffffffffffff80821115611601578384fd5b61160d868387016112d0565b935060208501359150808211156115c1578283fd5b600060208284031215611633578081fd5b813561135b81611dcd565b60006020828403121561164f578081fd5b815161135b81611dcd565b60006020828403121561166b578081fd5b813567ffffffffffffffff811115611681578182fd5b8201601f81018413611691578182fd5b6116a084823560208401611261565b949350505050565b6000602082840312156116b9578081fd5b5035919050565b600080604083850312156116d2578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015611710578151875295820195908201906001016116f4565b509495945050505050565b60008151808452815b8181101561174057602081850181015186830182015201611724565b818111156117515782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a0604082018190526000906117a6908301866116e1565b82810360608401526117b881866116e1565b905082810360808401526117cc818561171b565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906118129083018461171b565b979650505050505050565b60006020825261135b60208301846116e1565b60006040825261184360408301856116e1565b828103602084015261185581856116e1565b95945050505050565b901515815260200190565b60006020825261135b602083018461171b565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611c5c57611c5c611d0c565b604052919050565b600067ffffffffffffffff821115611c7e57611c7e611d0c565b5060209081020190565b60008219821115611c9b57611c9b611cf6565b500190565b600281046001821680611cb457607f821691505b60208210811415611cd557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cef57611cef611cf6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d1015611d38576106a1565b600481823e6308c379a0611d4c8251611d22565b14611d56576106a1565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611d8657505050506106a1565b82840192508251915080821115611da057505050506106a1565b503d83016020828401011115611db8575050506106a1565b601f01601f1916810160200160405291505090565b6001600160e01b03198116811461034857600080fdfea264697066735822122018ebde38809a1e5c761eea894bc9dc6a737fd0ed83ed5038434b8b6776678af764736f6c6343000800003368747470733a2f2f6173736574732e7a6c6f6164722e636f6d2f66727569742f6d657461646174612f7b69647d2e6a736f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063d351cfdc11610066578063d351cfdc14610213578063e985e9c514610226578063f242432a14610239578063f2fde38b1461024c576100ff565b8063715018a6146101d05780638da5cb5b146101d8578063a22cb465146101ed578063c47f002714610200576100ff565b80630e89341c116100d35780630e89341c146101775780631b2ef1ca1461018a5780632eb2c2d61461019d5780634e1273f4146101b0576100ff565b8062fdd58e1461010457806301ffc9a71461012d57806302fe53051461014d57806306fdde0314610162575b600080fd5b6101176101123660046114f1565b61025f565b6040516101249190611c23565b60405180910390f35b61014061013b366004611622565b6102b8565b604051610124919061185e565b61016061015b36600461165a565b610300565b005b61016a61034b565b6040516101249190611869565b61016a6101853660046116a8565b6103d9565b6101606101983660046116c0565b61046d565b6101606101ab3660046113ae565b6104cb565b6101c36101be36600461151a565b610529565b604051610124919061181d565b610160610649565b6101e0610694565b6040516101249190611766565b6101606101fb3660046114b7565b6106a4565b61016061020e36600461165a565b6106b6565b6101606102213660046115d8565b610708565b61014061023436600461137c565b610762565b610160610247366004611454565b610790565b61016061025a366004611362565b6107e7565b60006001600160a01b0383166102905760405162461bcd60e51b815260040161028790611918565b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806102e957506001600160e01b031982166303a24d0760e21b145b806102f857506102f882610855565b90505b919050565b61030861086e565b6001600160a01b0316610319610694565b6001600160a01b03161461033f5760405162461bcd60e51b815260040161028790611ad3565b61034881610872565b50565b6005805461035890611ca0565b80601f016020809104026020016040519081016040528092919081815260200182805461038490611ca0565b80156103d15780601f106103a6576101008083540402835291602001916103d1565b820191906000526020600020905b8154815290600101906020018083116103b457829003601f168201915b505050505081565b6060600380546103e890611ca0565b80601f016020809104026020016040519081016040528092919081815260200182805461041490611ca0565b80156104615780601f1061043657610100808354040283529160200191610461565b820191906000526020600020905b81548152906001019060200180831161044457829003601f168201915b50505050509050919050565b61047561086e565b6001600160a01b0316610486610694565b6001600160a01b0316146104ac5760405162461bcd60e51b815260040161028790611ad3565b6104c733838360405180602001604052806000815250610885565b5050565b6104d361086e565b6001600160a01b0316856001600160a01b031614806104f957506104f98561023461086e565b6105155760405162461bcd60e51b815260040161028790611a37565b6105228585858585610998565b5050505050565b6060815183511461054c5760405162461bcd60e51b815260040161028790611b51565b6000835167ffffffffffffffff81111561057657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561059f578160200160208202803683370190505b50905060005b8451811015610641576106068582815181106105d157634e487b7160e01b600052603260045260246000fd5b60200260200101518583815181106105f957634e487b7160e01b600052603260045260246000fd5b602002602001015161025f565b82828151811061062657634e487b7160e01b600052603260045260246000fd5b602090810291909101015261063a81611cdb565b90506105a5565b509392505050565b61065161086e565b6001600160a01b0316610662610694565b6001600160a01b0316146106885760405162461bcd60e51b815260040161028790611ad3565b6106926000610b7a565b565b6000546001600160a01b03165b90565b6104c76106af61086e565b8383610bca565b6106be61086e565b6001600160a01b03166106cf610694565b6001600160a01b0316146106f55760405162461bcd60e51b815260040161028790611ad3565b80516104c79060059060208401906111c8565b61071061086e565b6001600160a01b0316610721610694565b6001600160a01b0316146107475760405162461bcd60e51b815260040161028790611ad3565b6104c733838360405180602001604052806000815250610c6d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b61079861086e565b6001600160a01b0316856001600160a01b031614806107be57506107be8561023461086e565b6107da5760405162461bcd60e51b8152600401610287906119a9565b6105228585858585610dfe565b6107ef61086e565b6001600160a01b0316610800610694565b6001600160a01b0316146108265760405162461bcd60e51b815260040161028790611ad3565b6001600160a01b03811661084c5760405162461bcd60e51b815260040161028790611963565b61034881610b7a565b6001600160e01b031981166301ffc9a760e01b14919050565b3390565b80516104c79060039060208401906111c8565b6001600160a01b0384166108ab5760405162461bcd60e51b815260040161028790611be2565b60006108b561086e565b905060006108c285610f5f565b905060006108cf85610f5f565b90506108e083600089858589610b72565b60008681526001602090815260408083206001600160a01b038b16845290915281208054879290610912908490611c88565b92505081905550866001600160a01b031660006001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610969929190611c2c565b60405180910390a461098083600089858589610b72565b61098f83600089898989610fb8565b50505050505050565b81518351146109b95760405162461bcd60e51b815260040161028790611b9a565b6001600160a01b0384166109df5760405162461bcd60e51b8152600401610287906119f2565b60006109e961086e565b90506109f9818787878787610b72565b60005b8451811015610afe576000858281518110610a2757634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110610a5357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526001835260408082206001600160a01b038e168352909352919091205490915081811015610aa45760405162461bcd60e51b815260040161028790611a89565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610ae3908490611c88565b9250508190555050505080610af790611cdb565b90506109fc565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b4e929190611830565b60405180910390a4610b64818787878787610b72565b610b728187878787876110c6565b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b03161415610bfc5760405162461bcd60e51b815260040161028790611b08565b6001600160a01b0383811660008181526002602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610c6090859061185e565b60405180910390a3505050565b6001600160a01b038416610c935760405162461bcd60e51b815260040161028790611be2565b8151835114610cb45760405162461bcd60e51b815260040161028790611b9a565b6000610cbe61086e565b9050610ccf81600087878787610b72565b60005b8451811015610d8757838181518110610cfb57634e487b7160e01b600052603260045260246000fd5b602002602001015160016000878481518110610d2757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610d6f9190611c88565b90915550819050610d7f81611cdb565b915050610cd2565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610dd8929190611830565b60405180910390a4610def81600087878787610b72565b610522816000878787876110c6565b6001600160a01b038416610e245760405162461bcd60e51b8152600401610287906119f2565b6000610e2e61086e565b90506000610e3b85610f5f565b90506000610e4885610f5f565b9050610e58838989858589610b72565b60008681526001602090815260408083206001600160a01b038c16845290915290205485811015610e9b5760405162461bcd60e51b815260040161028790611a89565b60008781526001602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290610eda908490611c88565b92505081905550876001600160a01b0316896001600160a01b0316856001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051610f30929190611c2c565b60405180910390a4610f46848a8a86868a610b72565b610f54848a8a8a8a8a610fb8565b505050505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610fa757634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b610fca846001600160a01b0316611197565b15610b725760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061100390899089908890889088906004016117d8565b602060405180830381600087803b15801561101d57600080fd5b505af192505050801561104d575060408051601f3d908101601f1916820190925261104a9181019061163e565b60015b61109657611059611d28565b80611064575061107e565b8060405162461bcd60e51b81526004016102879190611869565b60405162461bcd60e51b81526004016102879061187c565b6001600160e01b0319811663f23a6e6160e01b1461098f5760405162461bcd60e51b8152600401610287906118d0565b6110d8846001600160a01b0316611197565b15610b725760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611111908990899088908890889060040161177a565b602060405180830381600087803b15801561112b57600080fd5b505af192505050801561115b575060408051601f3d908101601f191682019092526111589181019061163e565b60015b61116757611059611d28565b6001600160e01b0319811663bc197c8160e01b1461098f5760405162461bcd60e51b8152600401610287906118d0565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b8280546111d490611ca0565b90600052602060002090601f0160209004810192826111f6576000855561123c565b82601f1061120f57805160ff191683800117855561123c565b8280016001018555821561123c579182015b8281111561123c578251825591602001919060010190611221565b5061124892915061124c565b5090565b5b80821115611248576000815560010161124d565b600067ffffffffffffffff83111561127b5761127b611d0c565b61128e601f8401601f1916602001611c3a565b90508281528383830111156112a257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146102fb57600080fd5b600082601f8301126112e0578081fd5b813560206112f56112f083611c64565b611c3a565b8281528181019085830183850287018401881015611311578586fd5b855b8581101561132f57813584529284019290840190600101611313565b5090979650505050505050565b600082601f83011261134c578081fd5b61135b83833560208501611261565b9392505050565b600060208284031215611373578081fd5b61135b826112b9565b6000806040838503121561138e578081fd5b611397836112b9565b91506113a5602084016112b9565b90509250929050565b600080600080600060a086880312156113c5578081fd5b6113ce866112b9565b94506113dc602087016112b9565b9350604086013567ffffffffffffffff808211156113f8578283fd5b61140489838a016112d0565b94506060880135915080821115611419578283fd5b61142589838a016112d0565b9350608088013591508082111561143a578283fd5b506114478882890161133c565b9150509295509295909350565b600080600080600060a0868803121561146b578081fd5b611474866112b9565b9450611482602087016112b9565b93506040860135925060608601359150608086013567ffffffffffffffff8111156114ab578182fd5b6114478882890161133c565b600080604083850312156114c9578182fd5b6114d2836112b9565b9150602083013580151581146114e6578182fd5b809150509250929050565b60008060408385031215611503578182fd5b61150c836112b9565b946020939093013593505050565b6000806040838503121561152c578182fd5b823567ffffffffffffffff80821115611543578384fd5b818501915085601f830112611556578384fd5b813560206115666112f083611c64565b82815281810190858301838502870184018b1015611582578889fd5b8896505b848710156115ab57611597816112b9565b835260019690960195918301918301611586565b50965050860135925050808211156115c1578283fd5b506115ce858286016112d0565b9150509250929050565b600080604083850312156115ea578182fd5b823567ffffffffffffffff80821115611601578384fd5b61160d868387016112d0565b935060208501359150808211156115c1578283fd5b600060208284031215611633578081fd5b813561135b81611dcd565b60006020828403121561164f578081fd5b815161135b81611dcd565b60006020828403121561166b578081fd5b813567ffffffffffffffff811115611681578182fd5b8201601f81018413611691578182fd5b6116a084823560208401611261565b949350505050565b6000602082840312156116b9578081fd5b5035919050565b600080604083850312156116d2578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015611710578151875295820195908201906001016116f4565b509495945050505050565b60008151808452815b8181101561174057602081850181015186830182015201611724565b818111156117515782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a0604082018190526000906117a6908301866116e1565b82810360608401526117b881866116e1565b905082810360808401526117cc818561171b565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906118129083018461171b565b979650505050505050565b60006020825261135b60208301846116e1565b60006040825261184360408301856116e1565b828103602084015261185581856116e1565b95945050505050565b901515815260200190565b60006020825261135b602083018461171b565b60208082526034908201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356040820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606082015260800190565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252602b908201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526032908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604082015268103337b91039b2b63360b91b606082015260800190565b60208082526029908201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604082015268040dad2e6dac2e8c6d60bb1b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715611c5c57611c5c611d0c565b604052919050565b600067ffffffffffffffff821115611c7e57611c7e611d0c565b5060209081020190565b60008219821115611c9b57611c9b611cf6565b500190565b600281046001821680611cb457607f821691505b60208210811415611cd557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cef57611cef611cf6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60e01c90565b600060443d1015611d38576106a1565b600481823e6308c379a0611d4c8251611d22565b14611d56576106a1565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611d8657505050506106a1565b82840192508251915080821115611da057505050506106a1565b503d83016020828401011115611db8575050506106a1565b601f01601f1916810160200160405291505090565b6001600160e01b03198116811461034857600080fdfea264697066735822122018ebde38809a1e5c761eea894bc9dc6a737fd0ed83ed5038434b8b6776678af764736f6c63430008000033
Deployed Bytecode Sourcemap
35244:775:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17469:231;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16492:310;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35538:91::-;;;;;;:::i;:::-;;:::i;:::-;;35340:18;;;:::i;:::-;;;;;;;:::i;17213:105::-;;;;;;:::i;:::-;;:::i;35905:111::-;;;;;;:::i;:::-;;:::i;19408:442::-;;;;;;:::i;:::-;;:::i;17866:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34423:103::-;;;:::i;33772:87::-;;;:::i;:::-;;;;;;;:::i;18463:155::-;;;;;;:::i;:::-;;:::i;35637:86::-;;;;;;:::i;:::-;;:::i;35731:166::-;;;;;;:::i;:::-;;:::i;18690:168::-;;;;;;:::i;:::-;;:::i;18930:401::-;;;;;;:::i;:::-;;:::i;34681:201::-;;;;;;:::i;:::-;;:::i;17469:231::-;17555:7;-1:-1:-1;;;;;17583:21:0;;17575:77;;;;-1:-1:-1;;;17575:77:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;17670:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;17670:22:0;;;;;;;;;;;;17469:231::o;16492:310::-;16594:4;-1:-1:-1;;;;;;16631:41:0;;-1:-1:-1;;;16631:41:0;;:110;;-1:-1:-1;;;;;;;16689:52:0;;-1:-1:-1;;;16689:52:0;16631:110;:163;;;;16758:36;16782:11;16758:23;:36::i;:::-;16611:183;;16492:310;;;;:::o;35538:91::-;34003:12;:10;:12::i;:::-;-1:-1:-1;;;;;33992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;33992:23:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;;;;;;:::i;:::-;35605:16:::1;35613:7;35605;:16::i;:::-;35538:91:::0;:::o;35340:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17213:105::-;17273:13;17306:4;17299:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17213:105;;;:::o;35905:111::-;34003:12;:10;:12::i;:::-;-1:-1:-1;;;;;33992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;33992:23:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;;;;;;:::i;:::-;35975:33:::1;35981:10;35993:2;35997:6;35975:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;35905:111:::0;;:::o;19408:442::-;19649:12;:10;:12::i;:::-;-1:-1:-1;;;;;19641:20:0;:4;-1:-1:-1;;;;;19641:20:0;;:60;;;;19665:36;19682:4;19688:12;:10;:12::i;19665:36::-;19619:160;;;;-1:-1:-1;;;19619:160:0;;;;;;;:::i;:::-;19790:52;19813:4;19819:2;19823:3;19828:7;19837:4;19790:22;:52::i;:::-;19408:442;;;;;:::o;17866:524::-;18022:16;18083:3;:10;18064:8;:15;:29;18056:83;;;;-1:-1:-1;;;18056:83:0;;;;;;;:::i;:::-;18152:30;18199:8;:15;18185:30;;;;;;-1:-1:-1;;;18185:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18185:30:0;;18152:63;;18233:9;18228:122;18252:8;:15;18248:1;:19;18228:122;;;18308:30;18318:8;18327:1;18318:11;;;;;;-1:-1:-1;;;18318:11:0;;;;;;;;;;;;;;;18331:3;18335:1;18331:6;;;;;;-1:-1:-1;;;18331:6:0;;;;;;;;;;;;;;;18308:9;:30::i;:::-;18289:13;18303:1;18289:16;;;;;;-1:-1:-1;;;18289:16:0;;;;;;;;;;;;;;;;;;:49;18269:3;;;:::i;:::-;;;18228:122;;;-1:-1:-1;18369:13:0;17866:524;-1:-1:-1;;;17866:524:0:o;34423:103::-;34003:12;:10;:12::i;:::-;-1:-1:-1;;;;;33992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;33992:23:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;;;;;;:::i;:::-;34488:30:::1;34515:1;34488:18;:30::i;:::-;34423:103::o:0;33772:87::-;33818:7;33845:6;-1:-1:-1;;;;;33845:6:0;33772:87;;:::o;18463:155::-;18558:52;18577:12;:10;:12::i;:::-;18591:8;18601;18558:18;:52::i;35637:86::-;34003:12;:10;:12::i;:::-;-1:-1:-1;;;;;33992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;33992:23:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;;;;;;:::i;:::-;35703:12;;::::1;::::0;:4:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;35731:166::-:0;34003:12;:10;:12::i;:::-;-1:-1:-1;;;;;33992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;33992:23:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;;;;;;:::i;:::-;35849:40:::1;35860:10;35872:3;35877:7;35849:40;;;;;;;;;;;::::0;:10:::1;:40::i;18690:168::-:0;-1:-1:-1;;;;;18813:27:0;;;18789:4;18813:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;18690:168::o;18930:401::-;19146:12;:10;:12::i;:::-;-1:-1:-1;;;;;19138:20:0;:4;-1:-1:-1;;;;;19138:20:0;;:60;;;;19162:36;19179:4;19185:12;:10;:12::i;19162:36::-;19116:151;;;;-1:-1:-1;;;19116:151:0;;;;;;;:::i;:::-;19278:45;19296:4;19302:2;19306;19310:6;19318:4;19278:17;:45::i;34681:201::-;34003:12;:10;:12::i;:::-;-1:-1:-1;;;;;33992:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;33992:23:0;;33984:68;;;;-1:-1:-1;;;33984:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34770:22:0;::::1;34762:73;;;;-1:-1:-1::0;;;34762:73:0::1;;;;;;;:::i;:::-;34846:28;34865:8;34846:18;:28::i;11477:157::-:0;-1:-1:-1;;;;;;11586:40:0;;-1:-1:-1;;;11586:40:0;11477:157;;;:::o;11150:98::-;11230:10;11150:98;:::o;23636:88::-;23703:13;;;;:4;;:13;;;;;:::i;24110:729::-;-1:-1:-1;;;;;24263:16:0;;24255:62;;;;-1:-1:-1;;;24255:62:0;;;;;;;:::i;:::-;24330:16;24349:12;:10;:12::i;:::-;24330:31;;24372:20;24395:21;24413:2;24395:17;:21::i;:::-;24372:44;;24427:24;24454:25;24472:6;24454:17;:25::i;:::-;24427:52;;24492:66;24513:8;24531:1;24535:2;24539:3;24544:7;24553:4;24492:20;:66::i;:::-;24571:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;24571:17:0;;;;;;;;;:27;;24592:6;;24571:13;:27;;24592:6;;24571:27;:::i;:::-;;;;;;;;24651:2;-1:-1:-1;;;;;24614:52:0;24647:1;-1:-1:-1;;;;;24614:52:0;24629:8;-1:-1:-1;;;;;24614:52:0;;24655:2;24659:6;24614:52;;;;;;;:::i;:::-;;;;;;;;24679:65;24699:8;24717:1;24721:2;24725:3;24730:7;24739:4;24679:19;:65::i;:::-;24757:74;24788:8;24806:1;24810:2;24814;24818:6;24826:4;24757:30;:74::i;:::-;24110:729;;;;;;;:::o;21646:1146::-;21873:7;:14;21859:3;:10;:28;21851:81;;;;-1:-1:-1;;;21851:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21951:16:0;;21943:66;;;;-1:-1:-1;;;21943:66:0;;;;;;;:::i;:::-;22022:16;22041:12;:10;:12::i;:::-;22022:31;;22066:60;22087:8;22097:4;22103:2;22107:3;22112:7;22121:4;22066:20;:60::i;:::-;22144:9;22139:421;22163:3;:10;22159:1;:14;22139:421;;;22195:10;22208:3;22212:1;22208:6;;;;;;-1:-1:-1;;;22208:6:0;;;;;;;;;;;;;;;22195:19;;22229:14;22246:7;22254:1;22246:10;;;;;;-1:-1:-1;;;22246:10:0;;;;;;;;;;;;;;;;;;;;22273:19;22295:13;;;:9;:13;;;;;;-1:-1:-1;;;;;22295:19:0;;;;;;;;;;;;22246:10;;-1:-1:-1;22337:21:0;;;;22329:76;;;;-1:-1:-1;;;22329:76:0;;;;;;;:::i;:::-;22449:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;22449:19:0;;;;;;;;;;22471:20;;;22449:42;;22521:17;;;;;;;:27;;22471:20;;22449:13;22521:27;;22471:20;;22521:27;:::i;:::-;;;;;;;;22139:421;;;22175:3;;;;:::i;:::-;;;22139:421;;;;22607:2;-1:-1:-1;;;;;22577:47:0;22601:4;-1:-1:-1;;;;;22577:47:0;22591:8;-1:-1:-1;;;;;22577:47:0;;22611:3;22616:7;22577:47;;;;;;;:::i;:::-;;;;;;;;22637:59;22657:8;22667:4;22673:2;22677:3;22682:7;22691:4;22637:19;:59::i;:::-;22709:75;22745:8;22755:4;22761:2;22765:3;22770:7;22779:4;22709:35;:75::i;:::-;21646:1146;;;;;;:::o;35042:191::-;35116:16;35135:6;;-1:-1:-1;;;;;35152:17:0;;;-1:-1:-1;;;;;;35152:17:0;;;;;;35185:40;;35135:6;;;;;;;35185:40;;35116:16;35185:40;35042:191;;:::o;28380:331::-;28535:8;-1:-1:-1;;;;;28526:17:0;:5;-1:-1:-1;;;;;28526:17:0;;;28518:71;;;;-1:-1:-1;;;28518:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28600:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;28600:46:0;;;;;;;28662:41;;;;;28600:46;;28662:41;:::i;:::-;;;;;;;;28380:331;;;:::o;25195:813::-;-1:-1:-1;;;;;25373:16:0;;25365:62;;;;-1:-1:-1;;;25365:62:0;;;;;;;:::i;:::-;25460:7;:14;25446:3;:10;:28;25438:81;;;;-1:-1:-1;;;25438:81:0;;;;;;;:::i;:::-;25532:16;25551:12;:10;:12::i;:::-;25532:31;;25576:66;25597:8;25615:1;25619:2;25623:3;25628:7;25637:4;25576:20;:66::i;:::-;25660:9;25655:103;25679:3;:10;25675:1;:14;25655:103;;;25736:7;25744:1;25736:10;;;;;;-1:-1:-1;;;25736:10:0;;;;;;;;;;;;;;;25711:9;:17;25721:3;25725:1;25721:6;;;;;;-1:-1:-1;;;25721:6:0;;;;;;;;;;;;;;;25711:17;;;;;;;;;;;:21;25729:2;-1:-1:-1;;;;;25711:21:0;-1:-1:-1;;;;;25711:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;25691:3:0;;-1:-1:-1;25691:3:0;;;:::i;:::-;;;;25655:103;;;;25811:2;-1:-1:-1;;;;;25775:53:0;25807:1;-1:-1:-1;;;;;25775:53:0;25789:8;-1:-1:-1;;;;;25775:53:0;;25815:3;25820:7;25775:53;;;;;;;:::i;:::-;;;;;;;;25841:65;25861:8;25879:1;25883:2;25887:3;25892:7;25901:4;25841:19;:65::i;:::-;25919:81;25955:8;25973:1;25977:2;25981:3;25986:7;25995:4;25919:35;:81::i;20314:974::-;-1:-1:-1;;;;;20502:16:0;;20494:66;;;;-1:-1:-1;;;20494:66:0;;;;;;;:::i;:::-;20573:16;20592:12;:10;:12::i;:::-;20573:31;;20615:20;20638:21;20656:2;20638:17;:21::i;:::-;20615:44;;20670:24;20697:25;20715:6;20697:17;:25::i;:::-;20670:52;;20735:60;20756:8;20766:4;20772:2;20776:3;20781:7;20790:4;20735:20;:60::i;:::-;20808:19;20830:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;20830:19:0;;;;;;;;;;20868:21;;;;20860:76;;;;-1:-1:-1;;;20860:76:0;;;;;;;:::i;:::-;20972:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;20972:19:0;;;;;;;;;;20994:20;;;20972:42;;21036:17;;;;;;;:27;;20994:20;;20972:13;21036:27;;20994:20;;21036:27;:::i;:::-;;;;;;;;21112:2;-1:-1:-1;;;;;21081:46:0;21106:4;-1:-1:-1;;;;;21081:46:0;21096:8;-1:-1:-1;;;;;21081:46:0;;21116:2;21120:6;21081:46;;;;;;;:::i;:::-;;;;;;;;21140:59;21160:8;21170:4;21176:2;21180:3;21185:7;21194:4;21140:19;:59::i;:::-;21212:68;21243:8;21253:4;21259:2;21263;21267:6;21275:4;21212:30;:68::i;:::-;20314:974;;;;;;;;;:::o;32644:198::-;32764:16;;;32778:1;32764:16;;;;;;;;;32710;;32739:22;;32764:16;;;;;;;;;;;;-1:-1:-1;32764:16:0;32739:41;;32802:7;32791:5;32797:1;32791:8;;;;;;-1:-1:-1;;;32791:8:0;;;;;;;;;;;;;;;;;;:18;32829:5;32644:198;-1:-1:-1;;32644:198:0:o;31071:744::-;31286:15;:2;-1:-1:-1;;;;;31286:13:0;;:15::i;:::-;31282:526;;;31322:72;;-1:-1:-1;;;31322:72:0;;-1:-1:-1;;;;;31322:38:0;;;;;:72;;31361:8;;31371:4;;31377:2;;31381:6;;31389:4;;31322:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31322:72:0;;;;;;;;-1:-1:-1;;31322:72:0;;;;;;;;;;;;:::i;:::-;;;31318:479;;;;:::i;:::-;;;;;;;;31670:6;31663:14;;-1:-1:-1;;;31663:14:0;;;;;;;;:::i;31318:479::-;31719:62;;-1:-1:-1;;;31719:62:0;;;;;;;:::i;31318:479::-;-1:-1:-1;;;;;;31444:55:0;;-1:-1:-1;;;31444:55:0;31440:154;;31524:50;;-1:-1:-1;;;31524:50:0;;;;;;;:::i;31823:813::-;32063:15;:2;-1:-1:-1;;;;;32063:13:0;;:15::i;:::-;32059:570;;;32099:79;;-1:-1:-1;;;32099:79:0;;-1:-1:-1;;;;;32099:43:0;;;;;:79;;32143:8;;32153:4;;32159:3;;32164:7;;32173:4;;32099:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32099:79:0;;;;;;;;-1:-1:-1;;32099:79:0;;;;;;;;;;;;:::i;:::-;;;32095:523;;;;:::i;:::-;-1:-1:-1;;;;;;32260:60:0;;-1:-1:-1;;;32260:60:0;32256:159;;32345:50;;-1:-1:-1;;;32345:50:0;;;;;;;:::i;3847:326::-;3907:4;4164:1;4142:7;-1:-1:-1;;;;;4142:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;3847:326;-1:-1:-1;;3847:326:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:705;;721:3;714:4;706:6;702:17;698:27;688:2;;743:5;736;729:20;688:2;783:6;770:20;809:4;833:65;848:49;894:2;848:49;:::i;:::-;833:65;:::i;:::-;932:15;;;963:12;;;;995:15;;;1041:11;;;1029:24;;1025:33;;1022:42;-1:-1:-1;1019:2:1;;;1081:5;1074;1067:20;1019:2;1107:5;1121:163;1135:2;1132:1;1129:9;1121:163;;;1192:17;;1180:30;;1230:12;;;;1262;;;;1153:1;1146:9;1121:163;;;-1:-1:-1;1302:5:1;;678:635;-1:-1:-1;;;;;;;678:635:1:o;1318:232::-;;1415:3;1408:4;1400:6;1396:17;1392:27;1382:2;;1437:5;1430;1423:20;1382:2;1463:81;1540:3;1531:6;1518:20;1511:4;1503:6;1499:17;1463:81;:::i;:::-;1454:90;1372:178;-1:-1:-1;;;1372:178:1:o;1555:198::-;;1667:2;1655:9;1646:7;1642:23;1638:32;1635:2;;;1688:6;1680;1673:22;1635:2;1716:31;1737:9;1716:31;:::i;1758:274::-;;;1887:2;1875:9;1866:7;1862:23;1858:32;1855:2;;;1908:6;1900;1893:22;1855:2;1936:31;1957:9;1936:31;:::i;:::-;1926:41;;1986:40;2022:2;2011:9;2007:18;1986:40;:::i;:::-;1976:50;;1845:187;;;;;:::o;2037:1001::-;;;;;;2276:3;2264:9;2255:7;2251:23;2247:33;2244:2;;;2298:6;2290;2283:22;2244:2;2326:31;2347:9;2326:31;:::i;:::-;2316:41;;2376:40;2412:2;2401:9;2397:18;2376:40;:::i;:::-;2366:50;;2467:2;2456:9;2452:18;2439:32;2490:18;2531:2;2523:6;2520:14;2517:2;;;2552:6;2544;2537:22;2517:2;2580:67;2639:7;2630:6;2619:9;2615:22;2580:67;:::i;:::-;2570:77;;2700:2;2689:9;2685:18;2672:32;2656:48;;2729:2;2719:8;2716:16;2713:2;;;2750:6;2742;2735:22;2713:2;2778:69;2839:7;2828:8;2817:9;2813:24;2778:69;:::i;:::-;2768:79;;2900:3;2889:9;2885:19;2872:33;2856:49;;2930:2;2920:8;2917:16;2914:2;;;2951:6;2943;2936:22;2914:2;;2979:53;3024:7;3013:8;3002:9;2998:24;2979:53;:::i;:::-;2969:63;;;2234:804;;;;;;;;:::o;3043:632::-;;;;;;3232:3;3220:9;3211:7;3207:23;3203:33;3200:2;;;3254:6;3246;3239:22;3200:2;3282:31;3303:9;3282:31;:::i;:::-;3272:41;;3332:40;3368:2;3357:9;3353:18;3332:40;:::i;:::-;3322:50;;3419:2;3408:9;3404:18;3391:32;3381:42;;3470:2;3459:9;3455:18;3442:32;3432:42;;3525:3;3514:9;3510:19;3497:33;3553:18;3545:6;3542:30;3539:2;;;3590:6;3582;3575:22;3539:2;3618:51;3661:7;3652:6;3641:9;3637:22;3618:51;:::i;3680:369::-;;;3806:2;3794:9;3785:7;3781:23;3777:32;3774:2;;;3827:6;3819;3812:22;3774:2;3855:31;3876:9;3855:31;:::i;:::-;3845:41;;3936:2;3925:9;3921:18;3908:32;3983:5;3976:13;3969:21;3962:5;3959:32;3949:2;;4010:6;4002;3995:22;3949:2;4038:5;4028:15;;;3764:285;;;;;:::o;4054:266::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4204:6;4196;4189:22;4151:2;4232:31;4253:9;4232:31;:::i;:::-;4222:41;4310:2;4295:18;;;;4282:32;;-1:-1:-1;;;4141:179:1:o;4325:1226::-;;;4504:2;4492:9;4483:7;4479:23;4475:32;4472:2;;;4525:6;4517;4510:22;4472:2;4570:9;4557:23;4599:18;4640:2;4632:6;4629:14;4626:2;;;4661:6;4653;4646:22;4626:2;4704:6;4693:9;4689:22;4679:32;;4749:7;4742:4;4738:2;4734:13;4730:27;4720:2;;4776:6;4768;4761:22;4720:2;4817;4804:16;4839:4;4863:65;4878:49;4924:2;4878:49;:::i;4863:65::-;4962:15;;;4993:12;;;;5025:11;;;5063;;;5055:20;;5051:29;;5048:42;-1:-1:-1;5045:2:1;;;5108:6;5100;5093:22;5045:2;5135:6;5126:15;;5150:171;5164:2;5161:1;5158:9;5150:171;;;5221:25;5242:3;5221:25;:::i;:::-;5209:38;;5182:1;5175:9;;;;;5267:12;;;;5299;;5150:171;;;-1:-1:-1;5340:5:1;-1:-1:-1;;5383:18:1;;5370:32;;-1:-1:-1;;5414:16:1;;;5411:2;;;5448:6;5440;5433:22;5411:2;;5476:69;5537:7;5526:8;5515:9;5511:24;5476:69;:::i;:::-;5466:79;;;4462:1089;;;;;:::o;5556:637::-;;;5735:2;5723:9;5714:7;5710:23;5706:32;5703:2;;;5756:6;5748;5741:22;5703:2;5801:9;5788:23;5830:18;5871:2;5863:6;5860:14;5857:2;;;5892:6;5884;5877:22;5857:2;5920:67;5979:7;5970:6;5959:9;5955:22;5920:67;:::i;:::-;5910:77;;6040:2;6029:9;6025:18;6012:32;5996:48;;6069:2;6059:8;6056:16;6053:2;;;6090:6;6082;6075:22;6198:257;;6309:2;6297:9;6288:7;6284:23;6280:32;6277:2;;;6330:6;6322;6315:22;6277:2;6374:9;6361:23;6393:32;6419:5;6393:32;:::i;6460:261::-;;6582:2;6570:9;6561:7;6557:23;6553:32;6550:2;;;6603:6;6595;6588:22;6550:2;6640:9;6634:16;6659:32;6685:5;6659:32;:::i;6726:482::-;;6848:2;6836:9;6827:7;6823:23;6819:32;6816:2;;;6869:6;6861;6854:22;6816:2;6914:9;6901:23;6947:18;6939:6;6936:30;6933:2;;;6984:6;6976;6969:22;6933:2;7012:22;;7065:4;7057:13;;7053:27;-1:-1:-1;7043:2:1;;7099:6;7091;7084:22;7043:2;7127:75;7194:7;7189:2;7176:16;7171:2;7167;7163:11;7127:75;:::i;:::-;7117:85;6806:402;-1:-1:-1;;;;6806:402:1:o;7213:190::-;;7325:2;7313:9;7304:7;7300:23;7296:32;7293:2;;;7346:6;7338;7331:22;7293:2;-1:-1:-1;7374:23:1;;7283:120;-1:-1:-1;7283:120:1:o;7408:258::-;;;7537:2;7525:9;7516:7;7512:23;7508:32;7505:2;;;7558:6;7550;7543:22;7505:2;-1:-1:-1;;7586:23:1;;;7656:2;7641:18;;;7628:32;;-1:-1:-1;7495:171:1:o;7671:443::-;;7768:5;7762:12;7795:6;7790:3;7783:19;7821:4;7850:2;7845:3;7841:12;7834:19;;7887:2;7880:5;7876:14;7908:3;7920:169;7934:6;7931:1;7928:13;7920:169;;;7995:13;;7983:26;;8029:12;;;;8064:15;;;;7956:1;7949:9;7920:169;;;-1:-1:-1;8105:3:1;;7738:376;-1:-1:-1;;;;;7738:376:1:o;8119:477::-;;8200:5;8194:12;8227:6;8222:3;8215:19;8252:3;8264:162;8278:6;8275:1;8272:13;8264:162;;;8340:4;8396:13;;;8392:22;;8386:29;8368:11;;;8364:20;;8357:59;8293:12;8264:162;;;8444:6;8441:1;8438:13;8435:2;;;8510:3;8503:4;8494:6;8489:3;8485:16;8481:27;8474:40;8435:2;-1:-1:-1;8578:2:1;8557:15;-1:-1:-1;;8553:29:1;8544:39;;;;8585:4;8540:50;;8170:426;-1:-1:-1;;8170:426:1:o;8601:203::-;-1:-1:-1;;;;;8765:32:1;;;;8747:51;;8735:2;8720:18;;8702:102::o;8809:840::-;-1:-1:-1;;;;;9206:15:1;;;9188:34;;9258:15;;9253:2;9238:18;;9231:43;9168:3;9305:2;9290:18;;9283:31;;;8809:840;;9337:63;;9380:19;;9372:6;9337:63;:::i;:::-;9448:9;9440:6;9436:22;9431:2;9420:9;9416:18;9409:50;9482;9525:6;9517;9482:50;:::i;:::-;9468:64;;9581:9;9573:6;9569:22;9563:3;9552:9;9548:19;9541:51;9609:34;9636:6;9628;9609:34;:::i;:::-;9601:42;9140:509;-1:-1:-1;;;;;;;;9140:509:1:o;9654:562::-;-1:-1:-1;;;;;9951:15:1;;;9933:34;;10003:15;;9998:2;9983:18;;9976:43;10050:2;10035:18;;10028:34;;;10093:2;10078:18;;10071:34;;;9913:3;10136;10121:19;;10114:32;;;9654:562;;10163:47;;10190:19;;10182:6;10163:47;:::i;:::-;10155:55;9885:331;-1:-1:-1;;;;;;;9885:331:1:o;10221:267::-;;10400:2;10389:9;10382:21;10420:62;10478:2;10467:9;10463:18;10455:6;10420:62;:::i;10493:477::-;;10750:2;10739:9;10732:21;10776:62;10834:2;10823:9;10819:18;10811:6;10776:62;:::i;:::-;10886:9;10878:6;10874:22;10869:2;10858:9;10854:18;10847:50;10914;10957:6;10949;10914:50;:::i;:::-;10906:58;10722:248;-1:-1:-1;;;;;10722:248:1:o;10975:187::-;11140:14;;11133:22;11115:41;;11103:2;11088:18;;11070:92::o;11167:221::-;;11316:2;11305:9;11298:21;11336:46;11378:2;11367:9;11363:18;11355:6;11336:46;:::i;11393:416::-;11595:2;11577:21;;;11634:2;11614:18;;;11607:30;11673:34;11668:2;11653:18;;11646:62;-1:-1:-1;;;11739:2:1;11724:18;;11717:50;11799:3;11784:19;;11567:242::o;11814:404::-;12016:2;11998:21;;;12055:2;12035:18;;;12028:30;12094:34;12089:2;12074:18;;12067:62;-1:-1:-1;;;12160:2:1;12145:18;;12138:38;12208:3;12193:19;;11988:230::o;12223:407::-;12425:2;12407:21;;;12464:2;12444:18;;;12437:30;12503:34;12498:2;12483:18;;12476:62;-1:-1:-1;;;12569:2:1;12554:18;;12547:41;12620:3;12605:19;;12397:233::o;12635:402::-;12837:2;12819:21;;;12876:2;12856:18;;;12849:30;12915:34;12910:2;12895:18;;12888:62;-1:-1:-1;;;12981:2:1;12966:18;;12959:36;13027:3;13012:19;;12809:228::o;13042:405::-;13244:2;13226:21;;;13283:2;13263:18;;;13256:30;13322:34;13317:2;13302:18;;13295:62;-1:-1:-1;;;13388:2:1;13373:18;;13366:39;13437:3;13422:19;;13216:231::o;13452:401::-;13654:2;13636:21;;;13693:2;13673:18;;;13666:30;13732:34;13727:2;13712:18;;13705:62;-1:-1:-1;;;13798:2:1;13783:18;;13776:35;13843:3;13828:19;;13626:227::o;13858:414::-;14060:2;14042:21;;;14099:2;14079:18;;;14072:30;14138:34;14133:2;14118:18;;14111:62;-1:-1:-1;;;14204:2:1;14189:18;;14182:48;14262:3;14247:19;;14032:240::o;14277:406::-;14479:2;14461:21;;;14518:2;14498:18;;;14491:30;14557:34;14552:2;14537:18;;14530:62;-1:-1:-1;;;14623:2:1;14608:18;;14601:40;14673:3;14658:19;;14451:232::o;14688:356::-;14890:2;14872:21;;;14909:18;;;14902:30;14968:34;14963:2;14948:18;;14941:62;15035:2;15020:18;;14862:182::o;15049:405::-;15251:2;15233:21;;;15290:2;15270:18;;;15263:30;15329:34;15324:2;15309:18;;15302:62;-1:-1:-1;;;15395:2:1;15380:18;;15373:39;15444:3;15429:19;;15223:231::o;15459:405::-;15661:2;15643:21;;;15700:2;15680:18;;;15673:30;15739:34;15734:2;15719:18;;15712:62;-1:-1:-1;;;15805:2:1;15790:18;;15783:39;15854:3;15839:19;;15633:231::o;15869:404::-;16071:2;16053:21;;;16110:2;16090:18;;;16083:30;16149:34;16144:2;16129:18;;16122:62;-1:-1:-1;;;16215:2:1;16200:18;;16193:38;16263:3;16248:19;;16043:230::o;16278:397::-;16480:2;16462:21;;;16519:2;16499:18;;;16492:30;16558:34;16553:2;16538:18;;16531:62;-1:-1:-1;;;16624:2:1;16609:18;;16602:31;16665:3;16650:19;;16452:223::o;16680:177::-;16826:25;;;16814:2;16799:18;;16781:76::o;16862:248::-;17036:25;;;17092:2;17077:18;;17070:34;17024:2;17009:18;;16991:119::o;17115:251::-;17185:2;17179:9;17215:17;;;17262:18;17247:34;;17283:22;;;17244:62;17241:2;;;17309:18;;:::i;:::-;17345:2;17338:22;17159:207;;-1:-1:-1;17159:207:1:o;17371:192::-;;17470:18;17462:6;17459:30;17456:2;;;17492:18;;:::i;:::-;-1:-1:-1;17552:4:1;17533:17;;;17529:28;;17446:117::o;17568:128::-;;17639:1;17635:6;17632:1;17629:13;17626:2;;;17645:18;;:::i;:::-;-1:-1:-1;17681:9:1;;17616:80::o;17701:380::-;17786:1;17776:12;;17833:1;17823:12;;;17844:2;;17898:4;17890:6;17886:17;17876:27;;17844:2;17951;17943:6;17940:14;17920:18;17917:38;17914:2;;;17997:10;17992:3;17988:20;17985:1;17978:31;18032:4;18029:1;18022:15;18060:4;18057:1;18050:15;17914:2;;17756:325;;;:::o;18086:135::-;;-1:-1:-1;;18146:17:1;;18143:2;;;18166:18;;:::i;:::-;-1:-1:-1;18213:1:1;18202:13;;18133:88::o;18226:127::-;18287:10;18282:3;18278:20;18275:1;18268:31;18318:4;18315:1;18308:15;18342:4;18339:1;18332:15;18358:127;18419:10;18414:3;18410:20;18407:1;18400:31;18450:4;18447:1;18440:15;18474:4;18471:1;18464:15;18490:88;18565:3;18561:15;;18547:31::o;18583:764::-;;18664:4;18646:16;18643:26;18640:2;;;18672:5;;18640:2;18713:1;18708:3;18703;18688:27;18775:10;18737:36;18768:3;18762:10;18737:36;:::i;:::-;18734:52;18724:2;;18790:5;;18724:2;18824;18818:9;18864:16;-1:-1:-1;;18860:29:1;18857:1;18818:9;18836:54;18919:4;18913:11;18943:16;18978:18;19049:2;19042:4;19034:6;19030:17;19027:25;19022:2;19014:6;19011:14;19008:45;19005:2;;;19056:5;;;;;;19005:2;19093:6;19087:4;19083:17;19072:28;;19129:3;19123:10;19109:24;;19156:2;19148:6;19145:14;19142:2;;;19162:5;;;;;;19142:2;;19223:16;19217:4;19213:27;19206:4;19197:6;19192:3;19188:16;19184:27;19181:60;19178:2;;;19244:5;;;;;19178:2;19309;19288:15;-1:-1:-1;;19284:29:1;19275:39;;19316:4;19271:50;19267:2;19260:62;19279:3;-1:-1:-1;;18630:717:1;:::o;19352:133::-;-1:-1:-1;;;;;;19428:32:1;;19418:43;;19408:2;;19475:1;19472;19465:12
Swarm Source
ipfs://18ebde38809a1e5c761eea894bc9dc6a737fd0ed83ed5038434b8b6776678af7
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.