ERC-1155
Overview
Max Total Supply
1,179,884 PPLL
Holders
88
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
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
PEPELLARS
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; library MerkleProof { function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { computedHash = _efficientHash(computedHash, proofElement); } else { computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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); } } // File: @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); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } } // File: contracts/IncubateX.sol pragma solidity ^0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns(bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns(uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns(uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns(uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns(uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns(uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns(uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns(uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns(uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } contract PEPELLARS is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply { using Strings for uint256; using SafeMath for uint256; string public constant name = "Pepellars"; string public constant symbol = "PPLL"; string baseURI = ""; uint256 public MAX_SUPPLY = 1000000; uint256 public publicSaleLimit = 1000000; uint256 public walletLimit = 50000; address public deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 public price = .00018 ether; uint256 public wlEndTime; uint256 public publicEndTime; uint256 public constant PEPELLAR = 1; uint256 public constant mPEPELLAR = 2; bool public paused = true; bool public publicMintActive = false; bytes32 private merkleRoot; enum Packs { HUNDRED, THOUSAND } constructor(string memory _uri) ERC1155("") { baseURI = _uri; } function setURIs(string memory _newuri) public onlyOwner { baseURI = _newuri; } function uri(uint256 tokenId) public view override returns (string memory) { return ( string( abi.encodePacked(baseURI, Strings.toString(tokenId), ".json") ) ); } function getMerkleRoot() private view returns (bytes32) { return (merkleRoot); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function whitelistMint(bytes32[] calldata merkleproof, uint256 amount) external payable { require(!paused, "contract is paused"); require(block.timestamp < wlEndTime, "Whitelist mint has already ended"); require( isValid(merkleproof, keccak256(abi.encodePacked(msg.sender))), "Not approved. Contact support." ); require(balanceOf(msg.sender, PEPELLAR) + amount <= walletLimit, "Requested amount exceeds wallet limit"); require(msg.value >= price * amount, "Insufficient value sent"); _mint(msg.sender, PEPELLAR, amount, ""); _mint(msg.sender, mPEPELLAR, amount, ""); /* if(_pack == Packs.THOUSAND){ require(balanceOf(msg.sender, PEPELLAR) + 1000 <= walletLimit, "Requested amount exceeds wallet limit"); require(totalSupply(PEPELLAR) + 1000 <= publicSaleLimit, "Requested amount exceeds public sale limit"); require(msg.value >= price * 1000, "Insufficient value sent for thousand pack"); _mint(msg.sender, PEPELLAR, 1000, ""); _mint(msg.sender, mPEPELLAR, 1000, ""); } else { require(balanceOf(msg.sender, PEPELLAR) + 100 <= walletLimit, "Requested amount exceeds wallet limit"); require(totalSupply(PEPELLAR) + 100 <= publicSaleLimit, "Requested amount exceeds public sale limit"); require(msg.value >= price * 100, "Insufficient value sent for hundred pack"); _mint(msg.sender, PEPELLAR, 100, ""); }*/ } function isValid(bytes32[] memory merkleproof, bytes32 leaf) public view returns (bool) { return MerkleProof.verify(merkleproof, merkleRoot, leaf); } function mint(uint256 amount) public payable { require(!paused, "contract is paused"); require(publicMintActive, "public mint has not begun"); require(block.timestamp < publicEndTime, "Public mint has already ended"); require(balanceOf(msg.sender, PEPELLAR) + amount <= walletLimit, "Requested amount exceeds wallet limit"); require(msg.value >= price * amount, "Insufficient value sent"); _mint(msg.sender, PEPELLAR, amount, ""); _mint(msg.sender, mPEPELLAR, amount, ""); /* if(_pack == Packs.THOUSAND){ require(balanceOf(msg.sender, PEPELLAR) + 1000 <= walletLimit, "Requested amount exceeds wallet limit"); require(msg.value >= price * 1000, "Insufficient value sent for thousand pack"); _mint(msg.sender, PEPELLAR, 1000, ""); _mint(msg.sender, mPEPELLAR, 1000, ""); } else { require(balanceOf(msg.sender, PEPELLAR) + 100 <= walletLimit, "Requested amount exceeds wallet limit"); require(msg.value >= price * 100, "Insufficient value sent for hundred pack"); _mint(msg.sender, PEPELLAR, 100, ""); }*/ } function startWhitelistPhase() external onlyOwner { paused = false; wlEndTime = block.timestamp + 172800; //2 days } function startPublicPhase() external onlyOwner { if(paused){ paused = false; } publicMintActive = true; publicEndTime = block.timestamp + 1728000; //20 days } function setPrice(uint256 _newPrice) external onlyOwner{ price = _newPrice; } function setWalletLimit(uint256 _newLimit) external onlyOwner{ walletLimit = _newLimit; } function pause(bool _state) external onlyOwner { paused = _state; } function setMerkleRoot(bytes32 _root) external onlyOwner{ merkleRoot = _root; } function emergencyWithdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } function airdrop(address beneficiary, uint256 tokenId, uint256 quantity) external onlyOwner{ require(totalSupply(PEPELLAR) + quantity <= MAX_SUPPLY, "Max supply of Pepellar exceeded"); _mint(beneficiary, tokenId, quantity, ""); } function finalBurn() external onlyOwner { require(block.timestamp > publicEndTime, "Public mint has not ended"); require(publicSaleLimit > totalSupply(PEPELLAR), "No Pepellar to burn"); uint256 remainder = publicSaleLimit - totalSupply(PEPELLAR); _mint(deadAddress, PEPELLAR, remainder, ""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEPELLAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalBurn","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":"bytes32[]","name":"merkleproof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mPEPELLAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newuri","type":"string"}],"name":"setURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startWhitelistPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052600060809081526005906200001a9082620001ce565b50620f4240600681905560075561c350600855600980546001600160a01b03191661dead17905565a3b5840f4000600a55600d805461ffff191660011790553480156200006657600080fd5b50604051620033253803806200332583398101604081905262000089916200029a565b604080516020810190915260008152620000a381620000c5565b50620000af33620000d7565b6005620000bd8282620001ce565b50506200036f565b6002620000d38282620001ce565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200015457607f821691505b6020821081036200017557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c957600081815260208120601f850160051c81016020861015620001a45750805b601f850160051c820191505b81811015620001c557828155600101620001b0565b5050505b505050565b81516001600160401b03811115620001ea57620001ea62000129565b6200020281620001fb84546200013f565b846200017b565b602080601f8311600181146200023a5760008415620002215750858301515b600019600386901b1c1916600185901b178555620001c5565b600085815260208120601f198616915b828110156200026b578886015182559484019460019091019084016200024a565b50858210156200028a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808385031215620002ae57600080fd5b82516001600160401b0380821115620002c657600080fd5b818501915085601f830112620002db57600080fd5b815181811115620002f057620002f062000129565b604051601f8201601f19908116603f011681019083821181831017156200031b576200031b62000129565b8160405282815288868487010111156200033457600080fd5b600093505b8284101562000358578484018601518185018701529285019262000339565b600086848301015280965050505050505092915050565b612fa6806200037f6000396000f3fe6080604052600436106102455760003560e01c80637cb6475911610139578063b8a20ed0116100b6578063e1bc29671161007a578063e1bc296714610696578063e985e9c5146106b6578063f1d5f517146106ff578063f242432a1461071f578063f2fde38b1461073f578063f5298aca1461075f57600080fd5b8063b8a20ed01461060a578063bd85b0391461062a578063d4bf5cc314610657578063db2e21bc1461066c578063deaf33b21461068157600080fd5b8063a0712d68116100fd578063a0712d681461058e578063a22cb465146105a1578063a5775a8d146105c1578063b67c25a3146105d6578063b717cc09146105f557600080fd5b80637cb64759146104ea5780638da5cb5b1461050a57806391b7f5ed1461052857806395d89b4114610548578063a035b1fe1461057857600080fd5b806332cb6b0c116101c75780635c975abb1161018b5780635c975abb146104705780636b20c4541461048a5780636e3de87c146104aa578063715018a6146104c057806374cd2aa5146104d557600080fd5b806332cb6b0c146103d25780633c8463a1146103e857806347a54148146103fe5780634e1273f4146104145780634f558e791461044157600080fd5b806327c8f8351161020e57806327c8f835146103315780632904e6d9146103695780632c27e5811461037c5780632eb2c2d6146103925780633031fa1a146103b257600080fd5b8062fdd58e1461024a57806301ffc9a71461027d57806302329a29146102ad57806306fdde03146102cf5780630e89341c14610311575b600080fd5b34801561025657600080fd5b5061026a6102653660046121db565b61077f565b6040519081526020015b60405180910390f35b34801561028957600080fd5b5061029d61029836600461221b565b610819565b6040519015158152602001610274565b3480156102b957600080fd5b506102cd6102c8366004612248565b610869565b005b3480156102db57600080fd5b5061030460405180604001604052806009815260200168506570656c6c61727360b81b81525081565b60405161027491906122b3565b34801561031d57600080fd5b5061030461032c3660046122c6565b6108a6565b34801561033d57600080fd5b50600954610351906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b6102cd6103773660046122df565b6108da565b34801561038857600080fd5b5061026a600c5481565b34801561039e57600080fd5b506102cd6103ad3660046124ac565b610b00565b3480156103be57600080fd5b506102cd6103cd366004612555565b610b97565b3480156103de57600080fd5b5061026a60065481565b3480156103f457600080fd5b5061026a60085481565b34801561040a57600080fd5b5061026a600b5481565b34801561042057600080fd5b5061043461042f36600461259d565b610bd1565b60405161027491906126a2565b34801561044d57600080fd5b5061029d61045c3660046122c6565b600090815260046020526040902054151590565b34801561047c57600080fd5b50600d5461029d9060ff1681565b34801561049657600080fd5b506102cd6104a53660046126b5565b610cfa565b3480156104b657600080fd5b5061026a60075481565b3480156104cc57600080fd5b506102cd610d3d565b3480156104e157600080fd5b506102cd610d73565b3480156104f657600080fd5b506102cd6105053660046122c6565b610ed1565b34801561051657600080fd5b506003546001600160a01b0316610351565b34801561053457600080fd5b506102cd6105433660046122c6565b610f00565b34801561055457600080fd5b50610304604051806040016040528060048152602001631414131360e21b81525081565b34801561058457600080fd5b5061026a600a5481565b6102cd61059c3660046122c6565b610f2f565b3480156105ad57600080fd5b506102cd6105bc366004612728565b6110e5565b3480156105cd57600080fd5b5061026a600181565b3480156105e257600080fd5b50600d5461029d90610100900460ff1681565b34801561060157600080fd5b506102cd6110f0565b34801561061657600080fd5b5061029d61062536600461275b565b611136565b34801561063657600080fd5b5061026a6106453660046122c6565b60009081526004602052604090205490565b34801561066357600080fd5b5061026a600281565b34801561067857600080fd5b506102cd61114c565b34801561068d57600080fd5b506102cd6111a2565b3480156106a257600080fd5b506102cd6106b13660046127fc565b611203565b3480156106c257600080fd5b5061029d6106d136600461282f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b506102cd61071a3660046122c6565b6112d0565b34801561072b57600080fd5b506102cd61073a366004612859565b6112ff565b34801561074b57600080fd5b506102cd61075a3660046128bd565b611386565b34801561076b57600080fd5b506102cd61077a3660046127fc565b61141e565b60006001600160a01b0383166107f05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061084a57506001600160e01b031982166303a24d0760e21b145b8061081357506301ffc9a760e01b6001600160e01b0319831614610813565b6003546001600160a01b031633146108935760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff1916911515919091179055565b606060056108b383611461565b6040516020016108c4929190612947565b6040516020818303038152906040529050919050565b600d5460ff16156109225760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600b5442106109735760405162461bcd60e51b815260206004820181905260248201527f57686974656c697374206d696e742068617320616c726561647920656e64656460448201526064016107e7565b6109e9838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040516bffffffffffffffffffffffff193360601b16602082015260340191506109ce9050565b60405160208183030381529060405280519060200120611136565b610a355760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617070726f7665642e20436f6e7461637420737570706f72742e000060448201526064016107e7565b60085481610a4433600161077f565b610a4e91906129f4565b1115610a6c5760405162461bcd60e51b81526004016107e790612a07565b80600a54610a7a9190612a4c565b341015610ac35760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b610adf3360018360405180602001604052806000815250611569565b610afb3360028360405180602001604052806000815250611569565b505050565b6001600160a01b038516331480610b1c5750610b1c85336106d1565b610b835760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107e7565b610b90858585858561168c565b5050505050565b6003546001600160a01b03163314610bc15760405162461bcd60e51b81526004016107e7906128d8565b6005610bcd8282612aa9565b5050565b60608151835114610c365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107e7565b600083516001600160401b03811115610c5157610c51612359565b604051908082528060200260200182016040528015610c7a578160200160208202803683370190505b50905060005b8451811015610cf257610cc5858281518110610c9e57610c9e612b68565b6020026020010151858381518110610cb857610cb8612b68565b602002602001015161077f565b828281518110610cd757610cd7612b68565b6020908102919091010152610ceb81612b7e565b9050610c80565b509392505050565b6001600160a01b038316331480610d165750610d1683336106d1565b610d325760405162461bcd60e51b81526004016107e790612b97565b610afb838383611836565b6003546001600160a01b03163314610d675760405162461bcd60e51b81526004016107e7906128d8565b610d7160006119d3565b565b6003546001600160a01b03163314610d9d5760405162461bcd60e51b81526004016107e7906128d8565b600c544211610dee5760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206d696e7420686173206e6f7420656e6465640000000000000060448201526064016107e7565b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460075411610e605760405162461bcd60e51b81526020600482015260136024820152722737902832b832b63630b9103a3790313ab93760691b60448201526064016107e7565b6001600090815260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554600754610e9b9190612be6565b9050610ece600960009054906101000a90046001600160a01b031660018360405180602001604052806000815250611569565b50565b6003546001600160a01b03163314610efb5760405162461bcd60e51b81526004016107e7906128d8565b600e55565b6003546001600160a01b03163314610f2a5760405162461bcd60e51b81526004016107e7906128d8565b600a55565b600d5460ff1615610f775760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600d54610100900460ff16610fce5760405162461bcd60e51b815260206004820152601960248201527f7075626c6963206d696e7420686173206e6f7420626567756e0000000000000060448201526064016107e7565b600c54421061101f5760405162461bcd60e51b815260206004820152601d60248201527f5075626c6963206d696e742068617320616c726561647920656e64656400000060448201526064016107e7565b6008548161102e33600161077f565b61103891906129f4565b11156110565760405162461bcd60e51b81526004016107e790612a07565b80600a546110649190612a4c565b3410156110ad5760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b6110c93360018360405180602001604052806000815250611569565b610ece3360028360405180602001604052806000815250611569565b610bcd338383611a25565b6003546001600160a01b0316331461111a5760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff19169055611131426202a3006129f4565b600b55565b600061114583600e5484611b05565b9392505050565b6003546001600160a01b031633146111765760405162461bcd60e51b81526004016107e7906128d8565b60405133904780156108fc02916000818181858888f19350505050158015610ece573d6000803e3d6000fd5b6003546001600160a01b031633146111cc5760405162461bcd60e51b81526004016107e7906128d8565b600d5460ff16156111e257600d805460ff191690555b600d805461ff0019166101001790556111fe42621a5e006129f4565b600c55565b6003546001600160a01b0316331461122d5760405162461bcd60e51b81526004016107e7906128d8565b600654600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546112679083906129f4565b11156112b55760405162461bcd60e51b815260206004820152601f60248201527f4d617820737570706c79206f6620506570656c6c61722065786365656465640060448201526064016107e7565b610afb83838360405180602001604052806000815250611569565b6003546001600160a01b031633146112fa5760405162461bcd60e51b81526004016107e7906128d8565b600855565b6001600160a01b03851633148061131b575061131b85336106d1565b6113795760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107e7565b610b908585858585611b1b565b6003546001600160a01b031633146113b05760405162461bcd60e51b81526004016107e7906128d8565b6001600160a01b0381166114155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e7565b610ece816119d3565b6001600160a01b03831633148061143a575061143a83336106d1565b6114565760405162461bcd60e51b81526004016107e790612b97565b610afb838383611c53565b6060816000036114885750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114b2578061149c81612b7e565b91506114ab9050600a83612c0f565b915061148c565b6000816001600160401b038111156114cc576114cc612359565b6040519080825280601f01601f1916602001820160405280156114f6576020820181803683370190505b5090505b84156115615761150b600183612be6565b9150611518600a86612c23565b6115239060306129f4565b60f81b81838151811061153857611538612b68565b60200101906001600160f81b031916908160001a90535061155a600a86612c0f565b94506114fa565b949350505050565b6001600160a01b0384166115c95760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107e7565b3360006115d585611d6b565b905060006115e285611d6b565b90506115f383600089858589611db6565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906116239084906129f4565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461168383600089898989611dc4565b50505050505050565b81518351146116ad5760405162461bcd60e51b81526004016107e790612c37565b6001600160a01b0384166116d35760405162461bcd60e51b81526004016107e790612c7f565b336116e2818787878787611db6565b60005b84518110156117c857600085828151811061170257611702612b68565b60200260200101519050600085838151811061172057611720612b68565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156117705760405162461bcd60e51b81526004016107e790612cc4565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906117ad9084906129f4565b92505081905550505050806117c190612b7e565b90506116e5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611818929190612d0e565b60405180910390a461182e818787878787611f1f565b505050505050565b6001600160a01b03831661185c5760405162461bcd60e51b81526004016107e790612d3c565b805182511461187d5760405162461bcd60e51b81526004016107e790612c37565b60003390506118a081856000868660405180602001604052806000815250611db6565b60005b83518110156119655760008482815181106118c0576118c0612b68565b6020026020010151905060008483815181106118de576118de612b68565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561192e5760405162461bcd60e51b81526004016107e790612d7f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061195d81612b7e565b9150506118a3565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119b6929190612d0e565b60405180910390a460408051602081019091526000905250505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611a985760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107e7565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600082611b128584611fda565b14949350505050565b6001600160a01b038416611b415760405162461bcd60e51b81526004016107e790612c7f565b336000611b4d85611d6b565b90506000611b5a85611d6b565b9050611b6a838989858589611db6565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015611bab5760405162461bcd60e51b81526004016107e790612cc4565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611be89084906129f4565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611c48848a8a8a8a8a611dc4565b505050505050505050565b6001600160a01b038316611c795760405162461bcd60e51b81526004016107e790612d3c565b336000611c8584611d6b565b90506000611c9284611d6b565b9050611cb283876000858560405180602001604052806000815250611db6565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015611cf35760405162461bcd60e51b81526004016107e790612d7f565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611683565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611da557611da5612b68565b602090810291909101015292915050565b61182e868686868686612046565b6001600160a01b0384163b1561182e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611e089089908990889088908890600401612dc3565b6020604051808303816000875af1925050508015611e43575060408051601f3d908101601f19168201909252611e4091810190612e08565b60015b611eef57611e4f612e25565b806308c379a003611e885750611e63612e41565b80611e6e5750611e8a565b8060405162461bcd60e51b81526004016107e791906122b3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107e7565b6001600160e01b0319811663f23a6e6160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b6001600160a01b0384163b1561182e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611f639089908990889088908890600401612f12565b6020604051808303816000875af1925050508015611f9e575060408051601f3d908101601f19168201909252611f9b91810190612e08565b60015b611faa57611e4f612e25565b6001600160e01b0319811663bc197c8160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b600081815b8451811015610cf2576000858281518110611ffc57611ffc612b68565b602002602001015190508083116120225760008381526020829052604090209250612033565b600081815260208490526040902092505b508061203e81612b7e565b915050611fdf565b6001600160a01b0385166120cd5760005b83518110156120cb5782818151811061207257612072612b68565b60200260200101516004600086848151811061209057612090612b68565b6020026020010151815260200190815260200160002060008282546120b591906129f4565b909155506120c4905081612b7e565b9050612057565b505b6001600160a01b03841661182e5760005b83518110156116835760008482815181106120fb576120fb612b68565b60200260200101519050600084838151811061211957612119612b68565b602002602001015190506000600460008481526020019081526020016000205490508181101561219c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016107e7565b600092835260046020526040909220910390556121b881612b7e565b90506120de565b80356001600160a01b03811681146121d657600080fd5b919050565b600080604083850312156121ee57600080fd5b6121f7836121bf565b946020939093013593505050565b6001600160e01b031981168114610ece57600080fd5b60006020828403121561222d57600080fd5b813561114581612205565b803580151581146121d657600080fd5b60006020828403121561225a57600080fd5b61114582612238565b60005b8381101561227e578181015183820152602001612266565b50506000910152565b6000815180845261229f816020860160208601612263565b601f01601f19169290920160200192915050565b6020815260006111456020830184612287565b6000602082840312156122d857600080fd5b5035919050565b6000806000604084860312156122f457600080fd5b83356001600160401b038082111561230b57600080fd5b818601915086601f83011261231f57600080fd5b81358181111561232e57600080fd5b8760208260051b850101111561234357600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561239457612394612359565b6040525050565b60006001600160401b038211156123b4576123b4612359565b5060051b60200190565b600082601f8301126123cf57600080fd5b813560206123dc8261239b565b6040516123e9828261236f565b83815260059390931b850182019282810191508684111561240957600080fd5b8286015b84811015612424578035835291830191830161240d565b509695505050505050565b60006001600160401b0383111561244857612448612359565b60405161245f601f8501601f19166020018261236f565b80915083815284848401111561247457600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261249d57600080fd5b6111458383356020850161242f565b600080600080600060a086880312156124c457600080fd5b6124cd866121bf565b94506124db602087016121bf565b935060408601356001600160401b03808211156124f757600080fd5b61250389838a016123be565b9450606088013591508082111561251957600080fd5b61252589838a016123be565b9350608088013591508082111561253b57600080fd5b506125488882890161248c565b9150509295509295909350565b60006020828403121561256757600080fd5b81356001600160401b0381111561257d57600080fd5b8201601f8101841361258e57600080fd5b6115618482356020840161242f565b600080604083850312156125b057600080fd5b82356001600160401b03808211156125c757600080fd5b818501915085601f8301126125db57600080fd5b813560206125e88261239b565b6040516125f5828261236f565b83815260059390931b850182019282810191508984111561261557600080fd5b948201945b8386101561263a5761262b866121bf565b8252948201949082019061261a565b9650508601359250508082111561265057600080fd5b5061265d858286016123be565b9150509250929050565b600081518084526020808501945080840160005b838110156126975781518752958201959082019060010161267b565b509495945050505050565b6020815260006111456020830184612667565b6000806000606084860312156126ca57600080fd5b6126d3846121bf565b925060208401356001600160401b03808211156126ef57600080fd5b6126fb878388016123be565b9350604086013591508082111561271157600080fd5b5061271e868287016123be565b9150509250925092565b6000806040838503121561273b57600080fd5b612744836121bf565b915061275260208401612238565b90509250929050565b6000806040838503121561276e57600080fd5b82356001600160401b0381111561278457600080fd5b8301601f8101851361279557600080fd5b803560206127a28261239b565b6040516127af828261236f565b83815260059390931b84018201928281019150888411156127cf57600080fd5b938201935b838510156127ed578435825293820193908201906127d4565b98969091013596505050505050565b60008060006060848603121561281157600080fd5b61281a846121bf565b95602085013595506040909401359392505050565b6000806040838503121561284257600080fd5b61284b836121bf565b9150612752602084016121bf565b600080600080600060a0868803121561287157600080fd5b61287a866121bf565b9450612888602087016121bf565b9350604086013592506060860135915060808601356001600160401b038111156128b157600080fd5b6125488882890161248c565b6000602082840312156128cf57600080fd5b611145826121bf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061292157607f821691505b60208210810361294157634e487b7160e01b600052602260045260246000fd5b50919050565b60008084546129558161290d565b6001828116801561296d5760018114612982576129b1565b60ff19841687528215158302870194506129b1565b8860005260208060002060005b858110156129a85781548a82015290840190820161298f565b50505082870194505b5050505083516129c5818360208801612263565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610813576108136129de565b60208082526025908201527f52657175657374656420616d6f756e7420657863656564732077616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b8082028115828204841417610813576108136129de565b601f821115610afb57600081815260208120601f850160051c81016020861015612a8a5750805b601f850160051c820191505b8181101561182e57828155600101612a96565b81516001600160401b03811115612ac257612ac2612359565b612ad681612ad0845461290d565b84612a63565b602080601f831160018114612b0b5760008415612af35750858301515b600019600386901b1c1916600185901b17855561182e565b600085815260208120601f198616915b82811015612b3a57888601518255948401946001909101908401612b1b565b5085821015612b585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201612b9057612b906129de565b5060010190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b81810381811115610813576108136129de565b634e487b7160e01b600052601260045260246000fd5b600082612c1e57612c1e612bf9565b500490565b600082612c3257612c32612bf9565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612d216040830185612667565b8281036020840152612d338185612667565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612dfd90830184612287565b979650505050505050565b600060208284031215612e1a57600080fd5b815161114581612205565b600060033d1115612e3e5760046000803e5060005160e01c5b90565b600060443d1015612e4f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612e7e57505050505090565b8285019150815181811115612e965750505050505090565b843d8701016020828501011115612eb05750505050505090565b612ebf6020828601018761236f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090612f3e90830186612667565b8281036060840152612f508186612667565b90508281036080840152612f648185612287565b9897505050505050505056fea264697066735822122095f0c5156356f6a4295d6076ab133ed2a212568249bb1aab310742c63633cce464736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d526554754b7147564763633534454842595a476a4d434a4b314c366f5671336d67514d39556a554579786d562f00000000000000000000
Deployed Bytecode
0x6080604052600436106102455760003560e01c80637cb6475911610139578063b8a20ed0116100b6578063e1bc29671161007a578063e1bc296714610696578063e985e9c5146106b6578063f1d5f517146106ff578063f242432a1461071f578063f2fde38b1461073f578063f5298aca1461075f57600080fd5b8063b8a20ed01461060a578063bd85b0391461062a578063d4bf5cc314610657578063db2e21bc1461066c578063deaf33b21461068157600080fd5b8063a0712d68116100fd578063a0712d681461058e578063a22cb465146105a1578063a5775a8d146105c1578063b67c25a3146105d6578063b717cc09146105f557600080fd5b80637cb64759146104ea5780638da5cb5b1461050a57806391b7f5ed1461052857806395d89b4114610548578063a035b1fe1461057857600080fd5b806332cb6b0c116101c75780635c975abb1161018b5780635c975abb146104705780636b20c4541461048a5780636e3de87c146104aa578063715018a6146104c057806374cd2aa5146104d557600080fd5b806332cb6b0c146103d25780633c8463a1146103e857806347a54148146103fe5780634e1273f4146104145780634f558e791461044157600080fd5b806327c8f8351161020e57806327c8f835146103315780632904e6d9146103695780632c27e5811461037c5780632eb2c2d6146103925780633031fa1a146103b257600080fd5b8062fdd58e1461024a57806301ffc9a71461027d57806302329a29146102ad57806306fdde03146102cf5780630e89341c14610311575b600080fd5b34801561025657600080fd5b5061026a6102653660046121db565b61077f565b6040519081526020015b60405180910390f35b34801561028957600080fd5b5061029d61029836600461221b565b610819565b6040519015158152602001610274565b3480156102b957600080fd5b506102cd6102c8366004612248565b610869565b005b3480156102db57600080fd5b5061030460405180604001604052806009815260200168506570656c6c61727360b81b81525081565b60405161027491906122b3565b34801561031d57600080fd5b5061030461032c3660046122c6565b6108a6565b34801561033d57600080fd5b50600954610351906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b6102cd6103773660046122df565b6108da565b34801561038857600080fd5b5061026a600c5481565b34801561039e57600080fd5b506102cd6103ad3660046124ac565b610b00565b3480156103be57600080fd5b506102cd6103cd366004612555565b610b97565b3480156103de57600080fd5b5061026a60065481565b3480156103f457600080fd5b5061026a60085481565b34801561040a57600080fd5b5061026a600b5481565b34801561042057600080fd5b5061043461042f36600461259d565b610bd1565b60405161027491906126a2565b34801561044d57600080fd5b5061029d61045c3660046122c6565b600090815260046020526040902054151590565b34801561047c57600080fd5b50600d5461029d9060ff1681565b34801561049657600080fd5b506102cd6104a53660046126b5565b610cfa565b3480156104b657600080fd5b5061026a60075481565b3480156104cc57600080fd5b506102cd610d3d565b3480156104e157600080fd5b506102cd610d73565b3480156104f657600080fd5b506102cd6105053660046122c6565b610ed1565b34801561051657600080fd5b506003546001600160a01b0316610351565b34801561053457600080fd5b506102cd6105433660046122c6565b610f00565b34801561055457600080fd5b50610304604051806040016040528060048152602001631414131360e21b81525081565b34801561058457600080fd5b5061026a600a5481565b6102cd61059c3660046122c6565b610f2f565b3480156105ad57600080fd5b506102cd6105bc366004612728565b6110e5565b3480156105cd57600080fd5b5061026a600181565b3480156105e257600080fd5b50600d5461029d90610100900460ff1681565b34801561060157600080fd5b506102cd6110f0565b34801561061657600080fd5b5061029d61062536600461275b565b611136565b34801561063657600080fd5b5061026a6106453660046122c6565b60009081526004602052604090205490565b34801561066357600080fd5b5061026a600281565b34801561067857600080fd5b506102cd61114c565b34801561068d57600080fd5b506102cd6111a2565b3480156106a257600080fd5b506102cd6106b13660046127fc565b611203565b3480156106c257600080fd5b5061029d6106d136600461282f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b506102cd61071a3660046122c6565b6112d0565b34801561072b57600080fd5b506102cd61073a366004612859565b6112ff565b34801561074b57600080fd5b506102cd61075a3660046128bd565b611386565b34801561076b57600080fd5b506102cd61077a3660046127fc565b61141e565b60006001600160a01b0383166107f05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061084a57506001600160e01b031982166303a24d0760e21b145b8061081357506301ffc9a760e01b6001600160e01b0319831614610813565b6003546001600160a01b031633146108935760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff1916911515919091179055565b606060056108b383611461565b6040516020016108c4929190612947565b6040516020818303038152906040529050919050565b600d5460ff16156109225760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600b5442106109735760405162461bcd60e51b815260206004820181905260248201527f57686974656c697374206d696e742068617320616c726561647920656e64656460448201526064016107e7565b6109e9838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040516bffffffffffffffffffffffff193360601b16602082015260340191506109ce9050565b60405160208183030381529060405280519060200120611136565b610a355760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617070726f7665642e20436f6e7461637420737570706f72742e000060448201526064016107e7565b60085481610a4433600161077f565b610a4e91906129f4565b1115610a6c5760405162461bcd60e51b81526004016107e790612a07565b80600a54610a7a9190612a4c565b341015610ac35760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b610adf3360018360405180602001604052806000815250611569565b610afb3360028360405180602001604052806000815250611569565b505050565b6001600160a01b038516331480610b1c5750610b1c85336106d1565b610b835760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107e7565b610b90858585858561168c565b5050505050565b6003546001600160a01b03163314610bc15760405162461bcd60e51b81526004016107e7906128d8565b6005610bcd8282612aa9565b5050565b60608151835114610c365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107e7565b600083516001600160401b03811115610c5157610c51612359565b604051908082528060200260200182016040528015610c7a578160200160208202803683370190505b50905060005b8451811015610cf257610cc5858281518110610c9e57610c9e612b68565b6020026020010151858381518110610cb857610cb8612b68565b602002602001015161077f565b828281518110610cd757610cd7612b68565b6020908102919091010152610ceb81612b7e565b9050610c80565b509392505050565b6001600160a01b038316331480610d165750610d1683336106d1565b610d325760405162461bcd60e51b81526004016107e790612b97565b610afb838383611836565b6003546001600160a01b03163314610d675760405162461bcd60e51b81526004016107e7906128d8565b610d7160006119d3565b565b6003546001600160a01b03163314610d9d5760405162461bcd60e51b81526004016107e7906128d8565b600c544211610dee5760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206d696e7420686173206e6f7420656e6465640000000000000060448201526064016107e7565b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460075411610e605760405162461bcd60e51b81526020600482015260136024820152722737902832b832b63630b9103a3790313ab93760691b60448201526064016107e7565b6001600090815260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554600754610e9b9190612be6565b9050610ece600960009054906101000a90046001600160a01b031660018360405180602001604052806000815250611569565b50565b6003546001600160a01b03163314610efb5760405162461bcd60e51b81526004016107e7906128d8565b600e55565b6003546001600160a01b03163314610f2a5760405162461bcd60e51b81526004016107e7906128d8565b600a55565b600d5460ff1615610f775760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600d54610100900460ff16610fce5760405162461bcd60e51b815260206004820152601960248201527f7075626c6963206d696e7420686173206e6f7420626567756e0000000000000060448201526064016107e7565b600c54421061101f5760405162461bcd60e51b815260206004820152601d60248201527f5075626c6963206d696e742068617320616c726561647920656e64656400000060448201526064016107e7565b6008548161102e33600161077f565b61103891906129f4565b11156110565760405162461bcd60e51b81526004016107e790612a07565b80600a546110649190612a4c565b3410156110ad5760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b6110c93360018360405180602001604052806000815250611569565b610ece3360028360405180602001604052806000815250611569565b610bcd338383611a25565b6003546001600160a01b0316331461111a5760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff19169055611131426202a3006129f4565b600b55565b600061114583600e5484611b05565b9392505050565b6003546001600160a01b031633146111765760405162461bcd60e51b81526004016107e7906128d8565b60405133904780156108fc02916000818181858888f19350505050158015610ece573d6000803e3d6000fd5b6003546001600160a01b031633146111cc5760405162461bcd60e51b81526004016107e7906128d8565b600d5460ff16156111e257600d805460ff191690555b600d805461ff0019166101001790556111fe42621a5e006129f4565b600c55565b6003546001600160a01b0316331461122d5760405162461bcd60e51b81526004016107e7906128d8565b600654600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546112679083906129f4565b11156112b55760405162461bcd60e51b815260206004820152601f60248201527f4d617820737570706c79206f6620506570656c6c61722065786365656465640060448201526064016107e7565b610afb83838360405180602001604052806000815250611569565b6003546001600160a01b031633146112fa5760405162461bcd60e51b81526004016107e7906128d8565b600855565b6001600160a01b03851633148061131b575061131b85336106d1565b6113795760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107e7565b610b908585858585611b1b565b6003546001600160a01b031633146113b05760405162461bcd60e51b81526004016107e7906128d8565b6001600160a01b0381166114155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e7565b610ece816119d3565b6001600160a01b03831633148061143a575061143a83336106d1565b6114565760405162461bcd60e51b81526004016107e790612b97565b610afb838383611c53565b6060816000036114885750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114b2578061149c81612b7e565b91506114ab9050600a83612c0f565b915061148c565b6000816001600160401b038111156114cc576114cc612359565b6040519080825280601f01601f1916602001820160405280156114f6576020820181803683370190505b5090505b84156115615761150b600183612be6565b9150611518600a86612c23565b6115239060306129f4565b60f81b81838151811061153857611538612b68565b60200101906001600160f81b031916908160001a90535061155a600a86612c0f565b94506114fa565b949350505050565b6001600160a01b0384166115c95760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107e7565b3360006115d585611d6b565b905060006115e285611d6b565b90506115f383600089858589611db6565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906116239084906129f4565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461168383600089898989611dc4565b50505050505050565b81518351146116ad5760405162461bcd60e51b81526004016107e790612c37565b6001600160a01b0384166116d35760405162461bcd60e51b81526004016107e790612c7f565b336116e2818787878787611db6565b60005b84518110156117c857600085828151811061170257611702612b68565b60200260200101519050600085838151811061172057611720612b68565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156117705760405162461bcd60e51b81526004016107e790612cc4565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906117ad9084906129f4565b92505081905550505050806117c190612b7e565b90506116e5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611818929190612d0e565b60405180910390a461182e818787878787611f1f565b505050505050565b6001600160a01b03831661185c5760405162461bcd60e51b81526004016107e790612d3c565b805182511461187d5760405162461bcd60e51b81526004016107e790612c37565b60003390506118a081856000868660405180602001604052806000815250611db6565b60005b83518110156119655760008482815181106118c0576118c0612b68565b6020026020010151905060008483815181106118de576118de612b68565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561192e5760405162461bcd60e51b81526004016107e790612d7f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061195d81612b7e565b9150506118a3565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119b6929190612d0e565b60405180910390a460408051602081019091526000905250505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611a985760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107e7565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600082611b128584611fda565b14949350505050565b6001600160a01b038416611b415760405162461bcd60e51b81526004016107e790612c7f565b336000611b4d85611d6b565b90506000611b5a85611d6b565b9050611b6a838989858589611db6565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015611bab5760405162461bcd60e51b81526004016107e790612cc4565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611be89084906129f4565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611c48848a8a8a8a8a611dc4565b505050505050505050565b6001600160a01b038316611c795760405162461bcd60e51b81526004016107e790612d3c565b336000611c8584611d6b565b90506000611c9284611d6b565b9050611cb283876000858560405180602001604052806000815250611db6565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015611cf35760405162461bcd60e51b81526004016107e790612d7f565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611683565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611da557611da5612b68565b602090810291909101015292915050565b61182e868686868686612046565b6001600160a01b0384163b1561182e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611e089089908990889088908890600401612dc3565b6020604051808303816000875af1925050508015611e43575060408051601f3d908101601f19168201909252611e4091810190612e08565b60015b611eef57611e4f612e25565b806308c379a003611e885750611e63612e41565b80611e6e5750611e8a565b8060405162461bcd60e51b81526004016107e791906122b3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107e7565b6001600160e01b0319811663f23a6e6160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b6001600160a01b0384163b1561182e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611f639089908990889088908890600401612f12565b6020604051808303816000875af1925050508015611f9e575060408051601f3d908101601f19168201909252611f9b91810190612e08565b60015b611faa57611e4f612e25565b6001600160e01b0319811663bc197c8160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b600081815b8451811015610cf2576000858281518110611ffc57611ffc612b68565b602002602001015190508083116120225760008381526020829052604090209250612033565b600081815260208490526040902092505b508061203e81612b7e565b915050611fdf565b6001600160a01b0385166120cd5760005b83518110156120cb5782818151811061207257612072612b68565b60200260200101516004600086848151811061209057612090612b68565b6020026020010151815260200190815260200160002060008282546120b591906129f4565b909155506120c4905081612b7e565b9050612057565b505b6001600160a01b03841661182e5760005b83518110156116835760008482815181106120fb576120fb612b68565b60200260200101519050600084838151811061211957612119612b68565b602002602001015190506000600460008481526020019081526020016000205490508181101561219c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016107e7565b600092835260046020526040909220910390556121b881612b7e565b90506120de565b80356001600160a01b03811681146121d657600080fd5b919050565b600080604083850312156121ee57600080fd5b6121f7836121bf565b946020939093013593505050565b6001600160e01b031981168114610ece57600080fd5b60006020828403121561222d57600080fd5b813561114581612205565b803580151581146121d657600080fd5b60006020828403121561225a57600080fd5b61114582612238565b60005b8381101561227e578181015183820152602001612266565b50506000910152565b6000815180845261229f816020860160208601612263565b601f01601f19169290920160200192915050565b6020815260006111456020830184612287565b6000602082840312156122d857600080fd5b5035919050565b6000806000604084860312156122f457600080fd5b83356001600160401b038082111561230b57600080fd5b818601915086601f83011261231f57600080fd5b81358181111561232e57600080fd5b8760208260051b850101111561234357600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561239457612394612359565b6040525050565b60006001600160401b038211156123b4576123b4612359565b5060051b60200190565b600082601f8301126123cf57600080fd5b813560206123dc8261239b565b6040516123e9828261236f565b83815260059390931b850182019282810191508684111561240957600080fd5b8286015b84811015612424578035835291830191830161240d565b509695505050505050565b60006001600160401b0383111561244857612448612359565b60405161245f601f8501601f19166020018261236f565b80915083815284848401111561247457600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261249d57600080fd5b6111458383356020850161242f565b600080600080600060a086880312156124c457600080fd5b6124cd866121bf565b94506124db602087016121bf565b935060408601356001600160401b03808211156124f757600080fd5b61250389838a016123be565b9450606088013591508082111561251957600080fd5b61252589838a016123be565b9350608088013591508082111561253b57600080fd5b506125488882890161248c565b9150509295509295909350565b60006020828403121561256757600080fd5b81356001600160401b0381111561257d57600080fd5b8201601f8101841361258e57600080fd5b6115618482356020840161242f565b600080604083850312156125b057600080fd5b82356001600160401b03808211156125c757600080fd5b818501915085601f8301126125db57600080fd5b813560206125e88261239b565b6040516125f5828261236f565b83815260059390931b850182019282810191508984111561261557600080fd5b948201945b8386101561263a5761262b866121bf565b8252948201949082019061261a565b9650508601359250508082111561265057600080fd5b5061265d858286016123be565b9150509250929050565b600081518084526020808501945080840160005b838110156126975781518752958201959082019060010161267b565b509495945050505050565b6020815260006111456020830184612667565b6000806000606084860312156126ca57600080fd5b6126d3846121bf565b925060208401356001600160401b03808211156126ef57600080fd5b6126fb878388016123be565b9350604086013591508082111561271157600080fd5b5061271e868287016123be565b9150509250925092565b6000806040838503121561273b57600080fd5b612744836121bf565b915061275260208401612238565b90509250929050565b6000806040838503121561276e57600080fd5b82356001600160401b0381111561278457600080fd5b8301601f8101851361279557600080fd5b803560206127a28261239b565b6040516127af828261236f565b83815260059390931b84018201928281019150888411156127cf57600080fd5b938201935b838510156127ed578435825293820193908201906127d4565b98969091013596505050505050565b60008060006060848603121561281157600080fd5b61281a846121bf565b95602085013595506040909401359392505050565b6000806040838503121561284257600080fd5b61284b836121bf565b9150612752602084016121bf565b600080600080600060a0868803121561287157600080fd5b61287a866121bf565b9450612888602087016121bf565b9350604086013592506060860135915060808601356001600160401b038111156128b157600080fd5b6125488882890161248c565b6000602082840312156128cf57600080fd5b611145826121bf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061292157607f821691505b60208210810361294157634e487b7160e01b600052602260045260246000fd5b50919050565b60008084546129558161290d565b6001828116801561296d5760018114612982576129b1565b60ff19841687528215158302870194506129b1565b8860005260208060002060005b858110156129a85781548a82015290840190820161298f565b50505082870194505b5050505083516129c5818360208801612263565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610813576108136129de565b60208082526025908201527f52657175657374656420616d6f756e7420657863656564732077616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b8082028115828204841417610813576108136129de565b601f821115610afb57600081815260208120601f850160051c81016020861015612a8a5750805b601f850160051c820191505b8181101561182e57828155600101612a96565b81516001600160401b03811115612ac257612ac2612359565b612ad681612ad0845461290d565b84612a63565b602080601f831160018114612b0b5760008415612af35750858301515b600019600386901b1c1916600185901b17855561182e565b600085815260208120601f198616915b82811015612b3a57888601518255948401946001909101908401612b1b565b5085821015612b585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201612b9057612b906129de565b5060010190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b81810381811115610813576108136129de565b634e487b7160e01b600052601260045260246000fd5b600082612c1e57612c1e612bf9565b500490565b600082612c3257612c32612bf9565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612d216040830185612667565b8281036020840152612d338185612667565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612dfd90830184612287565b979650505050505050565b600060208284031215612e1a57600080fd5b815161114581612205565b600060033d1115612e3e5760046000803e5060005160e01c5b90565b600060443d1015612e4f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612e7e57505050505090565b8285019150815181811115612e965750505050505090565b843d8701016020828501011115612eb05750505050505090565b612ebf6020828601018761236f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090612f3e90830186612667565b8281036060840152612f508186612667565b90508281036080840152612f648185612287565b9897505050505050505056fea264697066735822122095f0c5156356f6a4295d6076ab133ed2a212568249bb1aab310742c63633cce464736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d526554754b7147564763633534454842595a476a4d434a4b314c366f5671336d67514d39556a554579786d562f00000000000000000000
-----Decoded View---------------
Arg [0] : _uri (string): ipfs://QmReTuKqGVGcc54EHBYZGjMCJK1L6oVq3mgQM9UjUEyxmV/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d526554754b7147564763633534454842595a476a4d434a
Arg [3] : 4b314c366f5671336d67514d39556a554579786d562f00000000000000000000
Deployed Bytecode Sourcemap
54243:6439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26399:231;;;;;;;;;;-1:-1:-1;26399:231:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;26399:231:0;;;;;;;;25422:310;;;;;;;;;;-1:-1:-1;25422:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;25422:310:0;1019:187:1;59745:81:0;;;;;;;;;;-1:-1:-1;59745:81:0;;;;;:::i;:::-;;:::i;:::-;;54394:41;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54394:41:0;;;;;;;;;;;;:::i;55368:228::-;;;;;;;;;;-1:-1:-1;55368:228:0;;;;;:::i;:::-;;:::i;54649:71::-;;;;;;;;;;-1:-1:-1;54649:71:0;;;;-1:-1:-1;;;;;54649:71:0;;;;;;-1:-1:-1;;;;;2666:32:1;;;2648:51;;2636:2;2621:18;54649:71:0;2502:203:1;56085:1588:0;;;;;;:::i;:::-;;:::i;54821:28::-;;;;;;;;;;;;;;;;28338:442;;;;;;;;;;-1:-1:-1;28338:442:0;;;;;:::i;:::-;;:::i;55266:93::-;;;;;;;;;;-1:-1:-1;55266:93:0;;;;;:::i;:::-;;:::i;54517:35::-;;;;;;;;;;;;;;;;54606:34;;;;;;;;;;;;;;;;54790:24;;;;;;;;;;;;;;;;26796:524;;;;;;;;;;-1:-1:-1;26796:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42730:122::-;;;;;;;;;;-1:-1:-1;42730:122:0;;;;;:::i;:::-;42787:4;42608:16;;;:12;:16;;;;;;-1:-1:-1;;;42730:122:0;54969:25;;;;;;;;;;-1:-1:-1;54969:25:0;;;;;;;;44646:359;;;;;;;;;;-1:-1:-1;44646:359:0;;;;;:::i;:::-;;:::i;54559:40::-;;;;;;;;;;;;;;;;5613:103;;;;;;;;;;;;;:::i;60343:334::-;;;;;;;;;;;;;:::i;59845:102::-;;;;;;;;;;-1:-1:-1;59845:102:0;;;;;:::i;:::-;;:::i;4962:87::-;;;;;;;;;;-1:-1:-1;5035:6:0;;-1:-1:-1;;;;;5035:6:0;4962:87;;59516:93;;;;;;;;;;-1:-1:-1;59516:93:0;;;;;:::i;:::-;;:::i;54442:38::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54442:38:0;;;;;54745:35;;;;;;;;;;;;;;;;57895:1233;;;;;;:::i;:::-;;:::i;27393:155::-;;;;;;;;;;-1:-1:-1;27393:155:0;;;;;:::i;:::-;;:::i;54866:36::-;;;;;;;;;;;;54901:1;54866:36;;55001;;;;;;;;;;-1:-1:-1;55001:36:0;;;;;;;;;;;59138:139;;;;;;;;;;;;;:::i;57683:195::-;;;;;;;;;;-1:-1:-1;57683:195:0;;;;;:::i;:::-;;:::i;42519:113::-;;;;;;;;;;-1:-1:-1;42519:113:0;;;;;:::i;:::-;42581:7;42608:16;;;:12;:16;;;;;;;42519:113;54909:37;;;;;;;;;;;;54945:1;54909:37;;59957:118;;;;;;;;;;;;;:::i;59285:212::-;;;;;;;;;;;;;:::i;60083:252::-;;;;;;;;;;-1:-1:-1;60083:252:0;;;;;:::i;:::-;;:::i;27620:168::-;;;;;;;;;;-1:-1:-1;27620:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;27743:27:0;;;27719:4;27743:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;27620:168;59618:105;;;;;;;;;;-1:-1:-1;59618:105:0;;;;;:::i;:::-;;:::i;27860:401::-;;;;;;;;;;-1:-1:-1;27860:401:0;;;;;:::i;:::-;;:::i;5871:201::-;;;;;;;;;;-1:-1:-1;5871:201:0;;;;;:::i;:::-;;:::i;44311:327::-;;;;;;;;;;-1:-1:-1;44311:327:0;;;;;:::i;:::-;;:::i;26399:231::-;26485:7;-1:-1:-1;;;;;26513:21:0;;26505:77;;;;-1:-1:-1;;;26505:77:0;;12469:2:1;26505:77:0;;;12451:21:1;12508:2;12488:18;;;12481:30;12547:34;12527:18;;;12520:62;-1:-1:-1;;;12598:18:1;;;12591:41;12649:19;;26505:77:0;;;;;;;;;-1:-1:-1;26600:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;26600:22:0;;;;;;;;;;26399:231;;;;;:::o;25422:310::-;25524:4;-1:-1:-1;;;;;;25561:41:0;;-1:-1:-1;;;25561:41:0;;:110;;-1:-1:-1;;;;;;;25619:52:0;;-1:-1:-1;;;25619:52:0;25561:110;:163;;;-1:-1:-1;;;;;;;;;;16824:40:0;;;25688:36;16715:157;59745:81;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59803:6:::1;:15:::0;;-1:-1:-1;;59803:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59745:81::o;55368:228::-;55428:13;55518:7;55527:25;55544:7;55527:16;:25::i;:::-;55501:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55454:134;;55368:228;;;:::o;56085:1588::-;56193:6;;;;56192:7;56184:38;;;;-1:-1:-1;;;56184:38:0;;14945:2:1;56184:38:0;;;14927:21:1;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:48;15061:18;;56184:38:0;14743:342:1;56184:38:0;56259:9;;56241:15;:27;56233:72;;;;-1:-1:-1;;;56233:72:0;;15292:2:1;56233:72:0;;;15274:21:1;;;15311:18;;;15304:30;15370:34;15350:18;;;15343:62;15422:18;;56233:72:0;15090:356:1;56233:72:0;56338:61;56346:11;;56338:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56369:28:0;;-1:-1:-1;;56386:10:0;15600:2:1;15596:15;15592:53;56369:28:0;;;15580:66:1;15662:12;;;-1:-1:-1;56369:28:0;;-1:-1:-1;15451:229:1;56369:28:0;;;;;;;;;;;;;56359:39;;;;;;56338:7;:61::i;:::-;56316:128;;;;-1:-1:-1;;;56316:128:0;;15887:2:1;56316:128:0;;;15869:21:1;15926:2;15906:18;;;15899:30;15965:32;15945:18;;;15938:60;16015:18;;56316:128:0;15685:354:1;56316:128:0;56507:11;;56497:6;56463:31;56473:10;54901:1;56463:9;:31::i;:::-;:40;;;;:::i;:::-;:55;;56455:105;;;;-1:-1:-1;;;56455:105:0;;;;;;;:::i;:::-;56600:6;56592:5;;:14;;;;:::i;:::-;56579:9;:27;;56571:63;;;;-1:-1:-1;;;56571:63:0;;17087:2:1;56571:63:0;;;17069:21:1;17126:2;17106:18;;;17099:30;-1:-1:-1;;;17145:18:1;;;17138:53;17208:18;;56571:63:0;16885:347:1;56571:63:0;56655:39;56661:10;54901:1;56683:6;56655:39;;;;;;;;;;;;:5;:39::i;:::-;56705:40;56711:10;54945:1;56734:6;56705:40;;;;;;;;;;;;:5;:40::i;:::-;56085:1588;;;:::o;28338:442::-;-1:-1:-1;;;;;28571:20:0;;3766:10;28571:20;;:60;;-1:-1:-1;28595:36:0;28612:4;3766:10;27620:168;:::i;28595:36::-;28549:160;;;;-1:-1:-1;;;28549:160:0;;17439:2:1;28549:160:0;;;17421:21:1;17478:2;17458:18;;;17451:30;17517:34;17497:18;;;17490:62;-1:-1:-1;;;17568:18:1;;;17561:48;17626:19;;28549:160:0;17237:414:1;28549:160:0;28720:52;28743:4;28749:2;28753:3;28758:7;28767:4;28720:22;:52::i;:::-;28338:442;;;;;:::o;55266:93::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;55334:7:::1;:17;55344:7:::0;55334;:17:::1;:::i;:::-;;55266:93:::0;:::o;26796:524::-;26952:16;27013:3;:10;26994:8;:15;:29;26986:83;;;;-1:-1:-1;;;26986:83:0;;19936:2:1;26986:83:0;;;19918:21:1;19975:2;19955:18;;;19948:30;20014:34;19994:18;;;19987:62;-1:-1:-1;;;20065:18:1;;;20058:39;20114:19;;26986:83:0;19734:405:1;26986:83:0;27082:30;27129:8;:15;-1:-1:-1;;;;;27115:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27115:30:0;;27082:63;;27163:9;27158:122;27182:8;:15;27178:1;:19;27158:122;;;27238:30;27248:8;27257:1;27248:11;;;;;;;;:::i;:::-;;;;;;;27261:3;27265:1;27261:6;;;;;;;;:::i;:::-;;;;;;;27238:9;:30::i;:::-;27219:13;27233:1;27219:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;27199:3;;;:::i;:::-;;;27158:122;;;-1:-1:-1;27299:13:0;26796:524;-1:-1:-1;;;26796:524:0:o;44646:359::-;-1:-1:-1;;;;;44811:23:0;;3766:10;44811:23;;:66;;-1:-1:-1;44838:39:0;44855:7;3766:10;27620:168;:::i;44838:39::-;44789:163;;;;-1:-1:-1;;;44789:163:0;;;;;;;:::i;:::-;44965:32;44976:7;44985:3;44990:6;44965:10;:32::i;5613:103::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;5678:30:::1;5705:1;5678:18;:30::i;:::-;5613:103::o:0;60343:334::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;60420:13:::1;;60402:15;:31;60394:69;;;::::0;-1:-1:-1;;;60394:69:0;;21034:2:1;60394:69:0::1;::::0;::::1;21016:21:1::0;21073:2;21053:18;;;21046:30;21112:27;21092:18;;;21085:55;21157:18;;60394:69:0::1;20832:349:1::0;60394:69:0::1;54901:1;42581:7:::0;42608:16;:12;:16;;;;60482:15:::1;;:39;60474:71;;;::::0;-1:-1:-1;;;60474:71:0;;21388:2:1;60474:71:0::1;::::0;::::1;21370:21:1::0;21427:2;21407:18;;;21400:30;-1:-1:-1;;;21446:18:1;;;21439:49;21505:18;;60474:71:0::1;21186:343:1::0;60474:71:0::1;54901:1;60556:17;42608:16:::0;;;:12;:16;;;;60576:15:::1;;:39;;;;:::i;:::-;60556:59;;60626:43;60632:11;;;;;;;;;-1:-1:-1::0;;;;;60632:11:0::1;54901:1;60655:9;60626:43;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;60383:294;60343:334::o:0;59845:102::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59912:10:::1;:18:::0;59845:102::o;59516:93::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59583:5:::1;:17:::0;59516:93::o;57895:1233::-;57960:6;;;;57959:7;57951:38;;;;-1:-1:-1;;;57951:38:0;;14945:2:1;57951:38:0;;;14927:21:1;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:48;15061:18;;57951:38:0;14743:342:1;57951:38:0;58008:16;;;;;;;58000:54;;;;-1:-1:-1;;;58000:54:0;;21869:2:1;58000:54:0;;;21851:21:1;21908:2;21888:18;;;21881:30;21947:27;21927:18;;;21920:55;21992:18;;58000:54:0;21667:349:1;58000:54:0;58091:13;;58073:15;:31;58065:73;;;;-1:-1:-1;;;58065:73:0;;22223:2:1;58065:73:0;;;22205:21:1;22262:2;22242:18;;;22235:30;22301:31;22281:18;;;22274:59;22350:18;;58065:73:0;22021:353:1;58065:73:0;58201:11;;58191:6;58157:31;58167:10;54901:1;58157:9;:31::i;:::-;:40;;;;:::i;:::-;:55;;58149:105;;;;-1:-1:-1;;;58149:105:0;;;;;;;:::i;:::-;58294:6;58286:5;;:14;;;;:::i;:::-;58273:9;:27;;58265:63;;;;-1:-1:-1;;;58265:63:0;;17087:2:1;58265:63:0;;;17069:21:1;17126:2;17106:18;;;17099:30;-1:-1:-1;;;17145:18:1;;;17138:53;17208:18;;58265:63:0;16885:347:1;58265:63:0;58349:39;58355:10;54901:1;58377:6;58349:39;;;;;;;;;;;;:5;:39::i;:::-;58399:40;58405:10;54945:1;58428:6;58399:40;;;;;;;;;;;;:5;:40::i;27393:155::-;27488:52;3766:10;27521:8;27531;27488:18;:52::i;59138:139::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59199:6:::1;:14:::0;;-1:-1:-1;;59199:14:0::1;::::0;;59236:24:::1;:15;59254:6;59236:24;:::i;:::-;59224:9;:36:::0;59138:139::o;57683:195::-;57792:4;57821:49;57840:11;57853:10;;57865:4;57821:18;:49::i;:::-;57814:56;57683:195;-1:-1:-1;;;57683:195:0:o;59957:118::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;60016:51:::1;::::0;60024:10:::1;::::0;60045:21:::1;60016:51:::0;::::1;;;::::0;::::1;::::0;;;60045:21;60024:10;60016:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;59285:212:::0;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59346:6:::1;::::0;::::1;;59343:51;;;59368:6;:14:::0;;-1:-1:-1;;59368:14:0::1;::::0;;59343:51:::1;59404:16;:23:::0;;-1:-1:-1;;59404:23:0::1;;;::::0;;59454:25:::1;:15;59472:7;59454:25;:::i;:::-;59438:13;:41:::0;59285:212::o;60083:252::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;60229:10:::1;::::0;54901:1:::1;42581:7:::0;42608:16;:12;:16;;;;60193:32:::1;::::0;60217:8;;60193:32:::1;:::i;:::-;:46;;60185:90;;;::::0;-1:-1:-1;;;60185:90:0;;22581:2:1;60185:90:0::1;::::0;::::1;22563:21:1::0;22620:2;22600:18;;;22593:30;22659:33;22639:18;;;22632:61;22710:18;;60185:90:0::1;22379:355:1::0;60185:90:0::1;60286:41;60292:11;60305:7;60314:8;60286:41;;;;;;;;;;;::::0;:5:::1;:41::i;59618:105::-:0;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59691:11:::1;:23:::0;59618:105::o;27860:401::-;-1:-1:-1;;;;;28068:20:0;;3766:10;28068:20;;:60;;-1:-1:-1;28092:36:0;28109:4;3766:10;27620:168;:::i;28092:36::-;28046:151;;;;-1:-1:-1;;;28046:151:0;;22941:2:1;28046:151:0;;;22923:21:1;22980:2;22960:18;;;22953:30;23019:34;22999:18;;;22992:62;-1:-1:-1;;;23070:18:1;;;23063:39;23119:19;;28046:151:0;22739:405:1;28046:151:0;28208:45;28226:4;28232:2;28236;28240:6;28248:4;28208:17;:45::i;5871:201::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5960:22:0;::::1;5952:73;;;::::0;-1:-1:-1;;;5952:73:0;;23351:2:1;5952:73:0::1;::::0;::::1;23333:21:1::0;23390:2;23370:18;;;23363:30;23429:34;23409:18;;;23402:62;-1:-1:-1;;;23480:18:1;;;23473:36;23526:19;;5952:73:0::1;23149:402:1::0;5952:73:0::1;6036:28;6055:8;6036:18;:28::i;44311:327::-:0;-1:-1:-1;;;;;44451:23:0;;3766:10;44451:23;;:66;;-1:-1:-1;44478:39:0;44495:7;3766:10;27620:168;:::i;44478:39::-;44429:163;;;;-1:-1:-1;;;44429:163:0;;;;;;;:::i;:::-;44605:25;44611:7;44620:2;44624:5;44605;:25::i;1302:723::-;1358:13;1579:5;1588:1;1579:10;1575:53;;-1:-1:-1;;1606:10:0;;;;;;;;;;;;-1:-1:-1;;;1606:10:0;;;;;1302:723::o;1575:53::-;1653:5;1638:12;1694:78;1701:9;;1694:78;;1727:8;;;;:::i;:::-;;-1:-1:-1;1750:10:0;;-1:-1:-1;1758:2:0;1750:10;;:::i;:::-;;;1694:78;;;1782:19;1814:6;-1:-1:-1;;;;;1804:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1804:17:0;;1782:39;;1832:154;1839:10;;1832:154;;1866:11;1876:1;1866:11;;:::i;:::-;;-1:-1:-1;1935:10:0;1943:2;1935:5;:10;:::i;:::-;1922:24;;:2;:24;:::i;:::-;1909:39;;1892:6;1899;1892:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1892:56:0;;;;;;;;-1:-1:-1;1963:11:0;1972:2;1963:11;;:::i;:::-;;;1832:154;;;2010:6;1302:723;-1:-1:-1;;;;1302:723:0:o;33040:729::-;-1:-1:-1;;;;;33193:16:0;;33185:62;;;;-1:-1:-1;;;33185:62:0;;24132:2:1;33185:62:0;;;24114:21:1;24171:2;24151:18;;;24144:30;24210:34;24190:18;;;24183:62;-1:-1:-1;;;24261:18:1;;;24254:31;24302:19;;33185:62:0;23930:397:1;33185:62:0;3766:10;33260:16;33325:21;33343:2;33325:17;:21::i;:::-;33302:44;;33357:24;33384:25;33402:6;33384:17;:25::i;:::-;33357:52;;33422:66;33443:8;33461:1;33465:2;33469:3;33474:7;33483:4;33422:20;:66::i;:::-;33501:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33501:17:0;;;;;;;;;:27;;33522:6;;33501:9;:27;;33522:6;;33501:27;:::i;:::-;;;;-1:-1:-1;;33544:52:0;;;24506:25:1;;;24562:2;24547:18;;24540:34;;;-1:-1:-1;;;;;33544:52:0;;;;33577:1;;33544:52;;;;;;24479:18:1;33544:52:0;;;;;;;33687:74;33718:8;33736:1;33740:2;33744;33748:6;33756:4;33687:30;:74::i;:::-;33174:595;;;33040:729;;;;:::o;30576:1146::-;30803:7;:14;30789:3;:10;:28;30781:81;;;;-1:-1:-1;;;30781:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30881:16:0;;30873:66;;;;-1:-1:-1;;;30873:66:0;;;;;;;:::i;:::-;3766:10;30996:60;3766:10;31027:4;31033:2;31037:3;31042:7;31051:4;30996:20;:60::i;:::-;31074:9;31069:421;31093:3;:10;31089:1;:14;31069:421;;;31125:10;31138:3;31142:1;31138:6;;;;;;;;:::i;:::-;;;;;;;31125:19;;31159:14;31176:7;31184:1;31176:10;;;;;;;;:::i;:::-;;;;;;;;;;;;31203:19;31225:13;;;;;;;;;;-1:-1:-1;;;;;31225:19:0;;;;;;;;;;;;31176:10;;-1:-1:-1;31267:21:0;;;;31259:76;;;;-1:-1:-1;;;31259:76:0;;;;;;;:::i;:::-;31379:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31379:19:0;;;;;;;;;;31401:20;;;31379:42;;31451:17;;;;;;;:27;;31401:20;;31379:9;31451:27;;31401:20;;31451:27;:::i;:::-;;;;;;;;31110:380;;;31105:3;;;;:::i;:::-;;;31069:421;;;;31537:2;-1:-1:-1;;;;;31507:47:0;31531:4;-1:-1:-1;;;;;31507:47:0;31521:8;-1:-1:-1;;;;;31507:47:0;;31541:3;31546:7;31507:47;;;;;;;:::i;:::-;;;;;;;;31639:75;31675:8;31685:4;31691:2;31695:3;31700:7;31709:4;31639:35;:75::i;:::-;30770:952;30576:1146;;;;;:::o;36199:969::-;-1:-1:-1;;;;;36351:18:0;;36343:66;;;;-1:-1:-1;;;36343:66:0;;;;;;;:::i;:::-;36442:7;:14;36428:3;:10;:28;36420:81;;;;-1:-1:-1;;;36420:81:0;;;;;;;:::i;:::-;36514:16;3766:10;36514:31;;36558:66;36579:8;36589:4;36603:1;36607:3;36612:7;36558:66;;;;;;;;;;;;:20;:66::i;:::-;36642:9;36637:373;36661:3;:10;36657:1;:14;36637:373;;;36693:10;36706:3;36710:1;36706:6;;;;;;;;:::i;:::-;;;;;;;36693:19;;36727:14;36744:7;36752:1;36744:10;;;;;;;;:::i;:::-;;;;;;;;;;;;36771:19;36793:13;;;;;;;;;;-1:-1:-1;;;;;36793:19:0;;;;;;;;;;;;36744:10;;-1:-1:-1;36835:21:0;;;;36827:70;;;;-1:-1:-1;;;36827:70:0;;;;;;;:::i;:::-;36941:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36941:19:0;;;;;;;;;;36963:20;;36941:42;;36673:3;;;;:::i;:::-;;;;36637:373;;;;37065:1;-1:-1:-1;;;;;37027:55:0;37051:4;-1:-1:-1;;;;;37027:55:0;37041:8;-1:-1:-1;;;;;37027:55:0;;37069:3;37074:7;37027:55;;;;;;;:::i;:::-;;;;;;;;37095:65;;;;;;;;;37139:1;37095:65;;36332:836;36199:969;;;:::o;6232:191::-;6325:6;;;-1:-1:-1;;;;;6342:17:0;;;-1:-1:-1;;;;;;6342:17:0;;;;;;;6375:40;;6325:6;;;6342:17;6325:6;;6375:40;;6306:16;;6375:40;6295:128;6232:191;:::o;37310:331::-;37465:8;-1:-1:-1;;;;;37456:17:0;:5;-1:-1:-1;;;;;37456:17:0;;37448:71;;;;-1:-1:-1;;;37448:71:0;;27292:2:1;37448:71:0;;;27274:21:1;27331:2;27311:18;;;27304:30;27370:34;27350:18;;;27343:62;-1:-1:-1;;;27421:18:1;;;27414:39;27470:19;;37448:71:0;27090:405:1;37448:71:0;-1:-1:-1;;;;;37530:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;37530:46:0;;;;;;;;;;37592:41;;1159::1;;;37592::0;;1132:18:1;37592:41:0;;;;;;;37310:331;;;:::o;94:190::-;219:4;272;243:25;256:5;263:4;243:12;:25::i;:::-;:33;;94:190;-1:-1:-1;;;;94:190:0:o;29244:974::-;-1:-1:-1;;;;;29432:16:0;;29424:66;;;;-1:-1:-1;;;29424:66:0;;;;;;;:::i;:::-;3766:10;29503:16;29568:21;29586:2;29568:17;:21::i;:::-;29545:44;;29600:24;29627:25;29645:6;29627:17;:25::i;:::-;29600:52;;29665:60;29686:8;29696:4;29702:2;29706:3;29711:7;29720:4;29665:20;:60::i;:::-;29738:19;29760:13;;;;;;;;;;;-1:-1:-1;;;;;29760:19:0;;;;;;;;;;29798:21;;;;29790:76;;;;-1:-1:-1;;;29790:76:0;;;;;;;:::i;:::-;29902:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29902:19:0;;;;;;;;;;29924:20;;;29902:42;;29966:17;;;;;;;:27;;29924:20;;29902:9;29966:27;;29924:20;;29966:27;:::i;:::-;;;;-1:-1:-1;;30011:46:0;;;24506:25:1;;;24562:2;24547:18;;24540:34;;;-1:-1:-1;;;;;30011:46:0;;;;;;;;;;;;;;24479:18:1;30011:46:0;;;;;;;30142:68;30173:8;30183:4;30189:2;30193;30197:6;30205:4;30142:30;:68::i;:::-;29413:805;;;;29244:974;;;;;:::o;35188:808::-;-1:-1:-1;;;;;35315:18:0;;35307:66;;;;-1:-1:-1;;;35307:66:0;;;;;;;:::i;:::-;3766:10;35386:16;35451:21;35469:2;35451:17;:21::i;:::-;35428:44;;35483:24;35510:25;35528:6;35510:17;:25::i;:::-;35483:52;;35548:66;35569:8;35579:4;35593:1;35597:3;35602:7;35548:66;;;;;;;;;;;;:20;:66::i;:::-;35627:19;35649:13;;;;;;;;;;;-1:-1:-1;;;;;35649:19:0;;;;;;;;;;35687:21;;;;35679:70;;;;-1:-1:-1;;;35679:70:0;;;;;;;:::i;:::-;35785:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35785:19:0;;;;;;;;;;;;35807:20;;;35785:42;;35856:54;;24506:25:1;;;24547:18;;;24540:34;;;35785:19:0;;35856:54;;;;;;24479:18:1;35856:54:0;;;;;;;35923:65;;;;;;;;;35967:1;35923:65;;;30576:1146;41574:198;41694:16;;;41708:1;41694:16;;;;;;;;;41640;;41669:22;;41694:16;;;;;;;;;;;;-1:-1:-1;41694:16:0;41669:41;;41732:7;41721:5;41727:1;41721:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;41759:5;41574:198;-1:-1:-1;;41574:198:0:o;55784:291::-;56001:66;56028:8;56038:4;56044:2;56048:3;56053:7;56062:4;56001:26;:66::i;40001:744::-;-1:-1:-1;;;;;40216:13:0;;7958:19;:23;40212:526;;40252:72;;-1:-1:-1;;;40252:72:0;;-1:-1:-1;;;;;40252:38:0;;;;;:72;;40291:8;;40301:4;;40307:2;;40311:6;;40319:4;;40252:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40252:72:0;;;;;;;;-1:-1:-1;;40252:72:0;;;;;;;;;;;;:::i;:::-;;;40248:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40600:6;40593:14;;-1:-1:-1;;;40593:14:0;;;;;;;;:::i;40248:479::-;;;40649:62;;-1:-1:-1;;;40649:62:0;;29382:2:1;40649:62:0;;;29364:21:1;29421:2;29401:18;;;29394:30;29460:34;29440:18;;;29433:62;-1:-1:-1;;;29511:18:1;;;29504:50;29571:19;;40649:62:0;29180:416:1;40248:479:0;-1:-1:-1;;;;;;40374:55:0;;-1:-1:-1;;;40374:55:0;40370:154;;40454:50;;-1:-1:-1;;;40454:50:0;;;;;;;:::i;40753:813::-;-1:-1:-1;;;;;40993:13:0;;7958:19;:23;40989:570;;41029:79;;-1:-1:-1;;;41029:79:0;;-1:-1:-1;;;;;41029:43:0;;;;;:79;;41073:8;;41083:4;;41089:3;;41094:7;;41103:4;;41029:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41029:79:0;;;;;;;;-1:-1:-1;;41029:79:0;;;;;;;;;;;;:::i;:::-;;;41025:523;;;;:::i;:::-;-1:-1:-1;;;;;;41190:60:0;;-1:-1:-1;;;41190:60:0;41186:159;;41275:50;;-1:-1:-1;;;41275:50:0;;;;;;;:::i;292:549::-;402:7;450:4;402:7;465:339;489:5;:12;485:1;:16;465:339;;;523:20;546:5;552:1;546:8;;;;;;;;:::i;:::-;;;;;;;523:31;;589:12;573;:28;569:224;;944:13;999:15;;;1035:4;1028:15;;;1082:4;1066:21;;622:57;;569:224;;;944:13;999:15;;;1035:4;1028:15;;;1082:4;1066:21;;720:57;;569:224;-1:-1:-1;503:3:0;;;;:::i;:::-;;;;465:339;;42927:931;-1:-1:-1;;;;;43249:18:0;;43245:160;;43289:9;43284:110;43308:3;:10;43304:1;:14;43284:110;;;43368:7;43376:1;43368:10;;;;;;;;:::i;:::-;;;;;;;43344:12;:20;43357:3;43361:1;43357:6;;;;;;;;:::i;:::-;;;;;;;43344:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;43320:3:0;;-1:-1:-1;43320:3:0;;:::i;:::-;;;43284:110;;;;43245:160;-1:-1:-1;;;;;43421:16:0;;43417:434;;43459:9;43454:386;43478:3;:10;43474:1;:14;43454:386;;;43514:10;43527:3;43531:1;43527:6;;;;;;;;:::i;:::-;;;;;;;43514:19;;43552:14;43569:7;43577:1;43569:10;;;;;;;;:::i;:::-;;;;;;;43552:27;;43598:14;43615:12;:16;43628:2;43615:16;;;;;;;;;;;;43598:33;;43668:6;43658;:16;;43650:69;;;;-1:-1:-1;;;43650:69:0;;31044:2:1;43650:69:0;;;31026:21:1;31083:2;31063:18;;;31056:30;31122:34;31102:18;;;31095:62;-1:-1:-1;;;31173:18:1;;;31166:38;31221:19;;43650:69:0;30842:404:1;43650:69:0;43771:16;;;;:12;:16;;;;;;43790:15;;43771:34;;43490:3;;;:::i;:::-;;;43454:386;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;1211:160::-;1276:20;;1332:13;;1325:21;1315:32;;1305:60;;1361:1;1358;1351:12;1376:180;1432:6;1485:2;1473:9;1464:7;1460:23;1456:32;1453:52;;;1501:1;1498;1491:12;1453:52;1524:26;1540:9;1524:26;:::i;1561:250::-;1646:1;1656:113;1670:6;1667:1;1664:13;1656:113;;;1746:11;;;1740:18;1727:11;;;1720:39;1692:2;1685:10;1656:113;;;-1:-1:-1;;1803:1:1;1785:16;;1778:27;1561:250::o;1816:271::-;1858:3;1896:5;1890:12;1923:6;1918:3;1911:19;1939:76;2008:6;2001:4;1996:3;1992:14;1985:4;1978:5;1974:16;1939:76;:::i;:::-;2069:2;2048:15;-1:-1:-1;;2044:29:1;2035:39;;;;2076:4;2031:50;;1816:271;-1:-1:-1;;1816:271:1:o;2092:220::-;2241:2;2230:9;2223:21;2204:4;2261:45;2302:2;2291:9;2287:18;2279:6;2261:45;:::i;2317:180::-;2376:6;2429:2;2417:9;2408:7;2404:23;2400:32;2397:52;;;2445:1;2442;2435:12;2397:52;-1:-1:-1;2468:23:1;;2317:180;-1:-1:-1;2317:180:1:o;2710:689::-;2805:6;2813;2821;2874:2;2862:9;2853:7;2849:23;2845:32;2842:52;;;2890:1;2887;2880:12;2842:52;2930:9;2917:23;-1:-1:-1;;;;;3000:2:1;2992:6;2989:14;2986:34;;;3016:1;3013;3006:12;2986:34;3054:6;3043:9;3039:22;3029:32;;3099:7;3092:4;3088:2;3084:13;3080:27;3070:55;;3121:1;3118;3111:12;3070:55;3161:2;3148:16;3187:2;3179:6;3176:14;3173:34;;;3203:1;3200;3193:12;3173:34;3258:7;3251:4;3241:6;3238:1;3234:14;3230:2;3226:23;3222:34;3219:47;3216:67;;;3279:1;3276;3269:12;3216:67;3310:4;3302:13;;;;3334:6;;-1:-1:-1;3372:20:1;;;;3359:34;;2710:689;-1:-1:-1;;;;2710:689:1:o;3404:127::-;3465:10;3460:3;3456:20;3453:1;3446:31;3496:4;3493:1;3486:15;3520:4;3517:1;3510:15;3536:249;3646:2;3627:13;;-1:-1:-1;;3623:27:1;3611:40;;-1:-1:-1;;;;;3666:34:1;;3702:22;;;3663:62;3660:88;;;3728:18;;:::i;:::-;3764:2;3757:22;-1:-1:-1;;3536:249:1:o;3790:183::-;3850:4;-1:-1:-1;;;;;3875:6:1;3872:30;3869:56;;;3905:18;;:::i;:::-;-1:-1:-1;3950:1:1;3946:14;3962:4;3942:25;;3790:183::o;3978:724::-;4032:5;4085:3;4078:4;4070:6;4066:17;4062:27;4052:55;;4103:1;4100;4093:12;4052:55;4139:6;4126:20;4165:4;4188:43;4228:2;4188:43;:::i;:::-;4260:2;4254:9;4272:31;4300:2;4292:6;4272:31;:::i;:::-;4338:18;;;4430:1;4426:10;;;;4414:23;;4410:32;;;4372:15;;;;-1:-1:-1;4454:15:1;;;4451:35;;;4482:1;4479;4472:12;4451:35;4518:2;4510:6;4506:15;4530:142;4546:6;4541:3;4538:15;4530:142;;;4612:17;;4600:30;;4650:12;;;;4563;;4530:142;;;-1:-1:-1;4690:6:1;3978:724;-1:-1:-1;;;;;;3978:724:1:o;4707:468::-;4771:5;-1:-1:-1;;;;;4797:6:1;4794:30;4791:56;;;4827:18;;:::i;:::-;4876:2;4870:9;4888:69;4945:2;4924:15;;-1:-1:-1;;4920:29:1;4951:4;4916:40;4870:9;4888:69;:::i;:::-;4975:6;4966:15;;5005:6;4997;4990:22;5045:3;5036:6;5031:3;5027:16;5024:25;5021:45;;;5062:1;5059;5052:12;5021:45;5112:6;5107:3;5100:4;5092:6;5088:17;5075:44;5167:1;5160:4;5151:6;5143;5139:19;5135:30;5128:41;;4707:468;;;;;:::o;5180:220::-;5222:5;5275:3;5268:4;5260:6;5256:17;5252:27;5242:55;;5293:1;5290;5283:12;5242:55;5315:79;5390:3;5381:6;5368:20;5361:4;5353:6;5349:17;5315:79;:::i;5405:943::-;5559:6;5567;5575;5583;5591;5644:3;5632:9;5623:7;5619:23;5615:33;5612:53;;;5661:1;5658;5651:12;5612:53;5684:29;5703:9;5684:29;:::i;:::-;5674:39;;5732:38;5766:2;5755:9;5751:18;5732:38;:::i;:::-;5722:48;;5821:2;5810:9;5806:18;5793:32;-1:-1:-1;;;;;5885:2:1;5877:6;5874:14;5871:34;;;5901:1;5898;5891:12;5871:34;5924:61;5977:7;5968:6;5957:9;5953:22;5924:61;:::i;:::-;5914:71;;6038:2;6027:9;6023:18;6010:32;5994:48;;6067:2;6057:8;6054:16;6051:36;;;6083:1;6080;6073:12;6051:36;6106:63;6161:7;6150:8;6139:9;6135:24;6106:63;:::i;:::-;6096:73;;6222:3;6211:9;6207:19;6194:33;6178:49;;6252:2;6242:8;6239:16;6236:36;;;6268:1;6265;6258:12;6236:36;;6291:51;6334:7;6323:8;6312:9;6308:24;6291:51;:::i;:::-;6281:61;;;5405:943;;;;;;;;:::o;6353:450::-;6422:6;6475:2;6463:9;6454:7;6450:23;6446:32;6443:52;;;6491:1;6488;6481:12;6443:52;6531:9;6518:23;-1:-1:-1;;;;;6556:6:1;6553:30;6550:50;;;6596:1;6593;6586:12;6550:50;6619:22;;6672:4;6664:13;;6660:27;-1:-1:-1;6650:55:1;;6701:1;6698;6691:12;6650:55;6724:73;6789:7;6784:2;6771:16;6766:2;6762;6758:11;6724:73;:::i;6808:1208::-;6926:6;6934;6987:2;6975:9;6966:7;6962:23;6958:32;6955:52;;;7003:1;7000;6993:12;6955:52;7043:9;7030:23;-1:-1:-1;;;;;7113:2:1;7105:6;7102:14;7099:34;;;7129:1;7126;7119:12;7099:34;7167:6;7156:9;7152:22;7142:32;;7212:7;7205:4;7201:2;7197:13;7193:27;7183:55;;7234:1;7231;7224:12;7183:55;7270:2;7257:16;7292:4;7315:43;7355:2;7315:43;:::i;:::-;7387:2;7381:9;7399:31;7427:2;7419:6;7399:31;:::i;:::-;7465:18;;;7553:1;7549:10;;;;7541:19;;7537:28;;;7499:15;;;;-1:-1:-1;7577:19:1;;;7574:39;;;7609:1;7606;7599:12;7574:39;7633:11;;;;7653:148;7669:6;7664:3;7661:15;7653:148;;;7735:23;7754:3;7735:23;:::i;:::-;7723:36;;7686:12;;;;7779;;;;7653:148;;;7820:6;-1:-1:-1;;7864:18:1;;7851:32;;-1:-1:-1;;7895:16:1;;;7892:36;;;7924:1;7921;7914:12;7892:36;;7947:63;8002:7;7991:8;7980:9;7976:24;7947:63;:::i;:::-;7937:73;;;6808:1208;;;;;:::o;8021:435::-;8074:3;8112:5;8106:12;8139:6;8134:3;8127:19;8165:4;8194:2;8189:3;8185:12;8178:19;;8231:2;8224:5;8220:14;8252:1;8262:169;8276:6;8273:1;8270:13;8262:169;;;8337:13;;8325:26;;8371:12;;;;8406:15;;;;8298:1;8291:9;8262:169;;;-1:-1:-1;8447:3:1;;8021:435;-1:-1:-1;;;;;8021:435:1:o;8461:261::-;8640:2;8629:9;8622:21;8603:4;8660:56;8712:2;8701:9;8697:18;8689:6;8660:56;:::i;8727:669::-;8854:6;8862;8870;8923:2;8911:9;8902:7;8898:23;8894:32;8891:52;;;8939:1;8936;8929:12;8891:52;8962:29;8981:9;8962:29;:::i;:::-;8952:39;;9042:2;9031:9;9027:18;9014:32;-1:-1:-1;;;;;9106:2:1;9098:6;9095:14;9092:34;;;9122:1;9119;9112:12;9092:34;9145:61;9198:7;9189:6;9178:9;9174:22;9145:61;:::i;:::-;9135:71;;9259:2;9248:9;9244:18;9231:32;9215:48;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9327:63;9382:7;9371:8;9360:9;9356:24;9327:63;:::i;:::-;9317:73;;;8727:669;;;;;:::o;9586:254::-;9651:6;9659;9712:2;9700:9;9691:7;9687:23;9683:32;9680:52;;;9728:1;9725;9718:12;9680:52;9751:29;9770:9;9751:29;:::i;:::-;9741:39;;9799:35;9830:2;9819:9;9815:18;9799:35;:::i;:::-;9789:45;;9586:254;;;;;:::o;9845:1023::-;9938:6;9946;9999:2;9987:9;9978:7;9974:23;9970:32;9967:52;;;10015:1;10012;10005:12;9967:52;10055:9;10042:23;-1:-1:-1;;;;;10080:6:1;10077:30;10074:50;;;10120:1;10117;10110:12;10074:50;10143:22;;10196:4;10188:13;;10184:27;-1:-1:-1;10174:55:1;;10225:1;10222;10215:12;10174:55;10261:2;10248:16;10283:4;10306:43;10346:2;10306:43;:::i;:::-;10378:2;10372:9;10390:31;10418:2;10410:6;10390:31;:::i;:::-;10456:18;;;10544:1;10540:10;;;;10532:19;;10528:28;;;10490:15;;;;-1:-1:-1;10568:19:1;;;10565:39;;;10600:1;10597;10590:12;10565:39;10624:11;;;;10644:142;10660:6;10655:3;10652:15;10644:142;;;10726:17;;10714:30;;10677:12;;;;10764;;;;10644:142;;;10805:6;10843:18;;;;10830:32;;-1:-1:-1;;;;;;9845:1023:1:o;10873:322::-;10950:6;10958;10966;11019:2;11007:9;10998:7;10994:23;10990:32;10987:52;;;11035:1;11032;11025:12;10987:52;11058:29;11077:9;11058:29;:::i;:::-;11048:39;11134:2;11119:18;;11106:32;;-1:-1:-1;11185:2:1;11170:18;;;11157:32;;10873:322;-1:-1:-1;;;10873:322:1:o;11200:260::-;11268:6;11276;11329:2;11317:9;11308:7;11304:23;11300:32;11297:52;;;11345:1;11342;11335:12;11297:52;11368:29;11387:9;11368:29;:::i;:::-;11358:39;;11416:38;11450:2;11439:9;11435:18;11416:38;:::i;11465:606::-;11569:6;11577;11585;11593;11601;11654:3;11642:9;11633:7;11629:23;11625:33;11622:53;;;11671:1;11668;11661:12;11622:53;11694:29;11713:9;11694:29;:::i;:::-;11684:39;;11742:38;11776:2;11765:9;11761:18;11742:38;:::i;:::-;11732:48;;11827:2;11816:9;11812:18;11799:32;11789:42;;11878:2;11867:9;11863:18;11850:32;11840:42;;11933:3;11922:9;11918:19;11905:33;-1:-1:-1;;;;;11953:6:1;11950:30;11947:50;;;11993:1;11990;11983:12;11947:50;12016:49;12057:7;12048:6;12037:9;12033:22;12016:49;:::i;12076:186::-;12135:6;12188:2;12176:9;12167:7;12163:23;12159:32;12156:52;;;12204:1;12201;12194:12;12156:52;12227:29;12246:9;12227:29;:::i;12679:356::-;12881:2;12863:21;;;12900:18;;;12893:30;12959:34;12954:2;12939:18;;12932:62;13026:2;13011:18;;12679:356::o;13040:380::-;13119:1;13115:12;;;;13162;;;13183:61;;13237:4;13229:6;13225:17;13215:27;;13183:61;13290:2;13282:6;13279:14;13259:18;13256:38;13253:161;;13336:10;13331:3;13327:20;13324:1;13317:31;13371:4;13368:1;13361:15;13399:4;13396:1;13389:15;13253:161;;13040:380;;;:::o;13551:1187::-;13828:3;13857:1;13890:6;13884:13;13920:36;13946:9;13920:36;:::i;:::-;13975:1;13992:18;;;14019:133;;;;14166:1;14161:356;;;;13985:532;;14019:133;-1:-1:-1;;14052:24:1;;14040:37;;14125:14;;14118:22;14106:35;;14097:45;;;-1:-1:-1;14019:133:1;;14161:356;14192:6;14189:1;14182:17;14222:4;14267:2;14264:1;14254:16;14292:1;14306:165;14320:6;14317:1;14314:13;14306:165;;;14398:14;;14385:11;;;14378:35;14441:16;;;;14335:10;;14306:165;;;14310:3;;;14500:6;14495:3;14491:16;14484:23;;13985:532;;;;;14548:6;14542:13;14564:68;14623:8;14618:3;14611:4;14603:6;14599:17;14564:68;:::i;:::-;-1:-1:-1;;;14654:18:1;;14681:22;;;14730:1;14719:13;;13551:1187;-1:-1:-1;;;;13551:1187:1:o;16044:127::-;16105:10;16100:3;16096:20;16093:1;16086:31;16136:4;16133:1;16126:15;16160:4;16157:1;16150:15;16176:125;16241:9;;;16262:10;;;16259:36;;;16275:18;;:::i;16306:401::-;16508:2;16490:21;;;16547:2;16527:18;;;16520:30;16586:34;16581:2;16566:18;;16559:62;-1:-1:-1;;;16652:2:1;16637:18;;16630:35;16697:3;16682:19;;16306:401::o;16712:168::-;16785:9;;;16816;;16833:15;;;16827:22;;16813:37;16803:71;;16854:18;;:::i;17656:545::-;17758:2;17753:3;17750:11;17747:448;;;17794:1;17819:5;17815:2;17808:17;17864:4;17860:2;17850:19;17934:2;17922:10;17918:19;17915:1;17911:27;17905:4;17901:38;17970:4;17958:10;17955:20;17952:47;;;-1:-1:-1;17993:4:1;17952:47;18048:2;18043:3;18039:12;18036:1;18032:20;18026:4;18022:31;18012:41;;18103:82;18121:2;18114:5;18111:13;18103:82;;;18166:17;;;18147:1;18136:13;18103:82;;18377:1352;18503:3;18497:10;-1:-1:-1;;;;;18522:6:1;18519:30;18516:56;;;18552:18;;:::i;:::-;18581:97;18671:6;18631:38;18663:4;18657:11;18631:38;:::i;:::-;18625:4;18581:97;:::i;:::-;18733:4;;18797:2;18786:14;;18814:1;18809:663;;;;19516:1;19533:6;19530:89;;;-1:-1:-1;19585:19:1;;;19579:26;19530:89;-1:-1:-1;;18334:1:1;18330:11;;;18326:24;18322:29;18312:40;18358:1;18354:11;;;18309:57;19632:81;;18779:944;;18809:663;13498:1;13491:14;;;13535:4;13522:18;;-1:-1:-1;;18845:20:1;;;18963:236;18977:7;18974:1;18971:14;18963:236;;;19066:19;;;19060:26;19045:42;;19158:27;;;;19126:1;19114:14;;;;18993:19;;18963:236;;;18967:3;19227:6;19218:7;19215:19;19212:201;;;19288:19;;;19282:26;-1:-1:-1;;19371:1:1;19367:14;;;19383:3;19363:24;19359:37;19355:42;19340:58;19325:74;;19212:201;-1:-1:-1;;;;;19459:1:1;19443:14;;;19439:22;19426:36;;-1:-1:-1;18377:1352:1:o;20144:127::-;20205:10;20200:3;20196:20;20193:1;20186:31;20236:4;20233:1;20226:15;20260:4;20257:1;20250:15;20276:135;20315:3;20336:17;;;20333:43;;20356:18;;:::i;:::-;-1:-1:-1;20403:1:1;20392:13;;20276:135::o;20416:411::-;20618:2;20600:21;;;20657:2;20637:18;;;20630:30;20696:34;20691:2;20676:18;;20669:62;-1:-1:-1;;;20762:2:1;20747:18;;20740:45;20817:3;20802:19;;20416:411::o;21534:128::-;21601:9;;;21622:11;;;21619:37;;;21636:18;;:::i;23556:127::-;23617:10;23612:3;23608:20;23605:1;23598:31;23648:4;23645:1;23638:15;23672:4;23669:1;23662:15;23688:120;23728:1;23754;23744:35;;23759:18;;:::i;:::-;-1:-1:-1;23793:9:1;;23688:120::o;23813:112::-;23845:1;23871;23861:35;;23876:18;;:::i;:::-;-1:-1:-1;23910:9:1;;23813:112::o;24585:404::-;24787:2;24769:21;;;24826:2;24806:18;;;24799:30;24865:34;24860:2;24845:18;;24838:62;-1:-1:-1;;;24931:2:1;24916:18;;24909:38;24979:3;24964:19;;24585:404::o;24994:401::-;25196:2;25178:21;;;25235:2;25215:18;;;25208:30;25274:34;25269:2;25254:18;;25247:62;-1:-1:-1;;;25340:2:1;25325:18;;25318:35;25385:3;25370:19;;24994:401::o;25400:406::-;25602:2;25584:21;;;25641:2;25621:18;;;25614:30;25680:34;25675:2;25660:18;;25653:62;-1:-1:-1;;;25746:2:1;25731:18;;25724:40;25796:3;25781:19;;25400:406::o;25811:465::-;26068:2;26057:9;26050:21;26031:4;26094:56;26146:2;26135:9;26131:18;26123:6;26094:56;:::i;:::-;26198:9;26190:6;26186:22;26181:2;26170:9;26166:18;26159:50;26226:44;26263:6;26255;26226:44;:::i;:::-;26218:52;25811:465;-1:-1:-1;;;;;25811:465:1:o;26281:399::-;26483:2;26465:21;;;26522:2;26502:18;;;26495:30;26561:34;26556:2;26541:18;;26534:62;-1:-1:-1;;;26627:2:1;26612:18;;26605:33;26670:3;26655:19;;26281:399::o;26685:400::-;26887:2;26869:21;;;26926:2;26906:18;;;26899:30;26965:34;26960:2;26945:18;;26938:62;-1:-1:-1;;;27031:2:1;27016:18;;27009:34;27075:3;27060:19;;26685:400::o;27500:561::-;-1:-1:-1;;;;;27797:15:1;;;27779:34;;27849:15;;27844:2;27829:18;;27822:43;27896:2;27881:18;;27874:34;;;27939:2;27924:18;;27917:34;;;27759:3;27982;27967:19;;27960:32;;;27722:4;;28009:46;;28035:19;;28027:6;28009:46;:::i;:::-;28001:54;27500:561;-1:-1:-1;;;;;;;27500:561:1:o;28066:249::-;28135:6;28188:2;28176:9;28167:7;28163:23;28159:32;28156:52;;;28204:1;28201;28194:12;28156:52;28236:9;28230:16;28255:30;28279:5;28255:30;:::i;28320:179::-;28355:3;28397:1;28379:16;28376:23;28373:120;;;28443:1;28440;28437;28422:23;-1:-1:-1;28480:1:1;28474:8;28469:3;28465:18;28373:120;28320:179;:::o;28504:671::-;28543:3;28585:4;28567:16;28564:26;28561:39;;;28504:671;:::o;28561:39::-;28627:2;28621:9;-1:-1:-1;;28692:16:1;28688:25;;28685:1;28621:9;28664:50;28743:4;28737:11;28767:16;-1:-1:-1;;;;;28873:2:1;28866:4;28858:6;28854:17;28851:25;28846:2;28838:6;28835:14;28832:45;28829:58;;;28880:5;;;;;28504:671;:::o;28829:58::-;28917:6;28911:4;28907:17;28896:28;;28953:3;28947:10;28980:2;28972:6;28969:14;28966:27;;;28986:5;;;;;;28504:671;:::o;28966:27::-;29070:2;29051:16;29045:4;29041:27;29037:36;29030:4;29021:6;29016:3;29012:16;29008:27;29005:69;29002:82;;;29077:5;;;;;;28504:671;:::o;29002:82::-;29093:57;29144:4;29135:6;29127;29123:19;29119:30;29113:4;29093:57;:::i;:::-;-1:-1:-1;29166:3:1;;28504:671;-1:-1:-1;;;;;28504:671:1:o;29601:404::-;29803:2;29785:21;;;29842:2;29822:18;;;29815:30;29881:34;29876:2;29861:18;;29854:62;-1:-1:-1;;;29947:2:1;29932:18;;29925:38;29995:3;29980:19;;29601:404::o;30010:827::-;-1:-1:-1;;;;;30407:15:1;;;30389:34;;30459:15;;30454:2;30439:18;;30432:43;30369:3;30506:2;30491:18;;30484:31;;;30332:4;;30538:57;;30575:19;;30567:6;30538:57;:::i;:::-;30643:9;30635:6;30631:22;30626:2;30615:9;30611:18;30604:50;30677:44;30714:6;30706;30677:44;:::i;:::-;30663:58;;30770:9;30762:6;30758:22;30752:3;30741:9;30737:19;30730:51;30798:33;30824:6;30816;30798:33;:::i;:::-;30790:41;30010:827;-1:-1:-1;;;;;;;;30010:827:1:o
Swarm Source
ipfs://95f0c5156356f6a4295d6076ab133ed2a212568249bb1aab310742c63633cce4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.