Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
65 BBC
Holders
42
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BBCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MOONGRASS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-27 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/common/ERC2981.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); 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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/moongrass.sol /* * ███╗░░░███╗░█████╗░░█████╗░███╗░░██╗░██████╗░██████╗░░█████╗░░██████╗░██████╗ * ████╗░████║██╔══██╗██╔══██╗████╗░██║██╔════╝░██╔══██╗██╔══██╗██╔════╝██╔════╝ * ██╔████╔██║██║░░██║██║░░██║██╔██╗██║██║░░██╗░██████╔╝███████║╚█████╗░╚█████╗░ * ██║╚██╔╝██║██║░░██║██║░░██║██║╚████║██║░░╚██╗██╔══██╗██╔══██║░╚═══██╗░╚═══██╗ * ██║░╚═╝░██║╚█████╔╝╚█████╔╝██║░╚███║╚██████╔╝██║░░██║██║░░██║██████╔╝██████╔╝ * ╚═╝░░░░░╚═╝░╚════╝░░╚════╝░╚═╝░░╚══╝░╚═════╝░╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░╚═════╝░ */ pragma solidity >=0.4.22 <0.9.0; contract MOONGRASS is ERC721, ERC2981, ERC721Enumerable, Ownable, ReentrancyGuard { using Strings for uint256; string private baseURI = ""; string private contractURI = "ipfs://QmYQeD6fy5cvfBonbMU4vMApy4H6NEX868i78vE8nnSuQG"; string public baseExt=".json"; uint256 public maxSupply = 10000; uint256 public mintPrice=0.12 ether; uint256 public giveawayAmount=5 ether; uint256 public maxMintsPerWallet = 3; bool public isMintEnabled = false; bool public isGiveawayEnabled = false; bool public revealed = false; uint256 public tokenIndex = 0; constructor(uint96 _royaltyFeesInBips, string memory _contractURI) ERC721('MOONGRASS', 'BBC'){ contractURI = _contractURI; setRoyaltyInfo(msg.sender, _royaltyFeesInBips); } function toggleIsMintEnabled() external onlyOwner { isMintEnabled = !isMintEnabled; } function toggleIsRevealed() external onlyOwner { revealed = !revealed; } function toggleisGiveawayEnabled() external onlyOwner { isGiveawayEnabled = !isGiveawayEnabled; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setContractURI(string memory _contractURI) public onlyOwner { contractURI = _contractURI; } function setGiveawayAmount(uint256 _giveawayAmount) external onlyOwner { giveawayAmount = _giveawayAmount; } function setBaseURI(string memory _newuri) external onlyOwner { baseURI = _newuri; } function setMintPrice(uint256 _mintPrice) external onlyOwner { mintPrice = _mintPrice; } function setMaxMintsPerWallet(uint256 _newmaxMintAmount) external onlyOwner { maxMintsPerWallet = _newmaxMintAmount; } function setMaxSupply(uint256 _maxSupply) external onlyOwner { maxSupply = _maxSupply; } function setBaseExtension(string memory _newBaseExt) public onlyOwner { baseExt = _newBaseExt; } function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function exists(uint256 _tokenId) external view returns (bool) { return _exists(_tokenId); } function isApprovedOrOwner(address _spender, uint256 _tokenId) external view returns (bool) { return _isApprovedOrOwner(_spender, _tokenId); } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); if(revealed == false) { return contractURI; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), baseExt)) : ""; } function LFG(uint256 _mintAmount) public payable nonReentrant { require(isMintEnabled, 'Minting is not enabled'); require(_mintAmount > 0, 'Mint amount must be at least one'); require(_mintAmount <= maxSupply - tokenIndex, 'Mint amount exceeds maximum supply'); if (msg.sender != owner()) { require(_mintAmount <= maxMintsPerWallet, 'Exceeds maximum mint amount'); require(balanceOf(msg.sender) < maxMintsPerWallet, 'Each address may only own 3 NFTs'); require(msg.value >= mintPrice * _mintAmount, 'Invalid value'); } for (uint256 i = 1; i <= _mintAmount; i++) { _letsMint(msg.sender); } } function _letsMint(address userWallet) private { tokenIndex++; require(!_exists(tokenIndex), 'Token exist'); _mint(userWallet, tokenIndex); } function withdraw() public payable onlyOwner { { payable(owner()).transfer(address(this).balance); } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC2981, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function setRoyaltyInfo(address _receiver, uint96 _royaltyFeesInBips) public onlyOwner{ _setDefaultRoyalty( _receiver, _royaltyFeesInBips); } function getBalance() public view returns(uint){ return address(this).balance; } function random() private view returns (uint) { uint selectRandom = uint(keccak256(abi.encodePacked(block.difficulty, block.timestamp, tokenIndex))); return selectRandom % tokenIndex; } function selectAWinner() public payable onlyOwner{ require(tokenIndex >= 2000, 'not enough holders to run the draw'); require(isGiveawayEnabled, 'Giveaway is not enabled'); uint winner = random(); if (ownerOf(winner) != owner()){ payable(ownerOf(winner)).transfer(giveawayAmount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"},{"internalType":"string","name":"_contractURI","type":"string"}],"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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"LFG","outputs":[],"stateMutability":"payable","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":[],"name":"baseExt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGiveawayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":[],"name":"selectAWinner","outputs":[],"stateMutability":"payable","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":"_newBaseExt","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newuri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_giveawayAmount","type":"uint256"}],"name":"setGiveawayAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"}],"name":"setRoyaltyInfo","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":[],"name":"toggleIsMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleIsRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleisGiveawayEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIndex","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600e90805190602001906200002b929190620005b0565b506040518060600160405280603581526020016200598560359139600f90805190602001906200005d929190620005b0565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060109080519060200190620000ab929190620005b0565b506127106011556701aa535d3d0c0000601255674563918244f4000060135560036014556000601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055506000601560026101000a81548160ff02191690831515021790555060006016553480156200013257600080fd5b50604051620059ba380380620059ba8339818101604052810190620001589190620006f5565b6040518060400160405280600981526020017f4d4f4f4e475241535300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42424300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001dc929190620005b0565b508060019080519060200190620001f5929190620005b0565b505050620002186200020c6200025360201b60201c565b6200025b60201b60201c565b6001600d8190555080600f908051906020019062000238929190620005b0565b506200024b33836200032160201b60201c565b505062000a9e565b600033905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003316200034760201b60201c565b620003438282620003d860201b60201c565b5050565b620003576200025360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200037d6200057c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003cd90620007d0565b60405180910390fd5b565b620003e8620005a660201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044090620007f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b39062000814565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612710905090565b828054620005be90620008f4565b90600052602060002090601f016020900481019282620005e257600085556200062e565b82601f10620005fd57805160ff19168380011785556200062e565b828001600101855582156200062e579182015b828111156200062d57825182559160200191906001019062000610565b5b5090506200063d919062000641565b5090565b5b808211156200065c57600081600090555060010162000642565b5090565b60006200067762000671846200085f565b62000836565b905082815260208101848484011115620006965762000695620009c3565b5b620006a3848285620008be565b509392505050565b600082601f830112620006c357620006c2620009be565b5b8151620006d584826020860162000660565b91505092915050565b600081519050620006ef8162000a84565b92915050565b600080604083850312156200070f576200070e620009cd565b5b60006200071f85828601620006de565b925050602083015167ffffffffffffffff811115620007435762000742620009c8565b5b6200075185828601620006ab565b9150509250929050565b60006200076a60208362000895565b91506200077782620009e3565b602082019050919050565b600062000791602a8362000895565b91506200079e8262000a0c565b604082019050919050565b6000620007b860198362000895565b9150620007c58262000a5b565b602082019050919050565b60006020820190508181036000830152620007eb816200075b565b9050919050565b600060208201905081810360008301526200080d8162000782565b9050919050565b600060208201905081810360008301526200082f81620007a9565b9050919050565b60006200084262000855565b90506200085082826200092a565b919050565b6000604051905090565b600067ffffffffffffffff8211156200087d576200087c6200098f565b5b6200088882620009d2565b9050602081019050919050565b600082825260208201905092915050565b60006bffffffffffffffffffffffff82169050919050565b60005b83811015620008de578082015181840152602081019050620008c1565b83811115620008ee576000848401525b50505050565b600060028204905060018216806200090d57607f821691505b6020821081141562000924576200092362000960565b5b50919050565b6200093582620009d2565b810181811067ffffffffffffffff821117156200095757620009566200098f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b62000a8f81620008a6565b811462000a9b57600080fd5b50565b614ed78062000aae6000396000f3fe6080604052600436106102885760003560e01c80636817c76c1161015a578063b88d4fde116100c1578063e36f97a51161007a578063e36f97a514610980578063e985e9c5146109ab578063e9a062d0146109e8578063f2fde38b14610a11578063f4a0a52814610a3a578063f516a2e614610a6357610288565b8063b88d4fde14610884578063c4073217146108ad578063c87b56dd146108c4578063d55f927314610901578063d5abeb011461092c578063da3ef23f1461095757610288565b80638da5cb5b116101135780638da5cb5b146107a9578063921a5879146107d4578063938e3d7b146107de57806395d89b4114610807578063963c354614610832578063a22cb4651461085b57610288565b80636817c76c146106ad5780636f8b44b0146106d857806370a0823114610701578063715018a61461073e578063785d5c49146107555780638462151c1461076c57610288565b80632a55205a116101fe578063430c2081116101b7578063430c2081146105655780634f558e79146105a25780634f6ccce7146105df578063518302271461061c57806355f804b3146106475780636352211e1461067057610288565b80632a55205a146104615780632f745c591461049f57806330eaa6e5146104dc578063346de50a146105075780633ccfd60b1461053257806342842e0e1461053c57610288565b8063095ea7b311610250578063095ea7b31461038657806312065fe0146103af57806318160ddd146103da5780631ad154bf1461040557806321b804201461042157806323b872dd1461043857610288565b806301ffc9a71461028d57806302fa7c47146102ca57806306fdde03146102f3578063077fc0401461031e578063081812fc14610349575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906136b6565b610a8e565b6040516102c19190613ea5565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190613676565b610aa0565b005b3480156102ff57600080fd5b50610308610ab6565b6040516103159190613ec0565b60405180910390f35b34801561032a57600080fd5b50610333610b48565b6040516103409190613ec0565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613759565b610bd6565b60405161037d9190613df3565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613636565b610c1c565b005b3480156103bb57600080fd5b506103c4610d34565b6040516103d19190614262565b60405180910390f35b3480156103e657600080fd5b506103ef610d3c565b6040516103fc9190614262565b60405180910390f35b61041f600480360381019061041a9190613759565b610d49565b005b34801561042d57600080fd5b50610436610fcd565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613520565b611001565b005b34801561046d57600080fd5b5061048860048036038101906104839190613786565b611061565b604051610496929190613e5a565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613636565b61124c565b6040516104d39190614262565b60405180910390f35b3480156104e857600080fd5b506104f16112f1565b6040516104fe9190613ea5565b60405180910390f35b34801561051357600080fd5b5061051c611304565b6040516105299190613ea5565b60405180910390f35b61053a611317565b005b34801561054857600080fd5b50610563600480360381019061055e9190613520565b61136f565b005b34801561057157600080fd5b5061058c60048036038101906105879190613636565b61138f565b6040516105999190613ea5565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613759565b6113a3565b6040516105d69190613ea5565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613759565b6113b5565b6040516106139190614262565b60405180910390f35b34801561062857600080fd5b50610631611426565b60405161063e9190613ea5565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190613710565b611439565b005b34801561067c57600080fd5b5061069760048036038101906106929190613759565b61145b565b6040516106a49190613df3565b60405180910390f35b3480156106b957600080fd5b506106c261150d565b6040516106cf9190614262565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613759565b611513565b005b34801561070d57600080fd5b50610728600480360381019061072391906134b3565b611525565b6040516107359190614262565b60405180910390f35b34801561074a57600080fd5b506107536115dd565b005b34801561076157600080fd5b5061076a6115f1565b005b34801561077857600080fd5b50610793600480360381019061078e91906134b3565b611625565b6040516107a09190613e83565b60405180910390f35b3480156107b557600080fd5b506107be61172f565b6040516107cb9190613df3565b60405180910390f35b6107dc611759565b005b3480156107ea57600080fd5b5061080560048036038101906108009190613710565b61189a565b005b34801561081357600080fd5b5061081c6118bc565b6040516108299190613ec0565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613759565b61194e565b005b34801561086757600080fd5b50610882600480360381019061087d91906135f6565b611960565b005b34801561089057600080fd5b506108ab60048036038101906108a69190613573565b611976565b005b3480156108b957600080fd5b506108c26119d8565b005b3480156108d057600080fd5b506108eb60048036038101906108e69190613759565b611a0c565b6040516108f89190613ec0565b60405180910390f35b34801561090d57600080fd5b50610916611b65565b6040516109239190614262565b60405180910390f35b34801561093857600080fd5b50610941611b6b565b60405161094e9190614262565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613710565b611b71565b005b34801561098c57600080fd5b50610995611b93565b6040516109a29190614262565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906134e0565b611b99565b6040516109df9190613ea5565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613759565b611c2d565b005b348015610a1d57600080fd5b50610a386004803603810190610a3391906134b3565b611c3f565b005b348015610a4657600080fd5b50610a616004803603810190610a5c9190613759565b611cc3565b005b348015610a6f57600080fd5b50610a78611cd5565b604051610a859190614262565b60405180910390f35b6000610a9982611cdb565b9050919050565b610aa8611d55565b610ab28282611dd3565b5050565b606060008054610ac590614578565b80601f0160208091040260200160405190810160405280929190818152602001828054610af190614578565b8015610b3e5780601f10610b1357610100808354040283529160200191610b3e565b820191906000526020600020905b815481529060010190602001808311610b2157829003601f168201915b5050505050905090565b60108054610b5590614578565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8190614578565b8015610bce5780601f10610ba357610100808354040283529160200191610bce565b820191906000526020600020905b815481529060010190602001808311610bb157829003601f168201915b505050505081565b6000610be182611f69565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c278261145b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90614162565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb7611fb4565b73ffffffffffffffffffffffffffffffffffffffff161480610ce65750610ce581610ce0611fb4565b611b99565b5b610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c906140a2565b60405180910390fd5b610d2f8383611fbc565b505050565b600047905090565b6000600a80549050905090565b6002600d541415610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690614222565b60405180910390fd5b6002600d81905550601560009054906101000a900460ff16610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90613f02565b60405180910390fd5b60008111610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090614182565b60405180910390fd5b601654601154610e399190614476565b811115610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613fe2565b60405180910390fd5b610e8361172f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f9757601454811115610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef1906141a2565b60405180910390fd5b601454610f0633611525565b10610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613f22565b60405180910390fd5b80601254610f54919061441c565b341015610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90614102565b60405180910390fd5b5b6000600190505b818111610fc157610fae33612075565b8080610fb9906145db565b915050610f9e565b506001600d8190555050565b610fd5611d55565b601560029054906101000a900460ff1615601560026101000a81548160ff021916908315150217905550565b61101261100c611fb4565b826120e7565b611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890614202565b60405180910390fd5b61105c83838361217c565b505050565b6000806000600760008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156111f75760066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006112016123e3565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff168661122d919061441c565b61123791906143eb565b90508160000151819350935050509250929050565b600061125783611525565b8210611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90613f42565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601560019054906101000a900460ff1681565b601560009054906101000a900460ff1681565b61131f611d55565b61132761172f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561136c573d6000803e3d6000fd5b50565b61138a83838360405180602001604052806000815250611976565b505050565b600061139b83836120e7565b905092915050565b60006113ae826123ed565b9050919050565b60006113bf610d3c565b8210611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906141c2565b60405180910390fd5b600a82815481106114145761141361471b565b5b90600052602060002001549050919050565b601560029054906101000a900460ff1681565b611441611d55565b80600e90805190602001906114579291906132b2565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90614142565b60405180910390fd5b80915050919050565b60125481565b61151b611d55565b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90614062565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e5611d55565b6115ef6000612459565b565b6115f9611d55565b601560019054906101000a900460ff1615601560016101000a81548160ff021916908315150217905550565b6060600061163283611525565b9050600081141561168f57600067ffffffffffffffff8111156116585761165761474a565b5b6040519080825280602002602001820160405280156116865781602001602082028036833780820191505090505b5091505061172a565b60008167ffffffffffffffff8111156116ab576116aa61474a565b5b6040519080825280602002602001820160405280156116d95781602001602082028036833780820191505090505b50905060005b82811015611723576116f1858261124c565b8282815181106117045761170361471b565b5b602002602001018181525050808061171b906145db565b9150506116df565b8193505050505b919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611761611d55565b6107d060165410156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90614082565b60405180910390fd5b601560019054906101000a900460ff166117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613ee2565b60405180910390fd5b600061180161251f565b905061180b61172f565b73ffffffffffffffffffffffffffffffffffffffff1661182a8261145b565b73ffffffffffffffffffffffffffffffffffffffff16146118975761184e8161145b565b73ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f19350505050158015611895573d6000803e3d6000fd5b505b50565b6118a2611d55565b80600f90805190602001906118b89291906132b2565b5050565b6060600180546118cb90614578565b80601f01602080910402602001604051908101604052809291908181526020018280546118f790614578565b80156119445780601f1061191957610100808354040283529160200191611944565b820191906000526020600020905b81548152906001019060200180831161192757829003601f168201915b5050505050905090565b611956611d55565b8060148190555050565b61197261196b611fb4565b8383612568565b5050565b611987611981611fb4565b836120e7565b6119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90614202565b60405180910390fd5b6119d2848484846126d5565b50505050565b6119e0611d55565b601560009054906101000a900460ff1615601560006101000a81548160ff021916908315150217905550565b6060611a17826123ed565b611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614122565b60405180910390fd5b60001515601560029054906101000a900460ff1615151415611b0457600f8054611a7f90614578565b80601f0160208091040260200160405190810160405280929190818152602001828054611aab90614578565b8015611af85780601f10611acd57610100808354040283529160200191611af8565b820191906000526020600020905b815481529060010190602001808311611adb57829003601f168201915b50505050509050611b60565b6000611b0e612731565b90506000815111611b2e5760405180602001604052806000815250611b5c565b80611b38846127c3565b6010604051602001611b4c93929190613d85565b6040516020818303038152906040525b9150505b919050565b60165481565b60115481565b611b79611d55565b8060109080519060200190611b8f9291906132b2565b5050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c35611d55565b8060138190555050565b611c47611d55565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90613f82565b60405180910390fd5b611cc081612459565b50565b611ccb611d55565b8060128190555050565b60145481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d4e5750611d4d82612924565b5b9050919050565b611d5d611fb4565b73ffffffffffffffffffffffffffffffffffffffff16611d7b61172f565b73ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906140e2565b60405180910390fd5b565b611ddb6123e3565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e30906141e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614242565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b611f72816123ed565b611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614142565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661202f8361145b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60166000815480929190612088906145db565b91905055506120986016546123ed565b156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614042565b60405180910390fd5b6120e48160165461299e565b50565b6000806120f38361145b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213557506121348185611b99565b5b8061217357508373ffffffffffffffffffffffffffffffffffffffff1661215b84610bd6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661219c8261145b565b73ffffffffffffffffffffffffffffffffffffffff16146121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990613fa2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614002565b60405180910390fd5b61226d838383612b78565b612278600082611fbc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c89190614476565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461231f9190614395565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123de838383612b88565b505050565b6000612710905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080444260165460405160200161253993929190613db6565b6040516020818303038152906040528051906020012060001c905060165481612562919061462e565b91505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614022565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126c89190613ea5565b60405180910390a3505050565b6126e084848461217c565b6126ec84848484612b8d565b61272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290613f62565b60405180910390fd5b50505050565b6060600e805461274090614578565b80601f016020809104026020016040519081016040528092919081815260200182805461276c90614578565b80156127b95780601f1061278e576101008083540402835291602001916127b9565b820191906000526020600020905b81548152906001019060200180831161279c57829003601f168201915b5050505050905090565b6060600082141561280b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061291f565b600082905060005b6000821461283d578080612826906145db565b915050600a8261283691906143eb565b9150612813565b60008167ffffffffffffffff8111156128595761285861474a565b5b6040519080825280601f01601f19166020018201604052801561288b5781602001600182028036833780820191505090505b5090505b60008514612918576001826128a49190614476565b9150600a856128b3919061462e565b60306128bf9190614395565b60f81b8183815181106128d5576128d461471b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291191906143eb565b945061288f565b8093505050505b919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612997575061299682612d24565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906140c2565b60405180910390fd5b612a17816123ed565b15612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90613fc2565b60405180910390fd5b612a6360008383612b78565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab39190614395565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b7460008383612b88565b5050565b612b83838383612e06565b505050565b505050565b6000612bae8473ffffffffffffffffffffffffffffffffffffffff16612f1a565b15612d17578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bd7611fb4565b8786866040518563ffffffff1660e01b8152600401612bf99493929190613e0e565b602060405180830381600087803b158015612c1357600080fd5b505af1925050508015612c4457506040513d601f19601f82011682018060405250810190612c4191906136e3565b60015b612cc7573d8060008114612c74576040519150601f19603f3d011682016040523d82523d6000602084013e612c79565b606091505b50600081511415612cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb690613f62565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d1c565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612def57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612dff5750612dfe82612f3d565b5b9050919050565b612e11838383612fa7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e5457612e4f81612fac565b612e93565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e9257612e918382612ff5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ed657612ed181613162565b612f15565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f1457612f138282613233565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161300284611525565b61300c9190614476565b90506000600960008481526020019081526020016000205490508181146130f1576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a805490506131769190614476565b90506000600b60008481526020019081526020016000205490506000600a83815481106131a6576131a561471b565b5b9060005260206000200154905080600a83815481106131c8576131c761471b565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480613217576132166146ec565b5b6001900381819060005260206000200160009055905550505050565b600061323e83611525565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b8280546132be90614578565b90600052602060002090601f0160209004810192826132e05760008555613327565b82601f106132f957805160ff1916838001178555613327565b82800160010185558215613327579182015b8281111561332657825182559160200191906001019061330b565b5b5090506133349190613338565b5090565b5b80821115613351576000816000905550600101613339565b5090565b6000613368613363846142a2565b61427d565b9050828152602081018484840111156133845761338361477e565b5b61338f848285614536565b509392505050565b60006133aa6133a5846142d3565b61427d565b9050828152602081018484840111156133c6576133c561477e565b5b6133d1848285614536565b509392505050565b6000813590506133e881614e2e565b92915050565b6000813590506133fd81614e45565b92915050565b60008135905061341281614e5c565b92915050565b60008151905061342781614e5c565b92915050565b600082601f83011261344257613441614779565b5b8135613452848260208601613355565b91505092915050565b600082601f8301126134705761346f614779565b5b8135613480848260208601613397565b91505092915050565b60008135905061349881614e73565b92915050565b6000813590506134ad81614e8a565b92915050565b6000602082840312156134c9576134c8614788565b5b60006134d7848285016133d9565b91505092915050565b600080604083850312156134f7576134f6614788565b5b6000613505858286016133d9565b9250506020613516858286016133d9565b9150509250929050565b60008060006060848603121561353957613538614788565b5b6000613547868287016133d9565b9350506020613558868287016133d9565b925050604061356986828701613489565b9150509250925092565b6000806000806080858703121561358d5761358c614788565b5b600061359b878288016133d9565b94505060206135ac878288016133d9565b93505060406135bd87828801613489565b925050606085013567ffffffffffffffff8111156135de576135dd614783565b5b6135ea8782880161342d565b91505092959194509250565b6000806040838503121561360d5761360c614788565b5b600061361b858286016133d9565b925050602061362c858286016133ee565b9150509250929050565b6000806040838503121561364d5761364c614788565b5b600061365b858286016133d9565b925050602061366c85828601613489565b9150509250929050565b6000806040838503121561368d5761368c614788565b5b600061369b858286016133d9565b92505060206136ac8582860161349e565b9150509250929050565b6000602082840312156136cc576136cb614788565b5b60006136da84828501613403565b91505092915050565b6000602082840312156136f9576136f8614788565b5b600061370784828501613418565b91505092915050565b60006020828403121561372657613725614788565b5b600082013567ffffffffffffffff81111561374457613743614783565b5b6137508482850161345b565b91505092915050565b60006020828403121561376f5761376e614788565b5b600061377d84828501613489565b91505092915050565b6000806040838503121561379d5761379c614788565b5b60006137ab85828601613489565b92505060206137bc85828601613489565b9150509250929050565b60006137d28383613d50565b60208301905092915050565b6137e7816144aa565b82525050565b60006137f882614329565b6138028185614357565b935061380d83614304565b8060005b8381101561383e57815161382588826137c6565b97506138308361434a565b925050600181019050613811565b5085935050505092915050565b613854816144bc565b82525050565b600061386582614334565b61386f8185614368565b935061387f818560208601614545565b6138888161478d565b840191505092915050565b600061389e8261433f565b6138a88185614379565b93506138b8818560208601614545565b6138c18161478d565b840191505092915050565b60006138d78261433f565b6138e1818561438a565b93506138f1818560208601614545565b80840191505092915050565b6000815461390a81614578565b613914818661438a565b9450600182166000811461392f576001811461394057613973565b60ff19831686528186019350613973565b61394985614314565b60005b8381101561396b5781548189015260018201915060208101905061394c565b838801955050505b50505092915050565b6000613989601783614379565b91506139948261479e565b602082019050919050565b60006139ac601683614379565b91506139b7826147c7565b602082019050919050565b60006139cf602083614379565b91506139da826147f0565b602082019050919050565b60006139f2602b83614379565b91506139fd82614819565b604082019050919050565b6000613a15603283614379565b9150613a2082614868565b604082019050919050565b6000613a38602683614379565b9150613a43826148b7565b604082019050919050565b6000613a5b602583614379565b9150613a6682614906565b604082019050919050565b6000613a7e601c83614379565b9150613a8982614955565b602082019050919050565b6000613aa1602283614379565b9150613aac8261497e565b604082019050919050565b6000613ac4602483614379565b9150613acf826149cd565b604082019050919050565b6000613ae7601983614379565b9150613af282614a1c565b602082019050919050565b6000613b0a600b83614379565b9150613b1582614a45565b602082019050919050565b6000613b2d602983614379565b9150613b3882614a6e565b604082019050919050565b6000613b50602283614379565b9150613b5b82614abd565b604082019050919050565b6000613b73603e83614379565b9150613b7e82614b0c565b604082019050919050565b6000613b96602083614379565b9150613ba182614b5b565b602082019050919050565b6000613bb9602083614379565b9150613bc482614b84565b602082019050919050565b6000613bdc600d83614379565b9150613be782614bad565b602082019050919050565b6000613bff602f83614379565b9150613c0a82614bd6565b604082019050919050565b6000613c22601883614379565b9150613c2d82614c25565b602082019050919050565b6000613c45602183614379565b9150613c5082614c4e565b604082019050919050565b6000613c68602083614379565b9150613c7382614c9d565b602082019050919050565b6000613c8b601b83614379565b9150613c9682614cc6565b602082019050919050565b6000613cae602c83614379565b9150613cb982614cef565b604082019050919050565b6000613cd1602a83614379565b9150613cdc82614d3e565b604082019050919050565b6000613cf4602e83614379565b9150613cff82614d8d565b604082019050919050565b6000613d17601f83614379565b9150613d2282614ddc565b602082019050919050565b6000613d3a601983614379565b9150613d4582614e05565b602082019050919050565b613d5981614514565b82525050565b613d6881614514565b82525050565b613d7f613d7a82614514565b614624565b82525050565b6000613d9182866138cc565b9150613d9d82856138cc565b9150613da982846138fd565b9150819050949350505050565b6000613dc28286613d6e565b602082019150613dd28285613d6e565b602082019150613de28284613d6e565b602082019150819050949350505050565b6000602082019050613e0860008301846137de565b92915050565b6000608082019050613e2360008301876137de565b613e3060208301866137de565b613e3d6040830185613d5f565b8181036060830152613e4f818461385a565b905095945050505050565b6000604082019050613e6f60008301856137de565b613e7c6020830184613d5f565b9392505050565b60006020820190508181036000830152613e9d81846137ed565b905092915050565b6000602082019050613eba600083018461384b565b92915050565b60006020820190508181036000830152613eda8184613893565b905092915050565b60006020820190508181036000830152613efb8161397c565b9050919050565b60006020820190508181036000830152613f1b8161399f565b9050919050565b60006020820190508181036000830152613f3b816139c2565b9050919050565b60006020820190508181036000830152613f5b816139e5565b9050919050565b60006020820190508181036000830152613f7b81613a08565b9050919050565b60006020820190508181036000830152613f9b81613a2b565b9050919050565b60006020820190508181036000830152613fbb81613a4e565b9050919050565b60006020820190508181036000830152613fdb81613a71565b9050919050565b60006020820190508181036000830152613ffb81613a94565b9050919050565b6000602082019050818103600083015261401b81613ab7565b9050919050565b6000602082019050818103600083015261403b81613ada565b9050919050565b6000602082019050818103600083015261405b81613afd565b9050919050565b6000602082019050818103600083015261407b81613b20565b9050919050565b6000602082019050818103600083015261409b81613b43565b9050919050565b600060208201905081810360008301526140bb81613b66565b9050919050565b600060208201905081810360008301526140db81613b89565b9050919050565b600060208201905081810360008301526140fb81613bac565b9050919050565b6000602082019050818103600083015261411b81613bcf565b9050919050565b6000602082019050818103600083015261413b81613bf2565b9050919050565b6000602082019050818103600083015261415b81613c15565b9050919050565b6000602082019050818103600083015261417b81613c38565b9050919050565b6000602082019050818103600083015261419b81613c5b565b9050919050565b600060208201905081810360008301526141bb81613c7e565b9050919050565b600060208201905081810360008301526141db81613ca1565b9050919050565b600060208201905081810360008301526141fb81613cc4565b9050919050565b6000602082019050818103600083015261421b81613ce7565b9050919050565b6000602082019050818103600083015261423b81613d0a565b9050919050565b6000602082019050818103600083015261425b81613d2d565b9050919050565b60006020820190506142776000830184613d5f565b92915050565b6000614287614298565b905061429382826145aa565b919050565b6000604051905090565b600067ffffffffffffffff8211156142bd576142bc61474a565b5b6142c68261478d565b9050602081019050919050565b600067ffffffffffffffff8211156142ee576142ed61474a565b5b6142f78261478d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143a082614514565b91506143ab83614514565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e0576143df61465f565b5b828201905092915050565b60006143f682614514565b915061440183614514565b9250826144115761441061468e565b5b828204905092915050565b600061442782614514565b915061443283614514565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446b5761446a61465f565b5b828202905092915050565b600061448182614514565b915061448c83614514565b92508282101561449f5761449e61465f565b5b828203905092915050565b60006144b5826144f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614563578082015181840152602081019050614548565b83811115614572576000848401525b50505050565b6000600282049050600182168061459057607f821691505b602082108114156145a4576145a36146bd565b5b50919050565b6145b38261478d565b810181811067ffffffffffffffff821117156145d2576145d161474a565b5b80604052505050565b60006145e682614514565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146195761461861465f565b5b600182019050919050565b6000819050919050565b600061463982614514565b915061464483614514565b9250826146545761465361468e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4769766561776179206973206e6f7420656e61626c6564000000000000000000600082015250565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b7f456163682061646472657373206d6179206f6e6c79206f776e2033204e465473600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e7420616d6f756e742065786365656473206d6178696d756d207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f546f6b656e206578697374000000000000000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820686f6c6465727320746f2072756e2074686520647260008201527f6177000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e74206d757374206265206174206c65617374206f6e65600082015250565b7f45786365656473206d6178696d756d206d696e7420616d6f756e740000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b614e37816144aa565b8114614e4257600080fd5b50565b614e4e816144bc565b8114614e5957600080fd5b50565b614e65816144c8565b8114614e7057600080fd5b50565b614e7c81614514565b8114614e8757600080fd5b50565b614e938161451e565b8114614e9e57600080fd5b5056fea264697066735822122036b5ff519170ad3298ecdca1deb071c9d67998ecc305f79a7e53caa039489b8664736f6c63430008070033697066733a2f2f516d5951654436667935637666426f6e624d5534764d4170793448364e45583836386937387645386e6e5375514700000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5951654436667935637666426f6e624d5534764d4170793448364e45583836386937387645386e6e537551470000000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c80636817c76c1161015a578063b88d4fde116100c1578063e36f97a51161007a578063e36f97a514610980578063e985e9c5146109ab578063e9a062d0146109e8578063f2fde38b14610a11578063f4a0a52814610a3a578063f516a2e614610a6357610288565b8063b88d4fde14610884578063c4073217146108ad578063c87b56dd146108c4578063d55f927314610901578063d5abeb011461092c578063da3ef23f1461095757610288565b80638da5cb5b116101135780638da5cb5b146107a9578063921a5879146107d4578063938e3d7b146107de57806395d89b4114610807578063963c354614610832578063a22cb4651461085b57610288565b80636817c76c146106ad5780636f8b44b0146106d857806370a0823114610701578063715018a61461073e578063785d5c49146107555780638462151c1461076c57610288565b80632a55205a116101fe578063430c2081116101b7578063430c2081146105655780634f558e79146105a25780634f6ccce7146105df578063518302271461061c57806355f804b3146106475780636352211e1461067057610288565b80632a55205a146104615780632f745c591461049f57806330eaa6e5146104dc578063346de50a146105075780633ccfd60b1461053257806342842e0e1461053c57610288565b8063095ea7b311610250578063095ea7b31461038657806312065fe0146103af57806318160ddd146103da5780631ad154bf1461040557806321b804201461042157806323b872dd1461043857610288565b806301ffc9a71461028d57806302fa7c47146102ca57806306fdde03146102f3578063077fc0401461031e578063081812fc14610349575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906136b6565b610a8e565b6040516102c19190613ea5565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190613676565b610aa0565b005b3480156102ff57600080fd5b50610308610ab6565b6040516103159190613ec0565b60405180910390f35b34801561032a57600080fd5b50610333610b48565b6040516103409190613ec0565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613759565b610bd6565b60405161037d9190613df3565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613636565b610c1c565b005b3480156103bb57600080fd5b506103c4610d34565b6040516103d19190614262565b60405180910390f35b3480156103e657600080fd5b506103ef610d3c565b6040516103fc9190614262565b60405180910390f35b61041f600480360381019061041a9190613759565b610d49565b005b34801561042d57600080fd5b50610436610fcd565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613520565b611001565b005b34801561046d57600080fd5b5061048860048036038101906104839190613786565b611061565b604051610496929190613e5a565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190613636565b61124c565b6040516104d39190614262565b60405180910390f35b3480156104e857600080fd5b506104f16112f1565b6040516104fe9190613ea5565b60405180910390f35b34801561051357600080fd5b5061051c611304565b6040516105299190613ea5565b60405180910390f35b61053a611317565b005b34801561054857600080fd5b50610563600480360381019061055e9190613520565b61136f565b005b34801561057157600080fd5b5061058c60048036038101906105879190613636565b61138f565b6040516105999190613ea5565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613759565b6113a3565b6040516105d69190613ea5565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190613759565b6113b5565b6040516106139190614262565b60405180910390f35b34801561062857600080fd5b50610631611426565b60405161063e9190613ea5565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190613710565b611439565b005b34801561067c57600080fd5b5061069760048036038101906106929190613759565b61145b565b6040516106a49190613df3565b60405180910390f35b3480156106b957600080fd5b506106c261150d565b6040516106cf9190614262565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa9190613759565b611513565b005b34801561070d57600080fd5b50610728600480360381019061072391906134b3565b611525565b6040516107359190614262565b60405180910390f35b34801561074a57600080fd5b506107536115dd565b005b34801561076157600080fd5b5061076a6115f1565b005b34801561077857600080fd5b50610793600480360381019061078e91906134b3565b611625565b6040516107a09190613e83565b60405180910390f35b3480156107b557600080fd5b506107be61172f565b6040516107cb9190613df3565b60405180910390f35b6107dc611759565b005b3480156107ea57600080fd5b5061080560048036038101906108009190613710565b61189a565b005b34801561081357600080fd5b5061081c6118bc565b6040516108299190613ec0565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613759565b61194e565b005b34801561086757600080fd5b50610882600480360381019061087d91906135f6565b611960565b005b34801561089057600080fd5b506108ab60048036038101906108a69190613573565b611976565b005b3480156108b957600080fd5b506108c26119d8565b005b3480156108d057600080fd5b506108eb60048036038101906108e69190613759565b611a0c565b6040516108f89190613ec0565b60405180910390f35b34801561090d57600080fd5b50610916611b65565b6040516109239190614262565b60405180910390f35b34801561093857600080fd5b50610941611b6b565b60405161094e9190614262565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613710565b611b71565b005b34801561098c57600080fd5b50610995611b93565b6040516109a29190614262565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906134e0565b611b99565b6040516109df9190613ea5565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613759565b611c2d565b005b348015610a1d57600080fd5b50610a386004803603810190610a3391906134b3565b611c3f565b005b348015610a4657600080fd5b50610a616004803603810190610a5c9190613759565b611cc3565b005b348015610a6f57600080fd5b50610a78611cd5565b604051610a859190614262565b60405180910390f35b6000610a9982611cdb565b9050919050565b610aa8611d55565b610ab28282611dd3565b5050565b606060008054610ac590614578565b80601f0160208091040260200160405190810160405280929190818152602001828054610af190614578565b8015610b3e5780601f10610b1357610100808354040283529160200191610b3e565b820191906000526020600020905b815481529060010190602001808311610b2157829003601f168201915b5050505050905090565b60108054610b5590614578565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8190614578565b8015610bce5780601f10610ba357610100808354040283529160200191610bce565b820191906000526020600020905b815481529060010190602001808311610bb157829003601f168201915b505050505081565b6000610be182611f69565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c278261145b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90614162565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb7611fb4565b73ffffffffffffffffffffffffffffffffffffffff161480610ce65750610ce581610ce0611fb4565b611b99565b5b610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c906140a2565b60405180910390fd5b610d2f8383611fbc565b505050565b600047905090565b6000600a80549050905090565b6002600d541415610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690614222565b60405180910390fd5b6002600d81905550601560009054906101000a900460ff16610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90613f02565b60405180910390fd5b60008111610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090614182565b60405180910390fd5b601654601154610e399190614476565b811115610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613fe2565b60405180910390fd5b610e8361172f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f9757601454811115610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef1906141a2565b60405180910390fd5b601454610f0633611525565b10610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613f22565b60405180910390fd5b80601254610f54919061441c565b341015610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d90614102565b60405180910390fd5b5b6000600190505b818111610fc157610fae33612075565b8080610fb9906145db565b915050610f9e565b506001600d8190555050565b610fd5611d55565b601560029054906101000a900460ff1615601560026101000a81548160ff021916908315150217905550565b61101261100c611fb4565b826120e7565b611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890614202565b60405180910390fd5b61105c83838361217c565b505050565b6000806000600760008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156111f75760066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006112016123e3565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff168661122d919061441c565b61123791906143eb565b90508160000151819350935050509250929050565b600061125783611525565b8210611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90613f42565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601560019054906101000a900460ff1681565b601560009054906101000a900460ff1681565b61131f611d55565b61132761172f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561136c573d6000803e3d6000fd5b50565b61138a83838360405180602001604052806000815250611976565b505050565b600061139b83836120e7565b905092915050565b60006113ae826123ed565b9050919050565b60006113bf610d3c565b8210611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f7906141c2565b60405180910390fd5b600a82815481106114145761141361471b565b5b90600052602060002001549050919050565b601560029054906101000a900460ff1681565b611441611d55565b80600e90805190602001906114579291906132b2565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90614142565b60405180910390fd5b80915050919050565b60125481565b61151b611d55565b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90614062565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115e5611d55565b6115ef6000612459565b565b6115f9611d55565b601560019054906101000a900460ff1615601560016101000a81548160ff021916908315150217905550565b6060600061163283611525565b9050600081141561168f57600067ffffffffffffffff8111156116585761165761474a565b5b6040519080825280602002602001820160405280156116865781602001602082028036833780820191505090505b5091505061172a565b60008167ffffffffffffffff8111156116ab576116aa61474a565b5b6040519080825280602002602001820160405280156116d95781602001602082028036833780820191505090505b50905060005b82811015611723576116f1858261124c565b8282815181106117045761170361471b565b5b602002602001018181525050808061171b906145db565b9150506116df565b8193505050505b919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611761611d55565b6107d060165410156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90614082565b60405180910390fd5b601560019054906101000a900460ff166117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613ee2565b60405180910390fd5b600061180161251f565b905061180b61172f565b73ffffffffffffffffffffffffffffffffffffffff1661182a8261145b565b73ffffffffffffffffffffffffffffffffffffffff16146118975761184e8161145b565b73ffffffffffffffffffffffffffffffffffffffff166108fc6013549081150290604051600060405180830381858888f19350505050158015611895573d6000803e3d6000fd5b505b50565b6118a2611d55565b80600f90805190602001906118b89291906132b2565b5050565b6060600180546118cb90614578565b80601f01602080910402602001604051908101604052809291908181526020018280546118f790614578565b80156119445780601f1061191957610100808354040283529160200191611944565b820191906000526020600020905b81548152906001019060200180831161192757829003601f168201915b5050505050905090565b611956611d55565b8060148190555050565b61197261196b611fb4565b8383612568565b5050565b611987611981611fb4565b836120e7565b6119c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bd90614202565b60405180910390fd5b6119d2848484846126d5565b50505050565b6119e0611d55565b601560009054906101000a900460ff1615601560006101000a81548160ff021916908315150217905550565b6060611a17826123ed565b611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614122565b60405180910390fd5b60001515601560029054906101000a900460ff1615151415611b0457600f8054611a7f90614578565b80601f0160208091040260200160405190810160405280929190818152602001828054611aab90614578565b8015611af85780601f10611acd57610100808354040283529160200191611af8565b820191906000526020600020905b815481529060010190602001808311611adb57829003601f168201915b50505050509050611b60565b6000611b0e612731565b90506000815111611b2e5760405180602001604052806000815250611b5c565b80611b38846127c3565b6010604051602001611b4c93929190613d85565b6040516020818303038152906040525b9150505b919050565b60165481565b60115481565b611b79611d55565b8060109080519060200190611b8f9291906132b2565b5050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c35611d55565b8060138190555050565b611c47611d55565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cae90613f82565b60405180910390fd5b611cc081612459565b50565b611ccb611d55565b8060128190555050565b60145481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d4e5750611d4d82612924565b5b9050919050565b611d5d611fb4565b73ffffffffffffffffffffffffffffffffffffffff16611d7b61172f565b73ffffffffffffffffffffffffffffffffffffffff1614611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906140e2565b60405180910390fd5b565b611ddb6123e3565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e30906141e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614242565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b611f72816123ed565b611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614142565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661202f8361145b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60166000815480929190612088906145db565b91905055506120986016546123ed565b156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614042565b60405180910390fd5b6120e48160165461299e565b50565b6000806120f38361145b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061213557506121348185611b99565b5b8061217357508373ffffffffffffffffffffffffffffffffffffffff1661215b84610bd6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661219c8261145b565b73ffffffffffffffffffffffffffffffffffffffff16146121f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e990613fa2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614002565b60405180910390fd5b61226d838383612b78565b612278600082611fbc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c89190614476565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461231f9190614395565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123de838383612b88565b505050565b6000612710905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080444260165460405160200161253993929190613db6565b6040516020818303038152906040528051906020012060001c905060165481612562919061462e565b91505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614022565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126c89190613ea5565b60405180910390a3505050565b6126e084848461217c565b6126ec84848484612b8d565b61272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290613f62565b60405180910390fd5b50505050565b6060600e805461274090614578565b80601f016020809104026020016040519081016040528092919081815260200182805461276c90614578565b80156127b95780601f1061278e576101008083540402835291602001916127b9565b820191906000526020600020905b81548152906001019060200180831161279c57829003601f168201915b5050505050905090565b6060600082141561280b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061291f565b600082905060005b6000821461283d578080612826906145db565b915050600a8261283691906143eb565b9150612813565b60008167ffffffffffffffff8111156128595761285861474a565b5b6040519080825280601f01601f19166020018201604052801561288b5781602001600182028036833780820191505090505b5090505b60008514612918576001826128a49190614476565b9150600a856128b3919061462e565b60306128bf9190614395565b60f81b8183815181106128d5576128d461471b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561291191906143eb565b945061288f565b8093505050505b919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612997575061299682612d24565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906140c2565b60405180910390fd5b612a17816123ed565b15612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90613fc2565b60405180910390fd5b612a6360008383612b78565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ab39190614395565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b7460008383612b88565b5050565b612b83838383612e06565b505050565b505050565b6000612bae8473ffffffffffffffffffffffffffffffffffffffff16612f1a565b15612d17578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bd7611fb4565b8786866040518563ffffffff1660e01b8152600401612bf99493929190613e0e565b602060405180830381600087803b158015612c1357600080fd5b505af1925050508015612c4457506040513d601f19601f82011682018060405250810190612c4191906136e3565b60015b612cc7573d8060008114612c74576040519150601f19603f3d011682016040523d82523d6000602084013e612c79565b606091505b50600081511415612cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb690613f62565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d1c565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612def57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612dff5750612dfe82612f3d565b5b9050919050565b612e11838383612fa7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e5457612e4f81612fac565b612e93565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e9257612e918382612ff5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ed657612ed181613162565b612f15565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f1457612f138282613233565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161300284611525565b61300c9190614476565b90506000600960008481526020019081526020016000205490508181146130f1576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a805490506131769190614476565b90506000600b60008481526020019081526020016000205490506000600a83815481106131a6576131a561471b565b5b9060005260206000200154905080600a83815481106131c8576131c761471b565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480613217576132166146ec565b5b6001900381819060005260206000200160009055905550505050565b600061323e83611525565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b8280546132be90614578565b90600052602060002090601f0160209004810192826132e05760008555613327565b82601f106132f957805160ff1916838001178555613327565b82800160010185558215613327579182015b8281111561332657825182559160200191906001019061330b565b5b5090506133349190613338565b5090565b5b80821115613351576000816000905550600101613339565b5090565b6000613368613363846142a2565b61427d565b9050828152602081018484840111156133845761338361477e565b5b61338f848285614536565b509392505050565b60006133aa6133a5846142d3565b61427d565b9050828152602081018484840111156133c6576133c561477e565b5b6133d1848285614536565b509392505050565b6000813590506133e881614e2e565b92915050565b6000813590506133fd81614e45565b92915050565b60008135905061341281614e5c565b92915050565b60008151905061342781614e5c565b92915050565b600082601f83011261344257613441614779565b5b8135613452848260208601613355565b91505092915050565b600082601f8301126134705761346f614779565b5b8135613480848260208601613397565b91505092915050565b60008135905061349881614e73565b92915050565b6000813590506134ad81614e8a565b92915050565b6000602082840312156134c9576134c8614788565b5b60006134d7848285016133d9565b91505092915050565b600080604083850312156134f7576134f6614788565b5b6000613505858286016133d9565b9250506020613516858286016133d9565b9150509250929050565b60008060006060848603121561353957613538614788565b5b6000613547868287016133d9565b9350506020613558868287016133d9565b925050604061356986828701613489565b9150509250925092565b6000806000806080858703121561358d5761358c614788565b5b600061359b878288016133d9565b94505060206135ac878288016133d9565b93505060406135bd87828801613489565b925050606085013567ffffffffffffffff8111156135de576135dd614783565b5b6135ea8782880161342d565b91505092959194509250565b6000806040838503121561360d5761360c614788565b5b600061361b858286016133d9565b925050602061362c858286016133ee565b9150509250929050565b6000806040838503121561364d5761364c614788565b5b600061365b858286016133d9565b925050602061366c85828601613489565b9150509250929050565b6000806040838503121561368d5761368c614788565b5b600061369b858286016133d9565b92505060206136ac8582860161349e565b9150509250929050565b6000602082840312156136cc576136cb614788565b5b60006136da84828501613403565b91505092915050565b6000602082840312156136f9576136f8614788565b5b600061370784828501613418565b91505092915050565b60006020828403121561372657613725614788565b5b600082013567ffffffffffffffff81111561374457613743614783565b5b6137508482850161345b565b91505092915050565b60006020828403121561376f5761376e614788565b5b600061377d84828501613489565b91505092915050565b6000806040838503121561379d5761379c614788565b5b60006137ab85828601613489565b92505060206137bc85828601613489565b9150509250929050565b60006137d28383613d50565b60208301905092915050565b6137e7816144aa565b82525050565b60006137f882614329565b6138028185614357565b935061380d83614304565b8060005b8381101561383e57815161382588826137c6565b97506138308361434a565b925050600181019050613811565b5085935050505092915050565b613854816144bc565b82525050565b600061386582614334565b61386f8185614368565b935061387f818560208601614545565b6138888161478d565b840191505092915050565b600061389e8261433f565b6138a88185614379565b93506138b8818560208601614545565b6138c18161478d565b840191505092915050565b60006138d78261433f565b6138e1818561438a565b93506138f1818560208601614545565b80840191505092915050565b6000815461390a81614578565b613914818661438a565b9450600182166000811461392f576001811461394057613973565b60ff19831686528186019350613973565b61394985614314565b60005b8381101561396b5781548189015260018201915060208101905061394c565b838801955050505b50505092915050565b6000613989601783614379565b91506139948261479e565b602082019050919050565b60006139ac601683614379565b91506139b7826147c7565b602082019050919050565b60006139cf602083614379565b91506139da826147f0565b602082019050919050565b60006139f2602b83614379565b91506139fd82614819565b604082019050919050565b6000613a15603283614379565b9150613a2082614868565b604082019050919050565b6000613a38602683614379565b9150613a43826148b7565b604082019050919050565b6000613a5b602583614379565b9150613a6682614906565b604082019050919050565b6000613a7e601c83614379565b9150613a8982614955565b602082019050919050565b6000613aa1602283614379565b9150613aac8261497e565b604082019050919050565b6000613ac4602483614379565b9150613acf826149cd565b604082019050919050565b6000613ae7601983614379565b9150613af282614a1c565b602082019050919050565b6000613b0a600b83614379565b9150613b1582614a45565b602082019050919050565b6000613b2d602983614379565b9150613b3882614a6e565b604082019050919050565b6000613b50602283614379565b9150613b5b82614abd565b604082019050919050565b6000613b73603e83614379565b9150613b7e82614b0c565b604082019050919050565b6000613b96602083614379565b9150613ba182614b5b565b602082019050919050565b6000613bb9602083614379565b9150613bc482614b84565b602082019050919050565b6000613bdc600d83614379565b9150613be782614bad565b602082019050919050565b6000613bff602f83614379565b9150613c0a82614bd6565b604082019050919050565b6000613c22601883614379565b9150613c2d82614c25565b602082019050919050565b6000613c45602183614379565b9150613c5082614c4e565b604082019050919050565b6000613c68602083614379565b9150613c7382614c9d565b602082019050919050565b6000613c8b601b83614379565b9150613c9682614cc6565b602082019050919050565b6000613cae602c83614379565b9150613cb982614cef565b604082019050919050565b6000613cd1602a83614379565b9150613cdc82614d3e565b604082019050919050565b6000613cf4602e83614379565b9150613cff82614d8d565b604082019050919050565b6000613d17601f83614379565b9150613d2282614ddc565b602082019050919050565b6000613d3a601983614379565b9150613d4582614e05565b602082019050919050565b613d5981614514565b82525050565b613d6881614514565b82525050565b613d7f613d7a82614514565b614624565b82525050565b6000613d9182866138cc565b9150613d9d82856138cc565b9150613da982846138fd565b9150819050949350505050565b6000613dc28286613d6e565b602082019150613dd28285613d6e565b602082019150613de28284613d6e565b602082019150819050949350505050565b6000602082019050613e0860008301846137de565b92915050565b6000608082019050613e2360008301876137de565b613e3060208301866137de565b613e3d6040830185613d5f565b8181036060830152613e4f818461385a565b905095945050505050565b6000604082019050613e6f60008301856137de565b613e7c6020830184613d5f565b9392505050565b60006020820190508181036000830152613e9d81846137ed565b905092915050565b6000602082019050613eba600083018461384b565b92915050565b60006020820190508181036000830152613eda8184613893565b905092915050565b60006020820190508181036000830152613efb8161397c565b9050919050565b60006020820190508181036000830152613f1b8161399f565b9050919050565b60006020820190508181036000830152613f3b816139c2565b9050919050565b60006020820190508181036000830152613f5b816139e5565b9050919050565b60006020820190508181036000830152613f7b81613a08565b9050919050565b60006020820190508181036000830152613f9b81613a2b565b9050919050565b60006020820190508181036000830152613fbb81613a4e565b9050919050565b60006020820190508181036000830152613fdb81613a71565b9050919050565b60006020820190508181036000830152613ffb81613a94565b9050919050565b6000602082019050818103600083015261401b81613ab7565b9050919050565b6000602082019050818103600083015261403b81613ada565b9050919050565b6000602082019050818103600083015261405b81613afd565b9050919050565b6000602082019050818103600083015261407b81613b20565b9050919050565b6000602082019050818103600083015261409b81613b43565b9050919050565b600060208201905081810360008301526140bb81613b66565b9050919050565b600060208201905081810360008301526140db81613b89565b9050919050565b600060208201905081810360008301526140fb81613bac565b9050919050565b6000602082019050818103600083015261411b81613bcf565b9050919050565b6000602082019050818103600083015261413b81613bf2565b9050919050565b6000602082019050818103600083015261415b81613c15565b9050919050565b6000602082019050818103600083015261417b81613c38565b9050919050565b6000602082019050818103600083015261419b81613c5b565b9050919050565b600060208201905081810360008301526141bb81613c7e565b9050919050565b600060208201905081810360008301526141db81613ca1565b9050919050565b600060208201905081810360008301526141fb81613cc4565b9050919050565b6000602082019050818103600083015261421b81613ce7565b9050919050565b6000602082019050818103600083015261423b81613d0a565b9050919050565b6000602082019050818103600083015261425b81613d2d565b9050919050565b60006020820190506142776000830184613d5f565b92915050565b6000614287614298565b905061429382826145aa565b919050565b6000604051905090565b600067ffffffffffffffff8211156142bd576142bc61474a565b5b6142c68261478d565b9050602081019050919050565b600067ffffffffffffffff8211156142ee576142ed61474a565b5b6142f78261478d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143a082614514565b91506143ab83614514565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e0576143df61465f565b5b828201905092915050565b60006143f682614514565b915061440183614514565b9250826144115761441061468e565b5b828204905092915050565b600061442782614514565b915061443283614514565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446b5761446a61465f565b5b828202905092915050565b600061448182614514565b915061448c83614514565b92508282101561449f5761449e61465f565b5b828203905092915050565b60006144b5826144f4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614563578082015181840152602081019050614548565b83811115614572576000848401525b50505050565b6000600282049050600182168061459057607f821691505b602082108114156145a4576145a36146bd565b5b50919050565b6145b38261478d565b810181811067ffffffffffffffff821117156145d2576145d161474a565b5b80604052505050565b60006145e682614514565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146195761461861465f565b5b600182019050919050565b6000819050919050565b600061463982614514565b915061464483614514565b9250826146545761465361468e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4769766561776179206973206e6f7420656e61626c6564000000000000000000600082015250565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b7f456163682061646472657373206d6179206f6e6c79206f776e2033204e465473600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e7420616d6f756e742065786365656473206d6178696d756d207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f546f6b656e206578697374000000000000000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820686f6c6465727320746f2072756e2074686520647260008201527f6177000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e74206d757374206265206174206c65617374206f6e65600082015250565b7f45786365656473206d6178696d756d206d696e7420616d6f756e740000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b614e37816144aa565b8114614e4257600080fd5b50565b614e4e816144bc565b8114614e5957600080fd5b50565b614e65816144c8565b8114614e7057600080fd5b50565b614e7c81614514565b8114614e8757600080fd5b50565b614e938161451e565b8114614e9e57600080fd5b5056fea264697066735822122036b5ff519170ad3298ecdca1deb071c9d67998ecc305f79a7e53caa039489b8664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000fa00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5951654436667935637666426f6e624d5534764d4170793448364e45583836386937387645386e6e537551470000000000000000000000
-----Decoded View---------------
Arg [0] : _royaltyFeesInBips (uint96): 250
Arg [1] : _contractURI (string): ipfs://QmYQeD6fy5cvfBonbMU4vMApy4H6NEX868i78vE8nnSuQG
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000fa
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [3] : 697066733a2f2f516d5951654436667935637666426f6e624d5534764d417079
Arg [4] : 3448364e45583836386937387645386e6e537551470000000000000000000000
Deployed Bytecode Sourcemap
55515:5745:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60202:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60431:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34589:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55777:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36102:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35619:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60593:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48495:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58928:723;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56481:86;;;;;;;;;;;;;:::i;:::-;;36802:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22991:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;48163:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56045:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56001:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59842:140;;;:::i;:::-;;37209:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58287:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58173:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48685:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56093:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57067:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34300:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55860:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57425:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34031:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8067:103;;;;;;;;;;;;;:::i;:::-;;56575:111;;;;;;;;;;;;;:::i;:::-;;57659:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7419:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60911:344;;;:::i;:::-;;56815:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34758:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57285:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36345:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37465:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56374:99;;;;;;;;;;;;;:::i;:::-;;58451:469;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56132:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55817:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57541:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55906:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36571:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56937:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8325:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57175:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55954:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60202:221;60350:4;60379:36;60403:11;60379:23;:36::i;:::-;60372:43;;60202:221;;;:::o;60431:154::-;7305:13;:11;:13::i;:::-;60527:50:::1;60547:9;60558:18;60527;:50::i;:::-;60431:154:::0;;:::o;34589:100::-;34643:13;34676:5;34669:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34589:100;:::o;55777:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36102:171::-;36178:7;36198:23;36213:7;36198:14;:23::i;:::-;36241:15;:24;36257:7;36241:24;;;;;;;;;;;;;;;;;;;;;36234:31;;36102:171;;;:::o;35619:417::-;35700:13;35716:23;35731:7;35716:14;:23::i;:::-;35700:39;;35764:5;35758:11;;:2;:11;;;;35750:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35858:5;35842:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35867:37;35884:5;35891:12;:10;:12::i;:::-;35867:16;:37::i;:::-;35842:62;35820:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;36007:21;36016:2;36020:7;36007:8;:21::i;:::-;35689:347;35619:417;;:::o;60593:94::-;60635:4;60658:21;60651:28;;60593:94;:::o;48495:113::-;48556:7;48583:10;:17;;;;48576:24;;48495:113;:::o;58928:723::-;1847:1;2445:7;;:19;;2437:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1847:1;2578:7;:18;;;;59009:13:::1;;;;;;;;;;;59001:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;59082:1;59068:11;:15;59060:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;59166:10;;59154:9;;:22;;;;:::i;:::-;59139:11;:37;;59131:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;59246:7;:5;:7::i;:::-;59232:21;;:10;:21;;;59228:315;;59293:17;;59278:11;:32;;59270:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;59389:17;;59365:21;59375:10;59365:9;:21::i;:::-;:41;59357:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;59502:11;59490:9;;:23;;;;:::i;:::-;59477:9;:36;;59469:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;59228:315;59560:9;59572:1;59560:13;;59555:89;59580:11;59575:1;:16;59555:89;;59611:21;59621:10;59611:9;:21::i;:::-;59593:3;;;;;:::i;:::-;;;;59555:89;;;;1803:1:::0;2757:7;:22;;;;58928:723;:::o;56481:86::-;7305:13;:11;:13::i;:::-;56551:8:::1;;;;;;;;;;;56550:9;56539:8;;:20;;;;;;;;;;;;;;;;;;56481:86::o:0;36802:336::-;36997:41;37016:12;:10;:12::i;:::-;37030:7;36997:18;:41::i;:::-;36989:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;37102:28;37112:4;37118:2;37122:7;37102:9;:28::i;:::-;36802:336;;;:::o;22991:442::-;23088:7;23097;23117:26;23146:17;:27;23164:8;23146:27;;;;;;;;;;;23117:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23218:1;23190:30;;:7;:16;;;:30;;;23186:92;;;23247:19;23237:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23186:92;23290:21;23355:17;:15;:17::i;:::-;23314:58;;23328:7;:23;;;23315:36;;:10;:36;;;;:::i;:::-;23314:58;;;;:::i;:::-;23290:82;;23393:7;:16;;;23411:13;23385:40;;;;;;22991:442;;;;;:::o;48163:256::-;48260:7;48296:23;48313:5;48296:16;:23::i;:::-;48288:5;:31;48280:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48385:12;:19;48398:5;48385:19;;;;;;;;;;;;;;;:26;48405:5;48385:26;;;;;;;;;;;;48378:33;;48163:256;;;;:::o;56045:37::-;;;;;;;;;;;;;:::o;56001:33::-;;;;;;;;;;;;;:::o;59842:140::-;7305:13;:11;:13::i;:::-;59921:7:::1;:5;:7::i;:::-;59913:25;;:48;59939:21;59913:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;59842:140::o:0;37209:185::-;37347:39;37364:4;37370:2;37374:7;37347:39;;;;;;;;;;;;:16;:39::i;:::-;37209:185;;;:::o;58287:156::-;58373:4;58397:38;58416:8;58426;58397:18;:38::i;:::-;58390:45;;58287:156;;;;:::o;58173:106::-;58230:4;58254:17;58262:8;58254:7;:17::i;:::-;58247:24;;58173:106;;;:::o;48685:233::-;48760:7;48796:30;:28;:30::i;:::-;48788:5;:38;48780:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48893:10;48904:5;48893:17;;;;;;;;:::i;:::-;;;;;;;;;;48886:24;;48685:233;;;:::o;56093:28::-;;;;;;;;;;;;;:::o;57067:99::-;7305:13;:11;:13::i;:::-;57151:7:::1;57140;:18;;;;;;;;;;;;:::i;:::-;;57067:99:::0;:::o;34300:222::-;34372:7;34392:13;34408:7;:16;34416:7;34408:16;;;;;;;;;;;;;;;;;;;;;34392:32;;34460:1;34443:19;;:5;:19;;;;34435:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34509:5;34502:12;;;34300:222;;;:::o;55860:35::-;;;;:::o;57425:102::-;7305:13;:11;:13::i;:::-;57509:10:::1;57497:9;:22;;;;57425:102:::0;:::o;34031:207::-;34103:7;34148:1;34131:19;;:5;:19;;;;34123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34214:9;:16;34224:5;34214:16;;;;;;;;;;;;;;;;34207:23;;34031:207;;;:::o;8067:103::-;7305:13;:11;:13::i;:::-;8132:30:::1;8159:1;8132:18;:30::i;:::-;8067:103::o:0;56575:111::-;7305:13;:11;:13::i;:::-;56661:17:::1;;;;;;;;;;;56660:18;56640:17;;:38;;;;;;;;;;;;;;;;;;56575:111::o:0;57659:502::-;57721:16;57750:18;57771:17;57781:6;57771:9;:17::i;:::-;57750:38;;57817:1;57803:10;:15;57799:355;;;57856:1;57842:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57835:23;;;;;57799:355;57891:23;57931:10;57917:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57891:51;;57957:13;57985:130;58009:10;58001:5;:18;57985:130;;;58065:34;58085:6;58093:5;58065:19;:34::i;:::-;58049:6;58056:5;58049:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;58021:7;;;;;:::i;:::-;;;;57985:130;;;58136:6;58129:13;;;;;57659:502;;;;:::o;7419:87::-;7465:7;7492:6;;;;;;;;;;;7485:13;;7419:87;:::o;60911:344::-;7305:13;:11;:13::i;:::-;60993:4:::1;60979:10;;:18;;60971:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;61055:17;;;;;;;;;;;61047:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;61111:11;61125:8;:6;:8::i;:::-;61111:22;;61167:7;:5;:7::i;:::-;61148:26;;:15;61156:6;61148:7;:15::i;:::-;:26;;;61144:103;;61194:15;61202:6;61194:7;:15::i;:::-;61186:33;;:49;61220:14;;61186:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;61144:103;60960:295;60911:344::o:0;56815:114::-;7305:13;:11;:13::i;:::-;56909:12:::1;56895:11;:26;;;;;;;;;;;;:::i;:::-;;56815:114:::0;:::o;34758:104::-;34814:13;34847:7;34840:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34758:104;:::o;57285:132::-;7305:13;:11;:13::i;:::-;57392:17:::1;57372;:37;;;;57285:132:::0;:::o;36345:155::-;36440:52;36459:12;:10;:12::i;:::-;36473:8;36483;36440:18;:52::i;:::-;36345:155;;:::o;37465:323::-;37639:41;37658:12;:10;:12::i;:::-;37672:7;37639:18;:41::i;:::-;37631:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;37742:38;37756:4;37762:2;37766:7;37775:4;37742:13;:38::i;:::-;37465:323;;;;:::o;56374:99::-;7305:13;:11;:13::i;:::-;56452::::1;;;;;;;;;;;56451:14;56435:13;;:30;;;;;;;;;;;;;;;;;;56374:99::o:0;58451:469::-;58532:13;58572:17;58580:8;58572:7;:17::i;:::-;58564:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;58677:5;58665:17;;:8;;;;;;;;;;;:17;;;58662:59;;;58702:11;58695:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58662:59;58729:28;58760:10;:8;:10::i;:::-;58729:41;;58815:1;58790:14;58784:28;:32;:128;;;;;;;;;;;;;;;;;58852:14;58868:19;:8;:17;:19::i;:::-;58889:7;58835:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58784:128;58777:135;;;58451:469;;;;:::o;56132:29::-;;;;:::o;55817:32::-;;;;:::o;57541:110::-;7305:13;:11;:13::i;:::-;57632:11:::1;57622:7;:21;;;;;;;;;;;;:::i;:::-;;57541:110:::0;:::o;55906:37::-;;;;:::o;36571:164::-;36668:4;36692:18;:25;36711:5;36692:25;;;;;;;;;;;;;;;:35;36718:8;36692:35;;;;;;;;;;;;;;;;;;;;;;;;;36685:42;;36571:164;;;;:::o;56937:122::-;7305:13;:11;:13::i;:::-;57036:15:::1;57019:14;:32;;;;56937:122:::0;:::o;8325:201::-;7305:13;:11;:13::i;:::-;8434:1:::1;8414:22;;:8;:22;;;;8406:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8490:28;8509:8;8490:18;:28::i;:::-;8325:201:::0;:::o;57175:102::-;7305:13;:11;:13::i;:::-;57259:10:::1;57247:9;:22;;;;57175:102:::0;:::o;55954:36::-;;;;:::o;47855:224::-;47957:4;47996:35;47981:50;;;:11;:50;;;;:90;;;;48035:36;48059:11;48035:23;:36::i;:::-;47981:90;47974:97;;47855:224;;;:::o;7584:132::-;7659:12;:10;:12::i;:::-;7648:23;;:7;:5;:7::i;:::-;:23;;;7640:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7584:132::o;24083:332::-;24202:17;:15;:17::i;:::-;24186:33;;:12;:33;;;;24178:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24305:1;24285:22;;:8;:22;;;;24277:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24372:35;;;;;;;;24384:8;24372:35;;;;;;24394:12;24372:35;;;;;24350:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24083:332;;:::o;44077:135::-;44159:16;44167:7;44159;:16::i;:::-;44151:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44077:135;:::o;5970:98::-;6023:7;6050:10;6043:17;;5970:98;:::o;43356:174::-;43458:2;43431:15;:24;43447:7;43431:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43514:7;43510:2;43476:46;;43485:23;43500:7;43485:14;:23::i;:::-;43476:46;;;;;;;;;;;;43356:174;;:::o;59659:173::-;59717:10;;:12;;;;;;;;;:::i;:::-;;;;;;59749:19;59757:10;;59749:7;:19::i;:::-;59748:20;59740:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;59795:29;59801:10;59813;;59795:5;:29::i;:::-;59659:173;:::o;39589:264::-;39682:4;39699:13;39715:23;39730:7;39715:14;:23::i;:::-;39699:39;;39768:5;39757:16;;:7;:16;;;:52;;;;39777:32;39794:5;39801:7;39777:16;:32::i;:::-;39757:52;:87;;;;39837:7;39813:31;;:20;39825:7;39813:11;:20::i;:::-;:31;;;39757:87;39749:96;;;39589:264;;;;:::o;42612:625::-;42771:4;42744:31;;:23;42759:7;42744:14;:23::i;:::-;:31;;;42736:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42850:1;42836:16;;:2;:16;;;;42828:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42906:39;42927:4;42933:2;42937:7;42906:20;:39::i;:::-;43010:29;43027:1;43031:7;43010:8;:29::i;:::-;43071:1;43052:9;:15;43062:4;43052:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;43100:1;43083:9;:13;43093:2;43083:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;43131:2;43112:7;:16;43120:7;43112:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43170:7;43166:2;43151:27;;43160:4;43151:27;;;;;;;;;;;;43191:38;43211:4;43217:2;43221:7;43191:19;:38::i;:::-;42612:625;;;:::o;23715:97::-;23773:6;23799:5;23792:12;;23715:97;:::o;39295:127::-;39360:4;39412:1;39384:30;;:7;:16;39392:7;39384:16;;;;;;;;;;;;;;;;;;;;;:30;;;;39377:37;;39295:127;;;:::o;8686:191::-;8760:16;8779:6;;;;;;;;;;;8760:25;;8805:8;8796:6;;:17;;;;;;;;;;;;;;;;;;8860:8;8829:40;;8850:8;8829:40;;;;;;;;;;;;8749:128;8686:191;:::o;60695:208::-;60735:4;60752:17;60804:16;60822:15;60839:10;;60787:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;60777:74;;;;;;60772:80;;60752:100;;60885:10;;60870:12;:25;;;;:::i;:::-;60863:32;;;60695:208;:::o;43673:315::-;43828:8;43819:17;;:5;:17;;;;43811:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43915:8;43877:18;:25;43896:5;43877:25;;;;;;;;;;;;;;;:35;43903:8;43877:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;43961:8;43939:41;;43954:5;43939:41;;;43971:8;43939:41;;;;;;:::i;:::-;;;;;;;;43673:315;;;:::o;38669:313::-;38825:28;38835:4;38841:2;38845:7;38825:9;:28::i;:::-;38872:47;38895:4;38901:2;38905:7;38914:4;38872:22;:47::i;:::-;38864:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;38669:313;;;;:::o;56699:108::-;56759:13;56792:7;56785:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56699:108;:::o;3224:723::-;3280:13;3510:1;3501:5;:10;3497:53;;;3528:10;;;;;;;;;;;;;;;;;;;;;3497:53;3560:12;3575:5;3560:20;;3591:14;3616:78;3631:1;3623:4;:9;3616:78;;3649:8;;;;;:::i;:::-;;;;3680:2;3672:10;;;;;:::i;:::-;;;3616:78;;;3704:19;3736:6;3726:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3704:39;;3754:154;3770:1;3761:5;:10;3754:154;;3798:1;3788:11;;;;;:::i;:::-;;;3865:2;3857:5;:10;;;;:::i;:::-;3844:2;:24;;;;:::i;:::-;3831:39;;3814:6;3821;3814:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3894:2;3885:11;;;;;:::i;:::-;;;3754:154;;;3932:6;3918:21;;;;;3224:723;;;;:::o;22721:215::-;22823:4;22862:26;22847:41;;;:11;:41;;;;:81;;;;22892:36;22916:11;22892:23;:36::i;:::-;22847:81;22840:88;;22721:215;;;:::o;41187:439::-;41281:1;41267:16;;:2;:16;;;;41259:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41340:16;41348:7;41340;:16::i;:::-;41339:17;41331:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41402:45;41431:1;41435:2;41439:7;41402:20;:45::i;:::-;41477:1;41460:9;:13;41470:2;41460:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41508:2;41489:7;:16;41497:7;41489:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41553:7;41549:2;41528:33;;41545:1;41528:33;;;;;;;;;;;;41574:44;41602:1;41606:2;41610:7;41574:19;:44::i;:::-;41187:439;;:::o;59990:204::-;60141:45;60168:4;60174:2;60178:7;60141:26;:45::i;:::-;59990:204;;;:::o;46712:125::-;;;;:::o;44776:853::-;44930:4;44951:15;:2;:13;;;:15::i;:::-;44947:675;;;45003:2;44987:36;;;45024:12;:10;:12::i;:::-;45038:4;45044:7;45053:4;44987:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44983:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45245:1;45228:6;:13;:18;45224:328;;;45271:60;;;;;;;;;;:::i;:::-;;;;;;;;45224:328;45502:6;45496:13;45487:6;45483:2;45479:15;45472:38;44983:584;45119:41;;;45109:51;;;:6;:51;;;;45102:58;;;;;44947:675;45606:4;45599:11;;44776:853;;;;;;;:::o;33662:305::-;33764:4;33816:25;33801:40;;;:11;:40;;;;:105;;;;33873:33;33858:48;;;:11;:48;;;;33801:105;:158;;;;33923:36;33947:11;33923:23;:36::i;:::-;33801:158;33781:178;;33662:305;;;:::o;49531:589::-;49675:45;49702:4;49708:2;49712:7;49675:26;:45::i;:::-;49753:1;49737:18;;:4;:18;;;49733:187;;;49772:40;49804:7;49772:31;:40::i;:::-;49733:187;;;49842:2;49834:10;;:4;:10;;;49830:90;;49861:47;49894:4;49900:7;49861:32;:47::i;:::-;49830:90;49733:187;49948:1;49934:16;;:2;:16;;;49930:183;;;49967:45;50004:7;49967:36;:45::i;:::-;49930:183;;;50040:4;50034:10;;:2;:10;;;50030:83;;50061:40;50089:2;50093:7;50061:27;:40::i;:::-;50030:83;49930:183;49531:589;;;:::o;10117:326::-;10177:4;10434:1;10412:7;:19;;;:23;10405:30;;10117:326;;;:::o;21171:157::-;21256:4;21295:25;21280:40;;;:11;:40;;;;21273:47;;21171:157;;;:::o;46201:126::-;;;;:::o;50843:164::-;50947:10;:17;;;;50920:15;:24;50936:7;50920:24;;;;;;;;;;;:44;;;;50975:10;50991:7;50975:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50843:164;:::o;51634:988::-;51900:22;51950:1;51925:22;51942:4;51925:16;:22::i;:::-;:26;;;;:::i;:::-;51900:51;;51962:18;51983:17;:26;52001:7;51983:26;;;;;;;;;;;;51962:47;;52130:14;52116:10;:28;52112:328;;52161:19;52183:12;:18;52196:4;52183:18;;;;;;;;;;;;;;;:34;52202:14;52183:34;;;;;;;;;;;;52161:56;;52267:11;52234:12;:18;52247:4;52234:18;;;;;;;;;;;;;;;:30;52253:10;52234:30;;;;;;;;;;;:44;;;;52384:10;52351:17;:30;52369:11;52351:30;;;;;;;;;;;:43;;;;52146:294;52112:328;52536:17;:26;52554:7;52536:26;;;;;;;;;;;52529:33;;;52580:12;:18;52593:4;52580:18;;;;;;;;;;;;;;;:34;52599:14;52580:34;;;;;;;;;;;52573:41;;;51715:907;;51634:988;;:::o;52917:1079::-;53170:22;53215:1;53195:10;:17;;;;:21;;;;:::i;:::-;53170:46;;53227:18;53248:15;:24;53264:7;53248:24;;;;;;;;;;;;53227:45;;53599:19;53621:10;53632:14;53621:26;;;;;;;;:::i;:::-;;;;;;;;;;53599:48;;53685:11;53660:10;53671;53660:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;53796:10;53765:15;:28;53781:11;53765:28;;;;;;;;;;;:41;;;;53937:15;:24;53953:7;53937:24;;;;;;;;;;;53930:31;;;53972:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52988:1008;;;52917:1079;:::o;50421:221::-;50506:14;50523:20;50540:2;50523:16;:20::i;:::-;50506:37;;50581:7;50554:12;:16;50567:2;50554:16;;;;;;;;;;;;;;;:24;50571:6;50554:24;;;;;;;;;;;:34;;;;50628:6;50599:17;:26;50617:7;50599:26;;;;;;;;;;;:35;;;;50495:147;50421:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:137::-;2322:5;2360:6;2347:20;2338:29;;2376:32;2402:5;2376:32;:::i;:::-;2277:137;;;;:::o;2420:329::-;2479:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:119;;;2534:79;;:::i;:::-;2496:119;2654:1;2679:53;2724:7;2715:6;2704:9;2700:22;2679:53;:::i;:::-;2669:63;;2625:117;2420:329;;;;:::o;2755:474::-;2823:6;2831;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:53;3076:7;3067:6;3056:9;3052:22;3031:53;:::i;:::-;3021:63;;2977:117;3133:2;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3104:118;2755:474;;;;;:::o;3235:619::-;3312:6;3320;3328;3377:2;3365:9;3356:7;3352:23;3348:32;3345:119;;;3383:79;;:::i;:::-;3345:119;3503:1;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3474:117;3630:2;3656:53;3701:7;3692:6;3681:9;3677:22;3656:53;:::i;:::-;3646:63;;3601:118;3758:2;3784:53;3829:7;3820:6;3809:9;3805:22;3784:53;:::i;:::-;3774:63;;3729:118;3235:619;;;;;:::o;3860:943::-;3955:6;3963;3971;3979;4028:3;4016:9;4007:7;4003:23;3999:33;3996:120;;;4035:79;;:::i;:::-;3996:120;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4410:2;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4381:118;4566:2;4555:9;4551:18;4538:32;4597:18;4589:6;4586:30;4583:117;;;4619:79;;:::i;:::-;4583:117;4724:62;4778:7;4769:6;4758:9;4754:22;4724:62;:::i;:::-;4714:72;;4509:287;3860:943;;;;;;;:::o;4809:468::-;4874:6;4882;4931:2;4919:9;4910:7;4906:23;4902:32;4899:119;;;4937:79;;:::i;:::-;4899:119;5057:1;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5028:117;5184:2;5210:50;5252:7;5243:6;5232:9;5228:22;5210:50;:::i;:::-;5200:60;;5155:115;4809:468;;;;;:::o;5283:474::-;5351:6;5359;5408:2;5396:9;5387:7;5383:23;5379:32;5376:119;;;5414:79;;:::i;:::-;5376:119;5534:1;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5505:117;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5283:474;;;;;:::o;5763:472::-;5830:6;5838;5887:2;5875:9;5866:7;5862:23;5858:32;5855:119;;;5893:79;;:::i;:::-;5855:119;6013:1;6038:53;6083:7;6074:6;6063:9;6059:22;6038:53;:::i;:::-;6028:63;;5984:117;6140:2;6166:52;6210:7;6201:6;6190:9;6186:22;6166:52;:::i;:::-;6156:62;;6111:117;5763:472;;;;;:::o;6241:327::-;6299:6;6348:2;6336:9;6327:7;6323:23;6319:32;6316:119;;;6354:79;;:::i;:::-;6316:119;6474:1;6499:52;6543:7;6534:6;6523:9;6519:22;6499:52;:::i;:::-;6489:62;;6445:116;6241:327;;;;:::o;6574:349::-;6643:6;6692:2;6680:9;6671:7;6667:23;6663:32;6660:119;;;6698:79;;:::i;:::-;6660:119;6818:1;6843:63;6898:7;6889:6;6878:9;6874:22;6843:63;:::i;:::-;6833:73;;6789:127;6574:349;;;;:::o;6929:509::-;6998:6;7047:2;7035:9;7026:7;7022:23;7018:32;7015:119;;;7053:79;;:::i;:::-;7015:119;7201:1;7190:9;7186:17;7173:31;7231:18;7223:6;7220:30;7217:117;;;7253:79;;:::i;:::-;7217:117;7358:63;7413:7;7404:6;7393:9;7389:22;7358:63;:::i;:::-;7348:73;;7144:287;6929:509;;;;:::o;7444:329::-;7503:6;7552:2;7540:9;7531:7;7527:23;7523:32;7520:119;;;7558:79;;:::i;:::-;7520:119;7678:1;7703:53;7748:7;7739:6;7728:9;7724:22;7703:53;:::i;:::-;7693:63;;7649:117;7444:329;;;;:::o;7779:474::-;7847:6;7855;7904:2;7892:9;7883:7;7879:23;7875:32;7872:119;;;7910:79;;:::i;:::-;7872:119;8030:1;8055:53;8100:7;8091:6;8080:9;8076:22;8055:53;:::i;:::-;8045:63;;8001:117;8157:2;8183:53;8228:7;8219:6;8208:9;8204:22;8183:53;:::i;:::-;8173:63;;8128:118;7779:474;;;;;:::o;8259:179::-;8328:10;8349:46;8391:3;8383:6;8349:46;:::i;:::-;8427:4;8422:3;8418:14;8404:28;;8259:179;;;;:::o;8444:118::-;8531:24;8549:5;8531:24;:::i;:::-;8526:3;8519:37;8444:118;;:::o;8598:732::-;8717:3;8746:54;8794:5;8746:54;:::i;:::-;8816:86;8895:6;8890:3;8816:86;:::i;:::-;8809:93;;8926:56;8976:5;8926:56;:::i;:::-;9005:7;9036:1;9021:284;9046:6;9043:1;9040:13;9021:284;;;9122:6;9116:13;9149:63;9208:3;9193:13;9149:63;:::i;:::-;9142:70;;9235:60;9288:6;9235:60;:::i;:::-;9225:70;;9081:224;9068:1;9065;9061:9;9056:14;;9021:284;;;9025:14;9321:3;9314:10;;8722:608;;;8598:732;;;;:::o;9336:109::-;9417:21;9432:5;9417:21;:::i;:::-;9412:3;9405:34;9336:109;;:::o;9451:360::-;9537:3;9565:38;9597:5;9565:38;:::i;:::-;9619:70;9682:6;9677:3;9619:70;:::i;:::-;9612:77;;9698:52;9743:6;9738:3;9731:4;9724:5;9720:16;9698:52;:::i;:::-;9775:29;9797:6;9775:29;:::i;:::-;9770:3;9766:39;9759:46;;9541:270;9451:360;;;;:::o;9817:364::-;9905:3;9933:39;9966:5;9933:39;:::i;:::-;9988:71;10052:6;10047:3;9988:71;:::i;:::-;9981:78;;10068:52;10113:6;10108:3;10101:4;10094:5;10090:16;10068:52;:::i;:::-;10145:29;10167:6;10145:29;:::i;:::-;10140:3;10136:39;10129:46;;9909:272;9817:364;;;;:::o;10187:377::-;10293:3;10321:39;10354:5;10321:39;:::i;:::-;10376:89;10458:6;10453:3;10376:89;:::i;:::-;10369:96;;10474:52;10519:6;10514:3;10507:4;10500:5;10496:16;10474:52;:::i;:::-;10551:6;10546:3;10542:16;10535:23;;10297:267;10187:377;;;;:::o;10594:845::-;10697:3;10734:5;10728:12;10763:36;10789:9;10763:36;:::i;:::-;10815:89;10897:6;10892:3;10815:89;:::i;:::-;10808:96;;10935:1;10924:9;10920:17;10951:1;10946:137;;;;11097:1;11092:341;;;;10913:520;;10946:137;11030:4;11026:9;11015;11011:25;11006:3;10999:38;11066:6;11061:3;11057:16;11050:23;;10946:137;;11092:341;11159:38;11191:5;11159:38;:::i;:::-;11219:1;11233:154;11247:6;11244:1;11241:13;11233:154;;;11321:7;11315:14;11311:1;11306:3;11302:11;11295:35;11371:1;11362:7;11358:15;11347:26;;11269:4;11266:1;11262:12;11257:17;;11233:154;;;11416:6;11411:3;11407:16;11400:23;;11099:334;;10913:520;;10701:738;;10594:845;;;;:::o;11445:366::-;11587:3;11608:67;11672:2;11667:3;11608:67;:::i;:::-;11601:74;;11684:93;11773:3;11684:93;:::i;:::-;11802:2;11797:3;11793:12;11786:19;;11445:366;;;:::o;11817:::-;11959:3;11980:67;12044:2;12039:3;11980:67;:::i;:::-;11973:74;;12056:93;12145:3;12056:93;:::i;:::-;12174:2;12169:3;12165:12;12158:19;;11817:366;;;:::o;12189:::-;12331:3;12352:67;12416:2;12411:3;12352:67;:::i;:::-;12345:74;;12428:93;12517:3;12428:93;:::i;:::-;12546:2;12541:3;12537:12;12530:19;;12189:366;;;:::o;12561:::-;12703:3;12724:67;12788:2;12783:3;12724:67;:::i;:::-;12717:74;;12800:93;12889:3;12800:93;:::i;:::-;12918:2;12913:3;12909:12;12902:19;;12561:366;;;:::o;12933:::-;13075:3;13096:67;13160:2;13155:3;13096:67;:::i;:::-;13089:74;;13172:93;13261:3;13172:93;:::i;:::-;13290:2;13285:3;13281:12;13274:19;;12933:366;;;:::o;13305:::-;13447:3;13468:67;13532:2;13527:3;13468:67;:::i;:::-;13461:74;;13544:93;13633:3;13544:93;:::i;:::-;13662:2;13657:3;13653:12;13646:19;;13305:366;;;:::o;13677:::-;13819:3;13840:67;13904:2;13899:3;13840:67;:::i;:::-;13833:74;;13916:93;14005:3;13916:93;:::i;:::-;14034:2;14029:3;14025:12;14018:19;;13677:366;;;:::o;14049:::-;14191:3;14212:67;14276:2;14271:3;14212:67;:::i;:::-;14205:74;;14288:93;14377:3;14288:93;:::i;:::-;14406:2;14401:3;14397:12;14390:19;;14049:366;;;:::o;14421:::-;14563:3;14584:67;14648:2;14643:3;14584:67;:::i;:::-;14577:74;;14660:93;14749:3;14660:93;:::i;:::-;14778:2;14773:3;14769:12;14762:19;;14421:366;;;:::o;14793:::-;14935:3;14956:67;15020:2;15015:3;14956:67;:::i;:::-;14949:74;;15032:93;15121:3;15032:93;:::i;:::-;15150:2;15145:3;15141:12;15134:19;;14793:366;;;:::o;15165:::-;15307:3;15328:67;15392:2;15387:3;15328:67;:::i;:::-;15321:74;;15404:93;15493:3;15404:93;:::i;:::-;15522:2;15517:3;15513:12;15506:19;;15165:366;;;:::o;15537:::-;15679:3;15700:67;15764:2;15759:3;15700:67;:::i;:::-;15693:74;;15776:93;15865:3;15776:93;:::i;:::-;15894:2;15889:3;15885:12;15878:19;;15537:366;;;:::o;15909:::-;16051:3;16072:67;16136:2;16131:3;16072:67;:::i;:::-;16065:74;;16148:93;16237:3;16148:93;:::i;:::-;16266:2;16261:3;16257:12;16250:19;;15909:366;;;:::o;16281:::-;16423:3;16444:67;16508:2;16503:3;16444:67;:::i;:::-;16437:74;;16520:93;16609:3;16520:93;:::i;:::-;16638:2;16633:3;16629:12;16622:19;;16281:366;;;:::o;16653:::-;16795:3;16816:67;16880:2;16875:3;16816:67;:::i;:::-;16809:74;;16892:93;16981:3;16892:93;:::i;:::-;17010:2;17005:3;17001:12;16994:19;;16653:366;;;:::o;17025:::-;17167:3;17188:67;17252:2;17247:3;17188:67;:::i;:::-;17181:74;;17264:93;17353:3;17264:93;:::i;:::-;17382:2;17377:3;17373:12;17366:19;;17025:366;;;:::o;17397:::-;17539:3;17560:67;17624:2;17619:3;17560:67;:::i;:::-;17553:74;;17636:93;17725:3;17636:93;:::i;:::-;17754:2;17749:3;17745:12;17738:19;;17397:366;;;:::o;17769:::-;17911:3;17932:67;17996:2;17991:3;17932:67;:::i;:::-;17925:74;;18008:93;18097:3;18008:93;:::i;:::-;18126:2;18121:3;18117:12;18110:19;;17769:366;;;:::o;18141:::-;18283:3;18304:67;18368:2;18363:3;18304:67;:::i;:::-;18297:74;;18380:93;18469:3;18380:93;:::i;:::-;18498:2;18493:3;18489:12;18482:19;;18141:366;;;:::o;18513:::-;18655:3;18676:67;18740:2;18735:3;18676:67;:::i;:::-;18669:74;;18752:93;18841:3;18752:93;:::i;:::-;18870:2;18865:3;18861:12;18854:19;;18513:366;;;:::o;18885:::-;19027:3;19048:67;19112:2;19107:3;19048:67;:::i;:::-;19041:74;;19124:93;19213:3;19124:93;:::i;:::-;19242:2;19237:3;19233:12;19226:19;;18885:366;;;:::o;19257:::-;19399:3;19420:67;19484:2;19479:3;19420:67;:::i;:::-;19413:74;;19496:93;19585:3;19496:93;:::i;:::-;19614:2;19609:3;19605:12;19598:19;;19257:366;;;:::o;19629:::-;19771:3;19792:67;19856:2;19851:3;19792:67;:::i;:::-;19785:74;;19868:93;19957:3;19868:93;:::i;:::-;19986:2;19981:3;19977:12;19970:19;;19629:366;;;:::o;20001:::-;20143:3;20164:67;20228:2;20223:3;20164:67;:::i;:::-;20157:74;;20240:93;20329:3;20240:93;:::i;:::-;20358:2;20353:3;20349:12;20342:19;;20001:366;;;:::o;20373:::-;20515:3;20536:67;20600:2;20595:3;20536:67;:::i;:::-;20529:74;;20612:93;20701:3;20612:93;:::i;:::-;20730:2;20725:3;20721:12;20714:19;;20373:366;;;:::o;20745:::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:::-;21259:3;21280:67;21344:2;21339:3;21280:67;:::i;:::-;21273:74;;21356:93;21445:3;21356:93;:::i;:::-;21474:2;21469:3;21465:12;21458:19;;21117:366;;;:::o;21489:::-;21631:3;21652:67;21716:2;21711:3;21652:67;:::i;:::-;21645:74;;21728:93;21817:3;21728:93;:::i;:::-;21846:2;21841:3;21837:12;21830:19;;21489:366;;;:::o;21861:108::-;21938:24;21956:5;21938:24;:::i;:::-;21933:3;21926:37;21861:108;;:::o;21975:118::-;22062:24;22080:5;22062:24;:::i;:::-;22057:3;22050:37;21975:118;;:::o;22099:157::-;22204:45;22224:24;22242:5;22224:24;:::i;:::-;22204:45;:::i;:::-;22199:3;22192:58;22099:157;;:::o;22262:589::-;22487:3;22509:95;22600:3;22591:6;22509:95;:::i;:::-;22502:102;;22621:95;22712:3;22703:6;22621:95;:::i;:::-;22614:102;;22733:92;22821:3;22812:6;22733:92;:::i;:::-;22726:99;;22842:3;22835:10;;22262:589;;;;;;:::o;22857:538::-;23025:3;23040:75;23111:3;23102:6;23040:75;:::i;:::-;23140:2;23135:3;23131:12;23124:19;;23153:75;23224:3;23215:6;23153:75;:::i;:::-;23253:2;23248:3;23244:12;23237:19;;23266:75;23337:3;23328:6;23266:75;:::i;:::-;23366:2;23361:3;23357:12;23350:19;;23386:3;23379:10;;22857:538;;;;;;:::o;23401:222::-;23494:4;23532:2;23521:9;23517:18;23509:26;;23545:71;23613:1;23602:9;23598:17;23589:6;23545:71;:::i;:::-;23401:222;;;;:::o;23629:640::-;23824:4;23862:3;23851:9;23847:19;23839:27;;23876:71;23944:1;23933:9;23929:17;23920:6;23876:71;:::i;:::-;23957:72;24025:2;24014:9;24010:18;24001:6;23957:72;:::i;:::-;24039;24107:2;24096:9;24092:18;24083:6;24039:72;:::i;:::-;24158:9;24152:4;24148:20;24143:2;24132:9;24128:18;24121:48;24186:76;24257:4;24248:6;24186:76;:::i;:::-;24178:84;;23629:640;;;;;;;:::o;24275:332::-;24396:4;24434:2;24423:9;24419:18;24411:26;;24447:71;24515:1;24504:9;24500:17;24491:6;24447:71;:::i;:::-;24528:72;24596:2;24585:9;24581:18;24572:6;24528:72;:::i;:::-;24275:332;;;;;:::o;24613:373::-;24756:4;24794:2;24783:9;24779:18;24771:26;;24843:9;24837:4;24833:20;24829:1;24818:9;24814:17;24807:47;24871:108;24974:4;24965:6;24871:108;:::i;:::-;24863:116;;24613:373;;;;:::o;24992:210::-;25079:4;25117:2;25106:9;25102:18;25094:26;;25130:65;25192:1;25181:9;25177:17;25168:6;25130:65;:::i;:::-;24992:210;;;;:::o;25208:313::-;25321:4;25359:2;25348:9;25344:18;25336:26;;25408:9;25402:4;25398:20;25394:1;25383:9;25379:17;25372:47;25436:78;25509:4;25500:6;25436:78;:::i;:::-;25428:86;;25208:313;;;;:::o;25527:419::-;25693:4;25731:2;25720:9;25716:18;25708:26;;25780:9;25774:4;25770:20;25766:1;25755:9;25751:17;25744:47;25808:131;25934:4;25808:131;:::i;:::-;25800:139;;25527:419;;;:::o;25952:::-;26118:4;26156:2;26145:9;26141:18;26133:26;;26205:9;26199:4;26195:20;26191:1;26180:9;26176:17;26169:47;26233:131;26359:4;26233:131;:::i;:::-;26225:139;;25952:419;;;:::o;26377:::-;26543:4;26581:2;26570:9;26566:18;26558:26;;26630:9;26624:4;26620:20;26616:1;26605:9;26601:17;26594:47;26658:131;26784:4;26658:131;:::i;:::-;26650:139;;26377:419;;;:::o;26802:::-;26968:4;27006:2;26995:9;26991:18;26983:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27083:131;27209:4;27083:131;:::i;:::-;27075:139;;26802:419;;;:::o;27227:::-;27393:4;27431:2;27420:9;27416:18;27408:26;;27480:9;27474:4;27470:20;27466:1;27455:9;27451:17;27444:47;27508:131;27634:4;27508:131;:::i;:::-;27500:139;;27227:419;;;:::o;27652:::-;27818:4;27856:2;27845:9;27841:18;27833:26;;27905:9;27899:4;27895:20;27891:1;27880:9;27876:17;27869:47;27933:131;28059:4;27933:131;:::i;:::-;27925:139;;27652:419;;;:::o;28077:::-;28243:4;28281:2;28270:9;28266:18;28258:26;;28330:9;28324:4;28320:20;28316:1;28305:9;28301:17;28294:47;28358:131;28484:4;28358:131;:::i;:::-;28350:139;;28077:419;;;:::o;28502:::-;28668:4;28706:2;28695:9;28691:18;28683:26;;28755:9;28749:4;28745:20;28741:1;28730:9;28726:17;28719:47;28783:131;28909:4;28783:131;:::i;:::-;28775:139;;28502:419;;;:::o;28927:::-;29093:4;29131:2;29120:9;29116:18;29108:26;;29180:9;29174:4;29170:20;29166:1;29155:9;29151:17;29144:47;29208:131;29334:4;29208:131;:::i;:::-;29200:139;;28927:419;;;:::o;29352:::-;29518:4;29556:2;29545:9;29541:18;29533:26;;29605:9;29599:4;29595:20;29591:1;29580:9;29576:17;29569:47;29633:131;29759:4;29633:131;:::i;:::-;29625:139;;29352:419;;;:::o;29777:::-;29943:4;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29777:419;;;:::o;30202:::-;30368:4;30406:2;30395:9;30391:18;30383:26;;30455:9;30449:4;30445:20;30441:1;30430:9;30426:17;30419:47;30483:131;30609:4;30483:131;:::i;:::-;30475:139;;30202:419;;;:::o;30627:::-;30793:4;30831:2;30820:9;30816:18;30808:26;;30880:9;30874:4;30870:20;30866:1;30855:9;30851:17;30844:47;30908:131;31034:4;30908:131;:::i;:::-;30900:139;;30627:419;;;:::o;31052:::-;31218:4;31256:2;31245:9;31241:18;31233:26;;31305:9;31299:4;31295:20;31291:1;31280:9;31276:17;31269:47;31333:131;31459:4;31333:131;:::i;:::-;31325:139;;31052:419;;;:::o;31477:::-;31643:4;31681:2;31670:9;31666:18;31658:26;;31730:9;31724:4;31720:20;31716:1;31705:9;31701:17;31694:47;31758:131;31884:4;31758:131;:::i;:::-;31750:139;;31477:419;;;:::o;31902:::-;32068:4;32106:2;32095:9;32091:18;32083:26;;32155:9;32149:4;32145:20;32141:1;32130:9;32126:17;32119:47;32183:131;32309:4;32183:131;:::i;:::-;32175:139;;31902:419;;;:::o;32327:::-;32493:4;32531:2;32520:9;32516:18;32508:26;;32580:9;32574:4;32570:20;32566:1;32555:9;32551:17;32544:47;32608:131;32734:4;32608:131;:::i;:::-;32600:139;;32327:419;;;:::o;32752:::-;32918:4;32956:2;32945:9;32941:18;32933:26;;33005:9;32999:4;32995:20;32991:1;32980:9;32976:17;32969:47;33033:131;33159:4;33033:131;:::i;:::-;33025:139;;32752:419;;;:::o;33177:::-;33343:4;33381:2;33370:9;33366:18;33358:26;;33430:9;33424:4;33420:20;33416:1;33405:9;33401:17;33394:47;33458:131;33584:4;33458:131;:::i;:::-;33450:139;;33177:419;;;:::o;33602:::-;33768:4;33806:2;33795:9;33791:18;33783:26;;33855:9;33849:4;33845:20;33841:1;33830:9;33826:17;33819:47;33883:131;34009:4;33883:131;:::i;:::-;33875:139;;33602:419;;;:::o;34027:::-;34193:4;34231:2;34220:9;34216:18;34208:26;;34280:9;34274:4;34270:20;34266:1;34255:9;34251:17;34244:47;34308:131;34434:4;34308:131;:::i;:::-;34300:139;;34027:419;;;:::o;34452:::-;34618:4;34656:2;34645:9;34641:18;34633:26;;34705:9;34699:4;34695:20;34691:1;34680:9;34676:17;34669:47;34733:131;34859:4;34733:131;:::i;:::-;34725:139;;34452:419;;;:::o;34877:::-;35043:4;35081:2;35070:9;35066:18;35058:26;;35130:9;35124:4;35120:20;35116:1;35105:9;35101:17;35094:47;35158:131;35284:4;35158:131;:::i;:::-;35150:139;;34877:419;;;:::o;35302:::-;35468:4;35506:2;35495:9;35491:18;35483:26;;35555:9;35549:4;35545:20;35541:1;35530:9;35526:17;35519:47;35583:131;35709:4;35583:131;:::i;:::-;35575:139;;35302:419;;;:::o;35727:::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:::-;36318:4;36356:2;36345:9;36341:18;36333:26;;36405:9;36399:4;36395:20;36391:1;36380:9;36376:17;36369:47;36433:131;36559:4;36433:131;:::i;:::-;36425:139;;36152:419;;;:::o;36577:::-;36743:4;36781:2;36770:9;36766:18;36758:26;;36830:9;36824:4;36820:20;36816:1;36805:9;36801:17;36794:47;36858:131;36984:4;36858:131;:::i;:::-;36850:139;;36577:419;;;:::o;37002:::-;37168:4;37206:2;37195:9;37191:18;37183:26;;37255:9;37249:4;37245:20;37241:1;37230:9;37226:17;37219:47;37283:131;37409:4;37283:131;:::i;:::-;37275:139;;37002:419;;;:::o;37427:222::-;37520:4;37558:2;37547:9;37543:18;37535:26;;37571:71;37639:1;37628:9;37624:17;37615:6;37571:71;:::i;:::-;37427:222;;;;:::o;37655:129::-;37689:6;37716:20;;:::i;:::-;37706:30;;37745:33;37773:4;37765:6;37745:33;:::i;:::-;37655:129;;;:::o;37790:75::-;37823:6;37856:2;37850:9;37840:19;;37790:75;:::o;37871:307::-;37932:4;38022:18;38014:6;38011:30;38008:56;;;38044:18;;:::i;:::-;38008:56;38082:29;38104:6;38082:29;:::i;:::-;38074:37;;38166:4;38160;38156:15;38148:23;;37871:307;;;:::o;38184:308::-;38246:4;38336:18;38328:6;38325:30;38322:56;;;38358:18;;:::i;:::-;38322:56;38396:29;38418:6;38396:29;:::i;:::-;38388:37;;38480:4;38474;38470:15;38462:23;;38184:308;;;:::o;38498:132::-;38565:4;38588:3;38580:11;;38618:4;38613:3;38609:14;38601:22;;38498:132;;;:::o;38636:141::-;38685:4;38708:3;38700:11;;38731:3;38728:1;38721:14;38765:4;38762:1;38752:18;38744:26;;38636:141;;;:::o;38783:114::-;38850:6;38884:5;38878:12;38868:22;;38783:114;;;:::o;38903:98::-;38954:6;38988:5;38982:12;38972:22;;38903:98;;;:::o;39007:99::-;39059:6;39093:5;39087:12;39077:22;;39007:99;;;:::o;39112:113::-;39182:4;39214;39209:3;39205:14;39197:22;;39112:113;;;:::o;39231:184::-;39330:11;39364:6;39359:3;39352:19;39404:4;39399:3;39395:14;39380:29;;39231:184;;;;:::o;39421:168::-;39504:11;39538:6;39533:3;39526:19;39578:4;39573:3;39569:14;39554:29;;39421:168;;;;:::o;39595:169::-;39679:11;39713:6;39708:3;39701:19;39753:4;39748:3;39744:14;39729:29;;39595:169;;;;:::o;39770:148::-;39872:11;39909:3;39894:18;;39770:148;;;;:::o;39924:305::-;39964:3;39983:20;40001:1;39983:20;:::i;:::-;39978:25;;40017:20;40035:1;40017:20;:::i;:::-;40012:25;;40171:1;40103:66;40099:74;40096:1;40093:81;40090:107;;;40177:18;;:::i;:::-;40090:107;40221:1;40218;40214:9;40207:16;;39924:305;;;;:::o;40235:185::-;40275:1;40292:20;40310:1;40292:20;:::i;:::-;40287:25;;40326:20;40344:1;40326:20;:::i;:::-;40321:25;;40365:1;40355:35;;40370:18;;:::i;:::-;40355:35;40412:1;40409;40405:9;40400:14;;40235:185;;;;:::o;40426:348::-;40466:7;40489:20;40507:1;40489:20;:::i;:::-;40484:25;;40523:20;40541:1;40523:20;:::i;:::-;40518:25;;40711:1;40643:66;40639:74;40636:1;40633:81;40628:1;40621:9;40614:17;40610:105;40607:131;;;40718:18;;:::i;:::-;40607:131;40766:1;40763;40759:9;40748:20;;40426:348;;;;:::o;40780:191::-;40820:4;40840:20;40858:1;40840:20;:::i;:::-;40835:25;;40874:20;40892:1;40874:20;:::i;:::-;40869:25;;40913:1;40910;40907:8;40904:34;;;40918:18;;:::i;:::-;40904:34;40963:1;40960;40956:9;40948:17;;40780:191;;;;:::o;40977:96::-;41014:7;41043:24;41061:5;41043:24;:::i;:::-;41032:35;;40977:96;;;:::o;41079:90::-;41113:7;41156:5;41149:13;41142:21;41131:32;;41079:90;;;:::o;41175:149::-;41211:7;41251:66;41244:5;41240:78;41229:89;;41175:149;;;:::o;41330:126::-;41367:7;41407:42;41400:5;41396:54;41385:65;;41330:126;;;:::o;41462:77::-;41499:7;41528:5;41517:16;;41462:77;;;:::o;41545:109::-;41581:7;41621:26;41614:5;41610:38;41599:49;;41545:109;;;:::o;41660:154::-;41744:6;41739:3;41734;41721:30;41806:1;41797:6;41792:3;41788:16;41781:27;41660:154;;;:::o;41820:307::-;41888:1;41898:113;41912:6;41909:1;41906:13;41898:113;;;41997:1;41992:3;41988:11;41982:18;41978:1;41973:3;41969:11;41962:39;41934:2;41931:1;41927:10;41922:15;;41898:113;;;42029:6;42026:1;42023:13;42020:101;;;42109:1;42100:6;42095:3;42091:16;42084:27;42020:101;41869:258;41820:307;;;:::o;42133:320::-;42177:6;42214:1;42208:4;42204:12;42194:22;;42261:1;42255:4;42251:12;42282:18;42272:81;;42338:4;42330:6;42326:17;42316:27;;42272:81;42400:2;42392:6;42389:14;42369:18;42366:38;42363:84;;;42419:18;;:::i;:::-;42363:84;42184:269;42133:320;;;:::o;42459:281::-;42542:27;42564:4;42542:27;:::i;:::-;42534:6;42530:40;42672:6;42660:10;42657:22;42636:18;42624:10;42621:34;42618:62;42615:88;;;42683:18;;:::i;:::-;42615:88;42723:10;42719:2;42712:22;42502:238;42459:281;;:::o;42746:233::-;42785:3;42808:24;42826:5;42808:24;:::i;:::-;42799:33;;42854:66;42847:5;42844:77;42841:103;;;42924:18;;:::i;:::-;42841:103;42971:1;42964:5;42960:13;42953:20;;42746:233;;;:::o;42985:79::-;43024:7;43053:5;43042:16;;42985:79;;;:::o;43070:176::-;43102:1;43119:20;43137:1;43119:20;:::i;:::-;43114:25;;43153:20;43171:1;43153:20;:::i;:::-;43148:25;;43192:1;43182:35;;43197:18;;:::i;:::-;43182:35;43238:1;43235;43231:9;43226:14;;43070:176;;;;:::o;43252:180::-;43300:77;43297:1;43290:88;43397:4;43394:1;43387:15;43421:4;43418:1;43411:15;43438:180;43486:77;43483:1;43476:88;43583:4;43580:1;43573:15;43607:4;43604:1;43597:15;43624:180;43672:77;43669:1;43662:88;43769:4;43766:1;43759:15;43793:4;43790:1;43783:15;43810:180;43858:77;43855:1;43848:88;43955:4;43952:1;43945:15;43979:4;43976:1;43969:15;43996:180;44044:77;44041:1;44034:88;44141:4;44138:1;44131:15;44165:4;44162:1;44155:15;44182:180;44230:77;44227:1;44220:88;44327:4;44324:1;44317:15;44351:4;44348:1;44341:15;44368:117;44477:1;44474;44467:12;44491:117;44600:1;44597;44590:12;44614:117;44723:1;44720;44713:12;44737:117;44846:1;44843;44836:12;44860:102;44901:6;44952:2;44948:7;44943:2;44936:5;44932:14;44928:28;44918:38;;44860:102;;;:::o;44968:173::-;45108:25;45104:1;45096:6;45092:14;45085:49;44968:173;:::o;45147:172::-;45287:24;45283:1;45275:6;45271:14;45264:48;45147:172;:::o;45325:182::-;45465:34;45461:1;45453:6;45449:14;45442:58;45325:182;:::o;45513:230::-;45653:34;45649:1;45641:6;45637:14;45630:58;45722:13;45717:2;45709:6;45705:15;45698:38;45513:230;:::o;45749:237::-;45889:34;45885:1;45877:6;45873:14;45866:58;45958:20;45953:2;45945:6;45941:15;45934:45;45749:237;:::o;45992:225::-;46132:34;46128:1;46120:6;46116:14;46109:58;46201:8;46196:2;46188:6;46184:15;46177:33;45992:225;:::o;46223:224::-;46363:34;46359:1;46351:6;46347:14;46340:58;46432:7;46427:2;46419:6;46415:15;46408:32;46223:224;:::o;46453:178::-;46593:30;46589:1;46581:6;46577:14;46570:54;46453:178;:::o;46637:221::-;46777:34;46773:1;46765:6;46761:14;46754:58;46846:4;46841:2;46833:6;46829:15;46822:29;46637:221;:::o;46864:223::-;47004:34;47000:1;46992:6;46988:14;46981:58;47073:6;47068:2;47060:6;47056:15;47049:31;46864:223;:::o;47093:175::-;47233:27;47229:1;47221:6;47217:14;47210:51;47093:175;:::o;47274:161::-;47414:13;47410:1;47402:6;47398:14;47391:37;47274:161;:::o;47441:228::-;47581:34;47577:1;47569:6;47565:14;47558:58;47650:11;47645:2;47637:6;47633:15;47626:36;47441:228;:::o;47675:221::-;47815:34;47811:1;47803:6;47799:14;47792:58;47884:4;47879:2;47871:6;47867:15;47860:29;47675:221;:::o;47902:249::-;48042:34;48038:1;48030:6;48026:14;48019:58;48111:32;48106:2;48098:6;48094:15;48087:57;47902:249;:::o;48157:182::-;48297:34;48293:1;48285:6;48281:14;48274:58;48157:182;:::o;48345:::-;48485:34;48481:1;48473:6;48469:14;48462:58;48345:182;:::o;48533:163::-;48673:15;48669:1;48661:6;48657:14;48650:39;48533:163;:::o;48702:234::-;48842:34;48838:1;48830:6;48826:14;48819:58;48911:17;48906:2;48898:6;48894:15;48887:42;48702:234;:::o;48942:174::-;49082:26;49078:1;49070:6;49066:14;49059:50;48942:174;:::o;49122:220::-;49262:34;49258:1;49250:6;49246:14;49239:58;49331:3;49326:2;49318:6;49314:15;49307:28;49122:220;:::o;49348:182::-;49488:34;49484:1;49476:6;49472:14;49465:58;49348:182;:::o;49536:177::-;49676:29;49672:1;49664:6;49660:14;49653:53;49536:177;:::o;49719:231::-;49859:34;49855:1;49847:6;49843:14;49836:58;49928:14;49923:2;49915:6;49911:15;49904:39;49719:231;:::o;49956:229::-;50096:34;50092:1;50084:6;50080:14;50073:58;50165:12;50160:2;50152:6;50148:15;50141:37;49956:229;:::o;50191:233::-;50331:34;50327:1;50319:6;50315:14;50308:58;50400:16;50395:2;50387:6;50383:15;50376:41;50191:233;:::o;50430:181::-;50570:33;50566:1;50558:6;50554:14;50547:57;50430:181;:::o;50617:175::-;50757:27;50753:1;50745:6;50741:14;50734:51;50617:175;:::o;50798:122::-;50871:24;50889:5;50871:24;:::i;:::-;50864:5;50861:35;50851:63;;50910:1;50907;50900:12;50851:63;50798:122;:::o;50926:116::-;50996:21;51011:5;50996:21;:::i;:::-;50989:5;50986:32;50976:60;;51032:1;51029;51022:12;50976:60;50926:116;:::o;51048:120::-;51120:23;51137:5;51120:23;:::i;:::-;51113:5;51110:34;51100:62;;51158:1;51155;51148:12;51100:62;51048:120;:::o;51174:122::-;51247:24;51265:5;51247:24;:::i;:::-;51240:5;51237:35;51227:63;;51286:1;51283;51276:12;51227:63;51174:122;:::o;51302:120::-;51374:23;51391:5;51374:23;:::i;:::-;51367:5;51364:34;51354:62;;51412:1;51409;51402:12;51354:62;51302:120;:::o
Swarm Source
ipfs://36b5ff519170ad3298ecdca1deb071c9d67998ecc305f79a7e53caa039489b86
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.