ERC-1155
Overview
Max Total Supply
0
Holders
81,301
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:
WADS04
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-08-10 */ // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\utils\introspection\IERC165.sol // 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); } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) // pragma solidity ^0.8.0; // import "\smartcontracts\node_modules\@openzeppelin\contracts\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 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; } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) // pragma solidity ^0.8.0; // import "\smartcontracts\node_modules\@openzeppelin\contracts\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); } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\extensions\IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) // pragma solidity ^0.8.0; // import "\smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\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); } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\utils\Address.sol // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\utils\Context.sol // 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; } } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\utils\introspection\ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) // pragma solidity ^0.8.0; // import "\smartcontracts\node_modules\@openzeppelin\contracts\utils\introspection\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; } } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\ERC1155.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) // pragma solidity ^0.8.0; // import "\smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155.sol"; // import "\smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol"; // import "\smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\extensions\IERC1155MetadataURI.sol"; // import "\smartcontracts\node_modules\@openzeppelin\contracts\utils\Address.sol"; // import "\smartcontracts\node_modules\@openzeppelin\contracts\utils\Context.sol"; // import "\smartcontracts\node_modules\@openzeppelin\contracts\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: 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; } } // Dependency file: \smartcontracts\node_modules\@openzeppelin\contracts\access\Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) // pragma solidity ^0.8.0; // import "\smartcontracts\node_modules\@openzeppelin\contracts\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 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); } } // Root file: contracts\WADS04.sol pragma solidity ^0.8.4; // import "\smartcontracts\node_modules\@openzeppelin\contracts\token\ERC1155\ERC1155.sol"; // import "\smartcontracts\node_modules\@openzeppelin\contracts\access\Ownable.sol"; contract WADS04 is ERC1155, Ownable { constructor( string memory baseURI_, string memory contractUri_ ) ERC1155("") { _setURI(baseURI_); setContractURI(contractUri_); } // @see https://docs.opensea.io/docs/contract-level-metadata string private _contractUri; function mint(address[] memory to, uint256 id, uint256 amount, bytes memory data) public onlyOwner { for (uint256 i = 0; i < to.length; i++) { _mint(to[i], id, amount, data); } } function invite(address[] memory to, uint256 id, bytes memory data) public onlyOwner { for (uint256 i = 0; i < to.length; i++) { if(0 == balanceOf(to[i],id)) { _mint(to[i], id, 1, data); } } } function reinvite(address[] memory from, address[] memory to, uint256 id, bytes memory data) public onlyOwner { for (uint256 i = 0; i < to.length; i++) { _safeTransferFrom(from[i], to[i], id, 1, data); } } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function contractURI() public view returns (string memory) { return bytes(_contractUri).length > 0 ? _contractUri : ""; } function setContractURI(string memory newuri) public onlyOwner { _contractUri = newuri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"string","name":"contractUri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"invite","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"from","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"reinvite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setContractURI","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
60806040523480156200001157600080fd5b5060405162003c7138038062003c71833981810160405281019062000037919062000384565b604051806020016040528060008152506200005881620000a360201b60201c565b50620000796200006d620000bf60201b60201c565b620000c760201b60201c565b6200008a82620000a360201b60201c565b6200009b816200018d60201b60201c565b5050620005ea565b8060029080519060200190620000bb92919062000262565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200019d620000bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001c36200023860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200021c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000213906200041e565b60405180910390fd5b80600490805190602001906200023492919062000262565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200027090620004e6565b90600052602060002090601f016020900481019282620002945760008555620002e0565b82601f10620002af57805160ff1916838001178555620002e0565b82800160010185558215620002e0579182015b82811115620002df578251825591602001919060010190620002c2565b5b509050620002ef9190620002f3565b5090565b5b808211156200030e576000816000905550600101620002f4565b5090565b600062000329620003238462000469565b62000440565b9050828152602081018484840111156200034257600080fd5b6200034f848285620004b0565b509392505050565b600082601f8301126200036957600080fd5b81516200037b84826020860162000312565b91505092915050565b600080604083850312156200039857600080fd5b600083015167ffffffffffffffff811115620003b357600080fd5b620003c18582860162000357565b925050602083015167ffffffffffffffff811115620003df57600080fd5b620003ed8582860162000357565b9150509250929050565b6000620004066020836200049f565b91506200041382620005c1565b602082019050919050565b600060208201905081810360008301526200043981620003f7565b9050919050565b60006200044c6200045f565b90506200045a82826200051c565b919050565b6000604051905090565b600067ffffffffffffffff82111562000487576200048662000581565b5b6200049282620005b0565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620004d0578082015181840152602081019050620004b3565b83811115620004e0576000848401525b50505050565b60006002820490506001821680620004ff57607f821691505b6020821081141562000516576200051562000552565b5b50919050565b6200052782620005b0565b810181811067ffffffffffffffff8211171562000549576200054862000581565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61367780620005fa6000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c80638da5cb5b116100a2578063ccc9986311610071578063ccc998631461029f578063e8a3d485146102bb578063e985e9c5146102d9578063f242432a14610309578063f2fde38b146103255761010a565b80638da5cb5b1461022d578063938e3d7b1461024b578063a22cb46514610267578063a42da225146102835761010a565b80632eb2c2d6116100de5780632eb2c2d6146101bb5780634e1273f4146101d75780636729393414610207578063715018a6146102235761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806302fe53051461016f5780630e89341c1461018b575b600080fd5b6101296004803603810190610124919061243a565b610341565b6040516101369190612d59565b60405180910390f35b6101596004803603810190610154919061269f565b61040a565b6040516101669190612b7c565b60405180910390f35b610189600480360381019061018491906126f1565b6104ec565b005b6101a560048036038101906101a09190612732565b610574565b6040516101b29190612b97565b60405180910390f35b6101d560048036038101906101d091906122b0565b610608565b005b6101f160048036038101906101ec9190612521565b6106a9565b6040516101fe9190612b23565b60405180910390f35b610221600480360381019061021c9190612476565b61085a565b005b61022b61098a565b005b610235610a12565b6040516102429190612a46565b60405180910390f35b610265600480360381019061026091906126f1565b610a3c565b005b610281600480360381019061027c91906123fe565b610ad2565b005b61029d6004803603810190610298919061260c565b610ae8565b005b6102b960048036038101906102b4919061258d565b610bd6565b005b6102c3610d17565b6040516102d09190612b97565b60405180910390f35b6102f360048036038101906102ee9190612274565b610dd5565b6040516103009190612b7c565b60405180910390f35b610323600480360381019061031e919061236f565b610e69565b005b61033f600480360381019061033a919061224b565b610f0a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a990612bf9565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e557506104e482611002565b5b9050919050565b6104f461106c565b73ffffffffffffffffffffffffffffffffffffffff16610512610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90612cb9565b60405180910390fd5b61057181611074565b50565b60606002805461058390612ff9565b80601f01602080910402602001604051908101604052809291908181526020018280546105af90612ff9565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b50505050509050919050565b61061061106c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061065657506106558561065061106c565b610dd5565b5b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90612c79565b60405180910390fd5b6106a2858585858561108e565b5050505050565b606081518351146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612cf9565b60405180910390fd5b6000835167ffffffffffffffff811115610732577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156107605781602001602082028036833780820191505090505b50905060005b845181101561084f576107f98582815181106107ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106107ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610341565b828281518110610832577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806108489061305c565b9050610766565b508091505092915050565b61086261106c565b73ffffffffffffffffffffffffffffffffffffffff16610880610a12565b73ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612cb9565b60405180910390fd5b60005b83518110156109835761097085828151811061091e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061095f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151856001866113fc565b808061097b9061305c565b9150506108d9565b5050505050565b61099261106c565b73ffffffffffffffffffffffffffffffffffffffff166109b0610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90612cb9565b60405180910390fd5b610a106000611698565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a4461106c565b73ffffffffffffffffffffffffffffffffffffffff16610a62610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90612cb9565b60405180910390fd5b8060049080519060200190610ace929190611f43565b5050565b610ae4610add61106c565b838361175e565b5050565b610af061106c565b73ffffffffffffffffffffffffffffffffffffffff16610b0e610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90612cb9565b60405180910390fd5b60005b8451811015610bcf57610bbc858281518110610bac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518585856118cb565b8080610bc79061305c565b915050610b67565b5050505050565b610bde61106c565b73ffffffffffffffffffffffffffffffffffffffff16610bfc610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612cb9565b60405180910390fd5b60005b8351811015610d1157610ca8848281518110610c9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184610341565b60001415610cfe57610cfd848281518110610cec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151846001856118cb565b5b8080610d099061305c565b915050610c55565b50505050565b6060600060048054610d2890612ff9565b905011610d445760405180602001604052806000815250610dd0565b60048054610d5190612ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7d90612ff9565b8015610dca5780601f10610d9f57610100808354040283529160200191610dca565b820191906000526020600020905b815481529060010190602001808311610dad57829003601f168201915b50505050505b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e7161106c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610eb75750610eb685610eb161106c565b610dd5565b5b610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612c39565b60405180910390fd5b610f0385858585856113fc565b5050505050565b610f1261106c565b73ffffffffffffffffffffffffffffffffffffffff16610f30610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90612c19565b60405180910390fd5b610fff81611698565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061108a929190611f43565b5050565b81518351146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990612d19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990612c59565b60405180910390fd5b600061114c61106c565b905061115c818787878787611a7c565b60005b84518110156113595760008582815181106111a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106111e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090612c99565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461133e9190612eed565b92505081905550505050806113529061305c565b905061115f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113d0929190612b45565b60405180910390a46113e6818787878787611a84565b6113f4818787878787611a8c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390612c59565b60405180910390fd5b600061147661106c565b9050600061148385611c73565b9050600061149085611c73565b90506114a0838989858589611a7c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90612c99565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ec9190612eed565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611669929190612d74565b60405180910390a461167f848a8a86868a611a84565b61168d848a8a8a8a8a611d39565b505050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490612cd9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118be9190612b7c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290612d39565b60405180910390fd5b600061194561106c565b9050600061195285611c73565b9050600061195f85611c73565b905061197083600089858589611a7c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119cf9190612eed565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611a4d929190612d74565b60405180910390a4611a6483600089858589611a84565b611a7383600089898989611d39565b50505050505050565b505050505050565b505050505050565b611aab8473ffffffffffffffffffffffffffffffffffffffff16611f20565b15611c6b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611af1959493929190612a61565b602060405180830381600087803b158015611b0b57600080fd5b505af1925050508015611b3c57506040513d601f19601f82011682018060405250810190611b3991906126c8565b60015b611be257611b48613132565b806308c379a01415611ba55750611b5d61354f565b80611b685750611ba7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c9190612b97565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990612bb9565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6090612bd9565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611cb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611ce65781602001602082028036833780820191505090505b5090508281600081518110611d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b611d588473ffffffffffffffffffffffffffffffffffffffff16611f20565b15611f18578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d9e959493929190612ac9565b602060405180830381600087803b158015611db857600080fd5b505af1925050508015611de957506040513d601f19601f82011682018060405250810190611de691906126c8565b60015b611e8f57611df5613132565b806308c379a01415611e525750611e0a61354f565b80611e155750611e54565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e499190612b97565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8690612bb9565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90612bd9565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f4f90612ff9565b90600052602060002090601f016020900481019282611f715760008555611fb8565b82601f10611f8a57805160ff1916838001178555611fb8565b82800160010185558215611fb8579182015b82811115611fb7578251825591602001919060010190611f9c565b5b509050611fc59190611fc9565b5090565b5b80821115611fe2576000816000905550600101611fca565b5090565b6000611ff9611ff484612dc2565b612d9d565b9050808382526020820190508285602086028201111561201857600080fd5b60005b85811015612048578161202e888261213a565b84526020840193506020830192505060018101905061201b565b5050509392505050565b600061206561206084612dee565b612d9d565b9050808382526020820190508285602086028201111561208457600080fd5b60005b858110156120b4578161209a8882612236565b845260208401935060208301925050600181019050612087565b5050509392505050565b60006120d16120cc84612e1a565b612d9d565b9050828152602081018484840111156120e957600080fd5b6120f4848285612fb7565b509392505050565b600061210f61210a84612e4b565b612d9d565b90508281526020810184848401111561212757600080fd5b612132848285612fb7565b509392505050565b600081359050612149816135e5565b92915050565b600082601f83011261216057600080fd5b8135612170848260208601611fe6565b91505092915050565b600082601f83011261218a57600080fd5b813561219a848260208601612052565b91505092915050565b6000813590506121b2816135fc565b92915050565b6000813590506121c781613613565b92915050565b6000815190506121dc81613613565b92915050565b600082601f8301126121f357600080fd5b81356122038482602086016120be565b91505092915050565b600082601f83011261221d57600080fd5b813561222d8482602086016120fc565b91505092915050565b6000813590506122458161362a565b92915050565b60006020828403121561225d57600080fd5b600061226b8482850161213a565b91505092915050565b6000806040838503121561228757600080fd5b60006122958582860161213a565b92505060206122a68582860161213a565b9150509250929050565b600080600080600060a086880312156122c857600080fd5b60006122d68882890161213a565b95505060206122e78882890161213a565b945050604086013567ffffffffffffffff81111561230457600080fd5b61231088828901612179565b935050606086013567ffffffffffffffff81111561232d57600080fd5b61233988828901612179565b925050608086013567ffffffffffffffff81111561235657600080fd5b612362888289016121e2565b9150509295509295909350565b600080600080600060a0868803121561238757600080fd5b60006123958882890161213a565b95505060206123a68882890161213a565b94505060406123b788828901612236565b93505060606123c888828901612236565b925050608086013567ffffffffffffffff8111156123e557600080fd5b6123f1888289016121e2565b9150509295509295909350565b6000806040838503121561241157600080fd5b600061241f8582860161213a565b9250506020612430858286016121a3565b9150509250929050565b6000806040838503121561244d57600080fd5b600061245b8582860161213a565b925050602061246c85828601612236565b9150509250929050565b6000806000806080858703121561248c57600080fd5b600085013567ffffffffffffffff8111156124a657600080fd5b6124b28782880161214f565b945050602085013567ffffffffffffffff8111156124cf57600080fd5b6124db8782880161214f565b93505060406124ec87828801612236565b925050606085013567ffffffffffffffff81111561250957600080fd5b612515878288016121e2565b91505092959194509250565b6000806040838503121561253457600080fd5b600083013567ffffffffffffffff81111561254e57600080fd5b61255a8582860161214f565b925050602083013567ffffffffffffffff81111561257757600080fd5b61258385828601612179565b9150509250929050565b6000806000606084860312156125a257600080fd5b600084013567ffffffffffffffff8111156125bc57600080fd5b6125c88682870161214f565b93505060206125d986828701612236565b925050604084013567ffffffffffffffff8111156125f657600080fd5b612602868287016121e2565b9150509250925092565b6000806000806080858703121561262257600080fd5b600085013567ffffffffffffffff81111561263c57600080fd5b6126488782880161214f565b945050602061265987828801612236565b935050604061266a87828801612236565b925050606085013567ffffffffffffffff81111561268757600080fd5b612693878288016121e2565b91505092959194509250565b6000602082840312156126b157600080fd5b60006126bf848285016121b8565b91505092915050565b6000602082840312156126da57600080fd5b60006126e8848285016121cd565b91505092915050565b60006020828403121561270357600080fd5b600082013567ffffffffffffffff81111561271d57600080fd5b6127298482850161220c565b91505092915050565b60006020828403121561274457600080fd5b600061275284828501612236565b91505092915050565b60006127678383612a28565b60208301905092915050565b61277c81612f43565b82525050565b600061278d82612e8c565b6127978185612eba565b93506127a283612e7c565b8060005b838110156127d35781516127ba888261275b565b97506127c583612ead565b9250506001810190506127a6565b5085935050505092915050565b6127e981612f55565b82525050565b60006127fa82612e97565b6128048185612ecb565b9350612814818560208601612fc6565b61281d81613154565b840191505092915050565b600061283382612ea2565b61283d8185612edc565b935061284d818560208601612fc6565b61285681613154565b840191505092915050565b600061286e603483612edc565b915061287982613172565b604082019050919050565b6000612891602883612edc565b915061289c826131c1565b604082019050919050565b60006128b4602b83612edc565b91506128bf82613210565b604082019050919050565b60006128d7602683612edc565b91506128e28261325f565b604082019050919050565b60006128fa602983612edc565b9150612905826132ae565b604082019050919050565b600061291d602583612edc565b9150612928826132fd565b604082019050919050565b6000612940603283612edc565b915061294b8261334c565b604082019050919050565b6000612963602a83612edc565b915061296e8261339b565b604082019050919050565b6000612986602083612edc565b9150612991826133ea565b602082019050919050565b60006129a9602983612edc565b91506129b482613413565b604082019050919050565b60006129cc602983612edc565b91506129d782613462565b604082019050919050565b60006129ef602883612edc565b91506129fa826134b1565b604082019050919050565b6000612a12602183612edc565b9150612a1d82613500565b604082019050919050565b612a3181612fad565b82525050565b612a4081612fad565b82525050565b6000602082019050612a5b6000830184612773565b92915050565b600060a082019050612a766000830188612773565b612a836020830187612773565b8181036040830152612a958186612782565b90508181036060830152612aa98185612782565b90508181036080830152612abd81846127ef565b90509695505050505050565b600060a082019050612ade6000830188612773565b612aeb6020830187612773565b612af86040830186612a37565b612b056060830185612a37565b8181036080830152612b1781846127ef565b90509695505050505050565b60006020820190508181036000830152612b3d8184612782565b905092915050565b60006040820190508181036000830152612b5f8185612782565b90508181036020830152612b738184612782565b90509392505050565b6000602082019050612b9160008301846127e0565b92915050565b60006020820190508181036000830152612bb18184612828565b905092915050565b60006020820190508181036000830152612bd281612861565b9050919050565b60006020820190508181036000830152612bf281612884565b9050919050565b60006020820190508181036000830152612c12816128a7565b9050919050565b60006020820190508181036000830152612c32816128ca565b9050919050565b60006020820190508181036000830152612c52816128ed565b9050919050565b60006020820190508181036000830152612c7281612910565b9050919050565b60006020820190508181036000830152612c9281612933565b9050919050565b60006020820190508181036000830152612cb281612956565b9050919050565b60006020820190508181036000830152612cd281612979565b9050919050565b60006020820190508181036000830152612cf28161299c565b9050919050565b60006020820190508181036000830152612d12816129bf565b9050919050565b60006020820190508181036000830152612d32816129e2565b9050919050565b60006020820190508181036000830152612d5281612a05565b9050919050565b6000602082019050612d6e6000830184612a37565b92915050565b6000604082019050612d896000830185612a37565b612d966020830184612a37565b9392505050565b6000612da7612db8565b9050612db3828261302b565b919050565b6000604051905090565b600067ffffffffffffffff821115612ddd57612ddc613103565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e0957612e08613103565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e3557612e34613103565b5b612e3e82613154565b9050602081019050919050565b600067ffffffffffffffff821115612e6657612e65613103565b5b612e6f82613154565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ef882612fad565b9150612f0383612fad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f3857612f376130a5565b5b828201905092915050565b6000612f4e82612f8d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612fe4578082015181840152602081019050612fc9565b83811115612ff3576000848401525b50505050565b6000600282049050600182168061301157607f821691505b60208210811415613025576130246130d4565b5b50919050565b61303482613154565b810181811067ffffffffffffffff8211171561305357613052613103565b5b80604052505050565b600061306782612fad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561309a576130996130a5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156131515760046000803e61314e600051613165565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561355f576135e2565b613567612db8565b60043d036004823e80513d602482011167ffffffffffffffff8211171561358f5750506135e2565b808201805167ffffffffffffffff8111156135ad57505050506135e2565b80602083010160043d0385018111156135ca5750505050506135e2565b6135d98260200185018661302b565b82955050505050505b90565b6135ee81612f43565b81146135f957600080fd5b50565b61360581612f55565b811461361057600080fd5b50565b61361c81612f61565b811461362757600080fd5b50565b61363381612fad565b811461363e57600080fd5b5056fea2646970667358221220ee027f3a7a5fe9313cfae2c1c06a41231d8205176a99079d03bc187ca6adfcfa64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6170692e77616c6c65746164732e696f2f65787465726e616c2f6d657461646174612f746f6b656e2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f6170692e77616c6c65746164732e696f2f65787465726e616c2f6d657461646174612f623065346164363935333933356237380000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010a5760003560e01c80638da5cb5b116100a2578063ccc9986311610071578063ccc998631461029f578063e8a3d485146102bb578063e985e9c5146102d9578063f242432a14610309578063f2fde38b146103255761010a565b80638da5cb5b1461022d578063938e3d7b1461024b578063a22cb46514610267578063a42da225146102835761010a565b80632eb2c2d6116100de5780632eb2c2d6146101bb5780634e1273f4146101d75780636729393414610207578063715018a6146102235761010a565b8062fdd58e1461010f57806301ffc9a71461013f57806302fe53051461016f5780630e89341c1461018b575b600080fd5b6101296004803603810190610124919061243a565b610341565b6040516101369190612d59565b60405180910390f35b6101596004803603810190610154919061269f565b61040a565b6040516101669190612b7c565b60405180910390f35b610189600480360381019061018491906126f1565b6104ec565b005b6101a560048036038101906101a09190612732565b610574565b6040516101b29190612b97565b60405180910390f35b6101d560048036038101906101d091906122b0565b610608565b005b6101f160048036038101906101ec9190612521565b6106a9565b6040516101fe9190612b23565b60405180910390f35b610221600480360381019061021c9190612476565b61085a565b005b61022b61098a565b005b610235610a12565b6040516102429190612a46565b60405180910390f35b610265600480360381019061026091906126f1565b610a3c565b005b610281600480360381019061027c91906123fe565b610ad2565b005b61029d6004803603810190610298919061260c565b610ae8565b005b6102b960048036038101906102b4919061258d565b610bd6565b005b6102c3610d17565b6040516102d09190612b97565b60405180910390f35b6102f360048036038101906102ee9190612274565b610dd5565b6040516103009190612b7c565b60405180910390f35b610323600480360381019061031e919061236f565b610e69565b005b61033f600480360381019061033a919061224b565b610f0a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a990612bf9565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104d557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104e557506104e482611002565b5b9050919050565b6104f461106c565b73ffffffffffffffffffffffffffffffffffffffff16610512610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90612cb9565b60405180910390fd5b61057181611074565b50565b60606002805461058390612ff9565b80601f01602080910402602001604051908101604052809291908181526020018280546105af90612ff9565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b50505050509050919050565b61061061106c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061065657506106558561065061106c565b610dd5565b5b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90612c79565b60405180910390fd5b6106a2858585858561108e565b5050505050565b606081518351146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612cf9565b60405180910390fd5b6000835167ffffffffffffffff811115610732577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156107605781602001602082028036833780820191505090505b50905060005b845181101561084f576107f98582815181106107ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106107ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610341565b828281518110610832577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806108489061305c565b9050610766565b508091505092915050565b61086261106c565b73ffffffffffffffffffffffffffffffffffffffff16610880610a12565b73ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90612cb9565b60405180910390fd5b60005b83518110156109835761097085828151811061091e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185838151811061095f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151856001866113fc565b808061097b9061305c565b9150506108d9565b5050505050565b61099261106c565b73ffffffffffffffffffffffffffffffffffffffff166109b0610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd90612cb9565b60405180910390fd5b610a106000611698565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a4461106c565b73ffffffffffffffffffffffffffffffffffffffff16610a62610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90612cb9565b60405180910390fd5b8060049080519060200190610ace929190611f43565b5050565b610ae4610add61106c565b838361175e565b5050565b610af061106c565b73ffffffffffffffffffffffffffffffffffffffff16610b0e610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90612cb9565b60405180910390fd5b60005b8451811015610bcf57610bbc858281518110610bac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518585856118cb565b8080610bc79061305c565b915050610b67565b5050505050565b610bde61106c565b73ffffffffffffffffffffffffffffffffffffffff16610bfc610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4990612cb9565b60405180910390fd5b60005b8351811015610d1157610ca8848281518110610c9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184610341565b60001415610cfe57610cfd848281518110610cec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151846001856118cb565b5b8080610d099061305c565b915050610c55565b50505050565b6060600060048054610d2890612ff9565b905011610d445760405180602001604052806000815250610dd0565b60048054610d5190612ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7d90612ff9565b8015610dca5780601f10610d9f57610100808354040283529160200191610dca565b820191906000526020600020905b815481529060010190602001808311610dad57829003601f168201915b50505050505b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e7161106c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610eb75750610eb685610eb161106c565b610dd5565b5b610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90612c39565b60405180910390fd5b610f0385858585856113fc565b5050505050565b610f1261106c565b73ffffffffffffffffffffffffffffffffffffffff16610f30610a12565b73ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612cb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90612c19565b60405180910390fd5b610fff81611698565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061108a929190611f43565b5050565b81518351146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990612d19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990612c59565b60405180910390fd5b600061114c61106c565b905061115c818787878787611a7c565b60005b84518110156113595760008582815181106111a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106111e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128090612c99565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461133e9190612eed565b92505081905550505050806113529061305c565b905061115f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113d0929190612b45565b60405180910390a46113e6818787878787611a84565b6113f4818787878787611a8c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390612c59565b60405180910390fd5b600061147661106c565b9050600061148385611c73565b9050600061149085611c73565b90506114a0838989858589611a7c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152e90612c99565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115ec9190612eed565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611669929190612d74565b60405180910390a461167f848a8a86868a611a84565b61168d848a8a8a8a8a611d39565b505050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490612cd9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118be9190612b7c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290612d39565b60405180910390fd5b600061194561106c565b9050600061195285611c73565b9050600061195f85611c73565b905061197083600089858589611a7c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119cf9190612eed565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611a4d929190612d74565b60405180910390a4611a6483600089858589611a84565b611a7383600089898989611d39565b50505050505050565b505050505050565b505050505050565b611aab8473ffffffffffffffffffffffffffffffffffffffff16611f20565b15611c6b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611af1959493929190612a61565b602060405180830381600087803b158015611b0b57600080fd5b505af1925050508015611b3c57506040513d601f19601f82011682018060405250810190611b3991906126c8565b60015b611be257611b48613132565b806308c379a01415611ba55750611b5d61354f565b80611b685750611ba7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c9190612b97565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990612bb9565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6090612bd9565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611cb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611ce65781602001602082028036833780820191505090505b5090508281600081518110611d24577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b611d588473ffffffffffffffffffffffffffffffffffffffff16611f20565b15611f18578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d9e959493929190612ac9565b602060405180830381600087803b158015611db857600080fd5b505af1925050508015611de957506040513d601f19601f82011682018060405250810190611de691906126c8565b60015b611e8f57611df5613132565b806308c379a01415611e525750611e0a61354f565b80611e155750611e54565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e499190612b97565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8690612bb9565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90612bd9565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f4f90612ff9565b90600052602060002090601f016020900481019282611f715760008555611fb8565b82601f10611f8a57805160ff1916838001178555611fb8565b82800160010185558215611fb8579182015b82811115611fb7578251825591602001919060010190611f9c565b5b509050611fc59190611fc9565b5090565b5b80821115611fe2576000816000905550600101611fca565b5090565b6000611ff9611ff484612dc2565b612d9d565b9050808382526020820190508285602086028201111561201857600080fd5b60005b85811015612048578161202e888261213a565b84526020840193506020830192505060018101905061201b565b5050509392505050565b600061206561206084612dee565b612d9d565b9050808382526020820190508285602086028201111561208457600080fd5b60005b858110156120b4578161209a8882612236565b845260208401935060208301925050600181019050612087565b5050509392505050565b60006120d16120cc84612e1a565b612d9d565b9050828152602081018484840111156120e957600080fd5b6120f4848285612fb7565b509392505050565b600061210f61210a84612e4b565b612d9d565b90508281526020810184848401111561212757600080fd5b612132848285612fb7565b509392505050565b600081359050612149816135e5565b92915050565b600082601f83011261216057600080fd5b8135612170848260208601611fe6565b91505092915050565b600082601f83011261218a57600080fd5b813561219a848260208601612052565b91505092915050565b6000813590506121b2816135fc565b92915050565b6000813590506121c781613613565b92915050565b6000815190506121dc81613613565b92915050565b600082601f8301126121f357600080fd5b81356122038482602086016120be565b91505092915050565b600082601f83011261221d57600080fd5b813561222d8482602086016120fc565b91505092915050565b6000813590506122458161362a565b92915050565b60006020828403121561225d57600080fd5b600061226b8482850161213a565b91505092915050565b6000806040838503121561228757600080fd5b60006122958582860161213a565b92505060206122a68582860161213a565b9150509250929050565b600080600080600060a086880312156122c857600080fd5b60006122d68882890161213a565b95505060206122e78882890161213a565b945050604086013567ffffffffffffffff81111561230457600080fd5b61231088828901612179565b935050606086013567ffffffffffffffff81111561232d57600080fd5b61233988828901612179565b925050608086013567ffffffffffffffff81111561235657600080fd5b612362888289016121e2565b9150509295509295909350565b600080600080600060a0868803121561238757600080fd5b60006123958882890161213a565b95505060206123a68882890161213a565b94505060406123b788828901612236565b93505060606123c888828901612236565b925050608086013567ffffffffffffffff8111156123e557600080fd5b6123f1888289016121e2565b9150509295509295909350565b6000806040838503121561241157600080fd5b600061241f8582860161213a565b9250506020612430858286016121a3565b9150509250929050565b6000806040838503121561244d57600080fd5b600061245b8582860161213a565b925050602061246c85828601612236565b9150509250929050565b6000806000806080858703121561248c57600080fd5b600085013567ffffffffffffffff8111156124a657600080fd5b6124b28782880161214f565b945050602085013567ffffffffffffffff8111156124cf57600080fd5b6124db8782880161214f565b93505060406124ec87828801612236565b925050606085013567ffffffffffffffff81111561250957600080fd5b612515878288016121e2565b91505092959194509250565b6000806040838503121561253457600080fd5b600083013567ffffffffffffffff81111561254e57600080fd5b61255a8582860161214f565b925050602083013567ffffffffffffffff81111561257757600080fd5b61258385828601612179565b9150509250929050565b6000806000606084860312156125a257600080fd5b600084013567ffffffffffffffff8111156125bc57600080fd5b6125c88682870161214f565b93505060206125d986828701612236565b925050604084013567ffffffffffffffff8111156125f657600080fd5b612602868287016121e2565b9150509250925092565b6000806000806080858703121561262257600080fd5b600085013567ffffffffffffffff81111561263c57600080fd5b6126488782880161214f565b945050602061265987828801612236565b935050604061266a87828801612236565b925050606085013567ffffffffffffffff81111561268757600080fd5b612693878288016121e2565b91505092959194509250565b6000602082840312156126b157600080fd5b60006126bf848285016121b8565b91505092915050565b6000602082840312156126da57600080fd5b60006126e8848285016121cd565b91505092915050565b60006020828403121561270357600080fd5b600082013567ffffffffffffffff81111561271d57600080fd5b6127298482850161220c565b91505092915050565b60006020828403121561274457600080fd5b600061275284828501612236565b91505092915050565b60006127678383612a28565b60208301905092915050565b61277c81612f43565b82525050565b600061278d82612e8c565b6127978185612eba565b93506127a283612e7c565b8060005b838110156127d35781516127ba888261275b565b97506127c583612ead565b9250506001810190506127a6565b5085935050505092915050565b6127e981612f55565b82525050565b60006127fa82612e97565b6128048185612ecb565b9350612814818560208601612fc6565b61281d81613154565b840191505092915050565b600061283382612ea2565b61283d8185612edc565b935061284d818560208601612fc6565b61285681613154565b840191505092915050565b600061286e603483612edc565b915061287982613172565b604082019050919050565b6000612891602883612edc565b915061289c826131c1565b604082019050919050565b60006128b4602b83612edc565b91506128bf82613210565b604082019050919050565b60006128d7602683612edc565b91506128e28261325f565b604082019050919050565b60006128fa602983612edc565b9150612905826132ae565b604082019050919050565b600061291d602583612edc565b9150612928826132fd565b604082019050919050565b6000612940603283612edc565b915061294b8261334c565b604082019050919050565b6000612963602a83612edc565b915061296e8261339b565b604082019050919050565b6000612986602083612edc565b9150612991826133ea565b602082019050919050565b60006129a9602983612edc565b91506129b482613413565b604082019050919050565b60006129cc602983612edc565b91506129d782613462565b604082019050919050565b60006129ef602883612edc565b91506129fa826134b1565b604082019050919050565b6000612a12602183612edc565b9150612a1d82613500565b604082019050919050565b612a3181612fad565b82525050565b612a4081612fad565b82525050565b6000602082019050612a5b6000830184612773565b92915050565b600060a082019050612a766000830188612773565b612a836020830187612773565b8181036040830152612a958186612782565b90508181036060830152612aa98185612782565b90508181036080830152612abd81846127ef565b90509695505050505050565b600060a082019050612ade6000830188612773565b612aeb6020830187612773565b612af86040830186612a37565b612b056060830185612a37565b8181036080830152612b1781846127ef565b90509695505050505050565b60006020820190508181036000830152612b3d8184612782565b905092915050565b60006040820190508181036000830152612b5f8185612782565b90508181036020830152612b738184612782565b90509392505050565b6000602082019050612b9160008301846127e0565b92915050565b60006020820190508181036000830152612bb18184612828565b905092915050565b60006020820190508181036000830152612bd281612861565b9050919050565b60006020820190508181036000830152612bf281612884565b9050919050565b60006020820190508181036000830152612c12816128a7565b9050919050565b60006020820190508181036000830152612c32816128ca565b9050919050565b60006020820190508181036000830152612c52816128ed565b9050919050565b60006020820190508181036000830152612c7281612910565b9050919050565b60006020820190508181036000830152612c9281612933565b9050919050565b60006020820190508181036000830152612cb281612956565b9050919050565b60006020820190508181036000830152612cd281612979565b9050919050565b60006020820190508181036000830152612cf28161299c565b9050919050565b60006020820190508181036000830152612d12816129bf565b9050919050565b60006020820190508181036000830152612d32816129e2565b9050919050565b60006020820190508181036000830152612d5281612a05565b9050919050565b6000602082019050612d6e6000830184612a37565b92915050565b6000604082019050612d896000830185612a37565b612d966020830184612a37565b9392505050565b6000612da7612db8565b9050612db3828261302b565b919050565b6000604051905090565b600067ffffffffffffffff821115612ddd57612ddc613103565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e0957612e08613103565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e3557612e34613103565b5b612e3e82613154565b9050602081019050919050565b600067ffffffffffffffff821115612e6657612e65613103565b5b612e6f82613154565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612ef882612fad565b9150612f0383612fad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f3857612f376130a5565b5b828201905092915050565b6000612f4e82612f8d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612fe4578082015181840152602081019050612fc9565b83811115612ff3576000848401525b50505050565b6000600282049050600182168061301157607f821691505b60208210811415613025576130246130d4565b5b50919050565b61303482613154565b810181811067ffffffffffffffff8211171561305357613052613103565b5b80604052505050565b600061306782612fad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561309a576130996130a5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156131515760046000803e61314e600051613165565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561355f576135e2565b613567612db8565b60043d036004823e80513d602482011167ffffffffffffffff8211171561358f5750506135e2565b808201805167ffffffffffffffff8111156135ad57505050506135e2565b80602083010160043d0385018111156135ca5750505050506135e2565b6135d98260200185018661302b565b82955050505050505b90565b6135ee81612f43565b81146135f957600080fd5b50565b61360581612f55565b811461361057600080fd5b50565b61361c81612f61565b811461362757600080fd5b50565b61363381612fad565b811461363e57600080fd5b5056fea2646970667358221220ee027f3a7a5fe9313cfae2c1c06a41231d8205176a99079d03bc187ca6adfcfa64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000003168747470733a2f2f6170692e77616c6c65746164732e696f2f65787465726e616c2f6d657461646174612f746f6b656e2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f6170692e77616c6c65746164732e696f2f65787465726e616c2f6d657461646174612f623065346164363935333933356237380000000000
-----Decoded View---------------
Arg [0] : baseURI_ (string): https://api.walletads.io/external/metadata/token/
Arg [1] : contractUri_ (string): https://api.walletads.io/external/metadata/b0e4ad6953935b78
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000031
Arg [3] : 68747470733a2f2f6170692e77616c6c65746164732e696f2f65787465726e61
Arg [4] : 6c2f6d657461646174612f746f6b656e2f000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000003b
Arg [6] : 68747470733a2f2f6170692e77616c6c65746164732e696f2f65787465726e61
Arg [7] : 6c2f6d657461646174612f623065346164363935333933356237380000000000
Deployed Bytecode Sourcemap
40484:1425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22198:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21221:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41561:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21942:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24137:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22595:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41312:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39419:103;;;:::i;:::-;;38768:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41803:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23192:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40824:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41046:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41660:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23419:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23659:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39677:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22198:231;22284:7;22331:1;22312:21;;:7;:21;;;;22304:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22399:9;:13;22409:2;22399:13;;;;;;;;;;;:22;22413:7;22399:22;;;;;;;;;;;;;;;;22392:29;;22198:231;;;;:::o;21221:310::-;21323:4;21375:26;21360:41;;;:11;:41;;;;:110;;;;21433:37;21418:52;;;:11;:52;;;;21360:110;:163;;;;21487:36;21511:11;21487:23;:36::i;:::-;21360:163;21340:183;;21221:310;;;:::o;41561:89::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41627:15:::1;41635:6;41627:7;:15::i;:::-;41561:89:::0;:::o;21942:105::-;22002:13;22035:4;22028:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21942:105;;;:::o;24137:442::-;24378:12;:10;:12::i;:::-;24370:20;;:4;:20;;;:60;;;;24394:36;24411:4;24417:12;:10;:12::i;:::-;24394:16;:36::i;:::-;24370:60;24348:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24519:52;24542:4;24548:2;24552:3;24557:7;24566:4;24519:22;:52::i;:::-;24137:442;;;;;:::o;22595:524::-;22751:16;22812:3;:10;22793:8;:15;:29;22785:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22881:30;22928:8;:15;22914:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22881:63;;22962:9;22957:122;22981:8;:15;22977:1;:19;22957:122;;;23037:30;23047:8;23056:1;23047:11;;;;;;;;;;;;;;;;;;;;;;23060:3;23064:1;23060:6;;;;;;;;;;;;;;;;;;;;;;23037:9;:30::i;:::-;23018:13;23032:1;23018:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;22998:3;;;;:::i;:::-;;;22957:122;;;;23098:13;23091:20;;;22595:524;;;;:::o;41312:241::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41438:9:::1;41433:113;41457:2;:9;41453:1;:13;41433:113;;;41488:46;41506:4;41511:1;41506:7;;;;;;;;;;;;;;;;;;;;;;41515:2;41518:1;41515:5;;;;;;;;;;;;;;;;;;;;;;41522:2;41526:1;41529:4;41488:17;:46::i;:::-;41468:3;;;;;:::i;:::-;;;;41433:113;;;;41312:241:::0;;;;:::o;39419:103::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39484:30:::1;39511:1;39484:18;:30::i;:::-;39419:103::o:0;38768:87::-;38814:7;38841:6;;;;;;;;;;;38834:13;;38768:87;:::o;41803:103::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41892:6:::1;41877:12;:21;;;;;;;;;;;;:::i;:::-;;41803:103:::0;:::o;23192:155::-;23287:52;23306:12;:10;:12::i;:::-;23320:8;23330;23287:18;:52::i;:::-;23192:155;;:::o;40824:214::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40939:9:::1;40934:97;40958:2;:9;40954:1;:13;40934:97;;;40989:30;40995:2;40998:1;40995:5;;;;;;;;;;;;;;;;;;;;;;41002:2;41006:6;41014:4;40989:5;:30::i;:::-;40969:3;;;;;:::i;:::-;;;;40934:97;;;;40824:214:::0;;;;:::o;41046:258::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41147:9:::1;41142:155;41166:2;:9;41162:1;:13;41142:155;;;41205:19;41215:2;41218:1;41215:5;;;;;;;;;;;;;;;;;;;;;;41221:2;41205:9;:19::i;:::-;41200:1;:24;41197:89;;;41245:25;41251:2;41254:1;41251:5;;;;;;;;;;;;;;;;;;;;;;41258:2;41262:1;41265:4;41245:5;:25::i;:::-;41197:89;41177:3;;;;;:::i;:::-;;;;41142:155;;;;41046:258:::0;;;:::o;41660:135::-;41704:13;41766:1;41743:12;41737:26;;;;;:::i;:::-;;;:30;:50;;;;;;;;;;;;;;;;;41770:12;41737:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41730:57;;41660:135;:::o;23419:168::-;23518:4;23542:18;:27;23561:7;23542:27;;;;;;;;;;;;;;;:37;23570:8;23542:37;;;;;;;;;;;;;;;;;;;;;;;;;23535:44;;23419:168;;;;:::o;23659:401::-;23875:12;:10;:12::i;:::-;23867:20;;:4;:20;;;:60;;;;23891:36;23908:4;23914:12;:10;:12::i;:::-;23891:16;:36::i;:::-;23867:60;23845:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24007:45;24025:4;24031:2;24035;24039:6;24047:4;24007:17;:45::i;:::-;23659:401;;;;;:::o;39677:201::-;38999:12;:10;:12::i;:::-;38988:23;;:7;:5;:7::i;:::-;:23;;;38980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39786:1:::1;39766:22;;:8;:22;;;;39758:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39842:28;39861:8;39842:18;:28::i;:::-;39677:201:::0;:::o;19352:157::-;19437:4;19476:25;19461:40;;;:11;:40;;;;19454:47;;19352:157;;;:::o;18131:98::-;18184:7;18211:10;18204:17;;18131:98;:::o;28365:88::-;28439:6;28432:4;:13;;;;;;;;;;;;:::i;:::-;;28365:88;:::o;26375:1146::-;26602:7;:14;26588:3;:10;:28;26580:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26694:1;26680:16;;:2;:16;;;;26672:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26751:16;26770:12;:10;:12::i;:::-;26751:31;;26795:60;26816:8;26826:4;26832:2;26836:3;26841:7;26850:4;26795:20;:60::i;:::-;26873:9;26868:421;26892:3;:10;26888:1;:14;26868:421;;;26924:10;26937:3;26941:1;26937:6;;;;;;;;;;;;;;;;;;;;;;26924:19;;26958:14;26975:7;26983:1;26975:10;;;;;;;;;;;;;;;;;;;;;;26958:27;;27002:19;27024:9;:13;27034:2;27024:13;;;;;;;;;;;:19;27038:4;27024:19;;;;;;;;;;;;;;;;27002:41;;27081:6;27066:11;:21;;27058:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27214:6;27200:11;:20;27178:9;:13;27188:2;27178:13;;;;;;;;;;;:19;27192:4;27178:19;;;;;;;;;;;;;;;:42;;;;27271:6;27250:9;:13;27260:2;27250:13;;;;;;;;;;;:17;27264:2;27250:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26868:421;;;26904:3;;;;:::i;:::-;;;26868:421;;;;27336:2;27306:47;;27330:4;27306:47;;27320:8;27306:47;;;27340:3;27345:7;27306:47;;;;;;;:::i;:::-;;;;;;;;27366:59;27386:8;27396:4;27402:2;27406:3;27411:7;27420:4;27366:19;:59::i;:::-;27438:75;27474:8;27484:4;27490:2;27494:3;27499:7;27508:4;27438:35;:75::i;:::-;26375:1146;;;;;;:::o;25043:974::-;25245:1;25231:16;;:2;:16;;;;25223:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:16;25321:12;:10;:12::i;:::-;25302:31;;25344:20;25367:21;25385:2;25367:17;:21::i;:::-;25344:44;;25399:24;25426:25;25444:6;25426:17;:25::i;:::-;25399:52;;25464:60;25485:8;25495:4;25501:2;25505:3;25510:7;25519:4;25464:20;:60::i;:::-;25537:19;25559:9;:13;25569:2;25559:13;;;;;;;;;;;:19;25573:4;25559:19;;;;;;;;;;;;;;;;25537:41;;25612:6;25597:11;:21;;25589:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25737:6;25723:11;:20;25701:9;:13;25711:2;25701:13;;;;;;;;;;;:19;25715:4;25701:19;;;;;;;;;;;;;;;:42;;;;25786:6;25765:9;:13;25775:2;25765:13;;;;;;;;;;;:17;25779:2;25765:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25841:2;25810:46;;25835:4;25810:46;;25825:8;25810:46;;;25845:2;25849:6;25810:46;;;;;;;:::i;:::-;;;;;;;;25869:59;25889:8;25899:4;25905:2;25909:3;25914:7;25923:4;25869:19;:59::i;:::-;25941:68;25972:8;25982:4;25988:2;25992;25996:6;26004:4;25941:30;:68::i;:::-;25043:974;;;;;;;;;:::o;40038:191::-;40112:16;40131:6;;;;;;;;;;;40112:25;;40157:8;40148:6;;:17;;;;;;;;;;;;;;;;;;40212:8;40181:40;;40202:8;40181:40;;;;;;;;;;;;40038:191;;:::o;33109:331::-;33264:8;33255:17;;:5;:17;;;;33247:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33367:8;33329:18;:25;33348:5;33329:25;;;;;;;;;;;;;;;:35;33355:8;33329:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33413:8;33391:41;;33406:5;33391:41;;;33423:8;33391:41;;;;;;:::i;:::-;;;;;;;;33109:331;;;:::o;28839:729::-;29006:1;28992:16;;:2;:16;;;;28984:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29059:16;29078:12;:10;:12::i;:::-;29059:31;;29101:20;29124:21;29142:2;29124:17;:21::i;:::-;29101:44;;29156:24;29183:25;29201:6;29183:17;:25::i;:::-;29156:52;;29221:66;29242:8;29260:1;29264:2;29268:3;29273:7;29282:4;29221:20;:66::i;:::-;29321:6;29300:9;:13;29310:2;29300:13;;;;;;;;;;;:17;29314:2;29300:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29380:2;29343:52;;29376:1;29343:52;;29358:8;29343:52;;;29384:2;29388:6;29343:52;;;;;;;:::i;:::-;;;;;;;;29408:65;29428:8;29446:1;29450:2;29454:3;29459:7;29468:4;29408:19;:65::i;:::-;29486:74;29517:8;29535:1;29539:2;29543;29547:6;29555:4;29486:30;:74::i;:::-;28839:729;;;;;;;:::o;34396:221::-;;;;;;;:::o;35572:220::-;;;;;;;:::o;36552:813::-;36792:15;:2;:13;;;:15::i;:::-;36788:570;;;36845:2;36828:43;;;36872:8;36882:4;36888:3;36893:7;36902:4;36828:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36824:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37220:6;37213:14;;;;;;;;;;;:::i;:::-;;;;;;;;36824:523;;;37269:62;;;;;;;;;;:::i;:::-;;;;;;;;36824:523;37001:48;;;36989:60;;;:8;:60;;;;36985:159;;37074:50;;;;;;;;;;:::i;:::-;;;;;;;;36985:159;36908:251;36788:570;36552:813;;;;;;:::o;37373:198::-;37439:16;37468:22;37507:1;37493:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37468:41;;37531:7;37520:5;37526:1;37520:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;37558:5;37551:12;;;37373:198;;;:::o;35800:744::-;36015:15;:2;:13;;;:15::i;:::-;36011:526;;;36068:2;36051:38;;;36090:8;36100:4;36106:2;36110:6;36118:4;36051:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36047:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36399:6;36392:14;;;;;;;;;;;:::i;:::-;;;;;;;;36047:479;;;36448:62;;;;;;;;;;:::i;:::-;;;;;;;;36047:479;36185:43;;;36173:55;;;:8;:55;;;;36169:154;;36253:50;;;;;;;;;;:::i;:::-;;;;;;;;36169:154;36124:214;36011:526;35800:744;;;;;;:::o;10139:326::-;10199:4;10456:1;10434:7;:19;;;:23;10427:30;;10139:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:1241::-;4852:6;4860;4868;4876;4884;4933:3;4921:9;4912:7;4908:23;4904:33;4901:2;;;4950:1;4947;4940:12;4901:2;4993:1;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4964:117;5120:2;5146:53;5191:7;5182:6;5171:9;5167:22;5146:53;:::i;:::-;5136:63;;5091:118;5276:2;5265:9;5261:18;5248:32;5307:18;5299:6;5296:30;5293:2;;;5339:1;5336;5329:12;5293:2;5367:78;5437:7;5428:6;5417:9;5413:22;5367:78;:::i;:::-;5357:88;;5219:236;5522:2;5511:9;5507:18;5494:32;5553:18;5545:6;5542:30;5539:2;;;5585:1;5582;5575:12;5539:2;5613:78;5683:7;5674:6;5663:9;5659:22;5613:78;:::i;:::-;5603:88;;5465:236;5768:3;5757:9;5753:19;5740:33;5800:18;5792:6;5789:30;5786:2;;;5832:1;5829;5822:12;5786:2;5860:62;5914:7;5905:6;5894:9;5890:22;5860:62;:::i;:::-;5850:72;;5711:221;4891:1048;;;;;;;;:::o;5945:955::-;6049:6;6057;6065;6073;6081;6130:3;6118:9;6109:7;6105:23;6101:33;6098:2;;;6147:1;6144;6137:12;6098:2;6190:1;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6161:117;6317:2;6343:53;6388:7;6379:6;6368:9;6364:22;6343:53;:::i;:::-;6333:63;;6288:118;6445:2;6471:53;6516:7;6507:6;6496:9;6492:22;6471:53;:::i;:::-;6461:63;;6416:118;6573:2;6599:53;6644:7;6635:6;6624:9;6620:22;6599:53;:::i;:::-;6589:63;;6544:118;6729:3;6718:9;6714:19;6701:33;6761:18;6753:6;6750:30;6747:2;;;6793:1;6790;6783:12;6747:2;6821:62;6875:7;6866:6;6855:9;6851:22;6821:62;:::i;:::-;6811:72;;6672:221;6088:812;;;;;;;;:::o;6906:401::-;6971:6;6979;7028:2;7016:9;7007:7;7003:23;6999:32;6996:2;;;7044:1;7041;7034:12;6996:2;7087:1;7112:53;7157:7;7148:6;7137:9;7133:22;7112:53;:::i;:::-;7102:63;;7058:117;7214:2;7240:50;7282:7;7273:6;7262:9;7258:22;7240:50;:::i;:::-;7230:60;;7185:115;6986:321;;;;;:::o;7313:407::-;7381:6;7389;7438:2;7426:9;7417:7;7413:23;7409:32;7406:2;;;7454:1;7451;7444:12;7406:2;7497:1;7522:53;7567:7;7558:6;7547:9;7543:22;7522:53;:::i;:::-;7512:63;;7468:117;7624:2;7650:53;7695:7;7686:6;7675:9;7671:22;7650:53;:::i;:::-;7640:63;;7595:118;7396:324;;;;;:::o;7726:1095::-;7871:6;7879;7887;7895;7944:3;7932:9;7923:7;7919:23;7915:33;7912:2;;;7961:1;7958;7951:12;7912:2;8032:1;8021:9;8017:17;8004:31;8062:18;8054:6;8051:30;8048:2;;;8094:1;8091;8084:12;8048:2;8122:78;8192:7;8183:6;8172:9;8168:22;8122:78;:::i;:::-;8112:88;;7975:235;8277:2;8266:9;8262:18;8249:32;8308:18;8300:6;8297:30;8294:2;;;8340:1;8337;8330:12;8294:2;8368:78;8438:7;8429:6;8418:9;8414:22;8368:78;:::i;:::-;8358:88;;8220:236;8495:2;8521:53;8566:7;8557:6;8546:9;8542:22;8521:53;:::i;:::-;8511:63;;8466:118;8651:2;8640:9;8636:18;8623:32;8682:18;8674:6;8671:30;8668:2;;;8714:1;8711;8704:12;8668:2;8742:62;8796:7;8787:6;8776:9;8772:22;8742:62;:::i;:::-;8732:72;;8594:220;7902:919;;;;;;;:::o;8827:693::-;8945:6;8953;9002:2;8990:9;8981:7;8977:23;8973:32;8970:2;;;9018:1;9015;9008:12;8970:2;9089:1;9078:9;9074:17;9061:31;9119:18;9111:6;9108:30;9105:2;;;9151:1;9148;9141:12;9105:2;9179:78;9249:7;9240:6;9229:9;9225:22;9179:78;:::i;:::-;9169:88;;9032:235;9334:2;9323:9;9319:18;9306:32;9365:18;9357:6;9354:30;9351:2;;;9397:1;9394;9387:12;9351:2;9425:78;9495:7;9486:6;9475:9;9471:22;9425:78;:::i;:::-;9415:88;;9277:236;8960:560;;;;;:::o;9526:806::-;9637:6;9645;9653;9702:2;9690:9;9681:7;9677:23;9673:32;9670:2;;;9718:1;9715;9708:12;9670:2;9789:1;9778:9;9774:17;9761:31;9819:18;9811:6;9808:30;9805:2;;;9851:1;9848;9841:12;9805:2;9879:78;9949:7;9940:6;9929:9;9925:22;9879:78;:::i;:::-;9869:88;;9732:235;10006:2;10032:53;10077:7;10068:6;10057:9;10053:22;10032:53;:::i;:::-;10022:63;;9977:118;10162:2;10151:9;10147:18;10134:32;10193:18;10185:6;10182:30;10179:2;;;10225:1;10222;10215:12;10179:2;10253:62;10307:7;10298:6;10287:9;10283:22;10253:62;:::i;:::-;10243:72;;10105:220;9660:672;;;;;:::o;10338:952::-;10458:6;10466;10474;10482;10531:3;10519:9;10510:7;10506:23;10502:33;10499:2;;;10548:1;10545;10538:12;10499:2;10619:1;10608:9;10604:17;10591:31;10649:18;10641:6;10638:30;10635:2;;;10681:1;10678;10671:12;10635:2;10709:78;10779:7;10770:6;10759:9;10755:22;10709:78;:::i;:::-;10699:88;;10562:235;10836:2;10862:53;10907:7;10898:6;10887:9;10883:22;10862:53;:::i;:::-;10852:63;;10807:118;10964:2;10990:53;11035:7;11026:6;11015:9;11011:22;10990:53;:::i;:::-;10980:63;;10935:118;11120:2;11109:9;11105:18;11092:32;11151:18;11143:6;11140:30;11137:2;;;11183:1;11180;11173:12;11137:2;11211:62;11265:7;11256:6;11245:9;11241:22;11211:62;:::i;:::-;11201:72;;11063:220;10489:801;;;;;;;:::o;11296:260::-;11354:6;11403:2;11391:9;11382:7;11378:23;11374:32;11371:2;;;11419:1;11416;11409:12;11371:2;11462:1;11487:52;11531:7;11522:6;11511:9;11507:22;11487:52;:::i;:::-;11477:62;;11433:116;11361:195;;;;:::o;11562:282::-;11631:6;11680:2;11668:9;11659:7;11655:23;11651:32;11648:2;;;11696:1;11693;11686:12;11648:2;11739:1;11764:63;11819:7;11810:6;11799:9;11795:22;11764:63;:::i;:::-;11754:73;;11710:127;11638:206;;;;:::o;11850:375::-;11919:6;11968:2;11956:9;11947:7;11943:23;11939:32;11936:2;;;11984:1;11981;11974:12;11936:2;12055:1;12044:9;12040:17;12027:31;12085:18;12077:6;12074:30;12071:2;;;12117:1;12114;12107:12;12071:2;12145:63;12200:7;12191:6;12180:9;12176:22;12145:63;:::i;:::-;12135:73;;11998:220;11926:299;;;;:::o;12231:262::-;12290:6;12339:2;12327:9;12318:7;12314:23;12310:32;12307:2;;;12355:1;12352;12345:12;12307:2;12398:1;12423:53;12468:7;12459:6;12448:9;12444:22;12423:53;:::i;:::-;12413:63;;12369:117;12297:196;;;;:::o;12499:179::-;12568:10;12589:46;12631:3;12623:6;12589:46;:::i;:::-;12667:4;12662:3;12658:14;12644:28;;12579:99;;;;:::o;12684:118::-;12771:24;12789:5;12771:24;:::i;:::-;12766:3;12759:37;12749:53;;:::o;12838:732::-;12957:3;12986:54;13034:5;12986:54;:::i;:::-;13056:86;13135:6;13130:3;13056:86;:::i;:::-;13049:93;;13166:56;13216:5;13166:56;:::i;:::-;13245:7;13276:1;13261:284;13286:6;13283:1;13280:13;13261:284;;;13362:6;13356:13;13389:63;13448:3;13433:13;13389:63;:::i;:::-;13382:70;;13475:60;13528:6;13475:60;:::i;:::-;13465:70;;13321:224;13308:1;13305;13301:9;13296:14;;13261:284;;;13265:14;13561:3;13554:10;;12962:608;;;;;;;:::o;13576:109::-;13657:21;13672:5;13657:21;:::i;:::-;13652:3;13645:34;13635:50;;:::o;13691:360::-;13777:3;13805:38;13837:5;13805:38;:::i;:::-;13859:70;13922:6;13917:3;13859:70;:::i;:::-;13852:77;;13938:52;13983:6;13978:3;13971:4;13964:5;13960:16;13938:52;:::i;:::-;14015:29;14037:6;14015:29;:::i;:::-;14010:3;14006:39;13999:46;;13781:270;;;;;:::o;14057:364::-;14145:3;14173:39;14206:5;14173:39;:::i;:::-;14228:71;14292:6;14287:3;14228:71;:::i;:::-;14221:78;;14308:52;14353:6;14348:3;14341:4;14334:5;14330:16;14308:52;:::i;:::-;14385:29;14407:6;14385:29;:::i;:::-;14380:3;14376:39;14369:46;;14149:272;;;;;:::o;14427:366::-;14569:3;14590:67;14654:2;14649:3;14590:67;:::i;:::-;14583:74;;14666:93;14755:3;14666:93;:::i;:::-;14784:2;14779:3;14775:12;14768:19;;14573:220;;;:::o;14799:366::-;14941:3;14962:67;15026:2;15021:3;14962:67;:::i;:::-;14955:74;;15038:93;15127:3;15038:93;:::i;:::-;15156:2;15151:3;15147:12;15140:19;;14945:220;;;:::o;15171:366::-;15313:3;15334:67;15398:2;15393:3;15334:67;:::i;:::-;15327:74;;15410:93;15499:3;15410:93;:::i;:::-;15528:2;15523:3;15519:12;15512:19;;15317:220;;;:::o;15543:366::-;15685:3;15706:67;15770:2;15765:3;15706:67;:::i;:::-;15699:74;;15782:93;15871:3;15782:93;:::i;:::-;15900:2;15895:3;15891:12;15884:19;;15689:220;;;:::o;15915:366::-;16057:3;16078:67;16142:2;16137:3;16078:67;:::i;:::-;16071:74;;16154:93;16243:3;16154:93;:::i;:::-;16272:2;16267:3;16263:12;16256:19;;16061:220;;;:::o;16287:366::-;16429:3;16450:67;16514:2;16509:3;16450:67;:::i;:::-;16443:74;;16526:93;16615:3;16526:93;:::i;:::-;16644:2;16639:3;16635:12;16628:19;;16433:220;;;:::o;16659:366::-;16801:3;16822:67;16886:2;16881:3;16822:67;:::i;:::-;16815:74;;16898:93;16987:3;16898:93;:::i;:::-;17016:2;17011:3;17007:12;17000:19;;16805:220;;;:::o;17031:366::-;17173:3;17194:67;17258:2;17253:3;17194:67;:::i;:::-;17187:74;;17270:93;17359:3;17270:93;:::i;:::-;17388:2;17383:3;17379:12;17372:19;;17177:220;;;:::o;17403:366::-;17545:3;17566:67;17630:2;17625:3;17566:67;:::i;:::-;17559:74;;17642:93;17731:3;17642:93;:::i;:::-;17760:2;17755:3;17751:12;17744:19;;17549:220;;;:::o;17775:366::-;17917:3;17938:67;18002:2;17997:3;17938:67;:::i;:::-;17931:74;;18014:93;18103:3;18014:93;:::i;:::-;18132:2;18127:3;18123:12;18116:19;;17921:220;;;:::o;18147:366::-;18289:3;18310:67;18374:2;18369:3;18310:67;:::i;:::-;18303:74;;18386:93;18475:3;18386:93;:::i;:::-;18504:2;18499:3;18495:12;18488:19;;18293:220;;;:::o;18519:366::-;18661:3;18682:67;18746:2;18741:3;18682:67;:::i;:::-;18675:74;;18758:93;18847:3;18758:93;:::i;:::-;18876:2;18871:3;18867:12;18860:19;;18665:220;;;:::o;18891:366::-;19033:3;19054:67;19118:2;19113:3;19054:67;:::i;:::-;19047:74;;19130:93;19219:3;19130:93;:::i;:::-;19248:2;19243:3;19239:12;19232:19;;19037:220;;;:::o;19263:108::-;19340:24;19358:5;19340:24;:::i;:::-;19335:3;19328:37;19318:53;;:::o;19377:118::-;19464:24;19482:5;19464:24;:::i;:::-;19459:3;19452:37;19442:53;;:::o;19501:222::-;19594:4;19632:2;19621:9;19617:18;19609:26;;19645:71;19713:1;19702:9;19698:17;19689:6;19645:71;:::i;:::-;19599:124;;;;:::o;19729:1053::-;20052:4;20090:3;20079:9;20075:19;20067:27;;20104:71;20172:1;20161:9;20157:17;20148:6;20104:71;:::i;:::-;20185:72;20253:2;20242:9;20238:18;20229:6;20185:72;:::i;:::-;20304:9;20298:4;20294:20;20289:2;20278:9;20274:18;20267:48;20332:108;20435:4;20426:6;20332:108;:::i;:::-;20324:116;;20487:9;20481:4;20477:20;20472:2;20461:9;20457:18;20450:48;20515:108;20618:4;20609:6;20515:108;:::i;:::-;20507:116;;20671:9;20665:4;20661:20;20655:3;20644:9;20640:19;20633:49;20699:76;20770:4;20761:6;20699:76;:::i;:::-;20691:84;;20057:725;;;;;;;;:::o;20788:751::-;21011:4;21049:3;21038:9;21034:19;21026:27;;21063:71;21131:1;21120:9;21116:17;21107:6;21063:71;:::i;:::-;21144:72;21212:2;21201:9;21197:18;21188:6;21144:72;:::i;:::-;21226;21294:2;21283:9;21279:18;21270:6;21226:72;:::i;:::-;21308;21376:2;21365:9;21361:18;21352:6;21308:72;:::i;:::-;21428:9;21422:4;21418:20;21412:3;21401:9;21397:19;21390:49;21456:76;21527:4;21518:6;21456:76;:::i;:::-;21448:84;;21016:523;;;;;;;;:::o;21545:373::-;21688:4;21726:2;21715:9;21711:18;21703:26;;21775:9;21769:4;21765:20;21761:1;21750:9;21746:17;21739:47;21803:108;21906:4;21897:6;21803:108;:::i;:::-;21795:116;;21693:225;;;;:::o;21924:634::-;22145:4;22183:2;22172:9;22168:18;22160:26;;22232:9;22226:4;22222:20;22218:1;22207:9;22203:17;22196:47;22260:108;22363:4;22354:6;22260:108;:::i;:::-;22252:116;;22415:9;22409:4;22405:20;22400:2;22389:9;22385:18;22378:48;22443:108;22546:4;22537:6;22443:108;:::i;:::-;22435:116;;22150:408;;;;;:::o;22564:210::-;22651:4;22689:2;22678:9;22674:18;22666:26;;22702:65;22764:1;22753:9;22749:17;22740:6;22702:65;:::i;:::-;22656:118;;;;:::o;22780:313::-;22893:4;22931:2;22920:9;22916:18;22908:26;;22980:9;22974:4;22970:20;22966:1;22955:9;22951:17;22944:47;23008:78;23081:4;23072:6;23008:78;:::i;:::-;23000:86;;22898:195;;;;:::o;23099:419::-;23265:4;23303:2;23292:9;23288:18;23280:26;;23352:9;23346:4;23342:20;23338:1;23327:9;23323:17;23316:47;23380:131;23506:4;23380:131;:::i;:::-;23372:139;;23270:248;;;:::o;23524:419::-;23690:4;23728:2;23717:9;23713:18;23705:26;;23777:9;23771:4;23767:20;23763:1;23752:9;23748:17;23741:47;23805:131;23931:4;23805:131;:::i;:::-;23797:139;;23695:248;;;:::o;23949:419::-;24115:4;24153:2;24142:9;24138:18;24130:26;;24202:9;24196:4;24192:20;24188:1;24177:9;24173:17;24166:47;24230:131;24356:4;24230:131;:::i;:::-;24222:139;;24120:248;;;:::o;24374:419::-;24540:4;24578:2;24567:9;24563:18;24555:26;;24627:9;24621:4;24617:20;24613:1;24602:9;24598:17;24591:47;24655:131;24781:4;24655:131;:::i;:::-;24647:139;;24545:248;;;:::o;24799:419::-;24965:4;25003:2;24992:9;24988:18;24980:26;;25052:9;25046:4;25042:20;25038:1;25027:9;25023:17;25016:47;25080:131;25206:4;25080:131;:::i;:::-;25072:139;;24970:248;;;:::o;25224:419::-;25390:4;25428:2;25417:9;25413:18;25405:26;;25477:9;25471:4;25467:20;25463:1;25452:9;25448:17;25441:47;25505:131;25631:4;25505:131;:::i;:::-;25497:139;;25395:248;;;:::o;25649:419::-;25815:4;25853:2;25842:9;25838:18;25830:26;;25902:9;25896:4;25892:20;25888:1;25877:9;25873:17;25866:47;25930:131;26056:4;25930:131;:::i;:::-;25922:139;;25820:248;;;:::o;26074:419::-;26240:4;26278:2;26267:9;26263:18;26255:26;;26327:9;26321:4;26317:20;26313:1;26302:9;26298:17;26291:47;26355:131;26481:4;26355:131;:::i;:::-;26347:139;;26245:248;;;:::o;26499:419::-;26665:4;26703:2;26692:9;26688:18;26680:26;;26752:9;26746:4;26742:20;26738:1;26727:9;26723:17;26716:47;26780:131;26906:4;26780:131;:::i;:::-;26772:139;;26670:248;;;:::o;26924:419::-;27090:4;27128:2;27117:9;27113:18;27105:26;;27177:9;27171:4;27167:20;27163:1;27152:9;27148:17;27141:47;27205:131;27331:4;27205:131;:::i;:::-;27197:139;;27095:248;;;:::o;27349:419::-;27515:4;27553:2;27542:9;27538:18;27530:26;;27602:9;27596:4;27592:20;27588:1;27577:9;27573:17;27566:47;27630:131;27756:4;27630:131;:::i;:::-;27622:139;;27520:248;;;:::o;27774:419::-;27940:4;27978:2;27967:9;27963:18;27955:26;;28027:9;28021:4;28017:20;28013:1;28002:9;27998:17;27991:47;28055:131;28181:4;28055:131;:::i;:::-;28047:139;;27945:248;;;:::o;28199:419::-;28365:4;28403:2;28392:9;28388:18;28380:26;;28452:9;28446:4;28442:20;28438:1;28427:9;28423:17;28416:47;28480:131;28606:4;28480:131;:::i;:::-;28472:139;;28370:248;;;:::o;28624:222::-;28717:4;28755:2;28744:9;28740:18;28732:26;;28768:71;28836:1;28825:9;28821:17;28812:6;28768:71;:::i;:::-;28722:124;;;;:::o;28852:332::-;28973:4;29011:2;29000:9;28996:18;28988:26;;29024:71;29092:1;29081:9;29077:17;29068:6;29024:71;:::i;:::-;29105:72;29173:2;29162:9;29158:18;29149:6;29105:72;:::i;:::-;28978:206;;;;;:::o;29190:129::-;29224:6;29251:20;;:::i;:::-;29241:30;;29280:33;29308:4;29300:6;29280:33;:::i;:::-;29231:88;;;:::o;29325:75::-;29358:6;29391:2;29385:9;29375:19;;29365:35;:::o;29406:311::-;29483:4;29573:18;29565:6;29562:30;29559:2;;;29595:18;;:::i;:::-;29559:2;29645:4;29637:6;29633:17;29625:25;;29705:4;29699;29695:15;29687:23;;29488:229;;;:::o;29723:311::-;29800:4;29890:18;29882:6;29879:30;29876:2;;;29912:18;;:::i;:::-;29876:2;29962:4;29954:6;29950:17;29942:25;;30022:4;30016;30012:15;30004:23;;29805:229;;;:::o;30040:307::-;30101:4;30191:18;30183:6;30180:30;30177:2;;;30213:18;;:::i;:::-;30177:2;30251:29;30273:6;30251:29;:::i;:::-;30243:37;;30335:4;30329;30325:15;30317:23;;30106:241;;;:::o;30353:308::-;30415:4;30505:18;30497:6;30494:30;30491:2;;;30527:18;;:::i;:::-;30491:2;30565:29;30587:6;30565:29;:::i;:::-;30557:37;;30649:4;30643;30639:15;30631:23;;30420:241;;;:::o;30667:132::-;30734:4;30757:3;30749:11;;30787:4;30782:3;30778:14;30770:22;;30739:60;;;:::o;30805:114::-;30872:6;30906:5;30900:12;30890:22;;30879:40;;;:::o;30925:98::-;30976:6;31010:5;31004:12;30994:22;;30983:40;;;:::o;31029:99::-;31081:6;31115:5;31109:12;31099:22;;31088:40;;;:::o;31134:113::-;31204:4;31236;31231:3;31227:14;31219:22;;31209:38;;;:::o;31253:184::-;31352:11;31386:6;31381:3;31374:19;31426:4;31421:3;31417:14;31402:29;;31364:73;;;;:::o;31443:168::-;31526:11;31560:6;31555:3;31548:19;31600:4;31595:3;31591:14;31576:29;;31538:73;;;;:::o;31617:169::-;31701:11;31735:6;31730:3;31723:19;31775:4;31770:3;31766:14;31751:29;;31713:73;;;;:::o;31792:305::-;31832:3;31851:20;31869:1;31851:20;:::i;:::-;31846:25;;31885:20;31903:1;31885:20;:::i;:::-;31880:25;;32039:1;31971:66;31967:74;31964:1;31961:81;31958:2;;;32045:18;;:::i;:::-;31958:2;32089:1;32086;32082:9;32075:16;;31836:261;;;;:::o;32103:96::-;32140:7;32169:24;32187:5;32169:24;:::i;:::-;32158:35;;32148:51;;;:::o;32205:90::-;32239:7;32282:5;32275:13;32268:21;32257:32;;32247:48;;;:::o;32301:149::-;32337:7;32377:66;32370:5;32366:78;32355:89;;32345:105;;;:::o;32456:126::-;32493:7;32533:42;32526:5;32522:54;32511:65;;32501:81;;;:::o;32588:77::-;32625:7;32654:5;32643:16;;32633:32;;;:::o;32671:154::-;32755:6;32750:3;32745;32732:30;32817:1;32808:6;32803:3;32799:16;32792:27;32722:103;;;:::o;32831:307::-;32899:1;32909:113;32923:6;32920:1;32917:13;32909:113;;;33008:1;33003:3;32999:11;32993:18;32989:1;32984:3;32980:11;32973:39;32945:2;32942:1;32938:10;32933:15;;32909:113;;;33040:6;33037:1;33034:13;33031:2;;;33120:1;33111:6;33106:3;33102:16;33095:27;33031:2;32880:258;;;;:::o;33144:320::-;33188:6;33225:1;33219:4;33215:12;33205:22;;33272:1;33266:4;33262:12;33293:18;33283:2;;33349:4;33341:6;33337:17;33327:27;;33283:2;33411;33403:6;33400:14;33380:18;33377:38;33374:2;;;33430:18;;:::i;:::-;33374:2;33195:269;;;;:::o;33470:281::-;33553:27;33575:4;33553:27;:::i;:::-;33545:6;33541:40;33683:6;33671:10;33668:22;33647:18;33635:10;33632:34;33629:62;33626:2;;;33694:18;;:::i;:::-;33626:2;33734:10;33730:2;33723:22;33513:238;;;:::o;33757:233::-;33796:3;33819:24;33837:5;33819:24;:::i;:::-;33810:33;;33865:66;33858:5;33855:77;33852:2;;;33935:18;;:::i;:::-;33852:2;33982:1;33975:5;33971:13;33964:20;;33800:190;;;:::o;33996:180::-;34044:77;34041:1;34034:88;34141:4;34138:1;34131:15;34165:4;34162:1;34155:15;34182:180;34230:77;34227:1;34220:88;34327:4;34324:1;34317:15;34351:4;34348:1;34341:15;34368:180;34416:77;34413:1;34406:88;34513:4;34510:1;34503:15;34537:4;34534:1;34527:15;34554:183;34589:3;34627:1;34609:16;34606:23;34603:2;;;34665:1;34662;34659;34644:23;34687:34;34718:1;34712:8;34687:34;:::i;:::-;34680:41;;34603:2;34593:144;:::o;34743:102::-;34784:6;34835:2;34831:7;34826:2;34819:5;34815:14;34811:28;34801:38;;34791:54;;;:::o;34851:106::-;34895:8;34944:5;34939:3;34935:15;34914:36;;34904:53;;;:::o;34963:239::-;35103:34;35099:1;35091:6;35087:14;35080:58;35172:22;35167:2;35159:6;35155:15;35148:47;35069:133;:::o;35208:227::-;35348:34;35344:1;35336:6;35332:14;35325:58;35417:10;35412:2;35404:6;35400:15;35393:35;35314:121;:::o;35441:230::-;35581:34;35577:1;35569:6;35565:14;35558:58;35650:13;35645:2;35637:6;35633:15;35626:38;35547:124;:::o;35677:225::-;35817:34;35813:1;35805:6;35801:14;35794:58;35886:8;35881:2;35873:6;35869:15;35862:33;35783:119;:::o;35908:228::-;36048:34;36044:1;36036:6;36032:14;36025:58;36117:11;36112:2;36104:6;36100:15;36093:36;36014:122;:::o;36142:224::-;36282:34;36278:1;36270:6;36266:14;36259:58;36351:7;36346:2;36338:6;36334:15;36327:32;36248:118;:::o;36372:237::-;36512:34;36508:1;36500:6;36496:14;36489:58;36581:20;36576:2;36568:6;36564:15;36557:45;36478:131;:::o;36615:229::-;36755:34;36751:1;36743:6;36739:14;36732:58;36824:12;36819:2;36811:6;36807:15;36800:37;36721:123;:::o;36850:182::-;36990:34;36986:1;36978:6;36974:14;36967:58;36956:76;:::o;37038:228::-;37178:34;37174:1;37166:6;37162:14;37155:58;37247:11;37242:2;37234:6;37230:15;37223:36;37144:122;:::o;37272:228::-;37412:34;37408:1;37400:6;37396:14;37389:58;37481:11;37476:2;37468:6;37464:15;37457:36;37378:122;:::o;37506:227::-;37646:34;37642:1;37634:6;37630:14;37623:58;37715:10;37710:2;37702:6;37698:15;37691:35;37612:121;:::o;37739:220::-;37879:34;37875:1;37867:6;37863:14;37856:58;37948:3;37943:2;37935:6;37931:15;37924:28;37845:114;:::o;37965:711::-;38004:3;38042:4;38024:16;38021:26;38018:2;;;38050:5;;38018:2;38079:20;;:::i;:::-;38154:1;38136:16;38132:24;38129:1;38123:4;38108:49;38187:4;38181:11;38286:16;38279:4;38271:6;38267:17;38264:39;38231:18;38223:6;38220:30;38204:113;38201:2;;;38332:5;;;;38201:2;38378:6;38372:4;38368:17;38414:3;38408:10;38441:18;38433:6;38430:30;38427:2;;;38463:5;;;;;;38427:2;38511:6;38504:4;38499:3;38495:14;38491:27;38570:1;38552:16;38548:24;38542:4;38538:35;38533:3;38530:44;38527:2;;;38577:5;;;;;;;38527:2;38594:57;38642:6;38636:4;38632:17;38624:6;38620:30;38614:4;38594:57;:::i;:::-;38667:3;38660:10;;38008:668;;;;;;;:::o;38682:122::-;38755:24;38773:5;38755:24;:::i;:::-;38748:5;38745:35;38735:2;;38794:1;38791;38784:12;38735:2;38725:79;:::o;38810:116::-;38880:21;38895:5;38880:21;:::i;:::-;38873:5;38870:32;38860:2;;38916:1;38913;38906:12;38860:2;38850:76;:::o;38932:120::-;39004:23;39021:5;39004:23;:::i;:::-;38997:5;38994:34;38984:2;;39042:1;39039;39032:12;38984:2;38974:78;:::o;39058:122::-;39131:24;39149:5;39131:24;:::i;:::-;39124:5;39121:35;39111:2;;39170:1;39167;39160:12;39111:2;39101:79;:::o
Swarm Source
ipfs://ee027f3a7a5fe9313cfae2c1c06a41231d8205176a99079d03bc187ca6adfcfa
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.