Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
540
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ModernDegenzYachtClub
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-12 */ // SPDX-License-Identifier: MIT // Modern Degenz Yacht Club - Do You Eat Ass? // _ .-') _ ('-. ('-. .-') _ ('-. .-') .-') ,------. // ( ( OO) ) _( OO) ( OO ).-.( OO) ) ( OO ).-. ( OO ). ( OO ). ' .--. ' // \ .'_ .-'),-----. ,--. ,--..-'),-----. ,--. ,--. (,------./ . --. // '._ / . --. /(_)---\_)(_)---\_)| | | | // ,`'--..._)( OO' .-. ' \ `.' /( OO' .-. ' | | | | | .---'| \-. \ |'--...__) | \-. \ / _ | / _ | '--' | | // | | \ '/ | | | | .-') / / | | | | | | | .-') | | .-'-' | |'--. .--' .-'-' | |\ :` `. \ :` `. __. | // | | ' |\_) | |\| | (OO \ / \_) | |\| | | |_|( OO ) (| '--.\| |_.' | | | \| |_.' | '..`''.) '..`''.) | .' // | | / : \ | | | | | / /\_ \ | | | | | | | `-' / | .--' | .-. | | | | .-. |.-._) \.-._) \ |___| // | '--' / `' '-' ' `-./ /.__) `' '-' '(' '-'(_.-' | `---.| | | | | | | | | |\ /\ / .---. // `-------' `-----' `--' `-----' `-----' `------'`--' `--' `--' `--' `--' `-----' `-----' '---' // Modern Degenz Yacht Club is a collection of 3,501 unique Modern Degenz. // File: contracts/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: contracts/Address.sol pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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: contracts/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: contracts/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: contracts/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: contracts/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: contracts/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 tokenId); /** * @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: contracts/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: contracts/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 make 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: contracts/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: contracts/ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/TFNLab.sol pragma solidity ^0.8.0; contract ModernDegenzYachtClub is Ownable, ERC721A, ReentrancyGuard { uint256 public immutable maxPerAddressDuringMint; uint256 public immutable amountForDevs; string public HSC_PROVENANCE = "Do You Eat Ass?"; mapping(address => uint256) public allowlist; constructor( uint256 maxBatchSize_, uint256 collectionSize_, uint256 amountForDevs_ ) ERC721A("ModernDegenzYachtClub", "MDYC", maxBatchSize_, collectionSize_) { maxPerAddressDuringMint = maxBatchSize_; amountForDevs = amountForDevs_; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function publicSaleMint(uint256 quantity) external callerIsUser { require(totalSupply() + quantity <= collectionSize, "reached max supply"); require( numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint, "can not mint this many" ); _safeMint(msg.sender, quantity); } function seedAllowlist(address[] memory addresses, uint256[] memory numSlots) external onlyOwner { require( addresses.length == numSlots.length, "addresses does not match numSlots length" ); for (uint256 i = 0; i < addresses.length; i++) { allowlist[addresses[i]] = numSlots[i]; } } // For marketing etc. function devMint(uint256 quantity) external onlyOwner { require( totalSupply() + quantity <= amountForDevs, "too many already minted before dev mint" ); require( quantity % maxBatchSize == 0, "can only mint a multiple of the maxBatchSize" ); uint256 numChunks = quantity / maxBatchSize; for (uint256 i = 0; i < numChunks; i++) { _safeMint(msg.sender, maxBatchSize); } } // // metadata URI string private _baseTokenURI; function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { _baseTokenURI = baseURI; } function withdrawMoney() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant { _setOwnersExplicit(quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) { return ownershipOf(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"}],"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":"HSC_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDevs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","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":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"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":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","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":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60006001819055600855610140604052600f6101008190526e446f20596f7520456174204173733f60881b6101209081526200003f91600a91906200024e565b503480156200004d57600080fd5b5060405162002c7a38038062002c7a8339810160408190526200007091620002f4565b6040518060400160405280601581526020017f4d6f6465726e446567656e7a5961636874436c75620000000000000000000000815250604051806040016040528060048152602001634d44594360e01b8152508484620000df620000d9620001fa60201b60201c565b620001fe565b600081116200014c5760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001ae5760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000143565b8351620001c39060029060208701906200024e565b508251620001d99060039060208601906200024e565b5060a0919091526080525050600160095560c0929092525060e05262000360565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200025c9062000323565b90600052602060002090601f016020900481019282620002805760008555620002cb565b82601f106200029b57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002cb578251825591602001919060010190620002ae565b50620002d9929150620002dd565b5090565b5b80821115620002d95760008155600101620002de565b6000806000606084860312156200030a57600080fd5b8351925060208401519150604084015190509250925092565b600181811c908216806200033857607f821691505b602082108114156200035a57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516128a1620003d9600039600081816104b601526109c101526000818161033c01526110b4015260008181610a5701528181610ae501528181610b1d015281816119dd01528181611a070152611ec901526000818161103c015281816117c501526117f701526128a16000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638da5cb5b1161010f578063b7532a45116100a2578063dc33e68111610071578063dc33e6811461044f578063e985e9c514610462578063f2fde38b1461049e578063fbe1aa51146104b157600080fd5b8063b7532a4514610418578063b88d4fde14610420578063c87b56dd14610433578063d7224ba01461044657600080fd5b8063a7cd52cb116100de578063a7cd52cb146103ca578063ac446002146103ea578063b05863d5146103f2578063b3ab66b01461040557600080fd5b80638da5cb5b1461035e5780639231ab2a1461036f57806395d89b41146103af578063a22cb465146103b757600080fd5b8063375a069a116101875780636352211e116101565780636352211e1461030957806370a082311461031c578063715018a61461032f5780638bc35c2f1461033757600080fd5b8063375a069a146102bd57806342842e0e146102d05780634f6ccce7146102e357806355f804b3146102f657600080fd5b806318160ddd116101c357806318160ddd1461027257806323b872dd146102845780632d20fb60146102975780632f745c59146102aa57600080fd5b806301ffc9a7146101f557806306fdde031461021d578063081812fc14610232578063095ea7b31461025d575b600080fd5b610208610203366004612479565b6104d8565b60405190151581526020015b60405180910390f35b610225610545565b60405161021491906125d5565b610245610240366004612524565b6105d7565b6040516001600160a01b039091168152602001610214565b61027061026b366004612389565b610667565b005b6001545b604051908152602001610214565b610270610292366004612252565b61077f565b6102706102a5366004612524565b61078a565b6102766102b8366004612389565b61081d565b6102706102cb366004612524565b610995565b6102706102de366004612252565b610b53565b6102766102f1366004612524565b610b6e565b6102706103043660046124b3565b610bd7565b610245610317366004612524565b610c0d565b61027661032a366004612204565b610c1f565b610270610cb0565b6102767f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316610245565b61038261037d366004612524565b610ce6565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610214565b610225610d03565b6102706103c536600461234d565b610d12565b6102766103d8366004612204565b600b6020526000908152604090205481565b610270610dd7565b6102706104003660046123b3565b610ee4565b610270610413366004612524565b610feb565b61022561113b565b61027061042e36600461228e565b6111c9565b610225610441366004612524565b611202565b61027660085481565b61027661045d366004612204565b6112cf565b61020861047036600461221f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102706104ac366004612204565b6112da565b6102767f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b031982166380ac58cd60e01b148061050957506001600160e01b03198216635b5e139f60e01b145b8061052457506001600160e01b0319821663780e9d6360e01b145b8061053f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461055490612793565b80601f016020809104026020016040519081016040528092919081815260200182805461058090612793565b80156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b5050505050905090565b60006105e4826001541190565b61064b5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061067282610c0d565b9050806001600160a01b0316836001600160a01b031614156106e15760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610642565b336001600160a01b03821614806106fd57506106fd8133610470565b61076f5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610642565b61077a838383611372565b505050565b61077a8383836113ce565b6000546001600160a01b031633146107b45760405162461bcd60e51b8152600401610642906125e8565b600260095414156108075760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610642565b600260095561081581611754565b506001600955565b600061082883610c1f565b82106108815760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610642565b600061088c60015490565b905060008060005b83811015610935576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b031691830191909152156108e657805192505b876001600160a01b0316836001600160a01b0316141561092257868414156109145750935061053f92505050565b8361091e816127ce565b9450505b508061092d816127ce565b915050610894565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610642565b6000546001600160a01b031633146109bf5760405162461bcd60e51b8152600401610642906125e8565b7f0000000000000000000000000000000000000000000000000000000000000000816109ea60015490565b6109f491906126e5565b1115610a525760405162461bcd60e51b815260206004820152602760248201527f746f6f206d616e7920616c7265616479206d696e746564206265666f72652064604482015266195d881b5a5b9d60ca1b6064820152608401610642565b610a7c7f0000000000000000000000000000000000000000000000000000000000000000826127e9565b15610ade5760405162461bcd60e51b815260206004820152602c60248201527f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060448201526b6d6178426174636853697a6560a01b6064820152608401610642565b6000610b0a7f0000000000000000000000000000000000000000000000000000000000000000836126fd565b905060005b8181101561077a57610b41337f000000000000000000000000000000000000000000000000000000000000000061193d565b80610b4b816127ce565b915050610b0f565b61077a838383604051806020016040528060008152506111c9565b6000610b7960015490565b8210610bd35760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610642565b5090565b6000546001600160a01b03163314610c015760405162461bcd60e51b8152600401610642906125e8565b61077a600c83836120e6565b6000610c188261195b565b5192915050565b60006001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610642565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b03163314610cda5760405162461bcd60e51b8152600401610642906125e8565b610ce46000611b04565b565b604080518082019091526000808252602082015261053f8261195b565b60606003805461055490612793565b6001600160a01b038216331415610d6b5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610642565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314610e015760405162461bcd60e51b8152600401610642906125e8565b60026009541415610e545760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610642565b6002600955604051600090339047908381818185875af1925050503d8060008114610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b50509050806108155760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610642565b6000546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610642906125e8565b8051825114610f705760405162461bcd60e51b815260206004820152602860248201527f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f746044820152670e640d8cadccee8d60c31b6064820152608401610642565b60005b825181101561077a57818181518110610f8e57610f8e612829565b6020026020010151600b6000858481518110610fac57610fac612829565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610fe3906127ce565b915050610f73565b32331461103a5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610642565b7f00000000000000000000000000000000000000000000000000000000000000008161106560015490565b61106f91906126e5565b11156110b25760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610642565b7f0000000000000000000000000000000000000000000000000000000000000000816110dd336112cf565b6110e791906126e5565b111561112e5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610642565b611138338261193d565b50565b600a805461114890612793565b80601f016020809104026020016040519081016040528092919081815260200182805461117490612793565b80156111c15780601f10611196576101008083540402835291602001916111c1565b820191906000526020600020905b8154815290600101906020018083116111a457829003601f168201915b505050505081565b6111d48484846113ce565b6111e084848484611b54565b6111fc5760405162461bcd60e51b81526004016106429061261d565b50505050565b606061120f826001541190565b6112735760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610642565b600061127d611c62565b9050600081511161129d57604051806020016040528060008152506112c8565b806112a784611c71565b6040516020016112b8929190612569565b6040516020818303038152906040525b9392505050565b600061053f82611d6e565b6000546001600160a01b031633146113045760405162461bcd60e51b8152600401610642906125e8565b6001600160a01b0381166113695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b61113881611b04565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006113d98261195b565b80519091506000906001600160a01b0316336001600160a01b03161480611410575033611405846105d7565b6001600160a01b0316145b80611422575081516114229033610470565b90508061148c5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610642565b846001600160a01b031682600001516001600160a01b0316146115005760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610642565b6001600160a01b0384166115645760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610642565b6115746000848460000151611372565b6001600160a01b03851660009081526005602052604081208054600192906115a69084906001600160801b0316612711565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038616600090815260056020526040812080546001945090926115f2918591166126c3565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556116798460016126e5565b6000818152600460205260409020549091506001600160a01b031661170a576116a3816001541190565b1561170a5760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600854816117a45760405162461bcd60e51b815260206004820152601860248201527f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006044820152606401610642565b600060016117b284846126e5565b6117bc9190612739565b90506117e960017f0000000000000000000000000000000000000000000000000000000000000000612739565b81111561181e5761181b60017f0000000000000000000000000000000000000000000000000000000000000000612739565b90505b611829816001541190565b6118845760405162461bcd60e51b815260206004820152602660248201527f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360448201526506c65616e75760d41b6064820152608401610642565b815b818111611929576000818152600460205260409020546001600160a01b03166119175760006118b48261195b565b60408051808201825282516001600160a01b0390811682526020938401516001600160401b039081168584019081526000888152600490965293909420915182549351909416600160a01b026001600160e01b0319909316931692909217179055505b80611921816127ce565b915050611886565b506119358160016126e5565b600855505050565b611957828260405180602001604052806000815250611e0c565b5050565b604080518082019091526000808252602082015261197a826001541190565b6119d95760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610642565b60007f00000000000000000000000000000000000000000000000000000000000000008310611a3a57611a2c7f000000000000000000000000000000000000000000000000000000000000000084612739565b611a379060016126e5565b90505b825b818110611aa3576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611a9057949350505050565b5080611a9b8161277c565b915050611a3c565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610642565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b15611c5657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b98903390899088908890600401612598565b602060405180830381600087803b158015611bb257600080fd5b505af1925050508015611be2575060408051601f3d908101601f19168201909252611bdf91810190612496565b60015b611c3c573d808015611c10576040519150601f19603f3d011682016040523d82523d6000602084013e611c15565b606091505b508051611c345760405162461bcd60e51b81526004016106429061261d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c5a565b5060015b949350505050565b6060600c805461055490612793565b606081611c955750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cbf5780611ca9816127ce565b9150611cb89050600a836126fd565b9150611c99565b6000816001600160401b03811115611cd957611cd961283f565b6040519080825280601f01601f191660200182016040528015611d03576020820181803683370190505b5090505b8415611c5a57611d18600183612739565b9150611d25600a866127e9565b611d309060306126e5565b60f81b818381518110611d4557611d45612829565b60200101906001600160f81b031916908160001a905350611d67600a866126fd565b9450611d07565b60006001600160a01b038216611de05760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b6064820152608401610642565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b038416611e6f5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610642565b611e7a816001541190565b15611ec75760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610642565b7f0000000000000000000000000000000000000000000000000000000000000000831115611f425760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610642565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611f9e9087906126c3565b6001600160801b03168152602001858360200151611fbc91906126c3565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156120db5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461209f6000888488611b54565b6120bb5760405162461bcd60e51b81526004016106429061261d565b816120c5816127ce565b92505080806120d3906127ce565b915050612052565b50600181905561174c565b8280546120f290612793565b90600052602060002090601f016020900481019282612114576000855561215a565b82601f1061212d5782800160ff1982351617855561215a565b8280016001018555821561215a579182015b8281111561215a57823582559160200191906001019061213f565b50610bd39291505b80821115610bd35760008155600101612162565b80356001600160a01b038116811461218d57600080fd5b919050565b600082601f8301126121a357600080fd5b813560206121b86121b3836126a0565b612670565b80838252828201915082860187848660051b89010111156121d857600080fd5b60005b858110156121f7578135845292840192908401906001016121db565b5090979650505050505050565b60006020828403121561221657600080fd5b6112c882612176565b6000806040838503121561223257600080fd5b61223b83612176565b915061224960208401612176565b90509250929050565b60008060006060848603121561226757600080fd5b61227084612176565b925061227e60208501612176565b9150604084013590509250925092565b600080600080608085870312156122a457600080fd5b6122ad85612176565b935060206122bc818701612176565b93506040860135925060608601356001600160401b03808211156122df57600080fd5b818801915088601f8301126122f357600080fd5b8135818111156123055761230561283f565b612317601f8201601f19168501612670565b9150808252898482850101111561232d57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561236057600080fd5b61236983612176565b91506020830135801515811461237e57600080fd5b809150509250929050565b6000806040838503121561239c57600080fd5b6123a583612176565b946020939093013593505050565b600080604083850312156123c657600080fd5b82356001600160401b03808211156123dd57600080fd5b818501915085601f8301126123f157600080fd5b813560206124016121b3836126a0565b8083825282820191508286018a848660051b890101111561242157600080fd5b600096505b8487101561244b5761243781612176565b835260019690960195918301918301612426565b509650508601359250508082111561246257600080fd5b5061246f85828601612192565b9150509250929050565b60006020828403121561248b57600080fd5b81356112c881612855565b6000602082840312156124a857600080fd5b81516112c881612855565b600080602083850312156124c657600080fd5b82356001600160401b03808211156124dd57600080fd5b818501915085601f8301126124f157600080fd5b81358181111561250057600080fd5b86602082850101111561251257600080fd5b60209290920196919550909350505050565b60006020828403121561253657600080fd5b5035919050565b60008151808452612555816020860160208601612750565b601f01601f19169290920160200192915050565b6000835161257b818460208801612750565b83519083019061258f818360208801612750565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125cb9083018461253d565b9695505050505050565b6020815260006112c8602083018461253d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156126985761269861283f565b604052919050565b60006001600160401b038211156126b9576126b961283f565b5060051b60200190565b60006001600160801b0380831681851680830382111561258f5761258f6127fd565b600082198211156126f8576126f86127fd565b500190565b60008261270c5761270c612813565b500490565b60006001600160801b0383811690831681811015612731576127316127fd565b039392505050565b60008282101561274b5761274b6127fd565b500390565b60005b8381101561276b578181015183820152602001612753565b838111156111fc5750506000910152565b60008161278b5761278b6127fd565b506000190190565b600181811c908216806127a757607f821691505b602082108114156127c857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127e2576127e26127fd565b5060010190565b6000826127f8576127f8612813565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461113857600080fdfea2646970667358221220f0487963b319e6a787010577491c018050b3faa4082e7080b1f9f2869206561764736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000dad0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80638da5cb5b1161010f578063b7532a45116100a2578063dc33e68111610071578063dc33e6811461044f578063e985e9c514610462578063f2fde38b1461049e578063fbe1aa51146104b157600080fd5b8063b7532a4514610418578063b88d4fde14610420578063c87b56dd14610433578063d7224ba01461044657600080fd5b8063a7cd52cb116100de578063a7cd52cb146103ca578063ac446002146103ea578063b05863d5146103f2578063b3ab66b01461040557600080fd5b80638da5cb5b1461035e5780639231ab2a1461036f57806395d89b41146103af578063a22cb465146103b757600080fd5b8063375a069a116101875780636352211e116101565780636352211e1461030957806370a082311461031c578063715018a61461032f5780638bc35c2f1461033757600080fd5b8063375a069a146102bd57806342842e0e146102d05780634f6ccce7146102e357806355f804b3146102f657600080fd5b806318160ddd116101c357806318160ddd1461027257806323b872dd146102845780632d20fb60146102975780632f745c59146102aa57600080fd5b806301ffc9a7146101f557806306fdde031461021d578063081812fc14610232578063095ea7b31461025d575b600080fd5b610208610203366004612479565b6104d8565b60405190151581526020015b60405180910390f35b610225610545565b60405161021491906125d5565b610245610240366004612524565b6105d7565b6040516001600160a01b039091168152602001610214565b61027061026b366004612389565b610667565b005b6001545b604051908152602001610214565b610270610292366004612252565b61077f565b6102706102a5366004612524565b61078a565b6102766102b8366004612389565b61081d565b6102706102cb366004612524565b610995565b6102706102de366004612252565b610b53565b6102766102f1366004612524565b610b6e565b6102706103043660046124b3565b610bd7565b610245610317366004612524565b610c0d565b61027661032a366004612204565b610c1f565b610270610cb0565b6102767f000000000000000000000000000000000000000000000000000000000000001581565b6000546001600160a01b0316610245565b61038261037d366004612524565b610ce6565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610214565b610225610d03565b6102706103c536600461234d565b610d12565b6102766103d8366004612204565b600b6020526000908152604090205481565b610270610dd7565b6102706104003660046123b3565b610ee4565b610270610413366004612524565b610feb565b61022561113b565b61027061042e36600461228e565b6111c9565b610225610441366004612524565b611202565b61027660085481565b61027661045d366004612204565b6112cf565b61020861047036600461221f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102706104ac366004612204565b6112da565b6102767f000000000000000000000000000000000000000000000000000000000000006481565b60006001600160e01b031982166380ac58cd60e01b148061050957506001600160e01b03198216635b5e139f60e01b145b8061052457506001600160e01b0319821663780e9d6360e01b145b8061053f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461055490612793565b80601f016020809104026020016040519081016040528092919081815260200182805461058090612793565b80156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b5050505050905090565b60006105e4826001541190565b61064b5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061067282610c0d565b9050806001600160a01b0316836001600160a01b031614156106e15760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610642565b336001600160a01b03821614806106fd57506106fd8133610470565b61076f5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610642565b61077a838383611372565b505050565b61077a8383836113ce565b6000546001600160a01b031633146107b45760405162461bcd60e51b8152600401610642906125e8565b600260095414156108075760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610642565b600260095561081581611754565b506001600955565b600061082883610c1f565b82106108815760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610642565b600061088c60015490565b905060008060005b83811015610935576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b031691830191909152156108e657805192505b876001600160a01b0316836001600160a01b0316141561092257868414156109145750935061053f92505050565b8361091e816127ce565b9450505b508061092d816127ce565b915050610894565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610642565b6000546001600160a01b031633146109bf5760405162461bcd60e51b8152600401610642906125e8565b7f0000000000000000000000000000000000000000000000000000000000000064816109ea60015490565b6109f491906126e5565b1115610a525760405162461bcd60e51b815260206004820152602760248201527f746f6f206d616e7920616c7265616479206d696e746564206265666f72652064604482015266195d881b5a5b9d60ca1b6064820152608401610642565b610a7c7f0000000000000000000000000000000000000000000000000000000000000015826127e9565b15610ade5760405162461bcd60e51b815260206004820152602c60248201527f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060448201526b6d6178426174636853697a6560a01b6064820152608401610642565b6000610b0a7f0000000000000000000000000000000000000000000000000000000000000015836126fd565b905060005b8181101561077a57610b41337f000000000000000000000000000000000000000000000000000000000000001561193d565b80610b4b816127ce565b915050610b0f565b61077a838383604051806020016040528060008152506111c9565b6000610b7960015490565b8210610bd35760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610642565b5090565b6000546001600160a01b03163314610c015760405162461bcd60e51b8152600401610642906125e8565b61077a600c83836120e6565b6000610c188261195b565b5192915050565b60006001600160a01b038216610c8b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610642565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b03163314610cda5760405162461bcd60e51b8152600401610642906125e8565b610ce46000611b04565b565b604080518082019091526000808252602082015261053f8261195b565b60606003805461055490612793565b6001600160a01b038216331415610d6b5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610642565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314610e015760405162461bcd60e51b8152600401610642906125e8565b60026009541415610e545760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610642565b6002600955604051600090339047908381818185875af1925050503d8060008114610e9b576040519150601f19603f3d011682016040523d82523d6000602084013e610ea0565b606091505b50509050806108155760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610642565b6000546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610642906125e8565b8051825114610f705760405162461bcd60e51b815260206004820152602860248201527f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f746044820152670e640d8cadccee8d60c31b6064820152608401610642565b60005b825181101561077a57818181518110610f8e57610f8e612829565b6020026020010151600b6000858481518110610fac57610fac612829565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610fe3906127ce565b915050610f73565b32331461103a5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610642565b7f0000000000000000000000000000000000000000000000000000000000000dad8161106560015490565b61106f91906126e5565b11156110b25760405162461bcd60e51b815260206004820152601260248201527172656163686564206d617820737570706c7960701b6044820152606401610642565b7f0000000000000000000000000000000000000000000000000000000000000015816110dd336112cf565b6110e791906126e5565b111561112e5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610642565b611138338261193d565b50565b600a805461114890612793565b80601f016020809104026020016040519081016040528092919081815260200182805461117490612793565b80156111c15780601f10611196576101008083540402835291602001916111c1565b820191906000526020600020905b8154815290600101906020018083116111a457829003601f168201915b505050505081565b6111d48484846113ce565b6111e084848484611b54565b6111fc5760405162461bcd60e51b81526004016106429061261d565b50505050565b606061120f826001541190565b6112735760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610642565b600061127d611c62565b9050600081511161129d57604051806020016040528060008152506112c8565b806112a784611c71565b6040516020016112b8929190612569565b6040516020818303038152906040525b9392505050565b600061053f82611d6e565b6000546001600160a01b031633146113045760405162461bcd60e51b8152600401610642906125e8565b6001600160a01b0381166113695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b61113881611b04565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006113d98261195b565b80519091506000906001600160a01b0316336001600160a01b03161480611410575033611405846105d7565b6001600160a01b0316145b80611422575081516114229033610470565b90508061148c5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610642565b846001600160a01b031682600001516001600160a01b0316146115005760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610642565b6001600160a01b0384166115645760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610642565b6115746000848460000151611372565b6001600160a01b03851660009081526005602052604081208054600192906115a69084906001600160801b0316612711565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038616600090815260056020526040812080546001945090926115f2918591166126c3565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b031990911691909216171790556116798460016126e5565b6000818152600460205260409020549091506001600160a01b031661170a576116a3816001541190565b1561170a5760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600854816117a45760405162461bcd60e51b815260206004820152601860248201527f7175616e74697479206d757374206265206e6f6e7a65726f00000000000000006044820152606401610642565b600060016117b284846126e5565b6117bc9190612739565b90506117e960017f0000000000000000000000000000000000000000000000000000000000000dad612739565b81111561181e5761181b60017f0000000000000000000000000000000000000000000000000000000000000dad612739565b90505b611829816001541190565b6118845760405162461bcd60e51b815260206004820152602660248201527f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360448201526506c65616e75760d41b6064820152608401610642565b815b818111611929576000818152600460205260409020546001600160a01b03166119175760006118b48261195b565b60408051808201825282516001600160a01b0390811682526020938401516001600160401b039081168584019081526000888152600490965293909420915182549351909416600160a01b026001600160e01b0319909316931692909217179055505b80611921816127ce565b915050611886565b506119358160016126e5565b600855505050565b611957828260405180602001604052806000815250611e0c565b5050565b604080518082019091526000808252602082015261197a826001541190565b6119d95760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610642565b60007f00000000000000000000000000000000000000000000000000000000000000158310611a3a57611a2c7f000000000000000000000000000000000000000000000000000000000000001584612739565b611a379060016126e5565b90505b825b818110611aa3576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611a9057949350505050565b5080611a9b8161277c565b915050611a3c565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610642565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b15611c5657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b98903390899088908890600401612598565b602060405180830381600087803b158015611bb257600080fd5b505af1925050508015611be2575060408051601f3d908101601f19168201909252611bdf91810190612496565b60015b611c3c573d808015611c10576040519150601f19603f3d011682016040523d82523d6000602084013e611c15565b606091505b508051611c345760405162461bcd60e51b81526004016106429061261d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c5a565b5060015b949350505050565b6060600c805461055490612793565b606081611c955750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cbf5780611ca9816127ce565b9150611cb89050600a836126fd565b9150611c99565b6000816001600160401b03811115611cd957611cd961283f565b6040519080825280601f01601f191660200182016040528015611d03576020820181803683370190505b5090505b8415611c5a57611d18600183612739565b9150611d25600a866127e9565b611d309060306126e5565b60f81b818381518110611d4557611d45612829565b60200101906001600160f81b031916908160001a905350611d67600a866126fd565b9450611d07565b60006001600160a01b038216611de05760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b6064820152608401610642565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b038416611e6f5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610642565b611e7a816001541190565b15611ec75760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610642565b7f0000000000000000000000000000000000000000000000000000000000000015831115611f425760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610642565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190611f9e9087906126c3565b6001600160801b03168152602001858360200151611fbc91906126c3565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156120db5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461209f6000888488611b54565b6120bb5760405162461bcd60e51b81526004016106429061261d565b816120c5816127ce565b92505080806120d3906127ce565b915050612052565b50600181905561174c565b8280546120f290612793565b90600052602060002090601f016020900481019282612114576000855561215a565b82601f1061212d5782800160ff1982351617855561215a565b8280016001018555821561215a579182015b8281111561215a57823582559160200191906001019061213f565b50610bd39291505b80821115610bd35760008155600101612162565b80356001600160a01b038116811461218d57600080fd5b919050565b600082601f8301126121a357600080fd5b813560206121b86121b3836126a0565b612670565b80838252828201915082860187848660051b89010111156121d857600080fd5b60005b858110156121f7578135845292840192908401906001016121db565b5090979650505050505050565b60006020828403121561221657600080fd5b6112c882612176565b6000806040838503121561223257600080fd5b61223b83612176565b915061224960208401612176565b90509250929050565b60008060006060848603121561226757600080fd5b61227084612176565b925061227e60208501612176565b9150604084013590509250925092565b600080600080608085870312156122a457600080fd5b6122ad85612176565b935060206122bc818701612176565b93506040860135925060608601356001600160401b03808211156122df57600080fd5b818801915088601f8301126122f357600080fd5b8135818111156123055761230561283f565b612317601f8201601f19168501612670565b9150808252898482850101111561232d57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561236057600080fd5b61236983612176565b91506020830135801515811461237e57600080fd5b809150509250929050565b6000806040838503121561239c57600080fd5b6123a583612176565b946020939093013593505050565b600080604083850312156123c657600080fd5b82356001600160401b03808211156123dd57600080fd5b818501915085601f8301126123f157600080fd5b813560206124016121b3836126a0565b8083825282820191508286018a848660051b890101111561242157600080fd5b600096505b8487101561244b5761243781612176565b835260019690960195918301918301612426565b509650508601359250508082111561246257600080fd5b5061246f85828601612192565b9150509250929050565b60006020828403121561248b57600080fd5b81356112c881612855565b6000602082840312156124a857600080fd5b81516112c881612855565b600080602083850312156124c657600080fd5b82356001600160401b03808211156124dd57600080fd5b818501915085601f8301126124f157600080fd5b81358181111561250057600080fd5b86602082850101111561251257600080fd5b60209290920196919550909350505050565b60006020828403121561253657600080fd5b5035919050565b60008151808452612555816020860160208601612750565b601f01601f19169290920160200192915050565b6000835161257b818460208801612750565b83519083019061258f818360208801612750565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125cb9083018461253d565b9695505050505050565b6020815260006112c8602083018461253d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156126985761269861283f565b604052919050565b60006001600160401b038211156126b9576126b961283f565b5060051b60200190565b60006001600160801b0380831681851680830382111561258f5761258f6127fd565b600082198211156126f8576126f86127fd565b500190565b60008261270c5761270c612813565b500490565b60006001600160801b0383811690831681811015612731576127316127fd565b039392505050565b60008282101561274b5761274b6127fd565b500390565b60005b8381101561276b578181015183820152602001612753565b838111156111fc5750506000910152565b60008161278b5761278b6127fd565b506000190190565b600181811c908216806127a757607f821691505b602082108114156127c857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127e2576127e26127fd565b5060010190565b6000826127f8576127f8612813565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461113857600080fdfea2646970667358221220f0487963b319e6a787010577491c018050b3faa4082e7080b1f9f2869206561764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000dad0000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 21
Arg [1] : collectionSize_ (uint256): 3501
Arg [2] : amountForDevs_ (uint256): 100
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000dad
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode Sourcemap
42411:2664:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27778:370;;;;;;:::i;:::-;;:::i;:::-;;;7516:14:1;;7509:22;7491:41;;7479:2;7464:18;27778:370:0;;;;;;;;29504:94;;;:::i;:::-;;;;;;;:::i;31029:204::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6814:32:1;;;6796:51;;6784:2;6769:18;31029:204:0;6650:203:1;30592:379:0;;;;;;:::i;:::-;;:::i;:::-;;26339:94;26415:12;;26339:94;;;20506:25:1;;;20494:2;20479:18;26339:94:0;20360:177:1;31879:142:0;;;;;;:::i;:::-;;:::i;44686:118::-;;;;;;:::i;:::-;;:::i;26970:744::-;;;;;;:::i;:::-;;:::i;43774:442::-;;;;;;:::i;:::-;;:::i;32084:157::-;;;;;;:::i;:::-;;:::i;26502:177::-;;;;;;:::i;:::-;;:::i;44393:100::-;;;;;;:::i;:::-;;:::i;29327:118::-;;;;;;:::i;:::-;;:::i;28204:211::-;;;;;;:::i;:::-;;:::i;41710:94::-;;;:::i;42484:48::-;;;;;41059:87;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;41059:87;;44923:147;;;;;;:::i;:::-;;:::i;:::-;;;;20225:13:1;;-1:-1:-1;;;;;20221:39:1;20203:58;;20321:4;20309:17;;;20303:24;-1:-1:-1;;;;;20299:49:1;20277:20;;;20270:79;;;;20176:18;44923:147:0;19995:360:1;29659:98:0;;;:::i;31297:274::-;;;;;;:::i;:::-;;:::i;42633:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;44499:181;;;:::i;43404:339::-;;;;;;:::i;:::-;;:::i;43077:315::-;;;;;;:::i;:::-;;:::i;42580:48::-;;;:::i;32304:311::-;;;;;;:::i;:::-;;:::i;29820:394::-;;;;;;:::i;:::-;;:::i;36719:43::-;;;;;;44810:107;;;;;;:::i;:::-;;:::i;31634:186::-;;;;;;:::i;:::-;-1:-1:-1;;;;;31779:25:0;;;31756:4;31779:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31634:186;41959:192;;;;;;:::i;:::-;;:::i;42537:38::-;;;;;27778:370;27905:4;-1:-1:-1;;;;;;27935:40:0;;-1:-1:-1;;;27935:40:0;;:99;;-1:-1:-1;;;;;;;27986:48:0;;-1:-1:-1;;;27986:48:0;27935:99;:160;;;-1:-1:-1;;;;;;;28045:50:0;;-1:-1:-1;;;28045:50:0;27935:160;:207;;;-1:-1:-1;;;;;;;;;;14059:40:0;;;28106:36;27921:221;27778:370;-1:-1:-1;;27778:370:0:o;29504:94::-;29558:13;29587:5;29580:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29504:94;:::o;31029:204::-;31097:7;31121:16;31129:7;32941:12;;-1:-1:-1;32931:22:0;32854:105;31121:16;31113:74;;;;-1:-1:-1;;;31113:74:0;;18971:2:1;31113:74:0;;;18953:21:1;19010:2;18990:18;;;18983:30;19049:34;19029:18;;;19022:62;-1:-1:-1;;;19100:18:1;;;19093:43;19153:19;;31113:74:0;;;;;;;;;-1:-1:-1;31203:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31203:24:0;;31029:204::o;30592:379::-;30661:13;30677:24;30693:7;30677:15;:24::i;:::-;30661:40;;30722:5;-1:-1:-1;;;;;30716:11:0;:2;-1:-1:-1;;;;;30716:11:0;;;30708:58;;;;-1:-1:-1;;;30708:58:0;;14686:2:1;30708:58:0;;;14668:21:1;14725:2;14705:18;;;14698:30;14764:34;14744:18;;;14737:62;-1:-1:-1;;;14815:18:1;;;14808:32;14857:19;;30708:58:0;14484:398:1;30708:58:0;23889:10;-1:-1:-1;;;;;30791:21:0;;;;:62;;-1:-1:-1;30816:37:0;30833:5;23889:10;31634:186;:::i;30816:37::-;30775:153;;;;-1:-1:-1;;;30775:153:0;;11190:2:1;30775:153:0;;;11172:21:1;11229:2;11209:18;;;11202:30;11268:34;11248:18;;;11241:62;11339:27;11319:18;;;11312:55;11384:19;;30775:153:0;10988:421:1;30775:153:0;30937:28;30946:2;30950:7;30959:5;30937:8;:28::i;:::-;30654:317;30592:379;;:::o;31879:142::-;31987:28;31997:4;32003:2;32007:7;31987:9;:28::i;44686:118::-;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;22260:1:::1;22856:7;;:19;;22848:63;;;::::0;-1:-1:-1;;;22848:63:0;;18195:2:1;22848:63:0::1;::::0;::::1;18177:21:1::0;18234:2;18214:18;;;18207:30;18273:33;18253:18;;;18246:61;18324:18;;22848:63:0::1;17993:355:1::0;22848:63:0::1;22260:1;22989:7;:18:::0;44770:28:::2;44789:8:::0;44770:18:::2;:28::i;:::-;-1:-1:-1::0;22216:1:0::1;23168:7;:22:::0;44686:118::o;26970:744::-;27079:7;27114:16;27124:5;27114:9;:16::i;:::-;27106:5;:24;27098:71;;;;-1:-1:-1;;;27098:71:0;;7969:2:1;27098:71:0;;;7951:21:1;8008:2;7988:18;;;7981:30;8047:34;8027:18;;;8020:62;-1:-1:-1;;;8098:18:1;;;8091:32;8140:19;;27098:71:0;7767:398:1;27098:71:0;27176:22;27201:13;26415:12;;;26339:94;27201:13;27176:38;;27221:19;27251:25;27301:9;27296:350;27320:14;27316:1;:18;27296:350;;;27350:31;27384:14;;;:11;:14;;;;;;;;;27350:48;;;;;;;;;-1:-1:-1;;;;;27350:48:0;;;;;-1:-1:-1;;;27350:48:0;;;-1:-1:-1;;;;;27350:48:0;;;;;;;;27411:28;27407:89;;27472:14;;;-1:-1:-1;27407:89:0;27529:5;-1:-1:-1;;;;;27508:26:0;:17;-1:-1:-1;;;;;27508:26:0;;27504:135;;;27566:5;27551:11;:20;27547:59;;;-1:-1:-1;27593:1:0;-1:-1:-1;27586:8:0;;-1:-1:-1;;;27586:8:0;27547:59;27616:13;;;;:::i;:::-;;;;27504:135;-1:-1:-1;27336:3:0;;;;:::i;:::-;;;;27296:350;;;-1:-1:-1;27652:56:0;;-1:-1:-1;;;27652:56:0;;17373:2:1;27652:56:0;;;17355:21:1;17412:2;17392:18;;;17385:30;17451:34;17431:18;;;17424:62;-1:-1:-1;;;17502:18:1;;;17495:44;17556:19;;27652:56:0;17171:410:1;43774:442:0;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;43879:13:::1;43867:8;43851:13;26415:12:::0;;;26339:94;43851:13:::1;:24;;;;:::i;:::-;:41;;43835:114;;;::::0;-1:-1:-1;;;43835:114:0;;16965:2:1;43835:114:0::1;::::0;::::1;16947:21:1::0;17004:2;16984:18;;;16977:30;17043:34;17023:18;;;17016:62;-1:-1:-1;;;17094:18:1;;;17087:37;17141:19;;43835:114:0::1;16763:403:1::0;43835:114:0::1;43972:23;43983:12;43972:8:::0;:23:::1;:::i;:::-;:28:::0;43956:106:::1;;;::::0;-1:-1:-1;;;43956:106:0;;9190:2:1;43956:106:0::1;::::0;::::1;9172:21:1::0;9229:2;9209:18;;;9202:30;9268:34;9248:18;;;9241:62;-1:-1:-1;;;9319:18:1;;;9312:42;9371:19;;43956:106:0::1;8988:408:1::0;43956:106:0::1;44069:17;44089:23;44100:12;44089:8:::0;:23:::1;:::i;:::-;44069:43;;44124:9;44119:92;44143:9;44139:1;:13;44119:92;;;44168:35;44178:10;44190:12;44168:9;:35::i;:::-;44154:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44119:92;;32084:157:::0;32196:39;32213:4;32219:2;32223:7;32196:39;;;;;;;;;;;;:16;:39::i;26502:177::-;26569:7;26601:13;26415:12;;;26339:94;26601:13;26593:5;:21;26585:69;;;;-1:-1:-1;;;26585:69:0;;9603:2:1;26585:69:0;;;9585:21:1;9642:2;9622:18;;;9615:30;9681:34;9661:18;;;9654:62;-1:-1:-1;;;9732:18:1;;;9725:33;9775:19;;26585:69:0;9401:399:1;26585:69:0;-1:-1:-1;26668:5:0;26502:177::o;44393:100::-;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;44464:23:::1;:13;44480:7:::0;;44464:23:::1;:::i;29327:118::-:0;29391:7;29414:20;29426:7;29414:11;:20::i;:::-;:25;;29327:118;-1:-1:-1;;29327:118:0:o;28204:211::-;28268:7;-1:-1:-1;;;;;28292:19:0;;28284:75;;;;-1:-1:-1;;;28284:75:0;;11969:2:1;28284:75:0;;;11951:21:1;12008:2;11988:18;;;11981:30;12047:34;12027:18;;;12020:62;-1:-1:-1;;;12098:18:1;;;12091:41;12149:19;;28284:75:0;11767:407:1;28284:75:0;-1:-1:-1;;;;;;28381:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;28381:27:0;;28204:211::o;41710:94::-;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;41775:21:::1;41793:1;41775:9;:21::i;:::-;41710:94::o:0;44923:147::-;-1:-1:-1;;;;;;;;;;;;;;;;;45044:20:0;45056:7;45044:11;:20::i;29659:98::-;29715:13;29744:7;29737:14;;;;;:::i;31297:274::-;-1:-1:-1;;;;;31388:24:0;;23889:10;31388:24;;31380:63;;;;-1:-1:-1;;;31380:63:0;;13912:2:1;31380:63:0;;;13894:21:1;13951:2;13931:18;;;13924:30;13990:28;13970:18;;;13963:56;14036:18;;31380:63:0;13710:350:1;31380:63:0;23889:10;31452:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31452:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31452:53:0;;;;;;;;;;31517:48;;7491:41:1;;;31452:42:0;;23889:10;31517:48;;7464:18:1;31517:48:0;;;;;;;31297:274;;:::o;44499:181::-;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;22260:1:::1;22856:7;;:19;;22848:63;;;::::0;-1:-1:-1;;;22848:63:0;;18195:2:1;22848:63:0::1;::::0;::::1;18177:21:1::0;18234:2;18214:18;;;18207:30;18273:33;18253:18;;;18246:61;18324:18;;22848:63:0::1;17993:355:1::0;22848:63:0::1;22260:1;22989:7;:18:::0;44582:49:::2;::::0;44564:12:::2;::::0;44582:10:::2;::::0;44605:21:::2;::::0;44564:12;44582:49;44564:12;44582:49;44605:21;44582:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44563:68;;;44646:7;44638:36;;;::::0;-1:-1:-1;;;44638:36:0;;15089:2:1;44638:36:0::2;::::0;::::2;15071:21:1::0;15128:2;15108:18;;;15101:30;-1:-1:-1;;;15147:18:1;;;15140:46;15203:18;;44638:36:0::2;14887:340:1::0;43404:339:0;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;43557:8:::1;:15;43537:9;:16;:35;43521:109;;;::::0;-1:-1:-1;;;43521:109:0;;19788:2:1;43521:109:0::1;::::0;::::1;19770:21:1::0;19827:2;19807:18;;;19800:30;19866:34;19846:18;;;19839:62;-1:-1:-1;;;19917:18:1;;;19910:38;19965:19;;43521:109:0::1;19586:404:1::0;43521:109:0::1;43642:9;43637:101;43661:9;:16;43657:1;:20;43637:101;;;43719:8;43728:1;43719:11;;;;;;;;:::i;:::-;;;;;;;43693:9;:23;43703:9;43713:1;43703:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43693:23:0::1;-1:-1:-1::0;;;;;43693:23:0::1;;;;;;;;;;;;:37;;;;43679:3;;;;;:::i;:::-;;;;43637:101;;43077:315:::0;42995:9;43008:10;42995:23;42987:66;;;;-1:-1:-1;;;42987:66:0;;10831:2:1;42987:66:0;;;10813:21:1;10870:2;10850:18;;;10843:30;10909:32;10889:18;;;10882:60;10959:18;;42987:66:0;10629:354:1;42987:66:0;43186:14:::1;43174:8;43158:13;26415:12:::0;;;26339:94;43158:13:::1;:24;;;;:::i;:::-;:42;;43150:73;;;::::0;-1:-1:-1;;;43150:73:0;;12381:2:1;43150:73:0::1;::::0;::::1;12363:21:1::0;12420:2;12400:18;;;12393:30;-1:-1:-1;;;12439:18:1;;;12432:48;12497:18;;43150:73:0::1;12179:342:1::0;43150:73:0::1;43285:23;43273:8;43246:24;43259:10;43246:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43230:118;;;::::0;-1:-1:-1;;;43230:118:0;;16614:2:1;43230:118:0::1;::::0;::::1;16596:21:1::0;16653:2;16633:18;;;16626:30;-1:-1:-1;;;16672:18:1;;;16665:52;16734:18;;43230:118:0::1;16412:346:1::0;43230:118:0::1;43355:31;43365:10;43377:8;43355:9;:31::i;:::-;43077:315:::0;:::o;42580:48::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32304:311::-;32441:28;32451:4;32457:2;32461:7;32441:9;:28::i;:::-;32492:48;32515:4;32521:2;32525:7;32534:5;32492:22;:48::i;:::-;32476:133;;;;-1:-1:-1;;;32476:133:0;;;;;;;:::i;:::-;32304:311;;;;:::o;29820:394::-;29918:13;29959:16;29967:7;32941:12;;-1:-1:-1;32931:22:0;32854:105;29959:16;29943:97;;;;-1:-1:-1;;;29943:97:0;;13496:2:1;29943:97:0;;;13478:21:1;13535:2;13515:18;;;13508:30;13574:34;13554:18;;;13547:62;-1:-1:-1;;;13625:18:1;;;13618:45;13680:19;;29943:97:0;13294:411:1;29943:97:0;30049:21;30073:10;:8;:10::i;:::-;30049:34;;30128:1;30110:7;30104:21;:25;:104;;;;;;;;;;;;;;;;;30165:7;30174:18;:7;:16;:18::i;:::-;30148:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30104:104;30090:118;29820:394;-1:-1:-1;;;29820:394:0:o;44810:107::-;44868:7;44891:20;44905:5;44891:13;:20::i;41959:192::-;41105:7;41132:6;-1:-1:-1;;;;;41132:6:0;23889:10;41279:23;41271:68;;;;-1:-1:-1;;;41271:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42048:22:0;::::1;42040:73;;;::::0;-1:-1:-1;;;42040:73:0;;8372:2:1;42040:73:0::1;::::0;::::1;8354:21:1::0;8411:2;8391:18;;;8384:30;8450:34;8430:18;;;8423:62;-1:-1:-1;;;8501:18:1;;;8494:36;8547:19;;42040:73:0::1;8170:402:1::0;42040:73:0::1;42124:19;42134:8;42124:9;:19::i;36541:172::-:0;36638:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;36638:29:0;-1:-1:-1;;;;;36638:29:0;;;;;;;;;36679:28;;36638:24;;36679:28;;;;;;;36541:172;;;:::o;34906:1529::-;35003:35;35041:20;35053:7;35041:11;:20::i;:::-;35112:18;;35003:58;;-1:-1:-1;35070:22:0;;-1:-1:-1;;;;;35096:34:0;23889:10;-1:-1:-1;;;;;35096:34:0;;:81;;;-1:-1:-1;23889:10:0;35141:20;35153:7;35141:11;:20::i;:::-;-1:-1:-1;;;;;35141:36:0;;35096:81;:142;;;-1:-1:-1;35205:18:0;;35188:50;;23889:10;31634:186;:::i;35188:50::-;35070:169;;35264:17;35248:101;;;;-1:-1:-1;;;35248:101:0;;14267:2:1;35248:101:0;;;14249:21:1;14306:2;14286:18;;;14279:30;14345:34;14325:18;;;14318:62;-1:-1:-1;;;14396:18:1;;;14389:48;14454:19;;35248:101:0;14065:414:1;35248:101:0;35396:4;-1:-1:-1;;;;;35374:26:0;:13;:18;;;-1:-1:-1;;;;;35374:26:0;;35358:98;;;;-1:-1:-1;;;35358:98:0;;12728:2:1;35358:98:0;;;12710:21:1;12767:2;12747:18;;;12740:30;12806:34;12786:18;;;12779:62;-1:-1:-1;;;12857:18:1;;;12850:36;12903:19;;35358:98:0;12526:402:1;35358:98:0;-1:-1:-1;;;;;35471:16:0;;35463:66;;;;-1:-1:-1;;;35463:66:0;;10007:2:1;35463:66:0;;;9989:21:1;10046:2;10026:18;;;10019:30;10085:34;10065:18;;;10058:62;-1:-1:-1;;;10136:18:1;;;10129:35;10181:19;;35463:66:0;9805:401:1;35463:66:0;35638:49;35655:1;35659:7;35668:13;:18;;;35638:8;:49::i;:::-;-1:-1:-1;;;;;35696:18:0;;;;;;:12;:18;;;;;:31;;35726:1;;35696:18;:31;;35726:1;;-1:-1:-1;;;;;35696:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;35696:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35734:16:0;;-1:-1:-1;35734:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;35734:16:0;;:29;;-1:-1:-1;;35734:29:0;;:::i;:::-;;;-1:-1:-1;;;;;35734:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35793:43:0;;;;;;;;-1:-1:-1;;;;;35793:43:0;;;;;-1:-1:-1;;;;;35819:15:0;35793:43;;;;;;;;;-1:-1:-1;35770:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;35770:66:0;-1:-1:-1;;;;;;35770:66:0;;;;;;;;;;;36086:11;35782:7;-1:-1:-1;36086:11:0;:::i;:::-;36149:1;36108:24;;;:11;:24;;;;;:29;36064:33;;-1:-1:-1;;;;;;36108:29:0;36104:236;;36166:20;36174:11;32941:12;;-1:-1:-1;32931:22:0;32854:105;36166:20;36162:171;;;36226:97;;;;;;;;36253:18;;-1:-1:-1;;;;;36226:97:0;;;;;;36284:28;;;;-1:-1:-1;;;;;36226:97:0;;;;;;;;;-1:-1:-1;36199:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;36199:124:0;-1:-1:-1;;;;;;36199:124:0;;;;;;;;;;;;36162:171;36372:7;36368:2;-1:-1:-1;;;;;36353:27:0;36362:4;-1:-1:-1;;;;;36353:27:0;;;;;;;;;;;36387:42;34996:1439;;;34906:1529;;;:::o;36867:846::-;36957:24;;36996:12;36988:49;;;;-1:-1:-1;;;36988:49:0;;11616:2:1;36988:49:0;;;11598:21:1;11655:2;11635:18;;;11628:30;11694:26;11674:18;;;11667:54;11738:18;;36988:49:0;11414:348:1;36988:49:0;37044:16;37094:1;37063:28;37083:8;37063:17;:28;:::i;:::-;:32;;;;:::i;:::-;37044:51;-1:-1:-1;37117:18:0;37134:1;37117:14;:18;:::i;:::-;37106:8;:29;37102:81;;;37157:18;37174:1;37157:14;:18;:::i;:::-;37146:29;;37102:81;37298:17;37306:8;32941:12;;-1:-1:-1;32931:22:0;32854:105;37298:17;37290:68;;;;-1:-1:-1;;;37290:68:0;;17788:2:1;37290:68:0;;;17770:21:1;17827:2;17807:18;;;17800:30;17866:34;17846:18;;;17839:62;-1:-1:-1;;;17917:18:1;;;17910:36;17963:19;;37290:68:0;17586:402:1;37290:68:0;37382:17;37365:297;37406:8;37401:1;:13;37365:297;;37465:1;37434:14;;;:11;:14;;;;;:19;-1:-1:-1;;;;;37434:19:0;37430:225;;37480:31;37514:14;37526:1;37514:11;:14::i;:::-;37556:89;;;;;;;;37583:14;;-1:-1:-1;;;;;37556:89:0;;;;;;37610:24;;;;-1:-1:-1;;;;;37556:89:0;;;;;;;;;-1:-1:-1;37539:14:0;;;:11;:14;;;;;;;:106;;;;;;;;;-1:-1:-1;;;37539:106:0;-1:-1:-1;;;;;;37539:106:0;;;;;;;;;;;;-1:-1:-1;37430:225:0;37416:3;;;;:::i;:::-;;;;37365:297;;;-1:-1:-1;37695:12:0;:8;37706:1;37695:12;:::i;:::-;37668:24;:39;-1:-1:-1;;;36867:846:0:o;32965:98::-;33030:27;33040:2;33044:8;33030:27;;;;;;;;;;;;:9;:27::i;:::-;32965:98;;:::o;28667:606::-;-1:-1:-1;;;;;;;;;;;;;;;;;28784:16:0;28792:7;32941:12;;-1:-1:-1;32931:22:0;32854:105;28784:16;28776:71;;;;-1:-1:-1;;;28776:71:0;;8779:2:1;28776:71:0;;;8761:21:1;8818:2;8798:18;;;8791:30;8857:34;8837:18;;;8830:62;-1:-1:-1;;;8908:18:1;;;8901:40;8958:19;;28776:71:0;8577:406:1;28776:71:0;28856:26;28904:12;28893:7;:23;28889:93;;28948:22;28958:12;28948:7;:22;:::i;:::-;:26;;28973:1;28948:26;:::i;:::-;28927:47;;28889:93;29010:7;28990:212;29027:18;29019:4;:26;28990:212;;29064:31;29098:17;;;:11;:17;;;;;;;;;29064:51;;;;;;;;;-1:-1:-1;;;;;29064:51:0;;;;;-1:-1:-1;;;29064:51:0;;;-1:-1:-1;;;;;29064:51:0;;;;;;;;29128:28;29124:71;;29176:9;28667:606;-1:-1:-1;;;;28667:606:0:o;29124:71::-;-1:-1:-1;29047:6:0;;;;:::i;:::-;;;;28990:212;;;-1:-1:-1;29210:57:0;;-1:-1:-1;;;29210:57:0;;18555:2:1;29210:57:0;;;18537:21:1;18594:2;18574:18;;;18567:30;18633:34;18613:18;;;18606:62;-1:-1:-1;;;18684:18:1;;;18677:45;18739:19;;29210:57:0;18353:411:1;42159:173:0;42215:16;42234:6;;-1:-1:-1;;;;;42251:17:0;;;-1:-1:-1;;;;;;42251:17:0;;;;;;42284:40;;42234:6;;;;;;;42284:40;;42215:16;42284:40;42204:128;42159:173;:::o;38256:690::-;38393:4;-1:-1:-1;;;;;38410:13:0;;4645:20;4693:8;38406:535;;38449:72;;-1:-1:-1;;;38449:72:0;;-1:-1:-1;;;;;38449:36:0;;;;;:72;;23889:10;;38500:4;;38506:7;;38515:5;;38449:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38449:72:0;;;;;;;;-1:-1:-1;;38449:72:0;;;;;;;;;;;;:::i;:::-;;;38436:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38680:13:0;;38676:215;;38713:61;;-1:-1:-1;;;38713:61:0;;;;;;;:::i;38676:215::-;38859:6;38853:13;38844:6;38840:2;38836:15;38829:38;38436:464;-1:-1:-1;;;;;;38571:55:0;-1:-1:-1;;;38571:55:0;;-1:-1:-1;38564:62:0;;38406:535;-1:-1:-1;38929:4:0;38406:535;38256:690;;;;;;:::o;44279:108::-;44339:13;44368;44361:20;;;;;:::i;1817:723::-;1873:13;2094:10;2090:53;;-1:-1:-1;;2121:10:0;;;;;;;;;;;;-1:-1:-1;;;2121:10:0;;;;;1817:723::o;2090:53::-;2168:5;2153:12;2209:78;2216:9;;2209:78;;2242:8;;;;:::i;:::-;;-1:-1:-1;2265:10:0;;-1:-1:-1;2273:2:0;2265:10;;:::i;:::-;;;2209:78;;;2297:19;2329:6;-1:-1:-1;;;;;2319:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2319:17:0;;2297:39;;2347:154;2354:10;;2347:154;;2381:11;2391:1;2381:11;;:::i;:::-;;-1:-1:-1;2450:10:0;2458:2;2450:5;:10;:::i;:::-;2437:24;;:2;:24;:::i;:::-;2424:39;;2407:6;2414;2407:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2407:56:0;;;;;;;;-1:-1:-1;2478:11:0;2487:2;2478:11;;:::i;:::-;;;2347:154;;28421:240;28482:7;-1:-1:-1;;;;;28514:19:0;;28498:102;;;;-1:-1:-1;;;28498:102:0;;10413:2:1;28498:102:0;;;10395:21:1;10452:2;10432:18;;;10425:30;10491:34;10471:18;;;10464:62;-1:-1:-1;;;10542:18:1;;;10535:47;10599:19;;28498:102:0;10211:413:1;28498:102:0;-1:-1:-1;;;;;;28622:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;28622:32:0;;-1:-1:-1;;;;;28622:32:0;;28421:240::o;33402:1272::-;33530:12;;-1:-1:-1;;;;;33557:16:0;;33549:62;;;;-1:-1:-1;;;33549:62:0;;16212:2:1;33549:62:0;;;16194:21:1;16251:2;16231:18;;;16224:30;16290:34;16270:18;;;16263:62;-1:-1:-1;;;16341:18:1;;;16334:31;16382:19;;33549:62:0;16010:397:1;33549:62:0;33748:21;33756:12;32941;;-1:-1:-1;32931:22:0;32854:105;33748:21;33747:22;33739:64;;;;-1:-1:-1;;;33739:64:0;;15854:2:1;33739:64:0;;;15836:21:1;15893:2;15873:18;;;15866:30;15932:31;15912:18;;;15905:59;15981:18;;33739:64:0;15652:353:1;33739:64:0;33830:12;33818:8;:24;;33810:71;;;;-1:-1:-1;;;33810:71:0;;19385:2:1;33810:71:0;;;19367:21:1;19424:2;19404:18;;;19397:30;19463:34;19443:18;;;19436:62;-1:-1:-1;;;19514:18:1;;;19507:32;19556:19;;33810:71:0;19183:398:1;33810:71:0;-1:-1:-1;;;;;33993:16:0;;33960:30;33993:16;;;:12;:16;;;;;;;;;33960:49;;;;;;;;;-1:-1:-1;;;;;33960:49:0;;;;;-1:-1:-1;;;33960:49:0;;;;;;;;;;;34035:119;;;;;;;;34055:19;;33960:49;;34035:119;;;34055:39;;34085:8;;34055:39;:::i;:::-;-1:-1:-1;;;;;34035:119:0;;;;;34138:8;34103:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;34035:119:0;;;;;;-1:-1:-1;;;;;34016:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;34016:138:0;;;;;;;;;;;;34189:43;;;;;;;;;;-1:-1:-1;;;;;34215:15:0;34189:43;;;;;;;;34161:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;34161:71:0;-1:-1:-1;;;;;;34161:71:0;;;;;;;;;;;;;;;;;;34173:12;;34285:281;34309:8;34305:1;:12;34285:281;;;34338:38;;34363:12;;-1:-1:-1;;;;;34338:38:0;;;34355:1;;34338:38;;34355:1;;34338:38;34403:59;34434:1;34438:2;34442:12;34456:5;34403:22;:59::i;:::-;34385:150;;;;-1:-1:-1;;;34385:150:0;;;;;;;:::i;:::-;34544:14;;;;:::i;:::-;;;;34319:3;;;;;:::i;:::-;;;;34285:281;;;-1:-1:-1;34574:12:0;:27;;;34608:60;32304:311;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:673::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;403:60;419:43;459:2;419:43;:::i;:::-;403:60;:::i;:::-;485:3;509:2;504:3;497:15;537:2;532:3;528:12;521:19;;572:2;564:6;560:15;624:3;619:2;613;610:1;606:10;598:6;594:23;590:32;587:41;584:61;;;641:1;638;631:12;584:61;663:1;673:163;687:2;684:1;681:9;673:163;;;744:17;;732:30;;782:12;;;;814;;;;705:1;698:9;673:163;;;-1:-1:-1;854:5:1;;192:673;-1:-1:-1;;;;;;;192:673:1:o;870:186::-;929:6;982:2;970:9;961:7;957:23;953:32;950:52;;;998:1;995;988:12;950:52;1021:29;1040:9;1021:29;:::i;1061:260::-;1129:6;1137;1190:2;1178:9;1169:7;1165:23;1161:32;1158:52;;;1206:1;1203;1196:12;1158:52;1229:29;1248:9;1229:29;:::i;:::-;1219:39;;1277:38;1311:2;1300:9;1296:18;1277:38;:::i;:::-;1267:48;;1061:260;;;;;:::o;1326:328::-;1403:6;1411;1419;1472:2;1460:9;1451:7;1447:23;1443:32;1440:52;;;1488:1;1485;1478:12;1440:52;1511:29;1530:9;1511:29;:::i;:::-;1501:39;;1559:38;1593:2;1582:9;1578:18;1559:38;:::i;:::-;1549:48;;1644:2;1633:9;1629:18;1616:32;1606:42;;1326:328;;;;;:::o;1659:980::-;1754:6;1762;1770;1778;1831:3;1819:9;1810:7;1806:23;1802:33;1799:53;;;1848:1;1845;1838:12;1799:53;1871:29;1890:9;1871:29;:::i;:::-;1861:39;;1919:2;1940:38;1974:2;1963:9;1959:18;1940:38;:::i;:::-;1930:48;;2025:2;2014:9;2010:18;1997:32;1987:42;;2080:2;2069:9;2065:18;2052:32;-1:-1:-1;;;;;2144:2:1;2136:6;2133:14;2130:34;;;2160:1;2157;2150:12;2130:34;2198:6;2187:9;2183:22;2173:32;;2243:7;2236:4;2232:2;2228:13;2224:27;2214:55;;2265:1;2262;2255:12;2214:55;2301:2;2288:16;2323:2;2319;2316:10;2313:36;;;2329:18;;:::i;:::-;2371:53;2414:2;2395:13;;-1:-1:-1;;2391:27:1;2387:36;;2371:53;:::i;:::-;2358:66;;2447:2;2440:5;2433:17;2487:7;2482:2;2477;2473;2469:11;2465:20;2462:33;2459:53;;;2508:1;2505;2498:12;2459:53;2563:2;2558;2554;2550:11;2545:2;2538:5;2534:14;2521:45;2607:1;2602:2;2597;2590:5;2586:14;2582:23;2575:34;;2628:5;2618:15;;;;;1659:980;;;;;;;:::o;2644:347::-;2709:6;2717;2770:2;2758:9;2749:7;2745:23;2741:32;2738:52;;;2786:1;2783;2776:12;2738:52;2809:29;2828:9;2809:29;:::i;:::-;2799:39;;2888:2;2877:9;2873:18;2860:32;2935:5;2928:13;2921:21;2914:5;2911:32;2901:60;;2957:1;2954;2947:12;2901:60;2980:5;2970:15;;;2644:347;;;;;:::o;2996:254::-;3064:6;3072;3125:2;3113:9;3104:7;3100:23;3096:32;3093:52;;;3141:1;3138;3131:12;3093:52;3164:29;3183:9;3164:29;:::i;:::-;3154:39;3240:2;3225:18;;;;3212:32;;-1:-1:-1;;;2996:254:1:o;3255:1157::-;3373:6;3381;3434:2;3422:9;3413:7;3409:23;3405:32;3402:52;;;3450:1;3447;3440:12;3402:52;3490:9;3477:23;-1:-1:-1;;;;;3560:2:1;3552:6;3549:14;3546:34;;;3576:1;3573;3566:12;3546:34;3614:6;3603:9;3599:22;3589:32;;3659:7;3652:4;3648:2;3644:13;3640:27;3630:55;;3681:1;3678;3671:12;3630:55;3717:2;3704:16;3739:4;3763:60;3779:43;3819:2;3779:43;:::i;3763:60::-;3845:3;3869:2;3864:3;3857:15;3897:2;3892:3;3888:12;3881:19;;3928:2;3924;3920:11;3976:7;3971:2;3965;3962:1;3958:10;3954:2;3950:19;3946:28;3943:41;3940:61;;;3997:1;3994;3987:12;3940:61;4019:1;4010:10;;4029:169;4043:2;4040:1;4037:9;4029:169;;;4100:23;4119:3;4100:23;:::i;:::-;4088:36;;4061:1;4054:9;;;;;4144:12;;;;4176;;4029:169;;;-1:-1:-1;4217:5:1;-1:-1:-1;;4260:18:1;;4247:32;;-1:-1:-1;;4291:16:1;;;4288:36;;;4320:1;4317;4310:12;4288:36;;4343:63;4398:7;4387:8;4376:9;4372:24;4343:63;:::i;:::-;4333:73;;;3255:1157;;;;;:::o;4417:245::-;4475:6;4528:2;4516:9;4507:7;4503:23;4499:32;4496:52;;;4544:1;4541;4534:12;4496:52;4583:9;4570:23;4602:30;4626:5;4602:30;:::i;4667:249::-;4736:6;4789:2;4777:9;4768:7;4764:23;4760:32;4757:52;;;4805:1;4802;4795:12;4757:52;4837:9;4831:16;4856:30;4880:5;4856:30;:::i;4921:592::-;4992:6;5000;5053:2;5041:9;5032:7;5028:23;5024:32;5021:52;;;5069:1;5066;5059:12;5021:52;5109:9;5096:23;-1:-1:-1;;;;;5179:2:1;5171:6;5168:14;5165:34;;;5195:1;5192;5185:12;5165:34;5233:6;5222:9;5218:22;5208:32;;5278:7;5271:4;5267:2;5263:13;5259:27;5249:55;;5300:1;5297;5290:12;5249:55;5340:2;5327:16;5366:2;5358:6;5355:14;5352:34;;;5382:1;5379;5372:12;5352:34;5427:7;5422:2;5413:6;5409:2;5405:15;5401:24;5398:37;5395:57;;;5448:1;5445;5438:12;5395:57;5479:2;5471:11;;;;;5501:6;;-1:-1:-1;4921:592:1;;-1:-1:-1;;;;4921:592:1:o;5518:180::-;5577:6;5630:2;5618:9;5609:7;5605:23;5601:32;5598:52;;;5646:1;5643;5636:12;5598:52;-1:-1:-1;5669:23:1;;5518:180;-1:-1:-1;5518:180:1:o;5703:257::-;5744:3;5782:5;5776:12;5809:6;5804:3;5797:19;5825:63;5881:6;5874:4;5869:3;5865:14;5858:4;5851:5;5847:16;5825:63;:::i;:::-;5942:2;5921:15;-1:-1:-1;;5917:29:1;5908:39;;;;5949:4;5904:50;;5703:257;-1:-1:-1;;5703:257:1:o;5965:470::-;6144:3;6182:6;6176:13;6198:53;6244:6;6239:3;6232:4;6224:6;6220:17;6198:53;:::i;:::-;6314:13;;6273:16;;;;6336:57;6314:13;6273:16;6370:4;6358:17;;6336:57;:::i;:::-;6409:20;;5965:470;-1:-1:-1;;;;5965:470:1:o;6858:488::-;-1:-1:-1;;;;;7127:15:1;;;7109:34;;7179:15;;7174:2;7159:18;;7152:43;7226:2;7211:18;;7204:34;;;7274:3;7269:2;7254:18;;7247:31;;;7052:4;;7295:45;;7320:19;;7312:6;7295:45;:::i;:::-;7287:53;6858:488;-1:-1:-1;;;;;;6858:488:1:o;7543:219::-;7692:2;7681:9;7674:21;7655:4;7712:44;7752:2;7741:9;7737:18;7729:6;7712:44;:::i;12933:356::-;13135:2;13117:21;;;13154:18;;;13147:30;13213:34;13208:2;13193:18;;13186:62;13280:2;13265:18;;12933:356::o;15232:415::-;15434:2;15416:21;;;15473:2;15453:18;;;15446:30;15512:34;15507:2;15492:18;;15485:62;-1:-1:-1;;;15578:2:1;15563:18;;15556:49;15637:3;15622:19;;15232:415::o;20542:275::-;20613:2;20607:9;20678:2;20659:13;;-1:-1:-1;;20655:27:1;20643:40;;-1:-1:-1;;;;;20698:34:1;;20734:22;;;20695:62;20692:88;;;20760:18;;:::i;:::-;20796:2;20789:22;20542:275;;-1:-1:-1;20542:275:1:o;20822:183::-;20882:4;-1:-1:-1;;;;;20907:6:1;20904:30;20901:56;;;20937:18;;:::i;:::-;-1:-1:-1;20982:1:1;20978:14;20994:4;20974:25;;20822:183::o;21010:253::-;21050:3;-1:-1:-1;;;;;21139:2:1;21136:1;21132:10;21169:2;21166:1;21162:10;21200:3;21196:2;21192:12;21187:3;21184:21;21181:47;;;21208:18;;:::i;21268:128::-;21308:3;21339:1;21335:6;21332:1;21329:13;21326:39;;;21345:18;;:::i;:::-;-1:-1:-1;21381:9:1;;21268:128::o;21401:120::-;21441:1;21467;21457:35;;21472:18;;:::i;:::-;-1:-1:-1;21506:9:1;;21401:120::o;21526:246::-;21566:4;-1:-1:-1;;;;;21679:10:1;;;;21649;;21701:12;;;21698:38;;;21716:18;;:::i;:::-;21753:13;;21526:246;-1:-1:-1;;;21526:246:1:o;21777:125::-;21817:4;21845:1;21842;21839:8;21836:34;;;21850:18;;:::i;:::-;-1:-1:-1;21887:9:1;;21777:125::o;21907:258::-;21979:1;21989:113;22003:6;22000:1;21997:13;21989:113;;;22079:11;;;22073:18;22060:11;;;22053:39;22025:2;22018:10;21989:113;;;22120:6;22117:1;22114:13;22111:48;;;-1:-1:-1;;22155:1:1;22137:16;;22130:27;21907:258::o;22170:136::-;22209:3;22237:5;22227:39;;22246:18;;:::i;:::-;-1:-1:-1;;;22282:18:1;;22170:136::o;22311:380::-;22390:1;22386:12;;;;22433;;;22454:61;;22508:4;22500:6;22496:17;22486:27;;22454:61;22561:2;22553:6;22550:14;22530:18;22527:38;22524:161;;;22607:10;22602:3;22598:20;22595:1;22588:31;22642:4;22639:1;22632:15;22670:4;22667:1;22660:15;22524:161;;22311:380;;;:::o;22696:135::-;22735:3;-1:-1:-1;;22756:17:1;;22753:43;;;22776:18;;:::i;:::-;-1:-1:-1;22823:1:1;22812:13;;22696:135::o;22836:112::-;22868:1;22894;22884:35;;22899:18;;:::i;:::-;-1:-1:-1;22933:9:1;;22836:112::o;22953:127::-;23014:10;23009:3;23005:20;23002:1;22995:31;23045:4;23042:1;23035:15;23069:4;23066:1;23059:15;23085:127;23146:10;23141:3;23137:20;23134:1;23127:31;23177:4;23174:1;23167:15;23201:4;23198:1;23191:15;23217:127;23278:10;23273:3;23269:20;23266:1;23259:31;23309:4;23306:1;23299:15;23333:4;23330:1;23323:15;23349:127;23410:10;23405:3;23401:20;23398:1;23391:31;23441:4;23438:1;23431:15;23465:4;23462:1;23455:15;23481:131;-1:-1:-1;;;;;;23555:32:1;;23545:43;;23535:71;;23602:1;23599;23592:12
Swarm Source
ipfs://f0487963b319e6a787010577491c018050b3faa4082e7080b1f9f28692065617
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.