Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 499 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19368593 | 338 days ago | IN | 0 ETH | 0.00159411 | ||||
Set Approval For... | 17968655 | 534 days ago | IN | 0 ETH | 0.00033022 | ||||
Set Approval For... | 17898401 | 544 days ago | IN | 0 ETH | 0.00055009 | ||||
Set Approval For... | 17519136 | 597 days ago | IN | 0 ETH | 0.00064856 | ||||
Set Approval For... | 17162830 | 647 days ago | IN | 0 ETH | 0.00296189 | ||||
Set Approval For... | 16989155 | 672 days ago | IN | 0 ETH | 0.00122314 | ||||
Set Approval For... | 16915401 | 682 days ago | IN | 0 ETH | 0.00066857 | ||||
Set Approval For... | 16881274 | 687 days ago | IN | 0 ETH | 0.0005456 | ||||
Set Approval For... | 16719311 | 710 days ago | IN | 0 ETH | 0.00037335 | ||||
Withdraw | 16388372 | 756 days ago | IN | 0 ETH | 0.00059873 | ||||
Set Payment Addr... | 16388364 | 756 days ago | IN | 0 ETH | 0.0004899 | ||||
Transfer Ownersh... | 16388357 | 756 days ago | IN | 0 ETH | 0.00047911 | ||||
Set Approval For... | 16312356 | 767 days ago | IN | 0 ETH | 0.00070681 | ||||
Safe Transfer Fr... | 16298528 | 769 days ago | IN | 0 ETH | 0.00188092 | ||||
Mint Public With... | 16298518 | 769 days ago | IN | 0.04 ETH | 0.00343455 | ||||
Set Approval For... | 16223482 | 779 days ago | IN | 0 ETH | 0.00059675 | ||||
Mint Public | 16223457 | 779 days ago | IN | 0.04 ETH | 0.00271823 | ||||
Set Approval For... | 16209919 | 781 days ago | IN | 0 ETH | 0.00063013 | ||||
Set Approval For... | 16191021 | 784 days ago | IN | 0 ETH | 0.00108994 | ||||
Set Approval For... | 16080119 | 799 days ago | IN | 0 ETH | 0.00047699 | ||||
Mint Public | 16046557 | 804 days ago | IN | 0.24 ETH | 0.01093317 | ||||
Mint Public | 16046550 | 804 days ago | IN | 0.24 ETH | 0.01011185 | ||||
Mint Public | 16024158 | 807 days ago | IN | 0.08 ETH | 0.00340411 | ||||
Mint Public | 16024007 | 807 days ago | IN | 0.08 ETH | 0.00388485 | ||||
Safe Transfer Fr... | 16010468 | 809 days ago | IN | 0 ETH | 0.00106526 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16388372 | 756 days ago | 51.12 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Arenamon
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-30 */ // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ 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) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) 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) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ 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); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // 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/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // 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/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @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, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: LOL.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Arenamon is ERC721Enumerable, Ownable, ReentrancyGuard { using Counters for Counters.Counter; using Strings for uint256; using Address for address; uint256 public MAX_SUPPLY = 10000; uint256 public PUBLIC_SUPPLY = 9960; uint256 public PRESALE_PRICE = 0.2 ether; uint256 public PUBLIC_PRICE = 0.2 ether; uint256 public PRESALE_MINT_LIMIT = 3; uint256 public PUBLIC_MINT_LIMIT = 3; bytes32 public m_whitelistRoot; address public paymentAddress; bool public isPreSaleActive = false; bool public isPublicSaleActive = false; mapping(address => uint256) public m_mapPresaleMintCount; mapping(address => uint256) public m_mapPublicMintCount; string private _tokenBaseURI = ""; uint256 internal lastRandom; mapping(uint256 => uint256) public indexer; constructor() ERC721("Arenamon", "ARN") { paymentAddress = msg.sender; } function setPaymentAddress(address newPaymentAddress) external onlyOwner { paymentAddress = newPaymentAddress; } function setWhiteListRoot(bytes32 root) external onlyOwner { m_whitelistRoot = root; } function isWhiteListed(bytes32 _leafNode, bytes32[] memory proof) public view returns (bool) { return MerkleProof.verify(proof, m_whitelistRoot, _leafNode); } function toLeaf( address account, uint256 index, uint256 amount ) public pure returns (bytes32) { return keccak256(abi.encodePacked(index, account, amount)); } function setMintPrice(uint256 presaleMintPrice, uint256 publicMintPrice) external onlyOwner { PRESALE_PRICE = presaleMintPrice; PUBLIC_PRICE = publicMintPrice; } function setMaxLimit(uint256 maxSupply, uint256 publicSupply) external onlyOwner { MAX_SUPPLY = maxSupply; PUBLIC_SUPPLY = publicSupply; } function setMintLimit(uint256 presaleMintLimit, uint256 publicMintLimit) external onlyOwner { PRESALE_MINT_LIMIT = presaleMintLimit; PUBLIC_MINT_LIMIT = publicMintLimit; } function setBaseURI(string memory baseURI) external onlyOwner { _tokenBaseURI = baseURI; } function airdrop(address[] memory airdropAddress, uint256 numberOfTokens) external onlyOwner { require( totalSupply() + airdropAddress.length * numberOfTokens <= PUBLIC_SUPPLY, "Purchase would exceed PUBLIC_SUPPLY" ); for (uint256 k = 0; k < airdropAddress.length; k++) { _mintARNS(airdropAddress[k], numberOfTokens); } } function mintForTeam(address to) external onlyOwner { uint256 _tokenId; for (_tokenId = PUBLIC_SUPPLY + 1; _tokenId <= MAX_SUPPLY; _tokenId++) { if (!_exists(_tokenId)) _safeMint(to, _tokenId); } } function switchWhitelistSaleState () external onlyOwner { isPreSaleActive = !isPreSaleActive; } function switchPublicSaleState () external onlyOwner { isPublicSaleActive = !isPublicSaleActive; } function mintPublic(uint256 numberOfTokens) external payable nonReentrant { require(isPublicSaleActive, "sale is not active yet"); require( totalSupply() + numberOfTokens <= PUBLIC_SUPPLY, "Purchase would exceed PUBLIC_SUPPLY" ); require( PUBLIC_PRICE * numberOfTokens <= msg.value, "ETH amount is not sufficient" ); m_mapPublicMintCount[msg.sender] = m_mapPublicMintCount[msg.sender] + numberOfTokens; require( m_mapPublicMintCount[msg.sender] <= PUBLIC_MINT_LIMIT, "Overflow for PUBLIC_MINT_LIMIT" ); _mintARNS(msg.sender, numberOfTokens); } function mintPublicWithCreditCard(address to, uint256 numberOfTokens) external payable nonReentrant { require(isPublicSaleActive, "sale is not active yet"); require( totalSupply() + numberOfTokens <= PUBLIC_SUPPLY, "Purchase would exceed PUBLIC_SUPPLY" ); require( PUBLIC_PRICE * numberOfTokens <= msg.value, "ETH amount is not sufficient" ); m_mapPublicMintCount[to] = m_mapPublicMintCount[to] + numberOfTokens; require( m_mapPublicMintCount[to] <= PUBLIC_MINT_LIMIT, "Overflow for PUBLIC_MINT_LIMIT" ); _mintARNS(to, numberOfTokens); } function mintWhitelist( address to, uint256 numberOfTokens, uint256 index, uint256 amount, bytes32[] calldata proof ) external payable nonReentrant { require( totalSupply() + numberOfTokens <= PUBLIC_SUPPLY, "Purchase would exceed PUBLIC_SUPPLY" ); require(isPreSaleActive, " whitelist sale is not active yet"); require( isWhiteListed(toLeaf(msg.sender, index, amount), proof), "Invalid proof" ); require( PRESALE_PRICE * numberOfTokens <= msg.value, "ETH amount is not sufficient" ); m_mapPresaleMintCount[msg.sender] = m_mapPresaleMintCount[msg.sender] + numberOfTokens; require( m_mapPresaleMintCount[msg.sender] <= PRESALE_MINT_LIMIT, "Overflow for PRESALE_MINT_LIMIT" ); _mintARNS(to, numberOfTokens); } function enoughRandom() internal view returns (uint256 seed) { seed = uint256( keccak256( abi.encodePacked( block.timestamp + block.difficulty + (( uint256(keccak256(abi.encodePacked(block.coinbase))) ) / (block.timestamp)) + block.gaslimit + ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) + block.number ) ) ); } function _mintARNS(address to, uint256 numberOfMints) internal { require(msg.sender == tx.origin, "contract not allowed"); lastRandom = enoughRandom(); uint256 _indexerLength; unchecked { _indexerLength = PUBLIC_SUPPLY - totalSupply(); } for (uint256 i; i < numberOfMints; ) { lastRandom >>= i; // Find the next available tokenID //slither-disable-next-line weak-prng uint256 index = lastRandom % _indexerLength; uint256 tokenId = indexer[index]; if (tokenId == 0) { tokenId = index; } // Swap the picked tokenId for the last element unchecked { --_indexerLength; } uint256 last = indexer[_indexerLength]; if (last == 0) { // this _indexerLength value had not been picked before indexer[index] = _indexerLength; } else { // this _indexerLength value had been picked and swapped before indexer[index] = last; } // Mint ARN and generate its attributes _safeMint(to, tokenId + 1); unchecked { ++i; } } } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { require(_exists(tokenId), "Token does not exist"); return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } function withdraw() public onlyOwner nonReentrant { (bool os, ) = payable(paymentAddress).call{value: address(this).balance}(''); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropAddress","type":"address[]"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_leafNode","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"m_mapPresaleMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"m_mapPublicMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"m_whitelistRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mintForTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintPublicWithCreditCard","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWhitelist","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"publicSupply","type":"uint256"}],"name":"setMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintLimit","type":"uint256"},{"internalType":"uint256","name":"publicMintLimit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintPrice","type":"uint256"},{"internalType":"uint256","name":"publicMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPaymentAddress","type":"address"}],"name":"setPaymentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setWhiteListRoot","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":"switchPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"switchWhitelistSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toLeaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
612710600c556126e8600d556702c68af0bb140000600e819055600f55600360108190556011556013805461ffff60a01b1916905560a0604052600060809081526016906200004f9082620001f0565b503480156200005d57600080fd5b506040518060400160405280600881526020016720b932b730b6b7b760c11b8152506040518060400160405280600381526020016220a92760e91b8152508160009081620000ac9190620001f0565b506001620000bb8282620001f0565b505050620000d8620000d2620000f560201b60201c565b620000f9565b6001600b55601380546001600160a01b03191633179055620002bc565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200017657607f821691505b6020821081036200019757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001eb57600081815260208120601f850160051c81016020861015620001c65750805b601f850160051c820191505b81811015620001e757828155600101620001d2565b5050505b505050565b81516001600160401b038111156200020c576200020c6200014b565b62000224816200021d845462000161565b846200019d565b602080601f8311600181146200025c5760008415620002435750858301515b600019600386901b1c1916600185901b178555620001e7565b600085815260208120601f198616915b828110156200028d578886015182559484019460019091019084016200026c565b5085821015620002ac5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612f7080620002cc6000396000f3fe6080604052600436106102935760003560e01c80636700e9f81161015a578063bd645454116100c1578063efd0cbf91161007a578063efd0cbf9146107d8578063f2fde38b146107eb578063f56beff61461080b578063f5ebec801461082b578063fa4cb69d14610841578063fdaf01251461085457600080fd5b8063bd645454146106ef578063c1608d6b1461070f578063c204642c1461073c578063c61490751461075c578063c87b56dd1461076f578063e985e9c51461078f57600080fd5b806395d89b411161011357806395d89b411461064d5780639d044ed314610662578063a22cb46514610683578063a653a3bc146106a3578063b88d4fde146106b9578063bceae77b146106d957600080fd5b80636700e9f8146105975780636fad40d5146105c457806370a08231146105e4578063715018a6146106045780638342083a146106195780638da5cb5b1461062f57600080fd5b806342842e0e116101fe5780635e1e1004116101b75780635e1e1004146104f6578063611f3f101461051657806362dc6e211461052c578063633423be146105425780636352211e1461056257806363a436cd1461058257600080fd5b806342842e0e1461044157806345149bb3146104615780634f6ccce71461048157806355f804b3146104a1578063560cf9f3146104c15780635b1d7350146104d657600080fd5b80631e84c413116102505780631e84c4131461038857806323b872dd146103a957806323cdcb06146103c95780632f745c59146103f657806332cb6b0c146104165780633ccfd60b1461042c57600080fd5b806301ffc9a7146102985780630442bfa8146102cd57806306fdde03146102ef578063081812fc14610311578063095ea7b31461034957806318160ddd14610369575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612535565b610874565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004612552565b61089f565b005b3480156102fb57600080fd5b506103046108dd565b6040516102c491906125cc565b34801561031d57600080fd5b5061033161032c3660046125df565b61096f565b6040516001600160a01b0390911681526020016102c4565b34801561035557600080fd5b506102ed610364366004612614565b610a04565b34801561037557600080fd5b506008545b6040519081526020016102c4565b34801561039457600080fd5b506013546102b890600160a81b900460ff1681565b3480156103b557600080fd5b506102ed6103c436600461263e565b610b19565b3480156103d557600080fd5b5061037a6103e436600461267a565b60146020526000908152604090205481565b34801561040257600080fd5b5061037a610411366004612614565b610b4a565b34801561042257600080fd5b5061037a600c5481565b34801561043857600080fd5b506102ed610be0565b34801561044d57600080fd5b506102ed61045c36600461263e565b610c99565b34801561046d57600080fd5b506102ed61047c3660046125df565b610cb4565b34801561048d57600080fd5b5061037a61049c3660046125df565b610ce3565b3480156104ad57600080fd5b506102ed6104bc366004612734565b610d76565b3480156104cd57600080fd5b506102ed610db0565b3480156104e257600080fd5b506102ed6104f136600461267a565b610dfb565b34801561050257600080fd5b506102ed61051136600461267a565b610e7a565b34801561052257600080fd5b5061037a600f5481565b34801561053857600080fd5b5061037a600e5481565b34801561054e57600080fd5b50601354610331906001600160a01b031681565b34801561056e57600080fd5b5061033161057d3660046125df565b610ec6565b34801561058e57600080fd5b506102ed610f3d565b3480156105a357600080fd5b5061037a6105b236600461267a565b60156020526000908152604090205481565b3480156105d057600080fd5b506102ed6105df366004612552565b610f88565b3480156105f057600080fd5b5061037a6105ff36600461267a565b610fbd565b34801561061057600080fd5b506102ed611044565b34801561062557600080fd5b5061037a600d5481565b34801561063b57600080fd5b50600a546001600160a01b0316610331565b34801561065957600080fd5b5061030461107a565b34801561066e57600080fd5b506013546102b890600160a01b900460ff1681565b34801561068f57600080fd5b506102ed61069e36600461277d565b611089565b3480156106af57600080fd5b5061037a60125481565b3480156106c557600080fd5b506102ed6106d43660046127b9565b611094565b3480156106e557600080fd5b5061037a60115481565b3480156106fb57600080fd5b506102b861070a366004612859565b6110cc565b34801561071b57600080fd5b5061037a61072a3660046125df565b60186020526000908152604090205481565b34801561074857600080fd5b506102ed6107573660046128fb565b6110e2565b6102ed61076a366004612614565b611188565b34801561077b57600080fd5b5061030461078a3660046125df565b611306565b34801561079b57600080fd5b506102b86107aa366004612999565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102ed6107e63660046125df565b611396565b3480156107f757600080fd5b506102ed61080636600461267a565b6114f9565b34801561081757600080fd5b506102ed610826366004612552565b611594565b34801561083757600080fd5b5061037a60105481565b6102ed61084f3660046129cc565b6115c9565b34801561086057600080fd5b5061037a61086f366004612a6e565b6117cd565b60006001600160e01b0319821663780e9d6360e01b1480610899575061089982611811565b92915050565b600a546001600160a01b031633146108d25760405162461bcd60e51b81526004016108c990612aa1565b60405180910390fd5b600e91909155600f55565b6060600080546108ec90612ad6565b80601f016020809104026020016040519081016040528092919081815260200182805461091890612ad6565b80156109655780601f1061093a57610100808354040283529160200191610965565b820191906000526020600020905b81548152906001019060200180831161094857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109e85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108c9565b506000908152600460205260409020546001600160a01b031690565b6000610a0f82610ec6565b9050806001600160a01b0316836001600160a01b031603610a7c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108c9565b336001600160a01b0382161480610a985750610a9881336107aa565b610b0a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108c9565b610b148383611861565b505050565b610b2333826118cf565b610b3f5760405162461bcd60e51b81526004016108c990612b10565b610b148383836119c6565b6000610b5583610fbd565b8210610bb75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108c9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c0a5760405162461bcd60e51b81526004016108c990612aa1565b6002600b5403610c2c5760405162461bcd60e51b81526004016108c990612b61565b6002600b556013546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5050905080610c9157600080fd5b506001600b55565b610b1483838360405180602001604052806000815250611094565b600a546001600160a01b03163314610cde5760405162461bcd60e51b81526004016108c990612aa1565b601255565b6000610cee60085490565b8210610d515760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108c9565b60088281548110610d6457610d64612b98565b90600052602060002001549050919050565b600a546001600160a01b03163314610da05760405162461bcd60e51b81526004016108c990612aa1565b6016610dac8282612bfc565b5050565b600a546001600160a01b03163314610dda5760405162461bcd60e51b81526004016108c990612aa1565b6013805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600a546001600160a01b03163314610e255760405162461bcd60e51b81526004016108c990612aa1565b6000600d546001610e369190612cd2565b90505b600c548111610dac576000818152600260205260409020546001600160a01b0316610e6857610e688282611b6d565b80610e7281612cea565b915050610e39565b600a546001600160a01b03163314610ea45760405162461bcd60e51b81526004016108c990612aa1565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b0316806108995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108c9565b600a546001600160a01b03163314610f675760405162461bcd60e51b81526004016108c990612aa1565b6013805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600a546001600160a01b03163314610fb25760405162461bcd60e51b81526004016108c990612aa1565b601091909155601155565b60006001600160a01b0382166110285760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108c9565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461106e5760405162461bcd60e51b81526004016108c990612aa1565b6110786000611b87565b565b6060600180546108ec90612ad6565b610dac338383611bd9565b61109e33836118cf565b6110ba5760405162461bcd60e51b81526004016108c990612b10565b6110c684848484611ca7565b50505050565b60006110db8260125485611cda565b9392505050565b600a546001600160a01b0316331461110c5760405162461bcd60e51b81526004016108c990612aa1565b600d5481835161111c9190612d03565b6008546111299190612cd2565b11156111475760405162461bcd60e51b81526004016108c990612d22565b60005b8251811015610b145761117683828151811061116857611168612b98565b602002602001015183611cf0565b8061118081612cea565b91505061114a565b6002600b54036111aa5760405162461bcd60e51b81526004016108c990612b61565b6002600b55601354600160a81b900460ff166112015760405162461bcd60e51b81526020600482015260166024820152751cd85b19481a5cc81b9bdd081858dd1a5d99481e595d60521b60448201526064016108c9565b600d548161120e60085490565b6112189190612cd2565b11156112365760405162461bcd60e51b81526004016108c990612d22565b3481600f546112459190612d03565b11156112635760405162461bcd60e51b81526004016108c990612d65565b6001600160a01b038216600090815260156020526040902054611287908290612cd2565b6001600160a01b038316600090815260156020526040902081905560115410156112f35760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d4954000060448201526064016108c9565b6112fd8282611cf0565b50506001600b55565b6000818152600260205260409020546060906001600160a01b03166113645760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016108c9565b601661136f83611dfb565b604051602001611380929190612d9c565b6040516020818303038152906040529050919050565b6002600b54036113b85760405162461bcd60e51b81526004016108c990612b61565b6002600b55601354600160a81b900460ff1661140f5760405162461bcd60e51b81526020600482015260166024820152751cd85b19481a5cc81b9bdd081858dd1a5d99481e595d60521b60448201526064016108c9565b600d548161141c60085490565b6114269190612cd2565b11156114445760405162461bcd60e51b81526004016108c990612d22565b3481600f546114539190612d03565b11156114715760405162461bcd60e51b81526004016108c990612d65565b3360009081526015602052604090205461148c908290612cd2565b33600090815260156020526040902081905560115410156114ef5760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d4954000060448201526064016108c9565b610c913382611cf0565b600a546001600160a01b031633146115235760405162461bcd60e51b81526004016108c990612aa1565b6001600160a01b0381166115885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c9565b61159181611b87565b50565b600a546001600160a01b031633146115be5760405162461bcd60e51b81526004016108c990612aa1565b600c91909155600d55565b6002600b54036115eb5760405162461bcd60e51b81526004016108c990612b61565b6002600b55600d54856115fd60085490565b6116079190612cd2565b11156116255760405162461bcd60e51b81526004016108c990612d22565b601354600160a01b900460ff166116885760405162461bcd60e51b815260206004820152602160248201527f2077686974656c6973742073616c65206973206e6f74206163746976652079656044820152601d60fa1b60648201526084016108c9565b6116cf6116963386866117cd565b8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506110cc92505050565b61170b5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016108c9565b3485600e5461171a9190612d03565b11156117385760405162461bcd60e51b81526004016108c990612d65565b33600090815260146020526040902054611753908690612cd2565b33600090815260146020526040902081905560105410156117b65760405162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d49540060448201526064016108c9565b6117c08686611cf0565b50506001600b5550505050565b6040805160208082019490945260609490941b6001600160601b03191684820152605480850192909252805180850390920182526074909301909252815191012090565b60006001600160e01b031982166380ac58cd60e01b148061184257506001600160e01b03198216635b5e139f60e01b145b8061089957506301ffc9a760e01b6001600160e01b0319831614610899565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061189682610ec6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166119485760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108c9565b600061195383610ec6565b9050806001600160a01b0316846001600160a01b0316148061198e5750836001600160a01b03166119838461096f565b6001600160a01b0316145b806119be57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166119d982610ec6565b6001600160a01b031614611a3d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108c9565b6001600160a01b038216611a9f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108c9565b611aaa838383611efc565b611ab5600082611861565b6001600160a01b0383166000908152600360205260408120805460019290611ade908490612e23565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b0c908490612cd2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610dac828260405180602001604052806000815250611fb4565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611c3a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108c9565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611cb28484846119c6565b611cbe84848484611fe7565b6110c65760405162461bcd60e51b81526004016108c990612e3a565b600082611ce785846120e8565b14949350505050565b333214611d365760405162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016108c9565b611d3e61215c565b6017556000611d4c60085490565b600d5403905060005b828110156110c65760178054821c90819055600090611d75908490612ea2565b600081815260186020526040812054919250819003611d915750805b60001990930160008181526018602052604081205491949190819003611dc7576000838152601860205260409020859055611dd9565b60008381526018602052604090208190555b611ded87611de8846001612cd2565b611b6d565b836001019350505050611d55565b606081600003611e225750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e4c5780611e3681612cea565b9150611e459050600a83612eb6565b9150611e26565b60008167ffffffffffffffff811115611e6757611e67612695565b6040519080825280601f01601f191660200182016040528015611e91576020820181803683370190505b5090505b84156119be57611ea6600183612e23565b9150611eb3600a86612ea2565b611ebe906030612cd2565b60f81b818381518110611ed357611ed3612b98565b60200101906001600160f81b031916908160001a905350611ef5600a86612eb6565b9450611e95565b6001600160a01b038316611f5757611f5281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611f7a565b816001600160a01b0316836001600160a01b031614611f7a57611f7a8382612241565b6001600160a01b038216611f9157610b14816122de565b826001600160a01b0316826001600160a01b031614610b1457610b14828261238d565b611fbe83836123d1565b611fcb6000848484611fe7565b610b145760405162461bcd60e51b81526004016108c990612e3a565b60006001600160a01b0384163b156120dd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061202b903390899088908890600401612eca565b6020604051808303816000875af1925050508015612066575060408051601f3d908101601f1916820190925261206391810190612f07565b60015b6120c3573d808015612094576040519150601f19603f3d011682016040523d82523d6000602084013e612099565b606091505b5080516000036120bb5760405162461bcd60e51b81526004016108c990612e3a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119be565b506001949350505050565b600081815b845181101561215457600085828151811061210a5761210a612b98565b602002602001015190508083116121305760008381526020829052604090209250612141565b600081815260208490526040902092505b508061214c81612cea565b9150506120ed565b509392505050565b6040516001600160601b03193360601b166020820152600090439042906034016040516020818303038152906040528051906020012060001c61219f9190612eb6565b6040516001600160601b03194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6121df9190612eb6565b6121e94442612cd2565b6121f39190612cd2565b6121fd9190612cd2565b6122079190612cd2565b6122119190612cd2565b60405160200161222391815260200190565b6040516020818303038152906040528051906020012060001c905090565b6000600161224e84610fbd565b6122589190612e23565b6000838152600760205260409020549091508082146122ab576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906122f090600190612e23565b6000838152600960205260408120546008805493945090928490811061231857612318612b98565b90600052602060002001549050806008838154811061233957612339612b98565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061237157612371612f24565b6001900381819060005260206000200160009055905550505050565b600061239883610fbd565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124275760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108c9565b6000818152600260205260409020546001600160a01b03161561248c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108c9565b61249860008383611efc565b6001600160a01b03821660009081526003602052604081208054600192906124c1908490612cd2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461159157600080fd5b60006020828403121561254757600080fd5b81356110db8161251f565b6000806040838503121561256557600080fd5b50508035926020909101359150565b60005b8381101561258f578181015183820152602001612577565b838111156110c65750506000910152565b600081518084526125b8816020860160208601612574565b601f01601f19169290920160200192915050565b6020815260006110db60208301846125a0565b6000602082840312156125f157600080fd5b5035919050565b80356001600160a01b038116811461260f57600080fd5b919050565b6000806040838503121561262757600080fd5b612630836125f8565b946020939093013593505050565b60008060006060848603121561265357600080fd5b61265c846125f8565b925061266a602085016125f8565b9150604084013590509250925092565b60006020828403121561268c57600080fd5b6110db826125f8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126d4576126d4612695565b604052919050565b600067ffffffffffffffff8311156126f6576126f6612695565b612709601f8401601f19166020016126ab565b905082815283838301111561271d57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561274657600080fd5b813567ffffffffffffffff81111561275d57600080fd5b8201601f8101841361276e57600080fd5b6119be848235602084016126dc565b6000806040838503121561279057600080fd5b612799836125f8565b9150602083013580151581146127ae57600080fd5b809150509250929050565b600080600080608085870312156127cf57600080fd5b6127d8856125f8565b93506127e6602086016125f8565b925060408501359150606085013567ffffffffffffffff81111561280957600080fd5b8501601f8101871361281a57600080fd5b612829878235602084016126dc565b91505092959194509250565b600067ffffffffffffffff82111561284f5761284f612695565b5060051b60200190565b6000806040838503121561286c57600080fd5b8235915060208084013567ffffffffffffffff81111561288b57600080fd5b8401601f8101861361289c57600080fd5b80356128af6128aa82612835565b6126ab565b81815260059190911b820183019083810190888311156128ce57600080fd5b928401925b828410156128ec578335825292840192908401906128d3565b80955050505050509250929050565b6000806040838503121561290e57600080fd5b823567ffffffffffffffff81111561292557600080fd5b8301601f8101851361293657600080fd5b803560206129466128aa83612835565b82815260059290921b8301810191818101908884111561296557600080fd5b938201935b8385101561298a5761297b856125f8565b8252938201939082019061296a565b98969091013596505050505050565b600080604083850312156129ac57600080fd5b6129b5836125f8565b91506129c3602084016125f8565b90509250929050565b60008060008060008060a087890312156129e557600080fd5b6129ee876125f8565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff80821115612a2057600080fd5b818901915089601f830112612a3457600080fd5b813581811115612a4357600080fd5b8a60208260051b8501011115612a5857600080fd5b6020830194508093505050509295509295509295565b600080600060608486031215612a8357600080fd5b612a8c846125f8565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612aea57607f821691505b602082108103612b0a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b601f821115610b1457600081815260208120601f850160051c81016020861015612bd55750805b601f850160051c820191505b81811015612bf457828155600101612be1565b505050505050565b815167ffffffffffffffff811115612c1657612c16612695565b612c2a81612c248454612ad6565b84612bae565b602080601f831160018114612c5f5760008415612c475750858301515b600019600386901b1c1916600185901b178555612bf4565b600085815260208120601f198616915b82811015612c8e57888601518255948401946001909101908401612c6f565b5085821015612cac5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60008219821115612ce557612ce5612cbc565b500190565b600060018201612cfc57612cfc612cbc565b5060010190565b6000816000190483118215151615612d1d57612d1d612cbc565b500290565b60208082526023908201527f507572636861736520776f756c6420657863656564205055424c49435f535550604082015262504c5960e81b606082015260800190565b6020808252601c908201527f45544820616d6f756e74206973206e6f742073756666696369656e7400000000604082015260600190565b6000808454612daa81612ad6565b60018281168015612dc25760018114612dd757612e06565b60ff1984168752821515830287019450612e06565b8860005260208060002060005b85811015612dfd5781548a820152908401908201612de4565b50505082870194505b505050508351612e1a818360208801612574565b01949350505050565b600082821015612e3557612e35612cbc565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612eb157612eb1612e8c565b500690565b600082612ec557612ec5612e8c565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612efd908301846125a0565b9695505050505050565b600060208284031215612f1957600080fd5b81516110db8161251f565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f05d540d320e6089af51334798ff8236d203743393bc75e3fc494791c31b206964736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102935760003560e01c80636700e9f81161015a578063bd645454116100c1578063efd0cbf91161007a578063efd0cbf9146107d8578063f2fde38b146107eb578063f56beff61461080b578063f5ebec801461082b578063fa4cb69d14610841578063fdaf01251461085457600080fd5b8063bd645454146106ef578063c1608d6b1461070f578063c204642c1461073c578063c61490751461075c578063c87b56dd1461076f578063e985e9c51461078f57600080fd5b806395d89b411161011357806395d89b411461064d5780639d044ed314610662578063a22cb46514610683578063a653a3bc146106a3578063b88d4fde146106b9578063bceae77b146106d957600080fd5b80636700e9f8146105975780636fad40d5146105c457806370a08231146105e4578063715018a6146106045780638342083a146106195780638da5cb5b1461062f57600080fd5b806342842e0e116101fe5780635e1e1004116101b75780635e1e1004146104f6578063611f3f101461051657806362dc6e211461052c578063633423be146105425780636352211e1461056257806363a436cd1461058257600080fd5b806342842e0e1461044157806345149bb3146104615780634f6ccce71461048157806355f804b3146104a1578063560cf9f3146104c15780635b1d7350146104d657600080fd5b80631e84c413116102505780631e84c4131461038857806323b872dd146103a957806323cdcb06146103c95780632f745c59146103f657806332cb6b0c146104165780633ccfd60b1461042c57600080fd5b806301ffc9a7146102985780630442bfa8146102cd57806306fdde03146102ef578063081812fc14610311578063095ea7b31461034957806318160ddd14610369575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612535565b610874565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102ed6102e8366004612552565b61089f565b005b3480156102fb57600080fd5b506103046108dd565b6040516102c491906125cc565b34801561031d57600080fd5b5061033161032c3660046125df565b61096f565b6040516001600160a01b0390911681526020016102c4565b34801561035557600080fd5b506102ed610364366004612614565b610a04565b34801561037557600080fd5b506008545b6040519081526020016102c4565b34801561039457600080fd5b506013546102b890600160a81b900460ff1681565b3480156103b557600080fd5b506102ed6103c436600461263e565b610b19565b3480156103d557600080fd5b5061037a6103e436600461267a565b60146020526000908152604090205481565b34801561040257600080fd5b5061037a610411366004612614565b610b4a565b34801561042257600080fd5b5061037a600c5481565b34801561043857600080fd5b506102ed610be0565b34801561044d57600080fd5b506102ed61045c36600461263e565b610c99565b34801561046d57600080fd5b506102ed61047c3660046125df565b610cb4565b34801561048d57600080fd5b5061037a61049c3660046125df565b610ce3565b3480156104ad57600080fd5b506102ed6104bc366004612734565b610d76565b3480156104cd57600080fd5b506102ed610db0565b3480156104e257600080fd5b506102ed6104f136600461267a565b610dfb565b34801561050257600080fd5b506102ed61051136600461267a565b610e7a565b34801561052257600080fd5b5061037a600f5481565b34801561053857600080fd5b5061037a600e5481565b34801561054e57600080fd5b50601354610331906001600160a01b031681565b34801561056e57600080fd5b5061033161057d3660046125df565b610ec6565b34801561058e57600080fd5b506102ed610f3d565b3480156105a357600080fd5b5061037a6105b236600461267a565b60156020526000908152604090205481565b3480156105d057600080fd5b506102ed6105df366004612552565b610f88565b3480156105f057600080fd5b5061037a6105ff36600461267a565b610fbd565b34801561061057600080fd5b506102ed611044565b34801561062557600080fd5b5061037a600d5481565b34801561063b57600080fd5b50600a546001600160a01b0316610331565b34801561065957600080fd5b5061030461107a565b34801561066e57600080fd5b506013546102b890600160a01b900460ff1681565b34801561068f57600080fd5b506102ed61069e36600461277d565b611089565b3480156106af57600080fd5b5061037a60125481565b3480156106c557600080fd5b506102ed6106d43660046127b9565b611094565b3480156106e557600080fd5b5061037a60115481565b3480156106fb57600080fd5b506102b861070a366004612859565b6110cc565b34801561071b57600080fd5b5061037a61072a3660046125df565b60186020526000908152604090205481565b34801561074857600080fd5b506102ed6107573660046128fb565b6110e2565b6102ed61076a366004612614565b611188565b34801561077b57600080fd5b5061030461078a3660046125df565b611306565b34801561079b57600080fd5b506102b86107aa366004612999565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102ed6107e63660046125df565b611396565b3480156107f757600080fd5b506102ed61080636600461267a565b6114f9565b34801561081757600080fd5b506102ed610826366004612552565b611594565b34801561083757600080fd5b5061037a60105481565b6102ed61084f3660046129cc565b6115c9565b34801561086057600080fd5b5061037a61086f366004612a6e565b6117cd565b60006001600160e01b0319821663780e9d6360e01b1480610899575061089982611811565b92915050565b600a546001600160a01b031633146108d25760405162461bcd60e51b81526004016108c990612aa1565b60405180910390fd5b600e91909155600f55565b6060600080546108ec90612ad6565b80601f016020809104026020016040519081016040528092919081815260200182805461091890612ad6565b80156109655780601f1061093a57610100808354040283529160200191610965565b820191906000526020600020905b81548152906001019060200180831161094857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109e85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108c9565b506000908152600460205260409020546001600160a01b031690565b6000610a0f82610ec6565b9050806001600160a01b0316836001600160a01b031603610a7c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108c9565b336001600160a01b0382161480610a985750610a9881336107aa565b610b0a5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108c9565b610b148383611861565b505050565b610b2333826118cf565b610b3f5760405162461bcd60e51b81526004016108c990612b10565b610b148383836119c6565b6000610b5583610fbd565b8210610bb75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108c9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c0a5760405162461bcd60e51b81526004016108c990612aa1565b6002600b5403610c2c5760405162461bcd60e51b81526004016108c990612b61565b6002600b556013546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5050905080610c9157600080fd5b506001600b55565b610b1483838360405180602001604052806000815250611094565b600a546001600160a01b03163314610cde5760405162461bcd60e51b81526004016108c990612aa1565b601255565b6000610cee60085490565b8210610d515760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108c9565b60088281548110610d6457610d64612b98565b90600052602060002001549050919050565b600a546001600160a01b03163314610da05760405162461bcd60e51b81526004016108c990612aa1565b6016610dac8282612bfc565b5050565b600a546001600160a01b03163314610dda5760405162461bcd60e51b81526004016108c990612aa1565b6013805460ff60a01b198116600160a01b9182900460ff1615909102179055565b600a546001600160a01b03163314610e255760405162461bcd60e51b81526004016108c990612aa1565b6000600d546001610e369190612cd2565b90505b600c548111610dac576000818152600260205260409020546001600160a01b0316610e6857610e688282611b6d565b80610e7281612cea565b915050610e39565b600a546001600160a01b03163314610ea45760405162461bcd60e51b81526004016108c990612aa1565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b0316806108995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108c9565b600a546001600160a01b03163314610f675760405162461bcd60e51b81526004016108c990612aa1565b6013805460ff60a81b198116600160a81b9182900460ff1615909102179055565b600a546001600160a01b03163314610fb25760405162461bcd60e51b81526004016108c990612aa1565b601091909155601155565b60006001600160a01b0382166110285760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108c9565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461106e5760405162461bcd60e51b81526004016108c990612aa1565b6110786000611b87565b565b6060600180546108ec90612ad6565b610dac338383611bd9565b61109e33836118cf565b6110ba5760405162461bcd60e51b81526004016108c990612b10565b6110c684848484611ca7565b50505050565b60006110db8260125485611cda565b9392505050565b600a546001600160a01b0316331461110c5760405162461bcd60e51b81526004016108c990612aa1565b600d5481835161111c9190612d03565b6008546111299190612cd2565b11156111475760405162461bcd60e51b81526004016108c990612d22565b60005b8251811015610b145761117683828151811061116857611168612b98565b602002602001015183611cf0565b8061118081612cea565b91505061114a565b6002600b54036111aa5760405162461bcd60e51b81526004016108c990612b61565b6002600b55601354600160a81b900460ff166112015760405162461bcd60e51b81526020600482015260166024820152751cd85b19481a5cc81b9bdd081858dd1a5d99481e595d60521b60448201526064016108c9565b600d548161120e60085490565b6112189190612cd2565b11156112365760405162461bcd60e51b81526004016108c990612d22565b3481600f546112459190612d03565b11156112635760405162461bcd60e51b81526004016108c990612d65565b6001600160a01b038216600090815260156020526040902054611287908290612cd2565b6001600160a01b038316600090815260156020526040902081905560115410156112f35760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d4954000060448201526064016108c9565b6112fd8282611cf0565b50506001600b55565b6000818152600260205260409020546060906001600160a01b03166113645760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016108c9565b601661136f83611dfb565b604051602001611380929190612d9c565b6040516020818303038152906040529050919050565b6002600b54036113b85760405162461bcd60e51b81526004016108c990612b61565b6002600b55601354600160a81b900460ff1661140f5760405162461bcd60e51b81526020600482015260166024820152751cd85b19481a5cc81b9bdd081858dd1a5d99481e595d60521b60448201526064016108c9565b600d548161141c60085490565b6114269190612cd2565b11156114445760405162461bcd60e51b81526004016108c990612d22565b3481600f546114539190612d03565b11156114715760405162461bcd60e51b81526004016108c990612d65565b3360009081526015602052604090205461148c908290612cd2565b33600090815260156020526040902081905560115410156114ef5760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d4954000060448201526064016108c9565b610c913382611cf0565b600a546001600160a01b031633146115235760405162461bcd60e51b81526004016108c990612aa1565b6001600160a01b0381166115885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c9565b61159181611b87565b50565b600a546001600160a01b031633146115be5760405162461bcd60e51b81526004016108c990612aa1565b600c91909155600d55565b6002600b54036115eb5760405162461bcd60e51b81526004016108c990612b61565b6002600b55600d54856115fd60085490565b6116079190612cd2565b11156116255760405162461bcd60e51b81526004016108c990612d22565b601354600160a01b900460ff166116885760405162461bcd60e51b815260206004820152602160248201527f2077686974656c6973742073616c65206973206e6f74206163746976652079656044820152601d60fa1b60648201526084016108c9565b6116cf6116963386866117cd565b8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506110cc92505050565b61170b5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b60448201526064016108c9565b3485600e5461171a9190612d03565b11156117385760405162461bcd60e51b81526004016108c990612d65565b33600090815260146020526040902054611753908690612cd2565b33600090815260146020526040902081905560105410156117b65760405162461bcd60e51b815260206004820152601f60248201527f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d49540060448201526064016108c9565b6117c08686611cf0565b50506001600b5550505050565b6040805160208082019490945260609490941b6001600160601b03191684820152605480850192909252805180850390920182526074909301909252815191012090565b60006001600160e01b031982166380ac58cd60e01b148061184257506001600160e01b03198216635b5e139f60e01b145b8061089957506301ffc9a760e01b6001600160e01b0319831614610899565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061189682610ec6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166119485760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108c9565b600061195383610ec6565b9050806001600160a01b0316846001600160a01b0316148061198e5750836001600160a01b03166119838461096f565b6001600160a01b0316145b806119be57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166119d982610ec6565b6001600160a01b031614611a3d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108c9565b6001600160a01b038216611a9f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108c9565b611aaa838383611efc565b611ab5600082611861565b6001600160a01b0383166000908152600360205260408120805460019290611ade908490612e23565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b0c908490612cd2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610dac828260405180602001604052806000815250611fb4565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611c3a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108c9565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611cb28484846119c6565b611cbe84848484611fe7565b6110c65760405162461bcd60e51b81526004016108c990612e3a565b600082611ce785846120e8565b14949350505050565b333214611d365760405162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016108c9565b611d3e61215c565b6017556000611d4c60085490565b600d5403905060005b828110156110c65760178054821c90819055600090611d75908490612ea2565b600081815260186020526040812054919250819003611d915750805b60001990930160008181526018602052604081205491949190819003611dc7576000838152601860205260409020859055611dd9565b60008381526018602052604090208190555b611ded87611de8846001612cd2565b611b6d565b836001019350505050611d55565b606081600003611e225750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e4c5780611e3681612cea565b9150611e459050600a83612eb6565b9150611e26565b60008167ffffffffffffffff811115611e6757611e67612695565b6040519080825280601f01601f191660200182016040528015611e91576020820181803683370190505b5090505b84156119be57611ea6600183612e23565b9150611eb3600a86612ea2565b611ebe906030612cd2565b60f81b818381518110611ed357611ed3612b98565b60200101906001600160f81b031916908160001a905350611ef5600a86612eb6565b9450611e95565b6001600160a01b038316611f5757611f5281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611f7a565b816001600160a01b0316836001600160a01b031614611f7a57611f7a8382612241565b6001600160a01b038216611f9157610b14816122de565b826001600160a01b0316826001600160a01b031614610b1457610b14828261238d565b611fbe83836123d1565b611fcb6000848484611fe7565b610b145760405162461bcd60e51b81526004016108c990612e3a565b60006001600160a01b0384163b156120dd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061202b903390899088908890600401612eca565b6020604051808303816000875af1925050508015612066575060408051601f3d908101601f1916820190925261206391810190612f07565b60015b6120c3573d808015612094576040519150601f19603f3d011682016040523d82523d6000602084013e612099565b606091505b5080516000036120bb5760405162461bcd60e51b81526004016108c990612e3a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119be565b506001949350505050565b600081815b845181101561215457600085828151811061210a5761210a612b98565b602002602001015190508083116121305760008381526020829052604090209250612141565b600081815260208490526040902092505b508061214c81612cea565b9150506120ed565b509392505050565b6040516001600160601b03193360601b166020820152600090439042906034016040516020818303038152906040528051906020012060001c61219f9190612eb6565b6040516001600160601b03194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6121df9190612eb6565b6121e94442612cd2565b6121f39190612cd2565b6121fd9190612cd2565b6122079190612cd2565b6122119190612cd2565b60405160200161222391815260200190565b6040516020818303038152906040528051906020012060001c905090565b6000600161224e84610fbd565b6122589190612e23565b6000838152600760205260409020549091508082146122ab576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906122f090600190612e23565b6000838152600960205260408120546008805493945090928490811061231857612318612b98565b90600052602060002001549050806008838154811061233957612339612b98565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061237157612371612f24565b6001900381819060005260206000200160009055905550505050565b600061239883610fbd565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166124275760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108c9565b6000818152600260205260409020546001600160a01b03161561248c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108c9565b61249860008383611efc565b6001600160a01b03821660009081526003602052604081208054600192906124c1908490612cd2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b03198116811461159157600080fd5b60006020828403121561254757600080fd5b81356110db8161251f565b6000806040838503121561256557600080fd5b50508035926020909101359150565b60005b8381101561258f578181015183820152602001612577565b838111156110c65750506000910152565b600081518084526125b8816020860160208601612574565b601f01601f19169290920160200192915050565b6020815260006110db60208301846125a0565b6000602082840312156125f157600080fd5b5035919050565b80356001600160a01b038116811461260f57600080fd5b919050565b6000806040838503121561262757600080fd5b612630836125f8565b946020939093013593505050565b60008060006060848603121561265357600080fd5b61265c846125f8565b925061266a602085016125f8565b9150604084013590509250925092565b60006020828403121561268c57600080fd5b6110db826125f8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126d4576126d4612695565b604052919050565b600067ffffffffffffffff8311156126f6576126f6612695565b612709601f8401601f19166020016126ab565b905082815283838301111561271d57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561274657600080fd5b813567ffffffffffffffff81111561275d57600080fd5b8201601f8101841361276e57600080fd5b6119be848235602084016126dc565b6000806040838503121561279057600080fd5b612799836125f8565b9150602083013580151581146127ae57600080fd5b809150509250929050565b600080600080608085870312156127cf57600080fd5b6127d8856125f8565b93506127e6602086016125f8565b925060408501359150606085013567ffffffffffffffff81111561280957600080fd5b8501601f8101871361281a57600080fd5b612829878235602084016126dc565b91505092959194509250565b600067ffffffffffffffff82111561284f5761284f612695565b5060051b60200190565b6000806040838503121561286c57600080fd5b8235915060208084013567ffffffffffffffff81111561288b57600080fd5b8401601f8101861361289c57600080fd5b80356128af6128aa82612835565b6126ab565b81815260059190911b820183019083810190888311156128ce57600080fd5b928401925b828410156128ec578335825292840192908401906128d3565b80955050505050509250929050565b6000806040838503121561290e57600080fd5b823567ffffffffffffffff81111561292557600080fd5b8301601f8101851361293657600080fd5b803560206129466128aa83612835565b82815260059290921b8301810191818101908884111561296557600080fd5b938201935b8385101561298a5761297b856125f8565b8252938201939082019061296a565b98969091013596505050505050565b600080604083850312156129ac57600080fd5b6129b5836125f8565b91506129c3602084016125f8565b90509250929050565b60008060008060008060a087890312156129e557600080fd5b6129ee876125f8565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff80821115612a2057600080fd5b818901915089601f830112612a3457600080fd5b813581811115612a4357600080fd5b8a60208260051b8501011115612a5857600080fd5b6020830194508093505050509295509295509295565b600080600060608486031215612a8357600080fd5b612a8c846125f8565b95602085013595506040909401359392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612aea57607f821691505b602082108103612b0a57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b601f821115610b1457600081815260208120601f850160051c81016020861015612bd55750805b601f850160051c820191505b81811015612bf457828155600101612be1565b505050505050565b815167ffffffffffffffff811115612c1657612c16612695565b612c2a81612c248454612ad6565b84612bae565b602080601f831160018114612c5f5760008415612c475750858301515b600019600386901b1c1916600185901b178555612bf4565b600085815260208120601f198616915b82811015612c8e57888601518255948401946001909101908401612c6f565b5085821015612cac5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60008219821115612ce557612ce5612cbc565b500190565b600060018201612cfc57612cfc612cbc565b5060010190565b6000816000190483118215151615612d1d57612d1d612cbc565b500290565b60208082526023908201527f507572636861736520776f756c6420657863656564205055424c49435f535550604082015262504c5960e81b606082015260800190565b6020808252601c908201527f45544820616d6f756e74206973206e6f742073756666696369656e7400000000604082015260600190565b6000808454612daa81612ad6565b60018281168015612dc25760018114612dd757612e06565b60ff1984168752821515830287019450612e06565b8860005260208060002060005b85811015612dfd5781548a820152908401908201612de4565b50505082870194505b505050508351612e1a818360208801612574565b01949350505050565b600082821015612e3557612e35612cbc565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612eb157612eb1612e8c565b500690565b600082612ec557612ec5612e8c565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612efd908301846125a0565b9695505050505050565b600060208284031215612f1957600080fd5b81516110db8161251f565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f05d540d320e6089af51334798ff8236d203743393bc75e3fc494791c31b206964736f6c634300080f0033
Deployed Bytecode Sourcemap
52097:8308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45860:224;;;;;;;;;;-1:-1:-1;45860:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;45860:224:0;;;;;;;;53715:207;;;;;;;;;;-1:-1:-1;53715:207:0;;;;;:::i;:::-;;:::i;:::-;;32680:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34239:221::-;;;;;;;;;;-1:-1:-1;34239:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1945:32:1;;;1927:51;;1915:2;1900:18;34239:221:0;1781:203:1;33762:411:0;;;;;;;;;;-1:-1:-1;33762:411:0;;;;;:::i;:::-;;:::i;46500:113::-;;;;;;;;;;-1:-1:-1;46588:10:0;:17;46500:113;;;2572:25:1;;;2560:2;2545:18;46500:113:0;2426:177:1;52659:38:0;;;;;;;;;;-1:-1:-1;52659:38:0;;;;-1:-1:-1;;;52659:38:0;;;;;;34989:339;;;;;;;;;;-1:-1:-1;34989:339:0;;;;;:::i;:::-;;:::i;52706:56::-;;;;;;;;;;-1:-1:-1;52706:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;46168:256;;;;;;;;;;-1:-1:-1;46168:256:0;;;;;:::i;:::-;;:::i;52276:33::-;;;;;;;;;;;;;;;;60230:172;;;;;;;;;;;;;:::i;35399:185::-;;;;;;;;;;-1:-1:-1;35399:185:0;;;;;:::i;:::-;;:::i;53182:100::-;;;;;;;;;;-1:-1:-1;53182:100:0;;;;;:::i;:::-;;:::i;46690:233::-;;;;;;;;;;-1:-1:-1;46690:233:0;;;;;:::i;:::-;;:::i;54347:104::-;;;;;;;;;;-1:-1:-1;54347:104:0;;;;;:::i;:::-;;:::i;55161:109::-;;;;;;;;;;;;;:::i;54910:242::-;;;;;;;;;;-1:-1:-1;54910:242:0;;;;;:::i;:::-;;:::i;53051:123::-;;;;;;;;;;-1:-1:-1;53051:123:0;;;;;:::i;:::-;;:::i;52407:39::-;;;;;;;;;;;;;;;;52360:40;;;;;;;;;;;;;;;;52581:29;;;;;;;;;;-1:-1:-1;52581:29:0;;;;-1:-1:-1;;;;;52581:29:0;;;32374:239;;;;;;;;;;-1:-1:-1;32374:239:0;;;;;:::i;:::-;;:::i;55279:115::-;;;;;;;;;;;;;:::i;52769:55::-;;;;;;;;;;-1:-1:-1;52769:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;54122:217;;;;;;;;;;-1:-1:-1;54122:217:0;;;;;:::i;:::-;;:::i;32104:208::-;;;;;;;;;;-1:-1:-1;32104:208:0;;;;;:::i;:::-;;:::i;11276:103::-;;;;;;;;;;;;;:::i;52316:35::-;;;;;;;;;;;;;;;;10625:87;;;;;;;;;;-1:-1:-1;10698:6:0;;-1:-1:-1;;;;;10698:6:0;10625:87;;32849:104;;;;;;;;;;;;;:::i;52617:35::-;;;;;;;;;;-1:-1:-1;52617:35:0;;;;-1:-1:-1;;;52617:35:0;;;;;;34532:155;;;;;;;;;;-1:-1:-1;34532:155:0;;;;;:::i;:::-;;:::i;52544:30::-;;;;;;;;;;;;;;;;35655:328;;;;;;;;;;-1:-1:-1;35655:328:0;;;;;:::i;:::-;;:::i;52499:36::-;;;;;;;;;;;;;;;;53290:204;;;;;;;;;;-1:-1:-1;53290:204:0;;;;;:::i;:::-;;:::i;52911:42::-;;;;;;;;;;-1:-1:-1;52911:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;54459:443;;;;;;;;;;-1:-1:-1;54459:443:0;;;;;:::i;:::-;;:::i;56170:745::-;;;;;;:::i;:::-;;:::i;59948:274::-;;;;;;;;;;-1:-1:-1;59948:274:0;;;;;:::i;:::-;;:::i;34758:164::-;;;;;;;;;;-1:-1:-1;34758:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;34879:25:0;;;34855:4;34879:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34758:164;55411:751;;;;;;:::i;:::-;;:::i;11534:201::-;;;;;;;;;;-1:-1:-1;11534:201:0;;;;;:::i;:::-;;:::i;53930:184::-;;;;;;;;;;-1:-1:-1;53930:184:0;;;;;:::i;:::-;;:::i;52455:37::-;;;;;;;;;;;;;;;;56923:1002;;;;;;:::i;:::-;;:::i;53502:205::-;;;;;;;;;;-1:-1:-1;53502:205:0;;;;;:::i;:::-;;:::i;45860:224::-;45962:4;-1:-1:-1;;;;;;45986:50:0;;-1:-1:-1;;;45986:50:0;;:90;;;46040:36;46064:11;46040:23;:36::i;:::-;45979:97;45860:224;-1:-1:-1;;45860:224:0:o;53715:207::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;;;;;;;;;53841:13:::1;:32:::0;;;;53884:12:::1;:30:::0;53715:207::o;32680:100::-;32734:13;32767:5;32760:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32680:100;:::o;34239:221::-;34315:7;37582:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37582:16:0;34335:73;;;;-1:-1:-1;;;34335:73:0;;10367:2:1;34335:73:0;;;10349:21:1;10406:2;10386:18;;;10379:30;10445:34;10425:18;;;10418:62;-1:-1:-1;;;10496:18:1;;;10489:42;10548:19;;34335:73:0;10165:408:1;34335:73:0;-1:-1:-1;34428:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34428:24:0;;34239:221::o;33762:411::-;33843:13;33859:23;33874:7;33859:14;:23::i;:::-;33843:39;;33907:5;-1:-1:-1;;;;;33901:11:0;:2;-1:-1:-1;;;;;33901:11:0;;33893:57;;;;-1:-1:-1;;;33893:57:0;;10780:2:1;33893:57:0;;;10762:21:1;10819:2;10799:18;;;10792:30;10858:34;10838:18;;;10831:62;-1:-1:-1;;;10909:18:1;;;10902:31;10950:19;;33893:57:0;10578:397:1;33893:57:0;9429:10;-1:-1:-1;;;;;33985:21:0;;;;:62;;-1:-1:-1;34010:37:0;34027:5;9429:10;34758:164;:::i;34010:37::-;33963:168;;;;-1:-1:-1;;;33963:168:0;;11182:2:1;33963:168:0;;;11164:21:1;11221:2;11201:18;;;11194:30;11260:34;11240:18;;;11233:62;11331:26;11311:18;;;11304:54;11375:19;;33963:168:0;10980:420:1;33963:168:0;34144:21;34153:2;34157:7;34144:8;:21::i;:::-;33832:341;33762:411;;:::o;34989:339::-;35184:41;9429:10;35217:7;35184:18;:41::i;:::-;35176:103;;;;-1:-1:-1;;;35176:103:0;;;;;;;:::i;:::-;35292:28;35302:4;35308:2;35312:7;35292:9;:28::i;46168:256::-;46265:7;46301:23;46318:5;46301:16;:23::i;:::-;46293:5;:31;46285:87;;;;-1:-1:-1;;;46285:87:0;;12025:2:1;46285:87:0;;;12007:21:1;12064:2;12044:18;;;12037:30;12103:34;12083:18;;;12076:62;-1:-1:-1;;;12154:18:1;;;12147:41;12205:19;;46285:87:0;11823:407:1;46285:87:0;-1:-1:-1;;;;;;46390:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;46168:256::o;60230:172::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;1745:1:::1;2343:7;;:19:::0;2335:63:::1;;;;-1:-1:-1::0;;;2335:63:0::1;;;;;;;:::i;:::-;1745:1;2476:7;:18:::0;60318:14:::2;::::0;60310:62:::2;::::0;60297:7:::2;::::0;-1:-1:-1;;;;;60318:14:0::2;::::0;60346:21:::2;::::0;60297:7;60310:62;60297:7;60310:62;60346:21;60318:14;60310:62:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60296:76;;;60387:2;60379:11;;;::::0;::::2;;-1:-1:-1::0;1701:1:0::1;2655:7;:22:::0;60230:172::o;35399:185::-;35537:39;35554:4;35560:2;35564:7;35537:39;;;;;;;;;;;;:16;:39::i;53182:100::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;53252:15:::1;:22:::0;53182:100::o;46690:233::-;46765:7;46801:30;46588:10;:17;;46500:113;46801:30;46793:5;:38;46785:95;;;;-1:-1:-1;;;46785:95:0;;13007:2:1;46785:95:0;;;12989:21:1;13046:2;13026:18;;;13019:30;13085:34;13065:18;;;13058:62;-1:-1:-1;;;13136:18:1;;;13129:42;13188:19;;46785:95:0;12805:408:1;46785:95:0;46898:10;46909:5;46898:17;;;;;;;;:::i;:::-;;;;;;;;;46891:24;;46690:233;;;:::o;54347:104::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;54420:13:::1;:23;54436:7:::0;54420:13;:23:::1;:::i;:::-;;54347:104:::0;:::o;55161:109::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;55245:15:::1;::::0;;-1:-1:-1;;;;55226:34:0;::::1;-1:-1:-1::0;;;55245:15:0;;;::::1;;;55244:16;55226:34:::0;;::::1;;::::0;;55161:109::o;54910:242::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;54973:16:::1;55016:13;;55032:1;55016:17;;;;:::i;:::-;55005:28;;55000:145;55047:10;;55035:8;:22;55000:145;;37558:4:::0;37582:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37582:16:0;55086:47:::1;;55110:23;55120:2;55124:8;55110:9;:23::i;:::-;55059:10:::0;::::1;::::0;::::1;:::i;:::-;;;;55000:145;;53051:123:::0;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;53132:14:::1;:34:::0;;-1:-1:-1;;;;;;53132:34:0::1;-1:-1:-1::0;;;;;53132:34:0;;;::::1;::::0;;;::::1;::::0;;53051:123::o;32374:239::-;32446:7;32482:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32482:16:0;;32509:73;;;;-1:-1:-1;;;32509:73:0;;16161:2:1;32509:73:0;;;16143:21:1;16200:2;16180:18;;;16173:30;16239:34;16219:18;;;16212:62;-1:-1:-1;;;16290:18:1;;;16283:39;16339:19;;32509:73:0;15959:405:1;55279:115:0;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;55366:18:::1;::::0;;-1:-1:-1;;;;55344:40:0;::::1;-1:-1:-1::0;;;55366:18:0;;;::::1;;;55365:19;55344:40:::0;;::::1;;::::0;;55279:115::o;54122:217::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;54248:18:::1;:37:::0;;;;54296:17:::1;:35:::0;54122:217::o;32104:208::-;32176:7;-1:-1:-1;;;;;32204:19:0;;32196:74;;;;-1:-1:-1;;;32196:74:0;;16571:2:1;32196:74:0;;;16553:21:1;16610:2;16590:18;;;16583:30;16649:34;16629:18;;;16622:62;-1:-1:-1;;;16700:18:1;;;16693:40;16750:19;;32196:74:0;16369:406:1;32196:74:0;-1:-1:-1;;;;;;32288:16:0;;;;;:9;:16;;;;;;;32104:208::o;11276:103::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;11341:30:::1;11368:1;11341:18;:30::i;:::-;11276:103::o:0;32849:104::-;32905:13;32938:7;32931:14;;;;;:::i;34532:155::-;34627:52;9429:10;34660:8;34670;34627:18;:52::i;35655:328::-;35830:41;9429:10;35863:7;35830:18;:41::i;:::-;35822:103;;;;-1:-1:-1;;;35822:103:0;;;;;;;:::i;:::-;35936:39;35950:4;35956:2;35960:7;35969:5;35936:13;:39::i;:::-;35655:328;;;;:::o;53290:204::-;53404:4;53433:53;53452:5;53459:15;;53476:9;53433:18;:53::i;:::-;53426:60;53290:204;-1:-1:-1;;;53290:204:0:o;54459:443::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;54683:13:::1;;54648:14;54624;:21;:38;;;;:::i;:::-;46588:10:::0;:17;54608:54:::1;;;;:::i;:::-;:88;;54586:173;;;;-1:-1:-1::0;;;54586:173:0::1;;;;;;;:::i;:::-;54777:9;54772:123;54796:14;:21;54792:1;:25;54772:123;;;54839:44;54849:14;54864:1;54849:17;;;;;;;;:::i;:::-;;;;;;;54868:14;54839:9;:44::i;:::-;54819:3:::0;::::1;::::0;::::1;:::i;:::-;;;;54772:123;;56170:745:::0;1745:1;2343:7;;:19;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1745:1;2476:7;:18;56299::::1;::::0;-1:-1:-1;;;56299:18:0;::::1;;;56291:53;;;::::0;-1:-1:-1;;;56291:53:0;;17559:2:1;56291:53:0::1;::::0;::::1;17541:21:1::0;17598:2;17578:18;;;17571:30;-1:-1:-1;;;17617:18:1;;;17610:52;17679:18;;56291:53:0::1;17357:346:1::0;56291:53:0::1;56411:13;;56393:14;56377:13;46588:10:::0;:17;;46500:113;56377:13:::1;:30;;;;:::i;:::-;:47;;56355:132;;;;-1:-1:-1::0;;;56355:132:0::1;;;;;;;:::i;:::-;56555:9;56537:14;56522:12;;:29;;;;:::i;:::-;:42;;56500:120;;;;-1:-1:-1::0;;;56500:120:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56673:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;;:54:::1;::::0;56713:14;;56673:54:::1;:::i;:::-;-1:-1:-1::0;;;;;56633:24:0;::::1;;::::0;;;:20:::1;:24;::::0;;;;:94;;;56790:17:::1;::::0;-1:-1:-1;56762:45:0::1;56740:125;;;::::0;-1:-1:-1;;;56740:125:0;;18267:2:1;56740:125:0::1;::::0;::::1;18249:21:1::0;18306:2;18286:18;;;18279:30;18345:32;18325:18;;;18318:60;18395:18;;56740:125:0::1;18065:354:1::0;56740:125:0::1;56878:29;56888:2;56892:14;56878:9;:29::i;:::-;-1:-1:-1::0;;1701:1:0;2655:7;:22;56170:745::o;59948:274::-;37558:4;37582:16;;;:7;:16;;;;;;60057:13;;-1:-1:-1;;;;;37582:16:0;60088:49;;;;-1:-1:-1;;;60088:49:0;;18626:2:1;60088:49:0;;;18608:21:1;18665:2;18645:18;;;18638:30;-1:-1:-1;;;18684:18:1;;;18677:50;18744:18;;60088:49:0;18424:344:1;60088:49:0;60179:13;60194:18;:7;:16;:18::i;:::-;60162:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;60148:66;;59948:274;;;:::o;55411:751::-;1745:1;2343:7;;:19;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1745:1;2476:7;:18;55514::::1;::::0;-1:-1:-1;;;55514:18:0;::::1;;;55506:53;;;::::0;-1:-1:-1;;;55506:53:0;;17559:2:1;55506:53:0::1;::::0;::::1;17541:21:1::0;17598:2;17578:18;;;17571:30;-1:-1:-1;;;17617:18:1;;;17610:52;17679:18;;55506:53:0::1;17357:346:1::0;55506:53:0::1;55626:13;;55608:14;55592:13;46588:10:::0;:17;;46500:113;55592:13:::1;:30;;;;:::i;:::-;:47;;55570:132;;;;-1:-1:-1::0;;;55570:132:0::1;;;;;;;:::i;:::-;55770:9;55752:14;55737:12;;:29;;;;:::i;:::-;:42;;55715:120;;;;-1:-1:-1::0;;;55715:120:0::1;;;;;;;:::i;:::-;55917:10;55896:32;::::0;;;:20:::1;:32;::::0;;;;;:62:::1;::::0;55944:14;;55896:62:::1;:::i;:::-;55869:10;55848:32;::::0;;;:20:::1;:32;::::0;;;;:110;;;56029:17:::1;::::0;-1:-1:-1;55993:53:0::1;55971:133;;;::::0;-1:-1:-1;;;55971:133:0;;18267:2:1;55971:133:0::1;::::0;::::1;18249:21:1::0;18306:2;18286:18;;;18279:30;18345:32;18325:18;;;18318:60;18395:18;;55971:133:0::1;18065:354:1::0;55971:133:0::1;56117:37;56127:10;56139:14;56117:9;:37::i;11534:201::-:0;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11623:22:0;::::1;11615:73;;;::::0;-1:-1:-1;;;11615:73:0;;19987:2:1;11615:73:0::1;::::0;::::1;19969:21:1::0;20026:2;20006:18;;;19999:30;20065:34;20045:18;;;20038:62;-1:-1:-1;;;20116:18:1;;;20109:36;20162:19;;11615:73:0::1;19785:402:1::0;11615:73:0::1;11699:28;11718:8;11699:18;:28::i;:::-;11534:201:::0;:::o;53930:184::-;10698:6;;-1:-1:-1;;;;;10698:6:0;9429:10;10845:23;10837:68;;;;-1:-1:-1;;;10837:68:0;;;;;;;:::i;:::-;54045:10:::1;:22:::0;;;;54078:13:::1;:28:::0;53930:184::o;56923:1002::-;1745:1;2343:7;;:19;2335:63;;;;-1:-1:-1;;;2335:63:0;;;;;;;:::i;:::-;1745:1;2476:7;:18;57188:13:::1;::::0;57170:14;57154:13:::1;46588:10:::0;:17;;46500:113;57154:13:::1;:30;;;;:::i;:::-;:47;;57132:132;;;;-1:-1:-1::0;;;57132:132:0::1;;;;;;;:::i;:::-;57283:15;::::0;-1:-1:-1;;;57283:15:0;::::1;;;57275:61;;;::::0;-1:-1:-1;;;57275:61:0;;20394:2:1;57275:61:0::1;::::0;::::1;20376:21:1::0;20433:2;20413:18;;;20406:30;20472:34;20452:18;;;20445:62;-1:-1:-1;;;20523:18:1;;;20516:31;20564:19;;57275:61:0::1;20192:397:1::0;57275:61:0::1;57371:55;57385:33;57392:10;57404:5;57411:6;57385;:33::i;:::-;57420:5;;57371:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;57371:13:0::1;::::0;-1:-1:-1;;;57371:55:0:i:1;:::-;57349:118;;;::::0;-1:-1:-1;;;57349:118:0;;20796:2:1;57349:118:0::1;::::0;::::1;20778:21:1::0;20835:2;20815:18;;;20808:30;-1:-1:-1;;;20854:18:1;;;20847:43;20907:18;;57349:118:0::1;20594:337:1::0;57349:118:0::1;57536:9;57518:14;57502:13;;:30;;;;:::i;:::-;:43;;57480:121;;;;-1:-1:-1::0;;;57480:121:0::1;;;;;;;:::i;:::-;57685:10;57663:33;::::0;;;:21:::1;:33;::::0;;;;;:63:::1;::::0;57712:14;;57663:63:::1;:::i;:::-;57636:10;57614:33;::::0;;;:21:::1;:33;::::0;;;;:112;;;57798:18:::1;::::0;-1:-1:-1;57761:55:0::1;57739:136;;;::::0;-1:-1:-1;;;57739:136:0;;21138:2:1;57739:136:0::1;::::0;::::1;21120:21:1::0;21177:2;21157:18;;;21150:30;21216:33;21196:18;;;21189:61;21267:18;;57739:136:0::1;20936:355:1::0;57739:136:0::1;57888:29;57898:2;57902:14;57888:9;:29::i;:::-;-1:-1:-1::0;;1701:1:0;2655:7;:22;-1:-1:-1;;;;56923:1002:0:o;53502:205::-;53658:40;;;;;;;21481:19:1;;;;21538:2;21534:15;;;;-1:-1:-1;;;;;;21530:53:1;21516:12;;;21509:75;21600:12;;;;21593:28;;;;53658:40:0;;;;;;;;;;21637:12:1;;;;53658:40:0;;;53648:51;;;;;;53502:205::o;31735:305::-;31837:4;-1:-1:-1;;;;;;31874:40:0;;-1:-1:-1;;;31874:40:0;;:105;;-1:-1:-1;;;;;;;31931:48:0;;-1:-1:-1;;;31931:48:0;31874:105;:158;;;-1:-1:-1;;;;;;;;;;23518:40:0;;;31996:36;23409:157;41639:174;41714:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;41714:29:0;-1:-1:-1;;;;;41714:29:0;;;;;;;;:24;;41768:23;41714:24;41768:14;:23::i;:::-;-1:-1:-1;;;;;41759:46:0;;;;;;;;;;;41639:174;;:::o;37787:348::-;37880:4;37582:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37582:16:0;37897:73;;;;-1:-1:-1;;;37897:73:0;;21862:2:1;37897:73:0;;;21844:21:1;21901:2;21881:18;;;21874:30;21940:34;21920:18;;;21913:62;-1:-1:-1;;;21991:18:1;;;21984:42;22043:19;;37897:73:0;21660:408:1;37897:73:0;37981:13;37997:23;38012:7;37997:14;:23::i;:::-;37981:39;;38050:5;-1:-1:-1;;;;;38039:16:0;:7;-1:-1:-1;;;;;38039:16:0;;:51;;;;38083:7;-1:-1:-1;;;;;38059:31:0;:20;38071:7;38059:11;:20::i;:::-;-1:-1:-1;;;;;38059:31:0;;38039:51;:87;;;-1:-1:-1;;;;;;34879:25:0;;;34855:4;34879:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;38094:32;38031:96;37787:348;-1:-1:-1;;;;37787:348:0:o;40896:625::-;41055:4;-1:-1:-1;;;;;41028:31:0;:23;41043:7;41028:14;:23::i;:::-;-1:-1:-1;;;;;41028:31:0;;41020:81;;;;-1:-1:-1;;;41020:81:0;;22275:2:1;41020:81:0;;;22257:21:1;22314:2;22294:18;;;22287:30;22353:34;22333:18;;;22326:62;-1:-1:-1;;;22404:18:1;;;22397:35;22449:19;;41020:81:0;22073:401:1;41020:81:0;-1:-1:-1;;;;;41120:16:0;;41112:65;;;;-1:-1:-1;;;41112:65:0;;22681:2:1;41112:65:0;;;22663:21:1;22720:2;22700:18;;;22693:30;22759:34;22739:18;;;22732:62;-1:-1:-1;;;22810:18:1;;;22803:34;22854:19;;41112:65:0;22479:400:1;41112:65:0;41190:39;41211:4;41217:2;41221:7;41190:20;:39::i;:::-;41294:29;41311:1;41315:7;41294:8;:29::i;:::-;-1:-1:-1;;;;;41336:15:0;;;;;;:9;:15;;;;;:20;;41355:1;;41336:15;:20;;41355:1;;41336:20;:::i;:::-;;;;-1:-1:-1;;;;;;;41367:13:0;;;;;;:9;:13;;;;;:18;;41384:1;;41367:13;:18;;41384:1;;41367:18;:::i;:::-;;;;-1:-1:-1;;41396:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;41396:21:0;-1:-1:-1;;;;;41396:21:0;;;;;;;;;41435:27;;41396:16;;41435:27;;;;;;;33832:341;33762:411;;:::o;38477:110::-;38553:26;38563:2;38567:7;38553:26;;;;;;;;;;;;:9;:26::i;11895:191::-;11988:6;;;-1:-1:-1;;;;;12005:17:0;;;-1:-1:-1;;;;;;12005:17:0;;;;;;;12038:40;;11988:6;;;12005:17;11988:6;;12038:40;;11969:16;;12038:40;11958:128;11895:191;:::o;41955:315::-;42110:8;-1:-1:-1;;;;;42101:17:0;:5;-1:-1:-1;;;;;42101:17:0;;42093:55;;;;-1:-1:-1;;;42093:55:0;;23216:2:1;42093:55:0;;;23198:21:1;23255:2;23235:18;;;23228:30;23294:27;23274:18;;;23267:55;23339:18;;42093:55:0;23014:349:1;42093:55:0;-1:-1:-1;;;;;42159:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;42159:46:0;;;;;;;;;;42221:41;;540::1;;;42221::0;;513:18:1;42221:41:0;;;;;;;41955:315;;;:::o;36865:::-;37022:28;37032:4;37038:2;37042:7;37022:9;:28::i;:::-;37069:48;37092:4;37098:2;37102:7;37111:5;37069:22;:48::i;:::-;37061:111;;;;-1:-1:-1;;;37061:111:0;;;;;;;:::i;5080:190::-;5205:4;5258;5229:25;5242:5;5249:4;5229:12;:25::i;:::-;:33;;5080:190;-1:-1:-1;;;;5080:190:0:o;58592:1348::-;58672:10;58686:9;58672:23;58664:56;;;;-1:-1:-1;;;58664:56:0;;23989:2:1;58664:56:0;;;23971:21:1;24028:2;24008:18;;;24001:30;-1:-1:-1;;;24047:18:1;;;24040:50;24107:18;;58664:56:0;23787:344:1;58664:56:0;58744:14;:12;:14::i;:::-;58731:10;:27;58771:22;58862:13;46588:10;:17;;46500:113;58862:13;58846;;:29;58829:46;;58904:9;58899:1034;58919:13;58915:1;:17;58899:1034;;;58951:10;:16;;;;;;;;:10;;59099:27;;59112:14;;59099:27;:::i;:::-;59141:15;59159:14;;;:7;:14;;;;;;59083:43;;-1:-1:-1;59194:12:0;;;59190:68;;-1:-1:-1;59237:5:0;59190:68;-1:-1:-1;;59364:16:0;;;59412:12;59427:23;;;:7;:23;;;;;;59364:16;;-1:-1:-1;59427:23:0;59469:9;;;59465:297;;59572:14;;;;:7;:14;;;;;:31;;;59465:297;;;59725:14;;;;:7;:14;;;;;:21;;;59465:297;59831:26;59841:2;59845:11;:7;59855:1;59845:11;:::i;:::-;59831:9;:26::i;:::-;59903:3;;;;;58936:997;;;58899:1034;;6911:723;6967:13;7188:5;7197:1;7188:10;7184:53;;-1:-1:-1;;7215:10:0;;;;;;;;;;;;-1:-1:-1;;;7215:10:0;;;;;6911:723::o;7184:53::-;7262:5;7247:12;7303:78;7310:9;;7303:78;;7336:8;;;;:::i;:::-;;-1:-1:-1;7359:10:0;;-1:-1:-1;7367:2:0;7359:10;;:::i;:::-;;;7303:78;;;7391:19;7423:6;7413:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7413:17:0;;7391:39;;7441:154;7448:10;;7441:154;;7475:11;7485:1;7475:11;;:::i;:::-;;-1:-1:-1;7544:10:0;7552:2;7544:5;:10;:::i;:::-;7531:24;;:2;:24;:::i;:::-;7518:39;;7501:6;7508;7501:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7501:56:0;;;;;;;;-1:-1:-1;7572:11:0;7581:2;7572:11;;:::i;:::-;;;7441:154;;47536:589;-1:-1:-1;;;;;47742:18:0;;47738:187;;47777:40;47809:7;48952:10;:17;;48925:24;;;;:15;:24;;;;;:44;;;48980:24;;;;;;;;;;;;48848:164;47777:40;47738:187;;;47847:2;-1:-1:-1;;;;;47839:10:0;:4;-1:-1:-1;;;;;47839:10:0;;47835:90;;47866:47;47899:4;47905:7;47866:32;:47::i;:::-;-1:-1:-1;;;;;47939:16:0;;47935:183;;47972:45;48009:7;47972:36;:45::i;47935:183::-;48045:4;-1:-1:-1;;;;;48039:10:0;:2;-1:-1:-1;;;;;48039:10:0;;48035:83;;48066:40;48094:2;48098:7;48066:27;:40::i;38814:321::-;38944:18;38950:2;38954:7;38944:5;:18::i;:::-;38995:54;39026:1;39030:2;39034:7;39043:5;38995:22;:54::i;:::-;38973:154;;;;-1:-1:-1;;;38973:154:0;;;;;;;:::i;42835:799::-;42990:4;-1:-1:-1;;;;;43011:13:0;;13621:19;:23;43007:620;;43047:72;;-1:-1:-1;;;43047:72:0;;-1:-1:-1;;;;;43047:36:0;;;;;:72;;9429:10;;43098:4;;43104:7;;43113:5;;43047:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43047:72:0;;;;;;;;-1:-1:-1;;43047:72:0;;;;;;;;;;;;:::i;:::-;;;43043:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43289:6;:13;43306:1;43289:18;43285:272;;43332:60;;-1:-1:-1;;;43332:60:0;;;;;;;:::i;43285:272::-;43507:6;43501:13;43492:6;43488:2;43484:15;43477:38;43043:529;-1:-1:-1;;;;;;43170:51:0;-1:-1:-1;;;43170:51:0;;-1:-1:-1;43163:58:0;;43007:620;-1:-1:-1;43611:4:0;42835:799;;;;;;:::o;5632:675::-;5715:7;5758:4;5715:7;5773:497;5797:5;:12;5793:1;:16;5773:497;;;5831:20;5854:5;5860:1;5854:8;;;;;;;;:::i;:::-;;;;;;;5831:31;;5897:12;5881;:28;5877:382;;6383:13;6433:15;;;6469:4;6462:15;;;6516:4;6500:21;;6009:57;;5877:382;;;6383:13;6433:15;;;6469:4;6462:15;;;6516:4;6500:21;;6186:57;;5877:382;-1:-1:-1;5811:3:0;;;;:::i;:::-;;;;5773:497;;;-1:-1:-1;6287:12:0;5632:675;-1:-1:-1;;;5632:675:0:o;57933:651::-;58410:28;;-1:-1:-1;;;;;;58427:10:0;25407:2:1;25403:15;25399:53;58410:28:0;;;25387:66:1;57980:12:0;;58519;;58474:15;;25469:12:1;;58410:28:0;;;;;;;;;;;;58400:39;;;;;;58392:48;;58391:99;;;;:::i;:::-;58238:32;;-1:-1:-1;;;;;;58255:14:0;25407:2:1;25403:15;25399:53;58238:32:0;;;25387:66:1;58348:14:0;;58303:15;;25469:12:1;;58238:32:0;;;;;;;;;;;;58228:43;;;;;;58220:52;;58189:130;;;;:::i;:::-;58101:59;58144:16;58101:15;:59;:::i;:::-;:219;;;;:::i;:::-;:261;;;;:::i;:::-;:390;;;;:::i;:::-;:430;;;;:::i;:::-;58062:488;;;;;;25871:19:1;;25915:2;25906:12;;25742:182;58062:488:0;;;;;;;;;;;;;58034:531;;;;;;58012:564;;58005:571;;57933:651;:::o;49639:988::-;49905:22;49955:1;49930:22;49947:4;49930:16;:22::i;:::-;:26;;;;:::i;:::-;49967:18;49988:26;;;:17;:26;;;;;;49905:51;;-1:-1:-1;50121:28:0;;;50117:328;;-1:-1:-1;;;;;50188:18:0;;50166:19;50188:18;;;:12;:18;;;;;;;;:34;;;;;;;;;50239:30;;;;;;:44;;;50356:30;;:17;:30;;;;;:43;;;50117:328;-1:-1:-1;50541:26:0;;;;:17;:26;;;;;;;;50534:33;;;-1:-1:-1;;;;;50585:18:0;;;;;:12;:18;;;;;:34;;;;;;;50578:41;49639:988::o;50922:1079::-;51200:10;:17;51175:22;;51200:21;;51220:1;;51200:21;:::i;:::-;51232:18;51253:24;;;:15;:24;;;;;;51626:10;:26;;51175:46;;-1:-1:-1;51253:24:0;;51175:46;;51626:26;;;;;;:::i;:::-;;;;;;;;;51604:48;;51690:11;51665:10;51676;51665:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;51770:28;;;:15;:28;;;;;;;:41;;;51942:24;;;;;51935:31;51977:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;50993:1008;;;50922:1079;:::o;48426:221::-;48511:14;48528:20;48545:2;48528:16;:20::i;:::-;-1:-1:-1;;;;;48559:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;48604:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;48426:221:0:o;39471:439::-;-1:-1:-1;;;;;39551:16:0;;39543:61;;;;-1:-1:-1;;;39543:61:0;;26263:2:1;39543:61:0;;;26245:21:1;;;26282:18;;;26275:30;26341:34;26321:18;;;26314:62;26393:18;;39543:61:0;26061:356:1;39543:61:0;37558:4;37582:16;;;:7;:16;;;;;;-1:-1:-1;;;;;37582:16:0;:30;39615:58;;;;-1:-1:-1;;;39615:58:0;;26624:2:1;39615:58:0;;;26606:21:1;26663:2;26643:18;;;26636:30;26702;26682:18;;;26675:58;26750:18;;39615:58:0;26422:352:1;39615:58:0;39686:45;39715:1;39719:2;39723:7;39686:20;:45::i;:::-;-1:-1:-1;;;;;39744:13:0;;;;;;:9;:13;;;;;:18;;39761:1;;39744:13;:18;;39761:1;;39744:18;:::i;:::-;;;;-1:-1:-1;;39773:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;39773:21:0;-1:-1:-1;;;;;39773:21:0;;;;;;;;39812:33;;39773:16;;;39812:33;;39773:16;;39812:33;54420:23:::1;54347:104:::0;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:248::-;660:6;668;721:2;709:9;700:7;696:23;692:32;689:52;;;737:1;734;727:12;689:52;-1:-1:-1;;760:23:1;;;830:2;815:18;;;802:32;;-1:-1:-1;592:248:1:o;845:258::-;917:1;927:113;941:6;938:1;935:13;927:113;;;1017:11;;;1011:18;998:11;;;991:39;963:2;956:10;927:113;;;1058:6;1055:1;1052:13;1049:48;;;-1:-1:-1;;1093:1:1;1075:16;;1068:27;845:258::o;1108:::-;1150:3;1188:5;1182:12;1215:6;1210:3;1203:19;1231:63;1287:6;1280:4;1275:3;1271:14;1264:4;1257:5;1253:16;1231:63;:::i;:::-;1348:2;1327:15;-1:-1:-1;;1323:29:1;1314:39;;;;1355:4;1310:50;;1108:258;-1:-1:-1;;1108:258:1:o;1371:220::-;1520:2;1509:9;1502:21;1483:4;1540:45;1581:2;1570:9;1566:18;1558:6;1540:45;:::i;1596:180::-;1655:6;1708:2;1696:9;1687:7;1683:23;1679:32;1676:52;;;1724:1;1721;1714:12;1676:52;-1:-1:-1;1747:23:1;;1596:180;-1:-1:-1;1596:180:1:o;1989:173::-;2057:20;;-1:-1:-1;;;;;2106:31:1;;2096:42;;2086:70;;2152:1;2149;2142:12;2086:70;1989:173;;;:::o;2167:254::-;2235:6;2243;2296:2;2284:9;2275:7;2271:23;2267:32;2264:52;;;2312:1;2309;2302:12;2264:52;2335:29;2354:9;2335:29;:::i;:::-;2325:39;2411:2;2396:18;;;;2383:32;;-1:-1:-1;;;2167:254:1:o;2608:328::-;2685:6;2693;2701;2754:2;2742:9;2733:7;2729:23;2725:32;2722:52;;;2770:1;2767;2760:12;2722:52;2793:29;2812:9;2793:29;:::i;:::-;2783:39;;2841:38;2875:2;2864:9;2860:18;2841:38;:::i;:::-;2831:48;;2926:2;2915:9;2911:18;2898:32;2888:42;;2608:328;;;;;:::o;2941:186::-;3000:6;3053:2;3041:9;3032:7;3028:23;3024:32;3021:52;;;3069:1;3066;3059:12;3021:52;3092:29;3111:9;3092:29;:::i;3317:127::-;3378:10;3373:3;3369:20;3366:1;3359:31;3409:4;3406:1;3399:15;3433:4;3430:1;3423:15;3449:275;3520:2;3514:9;3585:2;3566:13;;-1:-1:-1;;3562:27:1;3550:40;;3620:18;3605:34;;3641:22;;;3602:62;3599:88;;;3667:18;;:::i;:::-;3703:2;3696:22;3449:275;;-1:-1:-1;3449:275:1:o;3729:407::-;3794:5;3828:18;3820:6;3817:30;3814:56;;;3850:18;;:::i;:::-;3888:57;3933:2;3912:15;;-1:-1:-1;;3908:29:1;3939:4;3904:40;3888:57;:::i;:::-;3879:66;;3968:6;3961:5;3954:21;4008:3;3999:6;3994:3;3990:16;3987:25;3984:45;;;4025:1;4022;4015:12;3984:45;4074:6;4069:3;4062:4;4055:5;4051:16;4038:43;4128:1;4121:4;4112:6;4105:5;4101:18;4097:29;4090:40;3729:407;;;;;:::o;4141:451::-;4210:6;4263:2;4251:9;4242:7;4238:23;4234:32;4231:52;;;4279:1;4276;4269:12;4231:52;4319:9;4306:23;4352:18;4344:6;4341:30;4338:50;;;4384:1;4381;4374:12;4338:50;4407:22;;4460:4;4452:13;;4448:27;-1:-1:-1;4438:55:1;;4489:1;4486;4479:12;4438:55;4512:74;4578:7;4573:2;4560:16;4555:2;4551;4547:11;4512:74;:::i;4597:347::-;4662:6;4670;4723:2;4711:9;4702:7;4698:23;4694:32;4691:52;;;4739:1;4736;4729:12;4691:52;4762:29;4781:9;4762:29;:::i;:::-;4752:39;;4841:2;4830:9;4826:18;4813:32;4888:5;4881:13;4874:21;4867:5;4864:32;4854:60;;4910:1;4907;4900:12;4854:60;4933:5;4923:15;;;4597:347;;;;;:::o;5131:667::-;5226:6;5234;5242;5250;5303:3;5291:9;5282:7;5278:23;5274:33;5271:53;;;5320:1;5317;5310:12;5271:53;5343:29;5362:9;5343:29;:::i;:::-;5333:39;;5391:38;5425:2;5414:9;5410:18;5391:38;:::i;:::-;5381:48;;5476:2;5465:9;5461:18;5448:32;5438:42;;5531:2;5520:9;5516:18;5503:32;5558:18;5550:6;5547:30;5544:50;;;5590:1;5587;5580:12;5544:50;5613:22;;5666:4;5658:13;;5654:27;-1:-1:-1;5644:55:1;;5695:1;5692;5685:12;5644:55;5718:74;5784:7;5779:2;5766:16;5761:2;5757;5753:11;5718:74;:::i;:::-;5708:84;;;5131:667;;;;;;;:::o;5803:183::-;5863:4;5896:18;5888:6;5885:30;5882:56;;;5918:18;;:::i;:::-;-1:-1:-1;5963:1:1;5959:14;5975:4;5955:25;;5803:183::o;5991:959::-;6084:6;6092;6145:2;6133:9;6124:7;6120:23;6116:32;6113:52;;;6161:1;6158;6151:12;6113:52;6197:9;6184:23;6174:33;;6226:2;6279;6268:9;6264:18;6251:32;6306:18;6298:6;6295:30;6292:50;;;6338:1;6335;6328:12;6292:50;6361:22;;6414:4;6406:13;;6402:27;-1:-1:-1;6392:55:1;;6443:1;6440;6433:12;6392:55;6479:2;6466:16;6502:60;6518:43;6558:2;6518:43;:::i;:::-;6502:60;:::i;:::-;6596:15;;;6678:1;6674:10;;;;6666:19;;6662:28;;;6627:12;;;;6702:19;;;6699:39;;;6734:1;6731;6724:12;6699:39;6758:11;;;;6778:142;6794:6;6789:3;6786:15;6778:142;;;6860:17;;6848:30;;6811:12;;;;6898;;;;6778:142;;;6939:5;6929:15;;;;;;;5991:959;;;;;:::o;6955:967::-;7048:6;7056;7109:2;7097:9;7088:7;7084:23;7080:32;7077:52;;;7125:1;7122;7115:12;7077:52;7165:9;7152:23;7198:18;7190:6;7187:30;7184:50;;;7230:1;7227;7220:12;7184:50;7253:22;;7306:4;7298:13;;7294:27;-1:-1:-1;7284:55:1;;7335:1;7332;7325:12;7284:55;7371:2;7358:16;7393:4;7417:60;7433:43;7473:2;7433:43;:::i;7417:60::-;7511:15;;;7593:1;7589:10;;;;7581:19;;7577:28;;;7542:12;;;;7617:19;;;7614:39;;;7649:1;7646;7639:12;7614:39;7673:11;;;;7693:148;7709:6;7704:3;7701:15;7693:148;;;7775:23;7794:3;7775:23;:::i;:::-;7763:36;;7726:12;;;;7819;;;;7693:148;;;7860:5;7897:18;;;;7884:32;;-1:-1:-1;;;;;;6955:967:1:o;7927:260::-;7995:6;8003;8056:2;8044:9;8035:7;8031:23;8027:32;8024:52;;;8072:1;8069;8062:12;8024:52;8095:29;8114:9;8095:29;:::i;:::-;8085:39;;8143:38;8177:2;8166:9;8162:18;8143:38;:::i;:::-;8133:48;;7927:260;;;;;:::o;8192:895::-;8314:6;8322;8330;8338;8346;8354;8407:3;8395:9;8386:7;8382:23;8378:33;8375:53;;;8424:1;8421;8414:12;8375:53;8447:29;8466:9;8447:29;:::i;:::-;8437:39;;8523:2;8512:9;8508:18;8495:32;8485:42;;8574:2;8563:9;8559:18;8546:32;8536:42;;8625:2;8614:9;8610:18;8597:32;8587:42;;8680:3;8669:9;8665:19;8652:33;8704:18;8745:2;8737:6;8734:14;8731:34;;;8761:1;8758;8751:12;8731:34;8799:6;8788:9;8784:22;8774:32;;8844:7;8837:4;8833:2;8829:13;8825:27;8815:55;;8866:1;8863;8856:12;8815:55;8906:2;8893:16;8932:2;8924:6;8921:14;8918:34;;;8948:1;8945;8938:12;8918:34;9001:7;8996:2;8986:6;8983:1;8979:14;8975:2;8971:23;8967:32;8964:45;8961:65;;;9022:1;9019;9012:12;8961:65;9053:2;9049;9045:11;9035:21;;9075:6;9065:16;;;;;8192:895;;;;;;;;:::o;9092:322::-;9169:6;9177;9185;9238:2;9226:9;9217:7;9213:23;9209:32;9206:52;;;9254:1;9251;9244:12;9206:52;9277:29;9296:9;9277:29;:::i;:::-;9267:39;9353:2;9338:18;;9325:32;;-1:-1:-1;9404:2:1;9389:18;;;9376:32;;9092:322;-1:-1:-1;;;9092:322:1:o;9419:356::-;9621:2;9603:21;;;9640:18;;;9633:30;9699:34;9694:2;9679:18;;9672:62;9766:2;9751:18;;9419:356::o;9780:380::-;9859:1;9855:12;;;;9902;;;9923:61;;9977:4;9969:6;9965:17;9955:27;;9923:61;10030:2;10022:6;10019:14;9999:18;9996:38;9993:161;;10076:10;10071:3;10067:20;10064:1;10057:31;10111:4;10108:1;10101:15;10139:4;10136:1;10129:15;9993:161;;9780:380;;;:::o;11405:413::-;11607:2;11589:21;;;11646:2;11626:18;;;11619:30;11685:34;11680:2;11665:18;;11658:62;-1:-1:-1;;;11751:2:1;11736:18;;11729:47;11808:3;11793:19;;11405:413::o;12235:355::-;12437:2;12419:21;;;12476:2;12456:18;;;12449:30;12515:33;12510:2;12495:18;;12488:61;12581:2;12566:18;;12235:355::o;13218:127::-;13279:10;13274:3;13270:20;13267:1;13260:31;13310:4;13307:1;13300:15;13334:4;13331:1;13324:15;13476:545;13578:2;13573:3;13570:11;13567:448;;;13614:1;13639:5;13635:2;13628:17;13684:4;13680:2;13670:19;13754:2;13742:10;13738:19;13735:1;13731:27;13725:4;13721:38;13790:4;13778:10;13775:20;13772:47;;;-1:-1:-1;13813:4:1;13772:47;13868:2;13863:3;13859:12;13856:1;13852:20;13846:4;13842:31;13832:41;;13923:82;13941:2;13934:5;13931:13;13923:82;;;13986:17;;;13967:1;13956:13;13923:82;;;13927:3;;;13476:545;;;:::o;14197:1352::-;14323:3;14317:10;14350:18;14342:6;14339:30;14336:56;;;14372:18;;:::i;:::-;14401:97;14491:6;14451:38;14483:4;14477:11;14451:38;:::i;:::-;14445:4;14401:97;:::i;:::-;14553:4;;14617:2;14606:14;;14634:1;14629:663;;;;15336:1;15353:6;15350:89;;;-1:-1:-1;15405:19:1;;;15399:26;15350:89;-1:-1:-1;;14154:1:1;14150:11;;;14146:24;14142:29;14132:40;14178:1;14174:11;;;14129:57;15452:81;;14599:944;;14629:663;13423:1;13416:14;;;13460:4;13447:18;;-1:-1:-1;;14665:20:1;;;14783:236;14797:7;14794:1;14791:14;14783:236;;;14886:19;;;14880:26;14865:42;;14978:27;;;;14946:1;14934:14;;;;14813:19;;14783:236;;;14787:3;15047:6;15038:7;15035:19;15032:201;;;15108:19;;;15102:26;-1:-1:-1;;15191:1:1;15187:14;;;15203:3;15183:24;15179:37;15175:42;15160:58;15145:74;;15032:201;-1:-1:-1;;;;;15279:1:1;15263:14;;;15259:22;15246:36;;-1:-1:-1;14197:1352:1:o;15554:127::-;15615:10;15610:3;15606:20;15603:1;15596:31;15646:4;15643:1;15636:15;15670:4;15667:1;15660:15;15686:128;15726:3;15757:1;15753:6;15750:1;15747:13;15744:39;;;15763:18;;:::i;:::-;-1:-1:-1;15799:9:1;;15686:128::o;15819:135::-;15858:3;15879:17;;;15876:43;;15899:18;;:::i;:::-;-1:-1:-1;15946:1:1;15935:13;;15819:135::o;16780:168::-;16820:7;16886:1;16882;16878:6;16874:14;16871:1;16868:21;16863:1;16856:9;16849:17;16845:45;16842:71;;;16893:18;;:::i;:::-;-1:-1:-1;16933:9:1;;16780:168::o;16953:399::-;17155:2;17137:21;;;17194:2;17174:18;;;17167:30;17233:34;17228:2;17213:18;;17206:62;-1:-1:-1;;;17299:2:1;17284:18;;17277:33;17342:3;17327:19;;16953:399::o;17708:352::-;17910:2;17892:21;;;17949:2;17929:18;;;17922:30;17988;17983:2;17968:18;;17961:58;18051:2;18036:18;;17708:352::o;18773:1007::-;18949:3;18978:1;19011:6;19005:13;19041:36;19067:9;19041:36;:::i;:::-;19096:1;19113:18;;;19140:133;;;;19287:1;19282:356;;;;19106:532;;19140:133;-1:-1:-1;;19173:24:1;;19161:37;;19246:14;;19239:22;19227:35;;19218:45;;;-1:-1:-1;19140:133:1;;19282:356;19313:6;19310:1;19303:17;19343:4;19388:2;19385:1;19375:16;19413:1;19427:165;19441:6;19438:1;19435:13;19427:165;;;19519:14;;19506:11;;;19499:35;19562:16;;;;19456:10;;19427:165;;;19431:3;;;19621:6;19616:3;19612:16;19605:23;;19106:532;;;;;19669:6;19663:13;19685:55;19731:8;19726:3;19719:4;19711:6;19707:17;19685:55;:::i;:::-;19756:18;;18773:1007;-1:-1:-1;;;;18773:1007:1:o;22884:125::-;22924:4;22952:1;22949;22946:8;22943:34;;;22957:18;;:::i;:::-;-1:-1:-1;22994:9:1;;22884:125::o;23368:414::-;23570:2;23552:21;;;23609:2;23589:18;;;23582:30;23648:34;23643:2;23628:18;;23621:62;-1:-1:-1;;;23714:2:1;23699:18;;23692:48;23772:3;23757:19;;23368:414::o;24136:127::-;24197:10;24192:3;24188:20;24185:1;24178:31;24228:4;24225:1;24218:15;24252:4;24249:1;24242:15;24268:112;24300:1;24326;24316:35;;24331:18;;:::i;:::-;-1:-1:-1;24365:9:1;;24268:112::o;24385:120::-;24425:1;24451;24441:35;;24456:18;;:::i;:::-;-1:-1:-1;24490:9:1;;24385:120::o;24510:489::-;-1:-1:-1;;;;;24779:15:1;;;24761:34;;24831:15;;24826:2;24811:18;;24804:43;24878:2;24863:18;;24856:34;;;24926:3;24921:2;24906:18;;24899:31;;;24704:4;;24947:46;;24973:19;;24965:6;24947:46;:::i;:::-;24939:54;24510:489;-1:-1:-1;;;;;;24510:489:1:o;25004:249::-;25073:6;25126:2;25114:9;25105:7;25101:23;25097:32;25094:52;;;25142:1;25139;25132:12;25094:52;25174:9;25168:16;25193:30;25217:5;25193:30;:::i;25929:127::-;25990:10;25985:3;25981:20;25978:1;25971:31;26021:4;26018:1;26011:15;26045:4;26042:1;26035:15
Swarm Source
ipfs://f05d540d320e6089af51334798ff8236d203743393bc75e3fc494791c31b2069
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.