Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 EGG
Holders
201
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 EGGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTMinter
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-08 */ // File: operator-filter-registry/src/lib/Constants.sol pragma solidity ^0.8.17; address constant CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS = 0x000000000000AAeB6D7670E522A718067333cd4E; address constant CANONICAL_CORI_SUBSCRIPTION = 0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6; // File: operator-filter-registry/src/IOperatorFilterRegistry.sol pragma solidity ^0.8.13; interface IOperatorFilterRegistry { /** * @notice Returns true if operator is not filtered for a given token, either by address or codeHash. Also returns * true if supplied registrant address is not registered. */ function isOperatorAllowed(address registrant, address operator) external view returns (bool); /** * @notice Registers an address with the registry. May be called by address itself or by EIP-173 owner. */ function register(address registrant) external; /** * @notice Registers an address with the registry and "subscribes" to another address's filtered operators and codeHashes. */ function registerAndSubscribe(address registrant, address subscription) external; /** * @notice Registers an address with the registry and copies the filtered operators and codeHashes from another * address without subscribing. */ function registerAndCopyEntries(address registrant, address registrantToCopy) external; /** * @notice Unregisters an address with the registry and removes its subscription. May be called by address itself or by EIP-173 owner. * Note that this does not remove any filtered addresses or codeHashes. * Also note that any subscriptions to this registrant will still be active and follow the existing filtered addresses and codehashes. */ function unregister(address addr) external; /** * @notice Update an operator address for a registered address - when filtered is true, the operator is filtered. */ function updateOperator(address registrant, address operator, bool filtered) external; /** * @notice Update multiple operators for a registered address - when filtered is true, the operators will be filtered. Reverts on duplicates. */ function updateOperators(address registrant, address[] calldata operators, bool filtered) external; /** * @notice Update a codeHash for a registered address - when filtered is true, the codeHash is filtered. */ function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; /** * @notice Update multiple codeHashes for a registered address - when filtered is true, the codeHashes will be filtered. Reverts on duplicates. */ function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; /** * @notice Subscribe an address to another registrant's filtered operators and codeHashes. Will remove previous * subscription if present. * Note that accounts with subscriptions may go on to subscribe to other accounts - in this case, * subscriptions will not be forwarded. Instead the former subscription's existing entries will still be * used. */ function subscribe(address registrant, address registrantToSubscribe) external; /** * @notice Unsubscribe an address from its current subscribed registrant, and optionally copy its filtered operators and codeHashes. */ function unsubscribe(address registrant, bool copyExistingEntries) external; /** * @notice Get the subscription address of a given registrant, if any. */ function subscriptionOf(address addr) external returns (address registrant); /** * @notice Get the set of addresses subscribed to a given registrant. * Note that order is not guaranteed as updates are made. */ function subscribers(address registrant) external returns (address[] memory); /** * @notice Get the subscriber at a given index in the set of addresses subscribed to a given registrant. * Note that order is not guaranteed as updates are made. */ function subscriberAt(address registrant, uint256 index) external returns (address); /** * @notice Copy filtered operators and codeHashes from a different registrantToCopy to addr. */ function copyEntriesOf(address registrant, address registrantToCopy) external; /** * @notice Returns true if operator is filtered by a given address or its subscription. */ function isOperatorFiltered(address registrant, address operator) external returns (bool); /** * @notice Returns true if the hash of an address's code is filtered by a given address or its subscription. */ function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); /** * @notice Returns true if a codeHash is filtered by a given address or its subscription. */ function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); /** * @notice Returns a list of filtered operators for a given address or its subscription. */ function filteredOperators(address addr) external returns (address[] memory); /** * @notice Returns the set of filtered codeHashes for a given address or its subscription. * Note that order is not guaranteed as updates are made. */ function filteredCodeHashes(address addr) external returns (bytes32[] memory); /** * @notice Returns the filtered operator at the given index of the set of filtered operators for a given address or * its subscription. * Note that order is not guaranteed as updates are made. */ function filteredOperatorAt(address registrant, uint256 index) external returns (address); /** * @notice Returns the filtered codeHash at the given index of the list of filtered codeHashes for a given address or * its subscription. * Note that order is not guaranteed as updates are made. */ function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); /** * @notice Returns true if an address has registered */ function isRegistered(address addr) external returns (bool); /** * @dev Convenience method to compute the code hash of an arbitrary contract */ function codeHashOf(address addr) external returns (bytes32); } // File: operator-filter-registry/src/OperatorFilterer.sol pragma solidity ^0.8.13; /** * @title OperatorFilterer * @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another * registrant's entries in the OperatorFilterRegistry. * @dev This smart contract is meant to be inherited by token contracts so they can use the following: * - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods. * - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods. * Please note that if your token contract does not provide an owner with EIP-173, it must provide * administration methods on the contract itself to interact with the registry otherwise the subscription * will be locked to the options set during construction. */ abstract contract OperatorFilterer { /// @dev Emitted when an operator is not allowed. error OperatorNotAllowed(address operator); IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(CANONICAL_OPERATOR_FILTER_REGISTRY_ADDRESS); /// @dev The constructor that is called when the contract is being deployed. constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { // If an inheriting token contract is deployed to a network without the registry deployed, the modifier // will not revert, but the contract will need to be registered with the registry once it is deployed in // order for the modifier to filter addresses. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { if (subscribe) { OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { OPERATOR_FILTER_REGISTRY.register(address(this)); } } } } /** * @dev A helper function to check if an operator is allowed. */ modifier onlyAllowedOperator(address from) virtual { // Allow spending tokens from addresses with balance // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred // from an EOA. if (from != msg.sender) { _checkFilterOperator(msg.sender); } _; } /** * @dev A helper function to check if an operator approval is allowed. */ modifier onlyAllowedOperatorApproval(address operator) virtual { _checkFilterOperator(operator); _; } /** * @dev A helper function to check if an operator is allowed. */ function _checkFilterOperator(address operator) internal view virtual { // Check registry code length to facilitate testing in environments without a deployed registry. if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) { // under normal circumstances, this function will revert rather than return false, but inheriting contracts // may specify their own OperatorFilterRegistry implementations, which may behave differently if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) { revert OperatorNotAllowed(operator); } } } } // File: operator-filter-registry/src/DefaultOperatorFilterer.sol pragma solidity ^0.8.13; /** * @title DefaultOperatorFilterer * @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription. * @dev Please note that if your token contract does not provide an owner with EIP-173, it must provide * administration methods on the contract itself to interact with the registry otherwise the subscription * will be locked to the options set during construction. */ abstract contract DefaultOperatorFilterer is OperatorFilterer { /// @dev The constructor that is called when the contract is being deployed. constructor() OperatorFilterer(CANONICAL_CORI_SUBSCRIPTION, true) {} } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/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/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/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/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/AirportContract/airport.sol pragma solidity ^0.8.17; contract NFTMinter is ERC721, Ownable ,DefaultOperatorFilterer{ using Address for address; mapping(address => bool) private _savedAddresses; address[] private _userAddresses; uint64 public total = 222; string public baseUri; string public contractURI; constructor( string memory _tokenName, string memory _tokenSymbol, string memory _baseUri, string memory _contractURI ) ERC721(_tokenName, _tokenSymbol) { baseUri = _baseUri; contractURI = _contractURI; } function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) { super.setApprovalForAll(operator, approved); } function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) { super.approve(operator, tokenId); } function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) { super.safeTransferFrom(from, to, tokenId, data); } function saveUserAddresses(address[] memory userAddresses) public onlyOwner { require(userAddresses.length == total, "The number of addresses exceeds the upper limit"); require(_userAddresses.length == 0, "Airport address data is saved"); for (uint256 i = 0; i < userAddresses.length; i++) { address addr = userAddresses[i]; require(addr != address(0), "Invalid address"); require(!_savedAddresses[addr], "Address already saved"); _savedAddresses[addr] = true; _userAddresses.push(addr); } } function mintNFTs() public onlyOwner { for (uint256 i = 0; i < _userAddresses.length; i++) { _mint(_userAddresses[i], i + 1); } } function getSavedAddresses() public view returns (address[] memory) { return _userAddresses; } function getAllTokenHolders() public view returns (address[] memory) { address[] memory holders = new address[](total); for (uint256 i = 0; i < total; i++) { holders[i] = ownerOf(i + 1); } return holders; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "Metadata: nonexistent token"); require(bytes(baseUri).length > 0, "no set baseUri"); return string(abi.encodePacked(baseUri, Strings.toString(tokenId), ".json")); } function changeBaseURI(string memory baseURI_) public onlyOwner { baseUri = baseURI_; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"string","name":"_contractURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","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":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllTokenHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"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":"getSavedAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintNFTs","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"userAddresses","type":"address[]"}],"name":"saveUserAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"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"}]
Contract Creation Code
608060405260de600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055503480156200003b57600080fd5b50604051620048a8380380620048a8833981810160405281019062000061919062000546565b733cc6cdda760b79bafa08df41ecfa224f810dceb66001858581600090816200008b91906200087f565b5080600190816200009d91906200087f565b505050620000c0620000b4620002e560201b60201c565b620002ed60201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002b55780156200017b576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b815260040162000141929190620009ab565b600060405180830381600087803b1580156200015c57600080fd5b505af115801562000171573d6000803e3d6000fd5b50505050620002b4565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000235576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620001fb929190620009ab565b600060405180830381600087803b1580156200021657600080fd5b505af11580156200022b573d6000803e3d6000fd5b50505050620002b3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200027e9190620009d8565b600060405180830381600087803b1580156200029957600080fd5b505af1158015620002ae573d6000803e3d6000fd5b505050505b5b5b505081600a9081620002c891906200087f565b5080600b9081620002da91906200087f565b5050505050620009f5565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200041c82620003d1565b810181811067ffffffffffffffff821117156200043e576200043d620003e2565b5b80604052505050565b600062000453620003b3565b905062000461828262000411565b919050565b600067ffffffffffffffff821115620004845762000483620003e2565b5b6200048f82620003d1565b9050602081019050919050565b60005b83811015620004bc5780820151818401526020810190506200049f565b60008484015250505050565b6000620004df620004d98462000466565b62000447565b905082815260208101848484011115620004fe57620004fd620003cc565b5b6200050b8482856200049c565b509392505050565b600082601f8301126200052b576200052a620003c7565b5b81516200053d848260208601620004c8565b91505092915050565b60008060008060808587031215620005635762000562620003bd565b5b600085015167ffffffffffffffff811115620005845762000583620003c2565b5b620005928782880162000513565b945050602085015167ffffffffffffffff811115620005b657620005b5620003c2565b5b620005c48782880162000513565b935050604085015167ffffffffffffffff811115620005e857620005e7620003c2565b5b620005f68782880162000513565b925050606085015167ffffffffffffffff8111156200061a5762000619620003c2565b5b620006288782880162000513565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068757607f821691505b6020821081036200069d576200069c6200063f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006c8565b620007138683620006c8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007606200075a62000754846200072b565b62000735565b6200072b565b9050919050565b6000819050919050565b6200077c836200073f565b620007946200078b8262000767565b848454620006d5565b825550505050565b600090565b620007ab6200079c565b620007b881848462000771565b505050565b5b81811015620007e057620007d4600082620007a1565b600181019050620007be565b5050565b601f8211156200082f57620007f981620006a3565b6200080484620006b8565b8101602085101562000814578190505b6200082c6200082385620006b8565b830182620007bd565b50505b505050565b600082821c905092915050565b6000620008546000198460080262000834565b1980831691505092915050565b60006200086f838362000841565b9150826002028217905092915050565b6200088a8262000634565b67ffffffffffffffff811115620008a657620008a5620003e2565b5b620008b282546200066e565b620008bf828285620007e4565b600060209050601f831160018114620008f75760008415620008e2578287015190505b620008ee858262000861565b8655506200095e565b601f1984166200090786620006a3565b60005b8281101562000931578489015182556001820191506020850194506020810190506200090a565b868310156200095157848901516200094d601f89168262000841565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009938262000966565b9050919050565b620009a58162000986565b82525050565b6000604082019050620009c260008301856200099a565b620009d160208301846200099a565b9392505050565b6000602082019050620009ef60008301846200099a565b92915050565b613ea38062000a056000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80634af57f9d116100de5780639abc832011610097578063c87b56dd11610071578063c87b56dd14610400578063e8a3d48514610430578063e985e9c51461044e578063f2fde38b1461047e57610173565b80639abc8320146103aa578063a22cb465146103c8578063b88d4fde146103e457610173565b80634af57f9d146102fa5780636352211e1461030457806370a0823114610334578063715018a6146103645780638da5cb5b1461036e57806395d89b411461038c57610173565b80632ddbd13a116101305780632ddbd13a1461024c57806332fb56ca1461026a57806339a0c6f9146102885780634143e1ab146102a457806341f43434146102c057806342842e0e146102de57610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780631f2da9cf1461021257806323b872dd14610230575b600080fd5b610192600480360381019061018d91906123ed565b61049a565b60405161019f9190612435565b60405180910390f35b6101b061057c565b6040516101bd91906124e0565b60405180910390f35b6101e060048036038101906101db9190612538565b61060e565b6040516101ed91906125a6565b60405180910390f35b610210600480360381019061020b91906125ed565b610693565b005b61021a6106ac565b60405161022791906126eb565b60405180910390f35b61024a6004803603810190610245919061270d565b61073a565b005b610254610789565b6040516102619190612783565b60405180910390f35b6102726107a3565b60405161027f91906126eb565b60405180910390f35b6102a2600480360381019061029d91906128d3565b6108ba565b005b6102be60048036038101906102b991906129e4565b610949565b005b6102c8610c6a565b6040516102d59190612a8c565b60405180910390f35b6102f860048036038101906102f3919061270d565b610c7c565b005b610302610ccb565b005b61031e60048036038101906103199190612538565b610dc1565b60405161032b91906125a6565b60405180910390f35b61034e60048036038101906103499190612aa7565b610e72565b60405161035b9190612ae3565b60405180910390f35b61036c610f29565b005b610376610fb1565b60405161038391906125a6565b60405180910390f35b610394610fdb565b6040516103a191906124e0565b60405180910390f35b6103b261106d565b6040516103bf91906124e0565b60405180910390f35b6103e260048036038101906103dd9190612b2a565b6110fb565b005b6103fe60048036038101906103f99190612c0b565b611114565b005b61041a60048036038101906104159190612538565b611165565b60405161042791906124e0565b60405180910390f35b610438611232565b60405161044591906124e0565b60405180910390f35b61046860048036038101906104639190612c8e565b6112c0565b6040516104759190612435565b60405180910390f35b61049860048036038101906104939190612aa7565b611354565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061057557506105748261144b565b5b9050919050565b60606000805461058b90612cfd565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790612cfd565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b6000610619826114b5565b610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f90612da0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8161069d81611521565b6106a7838361161e565b505050565b6060600880548060200260200160405190810160405280929190818152602001828054801561073057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116106e6575b5050505050905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107785761077733611521565b5b610783848484611735565b50505050565b600960009054906101000a900467ffffffffffffffff1681565b60606000600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff8111156107e1576107e06127a8565b5b60405190808252806020026020018201604052801561080f5781602001602082028036833780820191505090505b50905060005b600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff168110156108b25761085260018261084d9190612def565b610dc1565b82828151811061086557610864612e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806108aa90612e52565b915050610815565b508091505090565b6108c2611795565b73ffffffffffffffffffffffffffffffffffffffff166108e0610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092d90612ee6565b60405180910390fd5b80600a908161094591906130a8565b5050565b610951611795565b73ffffffffffffffffffffffffffffffffffffffff1661096f610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90612ee6565b60405180910390fd5b600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff16815114610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906131ec565b60405180910390fd5b600060088054905014610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6790613258565b60405180910390fd5b60005b8151811015610c66576000828281518110610a9157610a90612e23565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906132c4565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613330565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080610c5e90612e52565b915050610a73565b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cba57610cb933611521565b5b610cc584848461179d565b50505050565b610cd3611795565b73ffffffffffffffffffffffffffffffffffffffff16610cf1610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90612ee6565b60405180910390fd5b60005b600880549050811015610dbe57610dab60088281548110610d6e57610d6d612e23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600183610da69190612def565b6117bd565b8080610db690612e52565b915050610d4a565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e60906133c2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990613454565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f31611795565b73ffffffffffffffffffffffffffffffffffffffff16610f4f610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90612ee6565b60405180910390fd5b610faf600061198a565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fea90612cfd565b80601f016020809104026020016040519081016040528092919081815260200182805461101690612cfd565b80156110635780601f1061103857610100808354040283529160200191611063565b820191906000526020600020905b81548152906001019060200180831161104657829003601f168201915b5050505050905090565b600a805461107a90612cfd565b80601f01602080910402602001604051908101604052809291908181526020018280546110a690612cfd565b80156110f35780601f106110c8576101008083540402835291602001916110f3565b820191906000526020600020905b8154815290600101906020018083116110d657829003601f168201915b505050505081565b8161110581611521565b61110f8383611a50565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111525761115133611521565b5b61115e85858585611a66565b5050505050565b6060611170826114b5565b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a6906134c0565b60405180910390fd5b6000600a80546111be90612cfd565b905011611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061352c565b60405180910390fd5b600a61120b83611ac8565b60405160200161121c929190613657565b6040516020818303038152906040529050919050565b600b805461123f90612cfd565b80601f016020809104026020016040519081016040528092919081815260200182805461126b90612cfd565b80156112b85780601f1061128d576101008083540402835291602001916112b8565b820191906000526020600020905b81548152906001019060200180831161129b57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61135c611795565b73ffffffffffffffffffffffffffffffffffffffff1661137a610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790612ee6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906136f8565b60405180910390fd5b6114488161198a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111561161b576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611598929190613718565b602060405180830381865afa1580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d99190613756565b61161a57806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161161191906125a6565b60405180910390fd5b5b50565b600061162982610dc1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906137f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166116b8611795565b73ffffffffffffffffffffffffffffffffffffffff1614806116e757506116e6816116e1611795565b6112c0565b5b611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90613887565b60405180910390fd5b6117308383611c28565b505050565b611746611740611795565b82611ce1565b611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613919565b60405180910390fd5b611790838383611dbf565b505050565b600033905090565b6117b883838360405180602001604052806000815250611114565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390613985565b60405180910390fd5b611835816114b5565b15611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c906139f1565b60405180910390fd5b6118816000838361201a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d19190612def565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a62611a5b611795565b838361201f565b5050565b611a77611a71611795565b83611ce1565b611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90613919565b60405180910390fd5b611ac28484848461218b565b50505050565b606060008203611b0f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c23565b600082905060005b60008214611b41578080611b2a90612e52565b915050600a82611b3a9190613a40565b9150611b17565b60008167ffffffffffffffff811115611b5d57611b5c6127a8565b5b6040519080825280601f01601f191660200182016040528015611b8f5781602001600182028036833780820191505090505b5090505b60008514611c1c57600182611ba89190613a71565b9150600a85611bb79190613aa5565b6030611bc39190612def565b60f81b818381518110611bd957611bd8612e23565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c159190613a40565b9450611b93565b8093505050505b919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c9b83610dc1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cec826114b5565b611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613b48565b60405180910390fd5b6000611d3683610dc1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611da557508373ffffffffffffffffffffffffffffffffffffffff16611d8d8461060e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611db65750611db581856112c0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ddf82610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90613bda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90613c6c565b60405180910390fd5b611eaf83838361201a565b611eba600082611c28565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0a9190613a71565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f619190612def565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490613cd8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161217e9190612435565b60405180910390a3505050565b612196848484611dbf565b6121a2848484846121e7565b6121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890613d6a565b60405180910390fd5b50505050565b60006122088473ffffffffffffffffffffffffffffffffffffffff1661236e565b15612361578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612231611795565b8786866040518563ffffffff1660e01b81526004016122539493929190613ddf565b6020604051808303816000875af192505050801561228f57506040513d601f19601f8201168201806040525081019061228c9190613e40565b60015b612311573d80600081146122bf576040519150601f19603f3d011682016040523d82523d6000602084013e6122c4565b606091505b506000815103612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613d6a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612366565b600190505b949350505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123ca81612395565b81146123d557600080fd5b50565b6000813590506123e7816123c1565b92915050565b6000602082840312156124035761240261238b565b5b6000612411848285016123d8565b91505092915050565b60008115159050919050565b61242f8161241a565b82525050565b600060208201905061244a6000830184612426565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561248a57808201518184015260208101905061246f565b60008484015250505050565b6000601f19601f8301169050919050565b60006124b282612450565b6124bc818561245b565b93506124cc81856020860161246c565b6124d581612496565b840191505092915050565b600060208201905081810360008301526124fa81846124a7565b905092915050565b6000819050919050565b61251581612502565b811461252057600080fd5b50565b6000813590506125328161250c565b92915050565b60006020828403121561254e5761254d61238b565b5b600061255c84828501612523565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061259082612565565b9050919050565b6125a081612585565b82525050565b60006020820190506125bb6000830184612597565b92915050565b6125ca81612585565b81146125d557600080fd5b50565b6000813590506125e7816125c1565b92915050565b600080604083850312156126045761260361238b565b5b6000612612858286016125d8565b925050602061262385828601612523565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61266281612585565b82525050565b60006126748383612659565b60208301905092915050565b6000602082019050919050565b60006126988261262d565b6126a28185612638565b93506126ad83612649565b8060005b838110156126de5781516126c58882612668565b97506126d083612680565b9250506001810190506126b1565b5085935050505092915050565b60006020820190508181036000830152612705818461268d565b905092915050565b6000806000606084860312156127265761272561238b565b5b6000612734868287016125d8565b9350506020612745868287016125d8565b925050604061275686828701612523565b9150509250925092565b600067ffffffffffffffff82169050919050565b61277d81612760565b82525050565b60006020820190506127986000830184612774565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127e082612496565b810181811067ffffffffffffffff821117156127ff576127fe6127a8565b5b80604052505050565b6000612812612381565b905061281e82826127d7565b919050565b600067ffffffffffffffff82111561283e5761283d6127a8565b5b61284782612496565b9050602081019050919050565b82818337600083830152505050565b600061287661287184612823565b612808565b905082815260208101848484011115612892576128916127a3565b5b61289d848285612854565b509392505050565b600082601f8301126128ba576128b961279e565b5b81356128ca848260208601612863565b91505092915050565b6000602082840312156128e9576128e861238b565b5b600082013567ffffffffffffffff81111561290757612906612390565b5b612913848285016128a5565b91505092915050565b600067ffffffffffffffff821115612937576129366127a8565b5b602082029050602081019050919050565b600080fd5b600061296061295b8461291c565b612808565b9050808382526020820190506020840283018581111561298357612982612948565b5b835b818110156129ac578061299888826125d8565b845260208401935050602081019050612985565b5050509392505050565b600082601f8301126129cb576129ca61279e565b5b81356129db84826020860161294d565b91505092915050565b6000602082840312156129fa576129f961238b565b5b600082013567ffffffffffffffff811115612a1857612a17612390565b5b612a24848285016129b6565b91505092915050565b6000819050919050565b6000612a52612a4d612a4884612565565b612a2d565b612565565b9050919050565b6000612a6482612a37565b9050919050565b6000612a7682612a59565b9050919050565b612a8681612a6b565b82525050565b6000602082019050612aa16000830184612a7d565b92915050565b600060208284031215612abd57612abc61238b565b5b6000612acb848285016125d8565b91505092915050565b612add81612502565b82525050565b6000602082019050612af86000830184612ad4565b92915050565b612b078161241a565b8114612b1257600080fd5b50565b600081359050612b2481612afe565b92915050565b60008060408385031215612b4157612b4061238b565b5b6000612b4f858286016125d8565b9250506020612b6085828601612b15565b9150509250929050565b600067ffffffffffffffff821115612b8557612b846127a8565b5b612b8e82612496565b9050602081019050919050565b6000612bae612ba984612b6a565b612808565b905082815260208101848484011115612bca57612bc96127a3565b5b612bd5848285612854565b509392505050565b600082601f830112612bf257612bf161279e565b5b8135612c02848260208601612b9b565b91505092915050565b60008060008060808587031215612c2557612c2461238b565b5b6000612c33878288016125d8565b9450506020612c44878288016125d8565b9350506040612c5587828801612523565b925050606085013567ffffffffffffffff811115612c7657612c75612390565b5b612c8287828801612bdd565b91505092959194509250565b60008060408385031215612ca557612ca461238b565b5b6000612cb3858286016125d8565b9250506020612cc4858286016125d8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d1557607f821691505b602082108103612d2857612d27612cce565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612d8a602c8361245b565b9150612d9582612d2e565b604082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dfa82612502565b9150612e0583612502565b9250828201905080821115612e1d57612e1c612dc0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612e5d82612502565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e8f57612e8e612dc0565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ed060208361245b565b9150612edb82612e9a565b602082019050919050565b60006020820190508181036000830152612eff81612ec3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612f687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f2b565b612f728683612f2b565b95508019841693508086168417925050509392505050565b6000612fa5612fa0612f9b84612502565b612a2d565b612502565b9050919050565b6000819050919050565b612fbf83612f8a565b612fd3612fcb82612fac565b848454612f38565b825550505050565b600090565b612fe8612fdb565b612ff3818484612fb6565b505050565b5b818110156130175761300c600082612fe0565b600181019050612ff9565b5050565b601f82111561305c5761302d81612f06565b61303684612f1b565b81016020851015613045578190505b61305961305185612f1b565b830182612ff8565b50505b505050565b600082821c905092915050565b600061307f60001984600802613061565b1980831691505092915050565b6000613098838361306e565b9150826002028217905092915050565b6130b182612450565b67ffffffffffffffff8111156130ca576130c96127a8565b5b6130d48254612cfd565b6130df82828561301b565b600060209050601f8311600181146131125760008415613100578287015190505b61310a858261308c565b865550613172565b601f19841661312086612f06565b60005b8281101561314857848901518255600182019150602085019450602081019050613123565b868310156131655784890151613161601f89168261306e565b8355505b6001600288020188555050505b505050505050565b7f546865206e756d626572206f662061646472657373657320657863656564732060008201527f746865207570706572206c696d69740000000000000000000000000000000000602082015250565b60006131d6602f8361245b565b91506131e18261317a565b604082019050919050565b60006020820190508181036000830152613205816131c9565b9050919050565b7f416972706f727420616464726573732064617461206973207361766564000000600082015250565b6000613242601d8361245b565b915061324d8261320c565b602082019050919050565b6000602082019050818103600083015261327181613235565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006132ae600f8361245b565b91506132b982613278565b602082019050919050565b600060208201905081810360008301526132dd816132a1565b9050919050565b7f4164647265737320616c72656164792073617665640000000000000000000000600082015250565b600061331a60158361245b565b9150613325826132e4565b602082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006133ac60298361245b565b91506133b782613350565b604082019050919050565b600060208201905081810360008301526133db8161339f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061343e602a8361245b565b9150613449826133e2565b604082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f4d657461646174613a206e6f6e6578697374656e7420746f6b656e0000000000600082015250565b60006134aa601b8361245b565b91506134b582613474565b602082019050919050565b600060208201905081810360008301526134d98161349d565b9050919050565b7f6e6f207365742062617365557269000000000000000000000000000000000000600082015250565b6000613516600e8361245b565b9150613521826134e0565b602082019050919050565b6000602082019050818103600083015261354581613509565b9050919050565b600081905092915050565b6000815461356481612cfd565b61356e818661354c565b94506001821660008114613589576001811461359e576135d1565b60ff19831686528115158202860193506135d1565b6135a785612f06565b60005b838110156135c9578154818901526001820191506020810190506135aa565b838801955050505b50505092915050565b60006135e582612450565b6135ef818561354c565b93506135ff81856020860161246c565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061364160058361354c565b915061364c8261360b565b600582019050919050565b60006136638285613557565b915061366f82846135da565b915061367a82613634565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136e260268361245b565b91506136ed82613686565b604082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b600060408201905061372d6000830185612597565b61373a6020830184612597565b9392505050565b60008151905061375081612afe565b92915050565b60006020828403121561376c5761376b61238b565b5b600061377a84828501613741565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006137df60218361245b565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061387160388361245b565b915061387c82613815565b604082019050919050565b600060208201905081810360008301526138a081613864565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061390360318361245b565b915061390e826138a7565b604082019050919050565b60006020820190508181036000830152613932816138f6565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061396f60208361245b565b915061397a82613939565b602082019050919050565b6000602082019050818103600083015261399e81613962565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006139db601c8361245b565b91506139e6826139a5565b602082019050919050565b60006020820190508181036000830152613a0a816139ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a4b82612502565b9150613a5683612502565b925082613a6657613a65613a11565b5b828204905092915050565b6000613a7c82612502565b9150613a8783612502565b9250828203905081811115613a9f57613a9e612dc0565b5b92915050565b6000613ab082612502565b9150613abb83612502565b925082613acb57613aca613a11565b5b828206905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b32602c8361245b565b9150613b3d82613ad6565b604082019050919050565b60006020820190508181036000830152613b6181613b25565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613bc460298361245b565b9150613bcf82613b68565b604082019050919050565b60006020820190508181036000830152613bf381613bb7565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c5660248361245b565b9150613c6182613bfa565b604082019050919050565b60006020820190508181036000830152613c8581613c49565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613cc260198361245b565b9150613ccd82613c8c565b602082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d5460328361245b565b9150613d5f82613cf8565b604082019050919050565b60006020820190508181036000830152613d8381613d47565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613db182613d8a565b613dbb8185613d95565b9350613dcb81856020860161246c565b613dd481612496565b840191505092915050565b6000608082019050613df46000830187612597565b613e016020830186612597565b613e0e6040830185612ad4565b8181036060830152613e208184613da6565b905095945050505050565b600081519050613e3a816123c1565b92915050565b600060208284031215613e5657613e5561238b565b5b6000613e6484828501613e2b565b9150509291505056fea2646970667358221220894330634a8a6fb566e4d592509cce934b96ca9f0d5f042632896f225160272d64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000c4655433a2054484520454747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034547470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a68747470733a2f2f666f7274756e65756e69636f726e2e6d7970696e6174612e636c6f75642f697066732f516d5233444e76616176567655616975453535737a366869596a45456366376861644d62567850314e4e6a4a79482f000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f666f7274756e65756e69636f726e2e6d7970696e6174612e636c6f75642f697066732f516d55373946474a32653739534374324769444761636e533857514c424c656d7a536e6348474d5a68446663786900000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80634af57f9d116100de5780639abc832011610097578063c87b56dd11610071578063c87b56dd14610400578063e8a3d48514610430578063e985e9c51461044e578063f2fde38b1461047e57610173565b80639abc8320146103aa578063a22cb465146103c8578063b88d4fde146103e457610173565b80634af57f9d146102fa5780636352211e1461030457806370a0823114610334578063715018a6146103645780638da5cb5b1461036e57806395d89b411461038c57610173565b80632ddbd13a116101305780632ddbd13a1461024c57806332fb56ca1461026a57806339a0c6f9146102885780634143e1ab146102a457806341f43434146102c057806342842e0e146102de57610173565b806301ffc9a71461017857806306fdde03146101a8578063081812fc146101c6578063095ea7b3146101f65780631f2da9cf1461021257806323b872dd14610230575b600080fd5b610192600480360381019061018d91906123ed565b61049a565b60405161019f9190612435565b60405180910390f35b6101b061057c565b6040516101bd91906124e0565b60405180910390f35b6101e060048036038101906101db9190612538565b61060e565b6040516101ed91906125a6565b60405180910390f35b610210600480360381019061020b91906125ed565b610693565b005b61021a6106ac565b60405161022791906126eb565b60405180910390f35b61024a6004803603810190610245919061270d565b61073a565b005b610254610789565b6040516102619190612783565b60405180910390f35b6102726107a3565b60405161027f91906126eb565b60405180910390f35b6102a2600480360381019061029d91906128d3565b6108ba565b005b6102be60048036038101906102b991906129e4565b610949565b005b6102c8610c6a565b6040516102d59190612a8c565b60405180910390f35b6102f860048036038101906102f3919061270d565b610c7c565b005b610302610ccb565b005b61031e60048036038101906103199190612538565b610dc1565b60405161032b91906125a6565b60405180910390f35b61034e60048036038101906103499190612aa7565b610e72565b60405161035b9190612ae3565b60405180910390f35b61036c610f29565b005b610376610fb1565b60405161038391906125a6565b60405180910390f35b610394610fdb565b6040516103a191906124e0565b60405180910390f35b6103b261106d565b6040516103bf91906124e0565b60405180910390f35b6103e260048036038101906103dd9190612b2a565b6110fb565b005b6103fe60048036038101906103f99190612c0b565b611114565b005b61041a60048036038101906104159190612538565b611165565b60405161042791906124e0565b60405180910390f35b610438611232565b60405161044591906124e0565b60405180910390f35b61046860048036038101906104639190612c8e565b6112c0565b6040516104759190612435565b60405180910390f35b61049860048036038101906104939190612aa7565b611354565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061057557506105748261144b565b5b9050919050565b60606000805461058b90612cfd565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790612cfd565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b5050505050905090565b6000610619826114b5565b610658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f90612da0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8161069d81611521565b6106a7838361161e565b505050565b6060600880548060200260200160405190810160405280929190818152602001828054801561073057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116106e6575b5050505050905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107785761077733611521565b5b610783848484611735565b50505050565b600960009054906101000a900467ffffffffffffffff1681565b60606000600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff8111156107e1576107e06127a8565b5b60405190808252806020026020018201604052801561080f5781602001602082028036833780820191505090505b50905060005b600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff168110156108b25761085260018261084d9190612def565b610dc1565b82828151811061086557610864612e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806108aa90612e52565b915050610815565b508091505090565b6108c2611795565b73ffffffffffffffffffffffffffffffffffffffff166108e0610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092d90612ee6565b60405180910390fd5b80600a908161094591906130a8565b5050565b610951611795565b73ffffffffffffffffffffffffffffffffffffffff1661096f610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90612ee6565b60405180910390fd5b600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff16815114610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906131ec565b60405180910390fd5b600060088054905014610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6790613258565b60405180910390fd5b60005b8151811015610c66576000828281518110610a9157610a90612e23565b5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906132c4565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90613330565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080610c5e90612e52565b915050610a73565b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cba57610cb933611521565b5b610cc584848461179d565b50505050565b610cd3611795565b73ffffffffffffffffffffffffffffffffffffffff16610cf1610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90612ee6565b60405180910390fd5b60005b600880549050811015610dbe57610dab60088281548110610d6e57610d6d612e23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600183610da69190612def565b6117bd565b8080610db690612e52565b915050610d4a565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e60906133c2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed990613454565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f31611795565b73ffffffffffffffffffffffffffffffffffffffff16610f4f610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c90612ee6565b60405180910390fd5b610faf600061198a565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fea90612cfd565b80601f016020809104026020016040519081016040528092919081815260200182805461101690612cfd565b80156110635780601f1061103857610100808354040283529160200191611063565b820191906000526020600020905b81548152906001019060200180831161104657829003601f168201915b5050505050905090565b600a805461107a90612cfd565b80601f01602080910402602001604051908101604052809291908181526020018280546110a690612cfd565b80156110f35780601f106110c8576101008083540402835291602001916110f3565b820191906000526020600020905b8154815290600101906020018083116110d657829003601f168201915b505050505081565b8161110581611521565b61110f8383611a50565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111525761115133611521565b5b61115e85858585611a66565b5050505050565b6060611170826114b5565b6111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a6906134c0565b60405180910390fd5b6000600a80546111be90612cfd565b905011611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061352c565b60405180910390fd5b600a61120b83611ac8565b60405160200161121c929190613657565b6040516020818303038152906040529050919050565b600b805461123f90612cfd565b80601f016020809104026020016040519081016040528092919081815260200182805461126b90612cfd565b80156112b85780601f1061128d576101008083540402835291602001916112b8565b820191906000526020600020905b81548152906001019060200180831161129b57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61135c611795565b73ffffffffffffffffffffffffffffffffffffffff1661137a610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146113d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c790612ee6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906136f8565b60405180910390fd5b6114488161198a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111561161b576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611598929190613718565b602060405180830381865afa1580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d99190613756565b61161a57806040517fede71dcc00000000000000000000000000000000000000000000000000000000815260040161161191906125a6565b60405180910390fd5b5b50565b600061162982610dc1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611690906137f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166116b8611795565b73ffffffffffffffffffffffffffffffffffffffff1614806116e757506116e6816116e1611795565b6112c0565b5b611726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171d90613887565b60405180910390fd5b6117308383611c28565b505050565b611746611740611795565b82611ce1565b611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613919565b60405180910390fd5b611790838383611dbf565b505050565b600033905090565b6117b883838360405180602001604052806000815250611114565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390613985565b60405180910390fd5b611835816114b5565b15611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c906139f1565b60405180910390fd5b6118816000838361201a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d19190612def565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a62611a5b611795565b838361201f565b5050565b611a77611a71611795565b83611ce1565b611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad90613919565b60405180910390fd5b611ac28484848461218b565b50505050565b606060008203611b0f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c23565b600082905060005b60008214611b41578080611b2a90612e52565b915050600a82611b3a9190613a40565b9150611b17565b60008167ffffffffffffffff811115611b5d57611b5c6127a8565b5b6040519080825280601f01601f191660200182016040528015611b8f5781602001600182028036833780820191505090505b5090505b60008514611c1c57600182611ba89190613a71565b9150600a85611bb79190613aa5565b6030611bc39190612def565b60f81b818381518110611bd957611bd8612e23565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c159190613a40565b9450611b93565b8093505050505b919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c9b83610dc1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cec826114b5565b611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613b48565b60405180910390fd5b6000611d3683610dc1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611da557508373ffffffffffffffffffffffffffffffffffffffff16611d8d8461060e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611db65750611db581856112c0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ddf82610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90613bda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b90613c6c565b60405180910390fd5b611eaf83838361201a565b611eba600082611c28565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0a9190613a71565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f619190612def565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490613cd8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161217e9190612435565b60405180910390a3505050565b612196848484611dbf565b6121a2848484846121e7565b6121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890613d6a565b60405180910390fd5b50505050565b60006122088473ffffffffffffffffffffffffffffffffffffffff1661236e565b15612361578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612231611795565b8786866040518563ffffffff1660e01b81526004016122539493929190613ddf565b6020604051808303816000875af192505050801561228f57506040513d601f19601f8201168201806040525081019061228c9190613e40565b60015b612311573d80600081146122bf576040519150601f19603f3d011682016040523d82523d6000602084013e6122c4565b606091505b506000815103612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613d6a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612366565b600190505b949350505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123ca81612395565b81146123d557600080fd5b50565b6000813590506123e7816123c1565b92915050565b6000602082840312156124035761240261238b565b5b6000612411848285016123d8565b91505092915050565b60008115159050919050565b61242f8161241a565b82525050565b600060208201905061244a6000830184612426565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561248a57808201518184015260208101905061246f565b60008484015250505050565b6000601f19601f8301169050919050565b60006124b282612450565b6124bc818561245b565b93506124cc81856020860161246c565b6124d581612496565b840191505092915050565b600060208201905081810360008301526124fa81846124a7565b905092915050565b6000819050919050565b61251581612502565b811461252057600080fd5b50565b6000813590506125328161250c565b92915050565b60006020828403121561254e5761254d61238b565b5b600061255c84828501612523565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061259082612565565b9050919050565b6125a081612585565b82525050565b60006020820190506125bb6000830184612597565b92915050565b6125ca81612585565b81146125d557600080fd5b50565b6000813590506125e7816125c1565b92915050565b600080604083850312156126045761260361238b565b5b6000612612858286016125d8565b925050602061262385828601612523565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61266281612585565b82525050565b60006126748383612659565b60208301905092915050565b6000602082019050919050565b60006126988261262d565b6126a28185612638565b93506126ad83612649565b8060005b838110156126de5781516126c58882612668565b97506126d083612680565b9250506001810190506126b1565b5085935050505092915050565b60006020820190508181036000830152612705818461268d565b905092915050565b6000806000606084860312156127265761272561238b565b5b6000612734868287016125d8565b9350506020612745868287016125d8565b925050604061275686828701612523565b9150509250925092565b600067ffffffffffffffff82169050919050565b61277d81612760565b82525050565b60006020820190506127986000830184612774565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127e082612496565b810181811067ffffffffffffffff821117156127ff576127fe6127a8565b5b80604052505050565b6000612812612381565b905061281e82826127d7565b919050565b600067ffffffffffffffff82111561283e5761283d6127a8565b5b61284782612496565b9050602081019050919050565b82818337600083830152505050565b600061287661287184612823565b612808565b905082815260208101848484011115612892576128916127a3565b5b61289d848285612854565b509392505050565b600082601f8301126128ba576128b961279e565b5b81356128ca848260208601612863565b91505092915050565b6000602082840312156128e9576128e861238b565b5b600082013567ffffffffffffffff81111561290757612906612390565b5b612913848285016128a5565b91505092915050565b600067ffffffffffffffff821115612937576129366127a8565b5b602082029050602081019050919050565b600080fd5b600061296061295b8461291c565b612808565b9050808382526020820190506020840283018581111561298357612982612948565b5b835b818110156129ac578061299888826125d8565b845260208401935050602081019050612985565b5050509392505050565b600082601f8301126129cb576129ca61279e565b5b81356129db84826020860161294d565b91505092915050565b6000602082840312156129fa576129f961238b565b5b600082013567ffffffffffffffff811115612a1857612a17612390565b5b612a24848285016129b6565b91505092915050565b6000819050919050565b6000612a52612a4d612a4884612565565b612a2d565b612565565b9050919050565b6000612a6482612a37565b9050919050565b6000612a7682612a59565b9050919050565b612a8681612a6b565b82525050565b6000602082019050612aa16000830184612a7d565b92915050565b600060208284031215612abd57612abc61238b565b5b6000612acb848285016125d8565b91505092915050565b612add81612502565b82525050565b6000602082019050612af86000830184612ad4565b92915050565b612b078161241a565b8114612b1257600080fd5b50565b600081359050612b2481612afe565b92915050565b60008060408385031215612b4157612b4061238b565b5b6000612b4f858286016125d8565b9250506020612b6085828601612b15565b9150509250929050565b600067ffffffffffffffff821115612b8557612b846127a8565b5b612b8e82612496565b9050602081019050919050565b6000612bae612ba984612b6a565b612808565b905082815260208101848484011115612bca57612bc96127a3565b5b612bd5848285612854565b509392505050565b600082601f830112612bf257612bf161279e565b5b8135612c02848260208601612b9b565b91505092915050565b60008060008060808587031215612c2557612c2461238b565b5b6000612c33878288016125d8565b9450506020612c44878288016125d8565b9350506040612c5587828801612523565b925050606085013567ffffffffffffffff811115612c7657612c75612390565b5b612c8287828801612bdd565b91505092959194509250565b60008060408385031215612ca557612ca461238b565b5b6000612cb3858286016125d8565b9250506020612cc4858286016125d8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d1557607f821691505b602082108103612d2857612d27612cce565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612d8a602c8361245b565b9150612d9582612d2e565b604082019050919050565b60006020820190508181036000830152612db981612d7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dfa82612502565b9150612e0583612502565b9250828201905080821115612e1d57612e1c612dc0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612e5d82612502565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e8f57612e8e612dc0565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ed060208361245b565b9150612edb82612e9a565b602082019050919050565b60006020820190508181036000830152612eff81612ec3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612f687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612f2b565b612f728683612f2b565b95508019841693508086168417925050509392505050565b6000612fa5612fa0612f9b84612502565b612a2d565b612502565b9050919050565b6000819050919050565b612fbf83612f8a565b612fd3612fcb82612fac565b848454612f38565b825550505050565b600090565b612fe8612fdb565b612ff3818484612fb6565b505050565b5b818110156130175761300c600082612fe0565b600181019050612ff9565b5050565b601f82111561305c5761302d81612f06565b61303684612f1b565b81016020851015613045578190505b61305961305185612f1b565b830182612ff8565b50505b505050565b600082821c905092915050565b600061307f60001984600802613061565b1980831691505092915050565b6000613098838361306e565b9150826002028217905092915050565b6130b182612450565b67ffffffffffffffff8111156130ca576130c96127a8565b5b6130d48254612cfd565b6130df82828561301b565b600060209050601f8311600181146131125760008415613100578287015190505b61310a858261308c565b865550613172565b601f19841661312086612f06565b60005b8281101561314857848901518255600182019150602085019450602081019050613123565b868310156131655784890151613161601f89168261306e565b8355505b6001600288020188555050505b505050505050565b7f546865206e756d626572206f662061646472657373657320657863656564732060008201527f746865207570706572206c696d69740000000000000000000000000000000000602082015250565b60006131d6602f8361245b565b91506131e18261317a565b604082019050919050565b60006020820190508181036000830152613205816131c9565b9050919050565b7f416972706f727420616464726573732064617461206973207361766564000000600082015250565b6000613242601d8361245b565b915061324d8261320c565b602082019050919050565b6000602082019050818103600083015261327181613235565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006132ae600f8361245b565b91506132b982613278565b602082019050919050565b600060208201905081810360008301526132dd816132a1565b9050919050565b7f4164647265737320616c72656164792073617665640000000000000000000000600082015250565b600061331a60158361245b565b9150613325826132e4565b602082019050919050565b600060208201905081810360008301526133498161330d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006133ac60298361245b565b91506133b782613350565b604082019050919050565b600060208201905081810360008301526133db8161339f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061343e602a8361245b565b9150613449826133e2565b604082019050919050565b6000602082019050818103600083015261346d81613431565b9050919050565b7f4d657461646174613a206e6f6e6578697374656e7420746f6b656e0000000000600082015250565b60006134aa601b8361245b565b91506134b582613474565b602082019050919050565b600060208201905081810360008301526134d98161349d565b9050919050565b7f6e6f207365742062617365557269000000000000000000000000000000000000600082015250565b6000613516600e8361245b565b9150613521826134e0565b602082019050919050565b6000602082019050818103600083015261354581613509565b9050919050565b600081905092915050565b6000815461356481612cfd565b61356e818661354c565b94506001821660008114613589576001811461359e576135d1565b60ff19831686528115158202860193506135d1565b6135a785612f06565b60005b838110156135c9578154818901526001820191506020810190506135aa565b838801955050505b50505092915050565b60006135e582612450565b6135ef818561354c565b93506135ff81856020860161246c565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061364160058361354c565b915061364c8261360b565b600582019050919050565b60006136638285613557565b915061366f82846135da565b915061367a82613634565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136e260268361245b565b91506136ed82613686565b604082019050919050565b60006020820190508181036000830152613711816136d5565b9050919050565b600060408201905061372d6000830185612597565b61373a6020830184612597565b9392505050565b60008151905061375081612afe565b92915050565b60006020828403121561376c5761376b61238b565b5b600061377a84828501613741565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006137df60218361245b565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061387160388361245b565b915061387c82613815565b604082019050919050565b600060208201905081810360008301526138a081613864565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061390360318361245b565b915061390e826138a7565b604082019050919050565b60006020820190508181036000830152613932816138f6565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061396f60208361245b565b915061397a82613939565b602082019050919050565b6000602082019050818103600083015261399e81613962565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006139db601c8361245b565b91506139e6826139a5565b602082019050919050565b60006020820190508181036000830152613a0a816139ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a4b82612502565b9150613a5683612502565b925082613a6657613a65613a11565b5b828204905092915050565b6000613a7c82612502565b9150613a8783612502565b9250828203905081811115613a9f57613a9e612dc0565b5b92915050565b6000613ab082612502565b9150613abb83612502565b925082613acb57613aca613a11565b5b828206905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b32602c8361245b565b9150613b3d82613ad6565b604082019050919050565b60006020820190508181036000830152613b6181613b25565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613bc460298361245b565b9150613bcf82613b68565b604082019050919050565b60006020820190508181036000830152613bf381613bb7565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c5660248361245b565b9150613c6182613bfa565b604082019050919050565b60006020820190508181036000830152613c8581613c49565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613cc260198361245b565b9150613ccd82613c8c565b602082019050919050565b60006020820190508181036000830152613cf181613cb5565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d5460328361245b565b9150613d5f82613cf8565b604082019050919050565b60006020820190508181036000830152613d8381613d47565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613db182613d8a565b613dbb8185613d95565b9350613dcb81856020860161246c565b613dd481612496565b840191505092915050565b6000608082019050613df46000830187612597565b613e016020830186612597565b613e0e6040830185612ad4565b8181036060830152613e208184613da6565b905095945050505050565b600081519050613e3a816123c1565b92915050565b600060208284031215613e5657613e5561238b565b5b6000613e6484828501613e2b565b9150509291505056fea2646970667358221220894330634a8a6fb566e4d592509cce934b96ca9f0d5f042632896f225160272d64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000c4655433a2054484520454747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034547470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005a68747470733a2f2f666f7274756e65756e69636f726e2e6d7970696e6174612e636c6f75642f697066732f516d5233444e76616176567655616975453535737a366869596a45456366376861644d62567850314e4e6a4a79482f000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f666f7274756e65756e69636f726e2e6d7970696e6174612e636c6f75642f697066732f516d55373946474a32653739534374324769444761636e533857514c424c656d7a536e6348474d5a68446663786900000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): FUC: THE EGG
Arg [1] : _tokenSymbol (string): EGG
Arg [2] : _baseUri (string): https://fortuneunicorn.mypinata.cloud/ipfs/QmR3DNvaavVvUaiuE55sz6hiYjEEcf7hadMbVxP1NNjJyH/
Arg [3] : _contractURI (string): https://fortuneunicorn.mypinata.cloud/ipfs/QmU79FGJ2e79SCt2GiDGacnS8WQLBLemzSncHGMZhDfcxi
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 4655433a20544845204547470000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4547470000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000005a
Arg [9] : 68747470733a2f2f666f7274756e65756e69636f726e2e6d7970696e6174612e
Arg [10] : 636c6f75642f697066732f516d5233444e76616176567655616975453535737a
Arg [11] : 366869596a45456366376861644d62567850314e4e6a4a79482f000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [13] : 68747470733a2f2f666f7274756e65756e69636f726e2e6d7970696e6174612e
Arg [14] : 636c6f75642f697066732f516d55373946474a32653739534374324769444761
Arg [15] : 636e533857514c424c656d7a536e6348474d5a68446663786900000000000000
Deployed Bytecode Sourcemap
47360:3088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32300:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33245:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34804:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48114:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49647:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48279:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47561:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49763:260;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50344:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48865:597;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7735:143;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48450:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49470:165;;;:::i;:::-;;32939:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32669:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46453:103;;;:::i;:::-;;45802:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33414:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47593:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47930:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48629:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50031:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47621:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35323:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46711:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32300:305;32402:4;32454:25;32439:40;;;:11;:40;;;;:105;;;;32511:33;32496:48;;;:11;:48;;;;32439:105;:158;;;;32561:36;32585:11;32561:23;:36::i;:::-;32439:158;32419:178;;32300:305;;;:::o;33245:100::-;33299:13;33332:5;33325:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33245:100;:::o;34804:221::-;34880:7;34908:16;34916:7;34908;:16::i;:::-;34900:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34993:15;:24;35009:7;34993:24;;;;;;;;;;;;;;;;;;;;;34986:31;;34804:221;;;:::o;48114:157::-;48210:8;9517:30;9538:8;9517:20;:30::i;:::-;48231:32:::1;48245:8;48255:7;48231:13;:32::i;:::-;48114:157:::0;;;:::o;49647:108::-;49697:16;49733:14;49726:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49647:108;:::o;48279:163::-;48380:4;9251:10;9243:18;;:4;:18;;;9239:83;;9278:32;9299:10;9278:20;:32::i;:::-;9239:83;48397:37:::1;48416:4;48422:2;48426:7;48397:18;:37::i;:::-;48279:163:::0;;;;:::o;47561:25::-;;;;;;;;;;;;;:::o;49763:260::-;49814:16;49843:24;49884:5;;;;;;;;;;;49870:20;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49843:47;;49906:9;49901:90;49925:5;;;;;;;;;;;49921:9;;:1;:9;49901:90;;;49965:14;49977:1;49973;:5;;;;:::i;:::-;49965:7;:14::i;:::-;49952:7;49960:1;49952:10;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;49932:3;;;;;:::i;:::-;;;;49901:90;;;;50008:7;50001:14;;;49763:260;:::o;50344:101::-;46033:12;:10;:12::i;:::-;46022:23;;:7;:5;:7::i;:::-;:23;;;46014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50429:8:::1;50419:7;:18;;;;;;:::i;:::-;;50344:101:::0;:::o;48865:597::-;46033:12;:10;:12::i;:::-;46022:23;;:7;:5;:7::i;:::-;:23;;;46014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48984:5:::1;;;;;;;;;;;48960:29;;:13;:20;:29;48952:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;49085:1;49060:14;:21;;;;:26;49052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49136:9;49131:324;49155:13;:20;49151:1;:24;49131:324;;;49197:12;49212:13;49226:1;49212:16;;;;;;;;:::i;:::-;;;;;;;;49197:31;;49267:1;49251:18;;:4;:18;;::::0;49243:46:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;49313:15;:21;49329:4;49313:21;;;;;;;;;;;;;;;;;;;;;;;;;49312:22;49304:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;49399:4;49375:15;:21;49391:4;49375:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;49418:14;49438:4;49418:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49182:273;49177:3;;;;;:::i;:::-;;;;49131:324;;;;48865:597:::0;:::o;7735:143::-;151:42;7735:143;:::o;48450:171::-;48555:4;9251:10;9243:18;;:4;:18;;;9239:83;;9278:32;9299:10;9278:20;:32::i;:::-;9239:83;48572:41:::1;48595:4;48601:2;48605:7;48572:22;:41::i;:::-;48450:171:::0;;;;:::o;49470:165::-;46033:12;:10;:12::i;:::-;46022:23;;:7;:5;:7::i;:::-;:23;;;46014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49523:9:::1;49518:110;49542:14;:21;;;;49538:1;:25;49518:110;;;49585:31;49591:14;49606:1;49591:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49614:1;49610;:5;;;;:::i;:::-;49585;:31::i;:::-;49565:3;;;;;:::i;:::-;;;;49518:110;;;;49470:165::o:0;32939:239::-;33011:7;33031:13;33047:7;:16;33055:7;33047:16;;;;;;;;;;;;;;;;;;;;;33031:32;;33099:1;33082:19;;:5;:19;;;33074:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33165:5;33158:12;;;32939:239;;;:::o;32669:208::-;32741:7;32786:1;32769:19;;:5;:19;;;32761:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32853:9;:16;32863:5;32853:16;;;;;;;;;;;;;;;;32846:23;;32669:208;;;:::o;46453:103::-;46033:12;:10;:12::i;:::-;46022:23;;:7;:5;:7::i;:::-;:23;;;46014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46518:30:::1;46545:1;46518:18;:30::i;:::-;46453:103::o:0;45802:87::-;45848:7;45875:6;;;;;;;;;;;45868:13;;45802:87;:::o;33414:104::-;33470:13;33503:7;33496:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33414:104;:::o;47593:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47930:176::-;48034:8;9517:30;9538:8;9517:20;:30::i;:::-;48055:43:::1;48079:8;48089;48055:23;:43::i;:::-;47930:176:::0;;;:::o;48629:228::-;48780:4;9251:10;9243:18;;:4;:18;;;9239:83;;9278:32;9299:10;9278:20;:32::i;:::-;9239:83;48802:47:::1;48825:4;48831:2;48835:7;48844:4;48802:22;:47::i;:::-;48629:228:::0;;;;;:::o;50031:305::-;50096:13;50130:16;50138:7;50130;:16::i;:::-;50122:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;50221:1;50203:7;50197:21;;;;;:::i;:::-;;;:25;50189:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;50283:7;50292:25;50309:7;50292:16;:25::i;:::-;50266:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50252:76;;50031:305;;;:::o;47621:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35323:164::-;35420:4;35444:18;:25;35463:5;35444:25;;;;;;;;;;;;;;;:35;35470:8;35444:35;;;;;;;;;;;;;;;;;;;;;;;;;35437:42;;35323:164;;;;:::o;46711:201::-;46033:12;:10;:12::i;:::-;46022:23;;:7;:5;:7::i;:::-;:23;;;46014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46820:1:::1;46800:22;;:8;:22;;::::0;46792:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46876:28;46895:8;46876:18;:28::i;:::-;46711:201:::0;:::o;16025:157::-;16110:4;16149:25;16134:40;;;:11;:40;;;;16127:47;;16025:157;;;:::o;38058:127::-;38123:4;38175:1;38147:30;;:7;:16;38155:7;38147:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38140:37;;38058:127;;;:::o;9660:647::-;9899:1;151:42;9851:45;;;:49;9847:453;;;151:42;10150;;;10201:4;10208:8;10150:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10145:144;;10264:8;10245:28;;;;;;;;;;;:::i;:::-;;;;;;;;10145:144;9847:453;9660:647;:::o;34327:411::-;34408:13;34424:23;34439:7;34424:14;:23::i;:::-;34408:39;;34472:5;34466:11;;:2;:11;;;34458:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34566:5;34550:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34575:37;34592:5;34599:12;:10;:12::i;:::-;34575:16;:37::i;:::-;34550:62;34528:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34709:21;34718:2;34722:7;34709:8;:21::i;:::-;34397:341;34327:411;;:::o;35554:339::-;35749:41;35768:12;:10;:12::i;:::-;35782:7;35749:18;:41::i;:::-;35741:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35857:28;35867:4;35873:2;35877:7;35857:9;:28::i;:::-;35554:339;;;:::o;30694:98::-;30747:7;30774:10;30767:17;;30694:98;:::o;35964:185::-;36102:39;36119:4;36125:2;36129:7;36102:39;;;;;;;;;;;;:16;:39::i;:::-;35964:185;;;:::o;40036:382::-;40130:1;40116:16;;:2;:16;;;40108:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40189:16;40197:7;40189;:16::i;:::-;40188:17;40180:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40251:45;40280:1;40284:2;40288:7;40251:20;:45::i;:::-;40326:1;40309:9;:13;40319:2;40309:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40357:2;40338:7;:16;40346:7;40338:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40402:7;40398:2;40377:33;;40394:1;40377:33;;;;;;;;;;;;40036:382;;:::o;47072:191::-;47146:16;47165:6;;;;;;;;;;;47146:25;;47191:8;47182:6;;:17;;;;;;;;;;;;;;;;;;47246:8;47215:40;;47236:8;47215:40;;;;;;;;;;;;47135:128;47072:191;:::o;35097:155::-;35192:52;35211:12;:10;:12::i;:::-;35225:8;35235;35192:18;:52::i;:::-;35097:155;;:::o;36220:328::-;36395:41;36414:12;:10;:12::i;:::-;36428:7;36395:18;:41::i;:::-;36387:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36501:39;36515:4;36521:2;36525:7;36534:5;36501:13;:39::i;:::-;36220:328;;;;:::o;11453:723::-;11509:13;11739:1;11730:5;:10;11726:53;;11757:10;;;;;;;;;;;;;;;;;;;;;11726:53;11789:12;11804:5;11789:20;;11820:14;11845:78;11860:1;11852:4;:9;11845:78;;11878:8;;;;;:::i;:::-;;;;11909:2;11901:10;;;;;:::i;:::-;;;11845:78;;;11933:19;11965:6;11955:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11933:39;;11983:154;11999:1;11990:5;:10;11983:154;;12027:1;12017:11;;;;;:::i;:::-;;;12094:2;12086:5;:10;;;;:::i;:::-;12073:2;:24;;;;:::i;:::-;12060:39;;12043:6;12050;12043:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;12123:2;12114:11;;;;;:::i;:::-;;;11983:154;;;12161:6;12147:21;;;;;11453:723;;;;:::o;42040:174::-;42142:2;42115:15;:24;42131:7;42115:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42198:7;42194:2;42160:46;;42169:23;42184:7;42169:14;:23::i;:::-;42160:46;;;;;;;;;;;;42040:174;;:::o;38352:348::-;38445:4;38470:16;38478:7;38470;:16::i;:::-;38462:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38546:13;38562:23;38577:7;38562:14;:23::i;:::-;38546:39;;38615:5;38604:16;;:7;:16;;;:51;;;;38648:7;38624:31;;:20;38636:7;38624:11;:20::i;:::-;:31;;;38604:51;:87;;;;38659:32;38676:5;38683:7;38659:16;:32::i;:::-;38604:87;38596:96;;;38352:348;;;;:::o;41344:578::-;41503:4;41476:31;;:23;41491:7;41476:14;:23::i;:::-;:31;;;41468:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41586:1;41572:16;;:2;:16;;;41564:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41642:39;41663:4;41669:2;41673:7;41642:20;:39::i;:::-;41746:29;41763:1;41767:7;41746:8;:29::i;:::-;41807:1;41788:9;:15;41798:4;41788:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41836:1;41819:9;:13;41829:2;41819:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41867:2;41848:7;:16;41856:7;41848:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41906:7;41902:2;41887:27;;41896:4;41887:27;;;;;;;;;;;;41344:578;;;:::o;44607:126::-;;;;:::o;42356:315::-;42511:8;42502:17;;:5;:17;;;42494:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42598:8;42560:18;:25;42579:5;42560:25;;;;;;;;;;;;;;;:35;42586:8;42560:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42644:8;42622:41;;42637:5;42622:41;;;42654:8;42622:41;;;;;;:::i;:::-;;;;;;;;42356:315;;;:::o;37430:::-;37587:28;37597:4;37603:2;37607:7;37587:9;:28::i;:::-;37634:48;37657:4;37663:2;37667:7;37676:5;37634:22;:48::i;:::-;37626:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37430:315;;;;:::o;43236:799::-;43391:4;43412:15;:2;:13;;;:15::i;:::-;43408:620;;;43464:2;43448:36;;;43485:12;:10;:12::i;:::-;43499:4;43505:7;43514:5;43448:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43444:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43707:1;43690:6;:13;:18;43686:272;;43733:60;;;;;;;;;;:::i;:::-;;;;;;;;43686:272;43908:6;43902:13;43893:6;43889:2;43885:15;43878:38;43444:529;43581:41;;;43571:51;;;:6;:51;;;;43564:58;;;;;43408:620;44012:4;44005:11;;43236:799;;;;;;;:::o;22684:387::-;22744:4;22952:12;23019:7;23007:20;22999:28;;23062:1;23055:4;:8;23048:15;;;22684:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:114::-;4957:6;4991:5;4985:12;4975:22;;4890:114;;;:::o;5010:184::-;5109:11;5143:6;5138:3;5131:19;5183:4;5178:3;5174:14;5159:29;;5010:184;;;;:::o;5200:132::-;5267:4;5290:3;5282:11;;5320:4;5315:3;5311:14;5303:22;;5200:132;;;:::o;5338:108::-;5415:24;5433:5;5415:24;:::i;:::-;5410:3;5403:37;5338:108;;:::o;5452:179::-;5521:10;5542:46;5584:3;5576:6;5542:46;:::i;:::-;5620:4;5615:3;5611:14;5597:28;;5452:179;;;;:::o;5637:113::-;5707:4;5739;5734:3;5730:14;5722:22;;5637:113;;;:::o;5786:732::-;5905:3;5934:54;5982:5;5934:54;:::i;:::-;6004:86;6083:6;6078:3;6004:86;:::i;:::-;5997:93;;6114:56;6164:5;6114:56;:::i;:::-;6193:7;6224:1;6209:284;6234:6;6231:1;6228:13;6209:284;;;6310:6;6304:13;6337:63;6396:3;6381:13;6337:63;:::i;:::-;6330:70;;6423:60;6476:6;6423:60;:::i;:::-;6413:70;;6269:224;6256:1;6253;6249:9;6244:14;;6209:284;;;6213:14;6509:3;6502:10;;5910:608;;;5786:732;;;;:::o;6524:373::-;6667:4;6705:2;6694:9;6690:18;6682:26;;6754:9;6748:4;6744:20;6740:1;6729:9;6725:17;6718:47;6782:108;6885:4;6876:6;6782:108;:::i;:::-;6774:116;;6524:373;;;;:::o;6903:619::-;6980:6;6988;6996;7045:2;7033:9;7024:7;7020:23;7016:32;7013:119;;;7051:79;;:::i;:::-;7013:119;7171:1;7196:53;7241:7;7232:6;7221:9;7217:22;7196:53;:::i;:::-;7186:63;;7142:117;7298:2;7324:53;7369:7;7360:6;7349:9;7345:22;7324:53;:::i;:::-;7314:63;;7269:118;7426:2;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7397:118;6903:619;;;;;:::o;7528:101::-;7564:7;7604:18;7597:5;7593:30;7582:41;;7528:101;;;:::o;7635:115::-;7720:23;7737:5;7720:23;:::i;:::-;7715:3;7708:36;7635:115;;:::o;7756:218::-;7847:4;7885:2;7874:9;7870:18;7862:26;;7898:69;7964:1;7953:9;7949:17;7940:6;7898:69;:::i;:::-;7756:218;;;;:::o;7980:117::-;8089:1;8086;8079:12;8103:117;8212:1;8209;8202:12;8226:180;8274:77;8271:1;8264:88;8371:4;8368:1;8361:15;8395:4;8392:1;8385:15;8412:281;8495:27;8517:4;8495:27;:::i;:::-;8487:6;8483:40;8625:6;8613:10;8610:22;8589:18;8577:10;8574:34;8571:62;8568:88;;;8636:18;;:::i;:::-;8568:88;8676:10;8672:2;8665:22;8455:238;8412:281;;:::o;8699:129::-;8733:6;8760:20;;:::i;:::-;8750:30;;8789:33;8817:4;8809:6;8789:33;:::i;:::-;8699:129;;;:::o;8834:308::-;8896:4;8986:18;8978:6;8975:30;8972:56;;;9008:18;;:::i;:::-;8972:56;9046:29;9068:6;9046:29;:::i;:::-;9038:37;;9130:4;9124;9120:15;9112:23;;8834:308;;;:::o;9148:146::-;9245:6;9240:3;9235;9222:30;9286:1;9277:6;9272:3;9268:16;9261:27;9148:146;;;:::o;9300:425::-;9378:5;9403:66;9419:49;9461:6;9419:49;:::i;:::-;9403:66;:::i;:::-;9394:75;;9492:6;9485:5;9478:21;9530:4;9523:5;9519:16;9568:3;9559:6;9554:3;9550:16;9547:25;9544:112;;;9575:79;;:::i;:::-;9544:112;9665:54;9712:6;9707:3;9702;9665:54;:::i;:::-;9384:341;9300:425;;;;;:::o;9745:340::-;9801:5;9850:3;9843:4;9835:6;9831:17;9827:27;9817:122;;9858:79;;:::i;:::-;9817:122;9975:6;9962:20;10000:79;10075:3;10067:6;10060:4;10052:6;10048:17;10000:79;:::i;:::-;9991:88;;9807:278;9745:340;;;;:::o;10091:509::-;10160:6;10209:2;10197:9;10188:7;10184:23;10180:32;10177:119;;;10215:79;;:::i;:::-;10177:119;10363:1;10352:9;10348:17;10335:31;10393:18;10385:6;10382:30;10379:117;;;10415:79;;:::i;:::-;10379:117;10520:63;10575:7;10566:6;10555:9;10551:22;10520:63;:::i;:::-;10510:73;;10306:287;10091:509;;;;:::o;10606:311::-;10683:4;10773:18;10765:6;10762:30;10759:56;;;10795:18;;:::i;:::-;10759:56;10845:4;10837:6;10833:17;10825:25;;10905:4;10899;10895:15;10887:23;;10606:311;;;:::o;10923:117::-;11032:1;11029;11022:12;11063:710;11159:5;11184:81;11200:64;11257:6;11200:64;:::i;:::-;11184:81;:::i;:::-;11175:90;;11285:5;11314:6;11307:5;11300:21;11348:4;11341:5;11337:16;11330:23;;11401:4;11393:6;11389:17;11381:6;11377:30;11430:3;11422:6;11419:15;11416:122;;;11449:79;;:::i;:::-;11416:122;11564:6;11547:220;11581:6;11576:3;11573:15;11547:220;;;11656:3;11685:37;11718:3;11706:10;11685:37;:::i;:::-;11680:3;11673:50;11752:4;11747:3;11743:14;11736:21;;11623:144;11607:4;11602:3;11598:14;11591:21;;11547:220;;;11551:21;11165:608;;11063:710;;;;;:::o;11796:370::-;11867:5;11916:3;11909:4;11901:6;11897:17;11893:27;11883:122;;11924:79;;:::i;:::-;11883:122;12041:6;12028:20;12066:94;12156:3;12148:6;12141:4;12133:6;12129:17;12066:94;:::i;:::-;12057:103;;11873:293;11796:370;;;;:::o;12172:539::-;12256:6;12305:2;12293:9;12284:7;12280:23;12276:32;12273:119;;;12311:79;;:::i;:::-;12273:119;12459:1;12448:9;12444:17;12431:31;12489:18;12481:6;12478:30;12475:117;;;12511:79;;:::i;:::-;12475:117;12616:78;12686:7;12677:6;12666:9;12662:22;12616:78;:::i;:::-;12606:88;;12402:302;12172:539;;;;:::o;12717:60::-;12745:3;12766:5;12759:12;;12717:60;;;:::o;12783:142::-;12833:9;12866:53;12884:34;12893:24;12911:5;12893:24;:::i;:::-;12884:34;:::i;:::-;12866:53;:::i;:::-;12853:66;;12783:142;;;:::o;12931:126::-;12981:9;13014:37;13045:5;13014:37;:::i;:::-;13001:50;;12931:126;;;:::o;13063:157::-;13144:9;13177:37;13208:5;13177:37;:::i;:::-;13164:50;;13063:157;;;:::o;13226:193::-;13344:68;13406:5;13344:68;:::i;:::-;13339:3;13332:81;13226:193;;:::o;13425:284::-;13549:4;13587:2;13576:9;13572:18;13564:26;;13600:102;13699:1;13688:9;13684:17;13675:6;13600:102;:::i;:::-;13425:284;;;;:::o;13715:329::-;13774:6;13823:2;13811:9;13802:7;13798:23;13794:32;13791:119;;;13829:79;;:::i;:::-;13791:119;13949:1;13974:53;14019:7;14010:6;13999:9;13995:22;13974:53;:::i;:::-;13964:63;;13920:117;13715:329;;;;:::o;14050:118::-;14137:24;14155:5;14137:24;:::i;:::-;14132:3;14125:37;14050:118;;:::o;14174:222::-;14267:4;14305:2;14294:9;14290:18;14282:26;;14318:71;14386:1;14375:9;14371:17;14362:6;14318:71;:::i;:::-;14174:222;;;;:::o;14402:116::-;14472:21;14487:5;14472:21;:::i;:::-;14465:5;14462:32;14452:60;;14508:1;14505;14498:12;14452:60;14402:116;:::o;14524:133::-;14567:5;14605:6;14592:20;14583:29;;14621:30;14645:5;14621:30;:::i;:::-;14524:133;;;;:::o;14663:468::-;14728:6;14736;14785:2;14773:9;14764:7;14760:23;14756:32;14753:119;;;14791:79;;:::i;:::-;14753:119;14911:1;14936:53;14981:7;14972:6;14961:9;14957:22;14936:53;:::i;:::-;14926:63;;14882:117;15038:2;15064:50;15106:7;15097:6;15086:9;15082:22;15064:50;:::i;:::-;15054:60;;15009:115;14663:468;;;;;:::o;15137:307::-;15198:4;15288:18;15280:6;15277:30;15274:56;;;15310:18;;:::i;:::-;15274:56;15348:29;15370:6;15348:29;:::i;:::-;15340:37;;15432:4;15426;15422:15;15414:23;;15137:307;;;:::o;15450:423::-;15527:5;15552:65;15568:48;15609:6;15568:48;:::i;:::-;15552:65;:::i;:::-;15543:74;;15640:6;15633:5;15626:21;15678:4;15671:5;15667:16;15716:3;15707:6;15702:3;15698:16;15695:25;15692:112;;;15723:79;;:::i;:::-;15692:112;15813:54;15860:6;15855:3;15850;15813:54;:::i;:::-;15533:340;15450:423;;;;;:::o;15892:338::-;15947:5;15996:3;15989:4;15981:6;15977:17;15973:27;15963:122;;16004:79;;:::i;:::-;15963:122;16121:6;16108:20;16146:78;16220:3;16212:6;16205:4;16197:6;16193:17;16146:78;:::i;:::-;16137:87;;15953:277;15892:338;;;;:::o;16236:943::-;16331:6;16339;16347;16355;16404:3;16392:9;16383:7;16379:23;16375:33;16372:120;;;16411:79;;:::i;:::-;16372:120;16531:1;16556:53;16601:7;16592:6;16581:9;16577:22;16556:53;:::i;:::-;16546:63;;16502:117;16658:2;16684:53;16729:7;16720:6;16709:9;16705:22;16684:53;:::i;:::-;16674:63;;16629:118;16786:2;16812:53;16857:7;16848:6;16837:9;16833:22;16812:53;:::i;:::-;16802:63;;16757:118;16942:2;16931:9;16927:18;16914:32;16973:18;16965:6;16962:30;16959:117;;;16995:79;;:::i;:::-;16959:117;17100:62;17154:7;17145:6;17134:9;17130:22;17100:62;:::i;:::-;17090:72;;16885:287;16236:943;;;;;;;:::o;17185:474::-;17253:6;17261;17310:2;17298:9;17289:7;17285:23;17281:32;17278:119;;;17316:79;;:::i;:::-;17278:119;17436:1;17461:53;17506:7;17497:6;17486:9;17482:22;17461:53;:::i;:::-;17451:63;;17407:117;17563:2;17589:53;17634:7;17625:6;17614:9;17610:22;17589:53;:::i;:::-;17579:63;;17534:118;17185:474;;;;;:::o;17665:180::-;17713:77;17710:1;17703:88;17810:4;17807:1;17800:15;17834:4;17831:1;17824:15;17851:320;17895:6;17932:1;17926:4;17922:12;17912:22;;17979:1;17973:4;17969:12;18000:18;17990:81;;18056:4;18048:6;18044:17;18034:27;;17990:81;18118:2;18110:6;18107:14;18087:18;18084:38;18081:84;;18137:18;;:::i;:::-;18081:84;17902:269;17851:320;;;:::o;18177:231::-;18317:34;18313:1;18305:6;18301:14;18294:58;18386:14;18381:2;18373:6;18369:15;18362:39;18177:231;:::o;18414:366::-;18556:3;18577:67;18641:2;18636:3;18577:67;:::i;:::-;18570:74;;18653:93;18742:3;18653:93;:::i;:::-;18771:2;18766:3;18762:12;18755:19;;18414:366;;;:::o;18786:419::-;18952:4;18990:2;18979:9;18975:18;18967:26;;19039:9;19033:4;19029:20;19025:1;19014:9;19010:17;19003:47;19067:131;19193:4;19067:131;:::i;:::-;19059:139;;18786:419;;;:::o;19211:180::-;19259:77;19256:1;19249:88;19356:4;19353:1;19346:15;19380:4;19377:1;19370:15;19397:191;19437:3;19456:20;19474:1;19456:20;:::i;:::-;19451:25;;19490:20;19508:1;19490:20;:::i;:::-;19485:25;;19533:1;19530;19526:9;19519:16;;19554:3;19551:1;19548:10;19545:36;;;19561:18;;:::i;:::-;19545:36;19397:191;;;;:::o;19594:180::-;19642:77;19639:1;19632:88;19739:4;19736:1;19729:15;19763:4;19760:1;19753:15;19780:233;19819:3;19842:24;19860:5;19842:24;:::i;:::-;19833:33;;19888:66;19881:5;19878:77;19875:103;;19958:18;;:::i;:::-;19875:103;20005:1;19998:5;19994:13;19987:20;;19780:233;;;:::o;20019:182::-;20159:34;20155:1;20147:6;20143:14;20136:58;20019:182;:::o;20207:366::-;20349:3;20370:67;20434:2;20429:3;20370:67;:::i;:::-;20363:74;;20446:93;20535:3;20446:93;:::i;:::-;20564:2;20559:3;20555:12;20548:19;;20207:366;;;:::o;20579:419::-;20745:4;20783:2;20772:9;20768:18;20760:26;;20832:9;20826:4;20822:20;20818:1;20807:9;20803:17;20796:47;20860:131;20986:4;20860:131;:::i;:::-;20852:139;;20579:419;;;:::o;21004:141::-;21053:4;21076:3;21068:11;;21099:3;21096:1;21089:14;21133:4;21130:1;21120:18;21112:26;;21004:141;;;:::o;21151:93::-;21188:6;21235:2;21230;21223:5;21219:14;21215:23;21205:33;;21151:93;;;:::o;21250:107::-;21294:8;21344:5;21338:4;21334:16;21313:37;;21250:107;;;;:::o;21363:393::-;21432:6;21482:1;21470:10;21466:18;21505:97;21535:66;21524:9;21505:97;:::i;:::-;21623:39;21653:8;21642:9;21623:39;:::i;:::-;21611:51;;21695:4;21691:9;21684:5;21680:21;21671:30;;21744:4;21734:8;21730:19;21723:5;21720:30;21710:40;;21439:317;;21363:393;;;;;:::o;21762:142::-;21812:9;21845:53;21863:34;21872:24;21890:5;21872:24;:::i;:::-;21863:34;:::i;:::-;21845:53;:::i;:::-;21832:66;;21762:142;;;:::o;21910:75::-;21953:3;21974:5;21967:12;;21910:75;;;:::o;21991:269::-;22101:39;22132:7;22101:39;:::i;:::-;22162:91;22211:41;22235:16;22211:41;:::i;:::-;22203:6;22196:4;22190:11;22162:91;:::i;:::-;22156:4;22149:105;22067:193;21991:269;;;:::o;22266:73::-;22311:3;22266:73;:::o;22345:189::-;22422:32;;:::i;:::-;22463:65;22521:6;22513;22507:4;22463:65;:::i;:::-;22398:136;22345:189;;:::o;22540:186::-;22600:120;22617:3;22610:5;22607:14;22600:120;;;22671:39;22708:1;22701:5;22671:39;:::i;:::-;22644:1;22637:5;22633:13;22624:22;;22600:120;;;22540:186;;:::o;22732:543::-;22833:2;22828:3;22825:11;22822:446;;;22867:38;22899:5;22867:38;:::i;:::-;22951:29;22969:10;22951:29;:::i;:::-;22941:8;22937:44;23134:2;23122:10;23119:18;23116:49;;;23155:8;23140:23;;23116:49;23178:80;23234:22;23252:3;23234:22;:::i;:::-;23224:8;23220:37;23207:11;23178:80;:::i;:::-;22837:431;;22822:446;22732:543;;;:::o;23281:117::-;23335:8;23385:5;23379:4;23375:16;23354:37;;23281:117;;;;:::o;23404:169::-;23448:6;23481:51;23529:1;23525:6;23517:5;23514:1;23510:13;23481:51;:::i;:::-;23477:56;23562:4;23556;23552:15;23542:25;;23455:118;23404:169;;;;:::o;23578:295::-;23654:4;23800:29;23825:3;23819:4;23800:29;:::i;:::-;23792:37;;23862:3;23859:1;23855:11;23849:4;23846:21;23838:29;;23578:295;;;;:::o;23878:1395::-;23995:37;24028:3;23995:37;:::i;:::-;24097:18;24089:6;24086:30;24083:56;;;24119:18;;:::i;:::-;24083:56;24163:38;24195:4;24189:11;24163:38;:::i;:::-;24248:67;24308:6;24300;24294:4;24248:67;:::i;:::-;24342:1;24366:4;24353:17;;24398:2;24390:6;24387:14;24415:1;24410:618;;;;25072:1;25089:6;25086:77;;;25138:9;25133:3;25129:19;25123:26;25114:35;;25086:77;25189:67;25249:6;25242:5;25189:67;:::i;:::-;25183:4;25176:81;25045:222;24380:887;;24410:618;24462:4;24458:9;24450:6;24446:22;24496:37;24528:4;24496:37;:::i;:::-;24555:1;24569:208;24583:7;24580:1;24577:14;24569:208;;;24662:9;24657:3;24653:19;24647:26;24639:6;24632:42;24713:1;24705:6;24701:14;24691:24;;24760:2;24749:9;24745:18;24732:31;;24606:4;24603:1;24599:12;24594:17;;24569:208;;;24805:6;24796:7;24793:19;24790:179;;;24863:9;24858:3;24854:19;24848:26;24906:48;24948:4;24940:6;24936:17;24925:9;24906:48;:::i;:::-;24898:6;24891:64;24813:156;24790:179;25015:1;25011;25003:6;24999:14;24995:22;24989:4;24982:36;24417:611;;;24380:887;;23970:1303;;;23878:1395;;:::o;25279:234::-;25419:34;25415:1;25407:6;25403:14;25396:58;25488:17;25483:2;25475:6;25471:15;25464:42;25279:234;:::o;25519:366::-;25661:3;25682:67;25746:2;25741:3;25682:67;:::i;:::-;25675:74;;25758:93;25847:3;25758:93;:::i;:::-;25876:2;25871:3;25867:12;25860:19;;25519:366;;;:::o;25891:419::-;26057:4;26095:2;26084:9;26080:18;26072:26;;26144:9;26138:4;26134:20;26130:1;26119:9;26115:17;26108:47;26172:131;26298:4;26172:131;:::i;:::-;26164:139;;25891:419;;;:::o;26316:179::-;26456:31;26452:1;26444:6;26440:14;26433:55;26316:179;:::o;26501:366::-;26643:3;26664:67;26728:2;26723:3;26664:67;:::i;:::-;26657:74;;26740:93;26829:3;26740:93;:::i;:::-;26858:2;26853:3;26849:12;26842:19;;26501:366;;;:::o;26873:419::-;27039:4;27077:2;27066:9;27062:18;27054:26;;27126:9;27120:4;27116:20;27112:1;27101:9;27097:17;27090:47;27154:131;27280:4;27154:131;:::i;:::-;27146:139;;26873:419;;;:::o;27298:165::-;27438:17;27434:1;27426:6;27422:14;27415:41;27298:165;:::o;27469:366::-;27611:3;27632:67;27696:2;27691:3;27632:67;:::i;:::-;27625:74;;27708:93;27797:3;27708:93;:::i;:::-;27826:2;27821:3;27817:12;27810:19;;27469:366;;;:::o;27841:419::-;28007:4;28045:2;28034:9;28030:18;28022:26;;28094:9;28088:4;28084:20;28080:1;28069:9;28065:17;28058:47;28122:131;28248:4;28122:131;:::i;:::-;28114:139;;27841:419;;;:::o;28266:171::-;28406:23;28402:1;28394:6;28390:14;28383:47;28266:171;:::o;28443:366::-;28585:3;28606:67;28670:2;28665:3;28606:67;:::i;:::-;28599:74;;28682:93;28771:3;28682:93;:::i;:::-;28800:2;28795:3;28791:12;28784:19;;28443:366;;;:::o;28815:419::-;28981:4;29019:2;29008:9;29004:18;28996:26;;29068:9;29062:4;29058:20;29054:1;29043:9;29039:17;29032:47;29096:131;29222:4;29096:131;:::i;:::-;29088:139;;28815:419;;;:::o;29240:228::-;29380:34;29376:1;29368:6;29364:14;29357:58;29449:11;29444:2;29436:6;29432:15;29425:36;29240:228;:::o;29474:366::-;29616:3;29637:67;29701:2;29696:3;29637:67;:::i;:::-;29630:74;;29713:93;29802:3;29713:93;:::i;:::-;29831:2;29826:3;29822:12;29815:19;;29474:366;;;:::o;29846:419::-;30012:4;30050:2;30039:9;30035:18;30027:26;;30099:9;30093:4;30089:20;30085:1;30074:9;30070:17;30063:47;30127:131;30253:4;30127:131;:::i;:::-;30119:139;;29846:419;;;:::o;30271:229::-;30411:34;30407:1;30399:6;30395:14;30388:58;30480:12;30475:2;30467:6;30463:15;30456:37;30271:229;:::o;30506:366::-;30648:3;30669:67;30733:2;30728:3;30669:67;:::i;:::-;30662:74;;30745:93;30834:3;30745:93;:::i;:::-;30863:2;30858:3;30854:12;30847:19;;30506:366;;;:::o;30878:419::-;31044:4;31082:2;31071:9;31067:18;31059:26;;31131:9;31125:4;31121:20;31117:1;31106:9;31102:17;31095:47;31159:131;31285:4;31159:131;:::i;:::-;31151:139;;30878:419;;;:::o;31303:177::-;31443:29;31439:1;31431:6;31427:14;31420:53;31303:177;:::o;31486:366::-;31628:3;31649:67;31713:2;31708:3;31649:67;:::i;:::-;31642:74;;31725:93;31814:3;31725:93;:::i;:::-;31843:2;31838:3;31834:12;31827:19;;31486:366;;;:::o;31858:419::-;32024:4;32062:2;32051:9;32047:18;32039:26;;32111:9;32105:4;32101:20;32097:1;32086:9;32082:17;32075:47;32139:131;32265:4;32139:131;:::i;:::-;32131:139;;31858:419;;;:::o;32283:164::-;32423:16;32419:1;32411:6;32407:14;32400:40;32283:164;:::o;32453:366::-;32595:3;32616:67;32680:2;32675:3;32616:67;:::i;:::-;32609:74;;32692:93;32781:3;32692:93;:::i;:::-;32810:2;32805:3;32801:12;32794:19;;32453:366;;;:::o;32825:419::-;32991:4;33029:2;33018:9;33014:18;33006:26;;33078:9;33072:4;33068:20;33064:1;33053:9;33049:17;33042:47;33106:131;33232:4;33106:131;:::i;:::-;33098:139;;32825:419;;;:::o;33250:148::-;33352:11;33389:3;33374:18;;33250:148;;;;:::o;33428:874::-;33531:3;33568:5;33562:12;33597:36;33623:9;33597:36;:::i;:::-;33649:89;33731:6;33726:3;33649:89;:::i;:::-;33642:96;;33769:1;33758:9;33754:17;33785:1;33780:166;;;;33960:1;33955:341;;;;33747:549;;33780:166;33864:4;33860:9;33849;33845:25;33840:3;33833:38;33926:6;33919:14;33912:22;33904:6;33900:35;33895:3;33891:45;33884:52;;33780:166;;33955:341;34022:38;34054:5;34022:38;:::i;:::-;34082:1;34096:154;34110:6;34107:1;34104:13;34096:154;;;34184:7;34178:14;34174:1;34169:3;34165:11;34158:35;34234:1;34225:7;34221:15;34210:26;;34132:4;34129:1;34125:12;34120:17;;34096:154;;;34279:6;34274:3;34270:16;34263:23;;33962:334;;33747:549;;33535:767;;33428:874;;;;:::o;34308:390::-;34414:3;34442:39;34475:5;34442:39;:::i;:::-;34497:89;34579:6;34574:3;34497:89;:::i;:::-;34490:96;;34595:65;34653:6;34648:3;34641:4;34634:5;34630:16;34595:65;:::i;:::-;34685:6;34680:3;34676:16;34669:23;;34418:280;34308:390;;;;:::o;34704:155::-;34844:7;34840:1;34832:6;34828:14;34821:31;34704:155;:::o;34865:400::-;35025:3;35046:84;35128:1;35123:3;35046:84;:::i;:::-;35039:91;;35139:93;35228:3;35139:93;:::i;:::-;35257:1;35252:3;35248:11;35241:18;;34865:400;;;:::o;35271:695::-;35549:3;35571:92;35659:3;35650:6;35571:92;:::i;:::-;35564:99;;35680:95;35771:3;35762:6;35680:95;:::i;:::-;35673:102;;35792:148;35936:3;35792:148;:::i;:::-;35785:155;;35957:3;35950:10;;35271:695;;;;;:::o;35972:225::-;36112:34;36108:1;36100:6;36096:14;36089:58;36181:8;36176:2;36168:6;36164:15;36157:33;35972:225;:::o;36203:366::-;36345:3;36366:67;36430:2;36425:3;36366:67;:::i;:::-;36359:74;;36442:93;36531:3;36442:93;:::i;:::-;36560:2;36555:3;36551:12;36544:19;;36203:366;;;:::o;36575:419::-;36741:4;36779:2;36768:9;36764:18;36756:26;;36828:9;36822:4;36818:20;36814:1;36803:9;36799:17;36792:47;36856:131;36982:4;36856:131;:::i;:::-;36848:139;;36575:419;;;:::o;37000:332::-;37121:4;37159:2;37148:9;37144:18;37136:26;;37172:71;37240:1;37229:9;37225:17;37216:6;37172:71;:::i;:::-;37253:72;37321:2;37310:9;37306:18;37297:6;37253:72;:::i;:::-;37000:332;;;;;:::o;37338:137::-;37392:5;37423:6;37417:13;37408:22;;37439:30;37463:5;37439:30;:::i;:::-;37338:137;;;;:::o;37481:345::-;37548:6;37597:2;37585:9;37576:7;37572:23;37568:32;37565:119;;;37603:79;;:::i;:::-;37565:119;37723:1;37748:61;37801:7;37792:6;37781:9;37777:22;37748:61;:::i;:::-;37738:71;;37694:125;37481:345;;;;:::o;37832:220::-;37972:34;37968:1;37960:6;37956:14;37949:58;38041:3;38036:2;38028:6;38024:15;38017:28;37832:220;:::o;38058:366::-;38200:3;38221:67;38285:2;38280:3;38221:67;:::i;:::-;38214:74;;38297:93;38386:3;38297:93;:::i;:::-;38415:2;38410:3;38406:12;38399:19;;38058:366;;;:::o;38430:419::-;38596:4;38634:2;38623:9;38619:18;38611:26;;38683:9;38677:4;38673:20;38669:1;38658:9;38654:17;38647:47;38711:131;38837:4;38711:131;:::i;:::-;38703:139;;38430:419;;;:::o;38855:243::-;38995:34;38991:1;38983:6;38979:14;38972:58;39064:26;39059:2;39051:6;39047:15;39040:51;38855:243;:::o;39104:366::-;39246:3;39267:67;39331:2;39326:3;39267:67;:::i;:::-;39260:74;;39343:93;39432:3;39343:93;:::i;:::-;39461:2;39456:3;39452:12;39445:19;;39104:366;;;:::o;39476:419::-;39642:4;39680:2;39669:9;39665:18;39657:26;;39729:9;39723:4;39719:20;39715:1;39704:9;39700:17;39693:47;39757:131;39883:4;39757:131;:::i;:::-;39749:139;;39476:419;;;:::o;39901:236::-;40041:34;40037:1;40029:6;40025:14;40018:58;40110:19;40105:2;40097:6;40093:15;40086:44;39901:236;:::o;40143:366::-;40285:3;40306:67;40370:2;40365:3;40306:67;:::i;:::-;40299:74;;40382:93;40471:3;40382:93;:::i;:::-;40500:2;40495:3;40491:12;40484:19;;40143:366;;;:::o;40515:419::-;40681:4;40719:2;40708:9;40704:18;40696:26;;40768:9;40762:4;40758:20;40754:1;40743:9;40739:17;40732:47;40796:131;40922:4;40796:131;:::i;:::-;40788:139;;40515:419;;;:::o;40940:182::-;41080:34;41076:1;41068:6;41064:14;41057:58;40940:182;:::o;41128:366::-;41270:3;41291:67;41355:2;41350:3;41291:67;:::i;:::-;41284:74;;41367:93;41456:3;41367:93;:::i;:::-;41485:2;41480:3;41476:12;41469:19;;41128:366;;;:::o;41500:419::-;41666:4;41704:2;41693:9;41689:18;41681:26;;41753:9;41747:4;41743:20;41739:1;41728:9;41724:17;41717:47;41781:131;41907:4;41781:131;:::i;:::-;41773:139;;41500:419;;;:::o;41925:178::-;42065:30;42061:1;42053:6;42049:14;42042:54;41925:178;:::o;42109:366::-;42251:3;42272:67;42336:2;42331:3;42272:67;:::i;:::-;42265:74;;42348:93;42437:3;42348:93;:::i;:::-;42466:2;42461:3;42457:12;42450:19;;42109:366;;;:::o;42481:419::-;42647:4;42685:2;42674:9;42670:18;42662:26;;42734:9;42728:4;42724:20;42720:1;42709:9;42705:17;42698:47;42762:131;42888:4;42762:131;:::i;:::-;42754:139;;42481:419;;;:::o;42906:180::-;42954:77;42951:1;42944:88;43051:4;43048:1;43041:15;43075:4;43072:1;43065:15;43092:185;43132:1;43149:20;43167:1;43149:20;:::i;:::-;43144:25;;43183:20;43201:1;43183:20;:::i;:::-;43178:25;;43222:1;43212:35;;43227:18;;:::i;:::-;43212:35;43269:1;43266;43262:9;43257:14;;43092:185;;;;:::o;43283:194::-;43323:4;43343:20;43361:1;43343:20;:::i;:::-;43338:25;;43377:20;43395:1;43377:20;:::i;:::-;43372:25;;43421:1;43418;43414:9;43406:17;;43445:1;43439:4;43436:11;43433:37;;;43450:18;;:::i;:::-;43433:37;43283:194;;;;:::o;43483:176::-;43515:1;43532:20;43550:1;43532:20;:::i;:::-;43527:25;;43566:20;43584:1;43566:20;:::i;:::-;43561:25;;43605:1;43595:35;;43610:18;;:::i;:::-;43595:35;43651:1;43648;43644:9;43639:14;;43483:176;;;;:::o;43665:231::-;43805:34;43801:1;43793:6;43789:14;43782:58;43874:14;43869:2;43861:6;43857:15;43850:39;43665:231;:::o;43902:366::-;44044:3;44065:67;44129:2;44124:3;44065:67;:::i;:::-;44058:74;;44141:93;44230:3;44141:93;:::i;:::-;44259:2;44254:3;44250:12;44243:19;;43902:366;;;:::o;44274:419::-;44440:4;44478:2;44467:9;44463:18;44455:26;;44527:9;44521:4;44517:20;44513:1;44502:9;44498:17;44491:47;44555:131;44681:4;44555:131;:::i;:::-;44547:139;;44274:419;;;:::o;44699:228::-;44839:34;44835:1;44827:6;44823:14;44816:58;44908:11;44903:2;44895:6;44891:15;44884:36;44699:228;:::o;44933:366::-;45075:3;45096:67;45160:2;45155:3;45096:67;:::i;:::-;45089:74;;45172:93;45261:3;45172:93;:::i;:::-;45290:2;45285:3;45281:12;45274:19;;44933:366;;;:::o;45305:419::-;45471:4;45509:2;45498:9;45494:18;45486:26;;45558:9;45552:4;45548:20;45544:1;45533:9;45529:17;45522:47;45586:131;45712:4;45586:131;:::i;:::-;45578:139;;45305:419;;;:::o;45730:223::-;45870:34;45866:1;45858:6;45854:14;45847:58;45939:6;45934:2;45926:6;45922:15;45915:31;45730:223;:::o;45959:366::-;46101:3;46122:67;46186:2;46181:3;46122:67;:::i;:::-;46115:74;;46198:93;46287:3;46198:93;:::i;:::-;46316:2;46311:3;46307:12;46300:19;;45959:366;;;:::o;46331:419::-;46497:4;46535:2;46524:9;46520:18;46512:26;;46584:9;46578:4;46574:20;46570:1;46559:9;46555:17;46548:47;46612:131;46738:4;46612:131;:::i;:::-;46604:139;;46331:419;;;:::o;46756:175::-;46896:27;46892:1;46884:6;46880:14;46873:51;46756:175;:::o;46937:366::-;47079:3;47100:67;47164:2;47159:3;47100:67;:::i;:::-;47093:74;;47176:93;47265:3;47176:93;:::i;:::-;47294:2;47289:3;47285:12;47278:19;;46937:366;;;:::o;47309:419::-;47475:4;47513:2;47502:9;47498:18;47490:26;;47562:9;47556:4;47552:20;47548:1;47537:9;47533:17;47526:47;47590:131;47716:4;47590:131;:::i;:::-;47582:139;;47309:419;;;:::o;47734:237::-;47874:34;47870:1;47862:6;47858:14;47851:58;47943:20;47938:2;47930:6;47926:15;47919:45;47734:237;:::o;47977:366::-;48119:3;48140:67;48204:2;48199:3;48140:67;:::i;:::-;48133:74;;48216:93;48305:3;48216:93;:::i;:::-;48334:2;48329:3;48325:12;48318:19;;47977:366;;;:::o;48349:419::-;48515:4;48553:2;48542:9;48538:18;48530:26;;48602:9;48596:4;48592:20;48588:1;48577:9;48573:17;48566:47;48630:131;48756:4;48630:131;:::i;:::-;48622:139;;48349:419;;;:::o;48774:98::-;48825:6;48859:5;48853:12;48843:22;;48774:98;;;:::o;48878:168::-;48961:11;48995:6;48990:3;48983:19;49035:4;49030:3;49026:14;49011:29;;48878:168;;;;:::o;49052:373::-;49138:3;49166:38;49198:5;49166:38;:::i;:::-;49220:70;49283:6;49278:3;49220:70;:::i;:::-;49213:77;;49299:65;49357:6;49352:3;49345:4;49338:5;49334:16;49299:65;:::i;:::-;49389:29;49411:6;49389:29;:::i;:::-;49384:3;49380:39;49373:46;;49142:283;49052:373;;;;:::o;49431:640::-;49626:4;49664:3;49653:9;49649:19;49641:27;;49678:71;49746:1;49735:9;49731:17;49722:6;49678:71;:::i;:::-;49759:72;49827:2;49816:9;49812:18;49803:6;49759:72;:::i;:::-;49841;49909:2;49898:9;49894:18;49885:6;49841:72;:::i;:::-;49960:9;49954:4;49950:20;49945:2;49934:9;49930:18;49923:48;49988:76;50059:4;50050:6;49988:76;:::i;:::-;49980:84;;49431:640;;;;;;;:::o;50077:141::-;50133:5;50164:6;50158:13;50149:22;;50180:32;50206:5;50180:32;:::i;:::-;50077:141;;;;:::o;50224:349::-;50293:6;50342:2;50330:9;50321:7;50317:23;50313:32;50310:119;;;50348:79;;:::i;:::-;50310:119;50468:1;50493:63;50548:7;50539:6;50528:9;50524:22;50493:63;:::i;:::-;50483:73;;50439:127;50224:349;;;;:::o
Swarm Source
ipfs://894330634a8a6fb566e4d592509cce934b96ca9f0d5f042632896f225160272d
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.