Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1 NEXTHIRE
Holders
1
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 NEXTHIRELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NextHireClubPass
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-04 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/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/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved( uint256 tokenId ) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll( address owner, address operator ) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex( address owner, uint256 index ) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString( uint256 value, uint256 length ) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/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/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/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/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 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll( address owner, address operator ) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public 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 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/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface( bytes4 interfaceId ) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex( address owner, uint256 index ) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex( uint256 index ) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration( address from, uint256 tokenId ) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED if (_status == _ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } pragma solidity >=0.7.0 <0.9.0; contract NextHireClubPass is ERC721Enumerable, Ownable, ReentrancyGuard { using Strings for uint256; string public baseTokenURI = ""; address payable expenseWallet; uint256 public mintPrice = 0.09 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 5; bool public paused = false; constructor( string memory name, string memory symbol, string memory uri, address payable wallet ) ERC721(name, symbol) { setBaseURI(uri); setExpensesWallet(wallet); } function mint(uint256 _mintAmount) public payable nonReentrant { uint256 supply = totalSupply(); require(!paused, "Contract is paused"); require( _mintAmount > 0 && _mintAmount <= maxMintAmount, "Invalid mint amount" ); require(supply + _mintAmount <= maxSupply, "Exceeds maximum supply"); if (msg.sender != owner()) { require(msg.value >= mintPrice * _mintAmount, "Insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function tokenURI( uint256 tokenId ) public view virtual override returns (string memory) { require(_exists(tokenId), "Token does not exist"); return bytes(baseTokenURI).length > 0 ? string(abi.encodePacked(baseTokenURI, tokenId.toString())) : ""; } function setMintPrice(uint256 _newMintPrice) public onlyOwner { mintPrice = _newMintPrice; } function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner { maxMintAmount = _newMaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseTokenURI = _newBaseURI; } function setExpensesWallet(address payable _newExpensesWallet) public onlyOwner { expenseWallet = _newExpensesWallet; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(expenseWallet).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"address payable","name":"wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newExpensesWallet","type":"address"}],"name":"setExpensesWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260405180602001604052805f815250600c9081620000239190620005cd565b5067013fbe85edc90000600e55612710600f5560056010555f60115f6101000a81548160ff02191690831515021790555034801562000060575f80fd5b5060405162004b3238038062004b3283398181016040528101906200008691906200086a565b8383815f9081620000989190620005cd565b508060019081620000aa9190620005cd565b505050620000cd620000c16200010160201b60201c565b6200010860201b60201c565b6001600b81905550620000e682620001cb60201b60201c565b620000f7816200026f60201b60201c565b50505050620009b4565b5f33905090565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001db6200010160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002016200034160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200025a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002519062000994565b60405180910390fd5b80600c90816200026b9190620005cd565b5050565b6200027f6200010160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a56200034160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f59062000994565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003e557607f821691505b602082108103620003fb57620003fa620003a0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200045f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000422565b6200046b868362000422565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004b5620004af620004a98462000483565b6200048c565b62000483565b9050919050565b5f819050919050565b620004d08362000495565b620004e8620004df82620004bc565b8484546200042e565b825550505050565b5f90565b620004fe620004f0565b6200050b818484620004c5565b505050565b5b818110156200053257620005265f82620004f4565b60018101905062000511565b5050565b601f82111562000581576200054b8162000401565b620005568462000413565b8101602085101562000566578190505b6200057e620005758562000413565b83018262000510565b50505b505050565b5f82821c905092915050565b5f620005a35f198460080262000586565b1980831691505092915050565b5f620005bd838362000592565b9150826002028217905092915050565b620005d88262000369565b67ffffffffffffffff811115620005f457620005f362000373565b5b620006008254620003cd565b6200060d82828562000536565b5f60209050601f83116001811462000643575f84156200062e578287015190505b6200063a8582620005b0565b865550620006a9565b601f198416620006538662000401565b5f5b828110156200067c5784890151825560018201915060208501945060208101905062000655565b868310156200069c578489015162000698601f89168262000592565b8355505b6001600288020188555050505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b620006e582620006ca565b810181811067ffffffffffffffff8211171562000707576200070662000373565b5b80604052505050565b5f6200071b620006b1565b9050620007298282620006da565b919050565b5f67ffffffffffffffff8211156200074b576200074a62000373565b5b6200075682620006ca565b9050602081019050919050565b5f5b838110156200078257808201518184015260208101905062000765565b5f8484015250505050565b5f620007a36200079d846200072e565b62000710565b905082815260208101848484011115620007c257620007c1620006c6565b5b620007cf84828562000763565b509392505050565b5f82601f830112620007ee57620007ed620006c2565b5b8151620008008482602086016200078d565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620008348262000809565b9050919050565b620008468162000828565b811462000851575f80fd5b50565b5f8151905062000864816200083b565b92915050565b5f805f8060808587031215620008855762000884620006ba565b5b5f85015167ffffffffffffffff811115620008a557620008a4620006be565b5b620008b387828801620007d7565b945050602085015167ffffffffffffffff811115620008d757620008d6620006be565b5b620008e587828801620007d7565b935050604085015167ffffffffffffffff811115620009095762000908620006be565b5b6200091787828801620007d7565b92505060606200092a8782880162000854565b91505092959194509250565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200097c60208362000936565b9150620009898262000946565b602082019050919050565b5f6020820190508181035f830152620009ad816200096e565b9050919050565b61417080620009c25f395ff3fe6080604052600436106101d7575f3560e01c80636352211e11610101578063b88d4fde11610094578063d5abeb0111610063578063d5abeb0114610673578063e985e9c51461069d578063f2fde38b146106d9578063f4a0a52814610701576101d7565b8063b88d4fde146105bd578063c87b56dd146105e5578063d25ce5e314610621578063d547cfb714610649576101d7565b80638da5cb5b116100d05780638da5cb5b1461052557806395d89b411461054f578063a0712d6814610579578063a22cb46514610595576101d7565b80636352211e1461046d5780636817c76c146104a957806370a08231146104d3578063715018a61461050f576101d7565b8063239c70ae1161017957806342842e0e1161014857806342842e0e146103b75780634f6ccce7146103df57806355f804b31461041b5780635c975abb14610443576101d7565b8063239c70ae1461031f57806323b872dd146103495780632f745c59146103715780633ccfd60b146103ad576101d7565b8063081812fc116101b5578063081812fc14610269578063088a4ed0146102a5578063095ea7b3146102cd57806318160ddd146102f5576101d7565b806301ffc9a7146101db57806302329a291461021757806306fdde031461023f575b5f80fd5b3480156101e6575f80fd5b5061020160048036038101906101fc9190612907565b610729565b60405161020e919061294c565b60405180910390f35b348015610222575f80fd5b5061023d6004803603810190610238919061298f565b6107a2565b005b34801561024a575f80fd5b5061025361083a565b6040516102609190612a44565b60405180910390f35b348015610274575f80fd5b5061028f600480360381019061028a9190612a97565b6108c9565b60405161029c9190612b01565b60405180910390f35b3480156102b0575f80fd5b506102cb60048036038101906102c69190612a97565b61094a565b005b3480156102d8575f80fd5b506102f360048036038101906102ee9190612b44565b6109d0565b005b348015610300575f80fd5b50610309610ae6565b6040516103169190612b91565b60405180910390f35b34801561032a575f80fd5b50610333610af2565b6040516103409190612b91565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a9190612baa565b610af8565b005b34801561037c575f80fd5b5061039760048036038101906103929190612b44565b610b58565b6040516103a49190612b91565b60405180910390f35b6103b5610bf8565b005b3480156103c2575f80fd5b506103dd60048036038101906103d89190612baa565b610d09565b005b3480156103ea575f80fd5b5061040560048036038101906104009190612a97565b610d28565b6040516104129190612b91565b60405180910390f35b348015610426575f80fd5b50610441600480360381019061043c9190612d26565b610d96565b005b34801561044e575f80fd5b50610457610e25565b604051610464919061294c565b60405180910390f35b348015610478575f80fd5b50610493600480360381019061048e9190612a97565b610e37565b6040516104a09190612b01565b60405180910390f35b3480156104b4575f80fd5b506104bd610ee3565b6040516104ca9190612b91565b60405180910390f35b3480156104de575f80fd5b506104f960048036038101906104f49190612d6d565b610ee9565b6040516105069190612b91565b60405180910390f35b34801561051a575f80fd5b50610523610f9d565b005b348015610530575f80fd5b50610539611024565b6040516105469190612b01565b60405180910390f35b34801561055a575f80fd5b5061056361104c565b6040516105709190612a44565b60405180910390f35b610593600480360381019061058e9190612a97565b6110dc565b005b3480156105a0575f80fd5b506105bb60048036038101906105b69190612d98565b6112ab565b005b3480156105c8575f80fd5b506105e360048036038101906105de9190612e74565b611426565b005b3480156105f0575f80fd5b5061060b60048036038101906106069190612a97565b611488565b6040516106189190612a44565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190612f2f565b61152e565b005b348015610654575f80fd5b5061065d6115ed565b60405161066a9190612a44565b60405180910390f35b34801561067e575f80fd5b50610687611679565b6040516106949190612b91565b60405180910390f35b3480156106a8575f80fd5b506106c360048036038101906106be9190612f5a565b61167f565b6040516106d0919061294c565b60405180910390f35b3480156106e4575f80fd5b506106ff60048036038101906106fa9190612d6d565b61170d565b005b34801561070c575f80fd5b5061072760048036038101906107229190612a97565b611803565b005b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061079b575061079a82611889565b5b9050919050565b6107aa61196a565b73ffffffffffffffffffffffffffffffffffffffff166107c8611024565b73ffffffffffffffffffffffffffffffffffffffff161461081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590612fe2565b60405180910390fd5b8060115f6101000a81548160ff02191690831515021790555050565b60605f80546108489061302d565b80601f01602080910402602001604051908101604052809291908181526020018280546108749061302d565b80156108bf5780601f10610896576101008083540402835291602001916108bf565b820191905f5260205f20905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b5f6108d382611971565b610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610909906130cd565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61095261196a565b73ffffffffffffffffffffffffffffffffffffffff16610970611024565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90612fe2565b60405180910390fd5b8060108190555050565b5f6109da82610e37565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a419061315b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6961196a565b73ffffffffffffffffffffffffffffffffffffffff161480610a985750610a9781610a9261196a565b61167f565b5b610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace906131e9565b60405180910390fd5b610ae183836119d9565b505050565b5f600880549050905090565b60105481565b610b09610b0361196a565b82611a8f565b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613277565b60405180910390fd5b610b53838383611b6b565b505050565b5f610b6283610ee9565b8210610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613305565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b610c0061196a565b73ffffffffffffffffffffffffffffffffffffffff16610c1e611024565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90612fe2565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610cba90613350565b5f6040518083038185875af1925050503d805f8114610cf4576040519150601f19603f3d011682016040523d82523d5f602084013e610cf9565b606091505b5050905080610d06575f80fd5b50565b610d2383838360405180602001604052805f815250611426565b505050565b5f610d31610ae6565b8210610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906133d4565b60405180910390fd5b60088281548110610d8657610d856133f2565b5b905f5260205f2001549050919050565b610d9e61196a565b73ffffffffffffffffffffffffffffffffffffffff16610dbc611024565b73ffffffffffffffffffffffffffffffffffffffff1614610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0990612fe2565b60405180910390fd5b80600c9081610e2191906135bc565b5050565b60115f9054906101000a900460ff1681565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed1906136fb565b60405180910390fd5b80915050919050565b600e5481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613789565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fa561196a565b73ffffffffffffffffffffffffffffffffffffffff16610fc3611024565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090612fe2565b60405180910390fd5b6110225f611dbb565b565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461105b9061302d565b80601f01602080910402602001604051908101604052809291908181526020018280546110879061302d565b80156110d25780601f106110a9576101008083540402835291602001916110d2565b820191905f5260205f20905b8154815290600101906020018083116110b557829003601f168201915b5050505050905090565b6110e4611e7e565b5f6110ed610ae6565b905060115f9054906101000a900460ff161561113e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611135906137f1565b60405180910390fd5b5f8211801561114f57506010548211155b61118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118590613859565b60405180910390fd5b600f54828261119d91906138a4565b11156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613921565b60405180910390fd5b6111e6611024565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112695781600e54611226919061393f565b341015611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f906139ca565b60405180910390fd5b5b5f600190505b82811161129e5761128b33828461128691906138a4565b611ec4565b8080611296906139e8565b91505061126f565b50506112a8611ee1565b50565b6112b361196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131790613a79565b60405180910390fd5b8060055f61132c61196a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113d561196a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161141a919061294c565b60405180910390a35050565b61143761143161196a565b83611a8f565b611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90613277565b60405180910390fd5b61148284848484611eeb565b50505050565b606061149382611971565b6114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990613ae1565b60405180910390fd5b5f600c80546114e09061302d565b9050116114fb5760405180602001604052805f815250611527565b600c61150683611f47565b604051602001611517929190613bb9565b6040516020818303038152906040525b9050919050565b61153661196a565b73ffffffffffffffffffffffffffffffffffffffff16611554611024565b73ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190612fe2565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c80546115fa9061302d565b80601f01602080910402602001604051908101604052809291908181526020018280546116269061302d565b80156116715780601f1061164857610100808354040283529160200191611671565b820191905f5260205f20905b81548152906001019060200180831161165457829003601f168201915b505050505081565b600f5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61171561196a565b73ffffffffffffffffffffffffffffffffffffffff16611733611024565b73ffffffffffffffffffffffffffffffffffffffff1614611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090612fe2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613c4c565b60405180910390fd5b61180081611dbb565b50565b61180b61196a565b73ffffffffffffffffffffffffffffffffffffffff16611829611024565b73ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690612fe2565b60405180910390fd5b80600e8190555050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119635750611962826120a0565b5b9050919050565b5f33905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a4983610e37565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f611a9982611971565b611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf90613cda565b60405180910390fd5b5f611ae283610e37565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b5157508373ffffffffffffffffffffffffffffffffffffffff16611b39846108c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b625750611b61818561167f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b8b82610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613d68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690613df6565b60405180910390fd5b611c5a838383612109565b611c645f826119d9565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb19190613e14565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d0591906138a4565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002600b5403611eba576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600b81905550565b611edd828260405180602001604052805f815250612219565b5050565b6001600b81905550565b611ef6848484611b6b565b611f0284848484612273565b611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890613eb7565b60405180910390fd5b50505050565b60605f8203611f8d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061209b565b5f8290505f5b5f8214611fbc578080611fa5906139e8565b915050600a82611fb59190613f02565b9150611f93565b5f8167ffffffffffffffff811115611fd757611fd6612c02565b5b6040519080825280601f01601f1916602001820160405280156120095781602001600182028036833780820191505090505b5090505b5f8514612094576001826120219190613e14565b9150600a856120309190613f32565b603061203c91906138a4565b60f81b818381518110612052576120516133f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561208d9190613f02565b945061200d565b8093505050505b919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121148383836123f5565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361215557612150816123fa565b612194565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461219357612192838261243e565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d5576121d081612594565b612214565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612213576122128282612654565b5b5b505050565b61222383836126cc565b61222f5f848484612273565b61226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590613eb7565b60405180910390fd5b505050565b5f6122938473ffffffffffffffffffffffffffffffffffffffff16612890565b156123e8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122bc61196a565b8786866040518563ffffffff1660e01b81526004016122de9493929190613fb4565b6020604051808303815f875af192505050801561231957506040513d601f19601f820116820180604052508101906123169190614012565b60015b612398573d805f8114612347576040519150601f19603f3d011682016040523d82523d5f602084013e61234c565b606091505b505f815103612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613eb7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123ed565b600190505b949350505050565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f600161244a84610ee9565b6124549190613e14565b90505f60075f8481526020019081526020015f2054905081811461252b575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506125a79190613e14565b90505f60095f8481526020019081526020015f205490505f600883815481106125d3576125d26133f2565b5b905f5260205f200154905080600883815481106125f3576125f26133f2565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061263b5761263a61403d565b5b600190038181905f5260205f20015f9055905550505050565b5f61265e83610ee9565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612731906140b4565b60405180910390fd5b61274381611971565b15612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a9061411c565b60405180910390fd5b61278e5f8383612109565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127db91906138a4565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128e6816128b2565b81146128f0575f80fd5b50565b5f81359050612901816128dd565b92915050565b5f6020828403121561291c5761291b6128aa565b5b5f612929848285016128f3565b91505092915050565b5f8115159050919050565b61294681612932565b82525050565b5f60208201905061295f5f83018461293d565b92915050565b61296e81612932565b8114612978575f80fd5b50565b5f8135905061298981612965565b92915050565b5f602082840312156129a4576129a36128aa565b5b5f6129b18482850161297b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129f15780820151818401526020810190506129d6565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a16826129ba565b612a2081856129c4565b9350612a308185602086016129d4565b612a39816129fc565b840191505092915050565b5f6020820190508181035f830152612a5c8184612a0c565b905092915050565b5f819050919050565b612a7681612a64565b8114612a80575f80fd5b50565b5f81359050612a9181612a6d565b92915050565b5f60208284031215612aac57612aab6128aa565b5b5f612ab984828501612a83565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612aeb82612ac2565b9050919050565b612afb81612ae1565b82525050565b5f602082019050612b145f830184612af2565b92915050565b612b2381612ae1565b8114612b2d575f80fd5b50565b5f81359050612b3e81612b1a565b92915050565b5f8060408385031215612b5a57612b596128aa565b5b5f612b6785828601612b30565b9250506020612b7885828601612a83565b9150509250929050565b612b8b81612a64565b82525050565b5f602082019050612ba45f830184612b82565b92915050565b5f805f60608486031215612bc157612bc06128aa565b5b5f612bce86828701612b30565b9350506020612bdf86828701612b30565b9250506040612bf086828701612a83565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612c38826129fc565b810181811067ffffffffffffffff82111715612c5757612c56612c02565b5b80604052505050565b5f612c696128a1565b9050612c758282612c2f565b919050565b5f67ffffffffffffffff821115612c9457612c93612c02565b5b612c9d826129fc565b9050602081019050919050565b828183375f83830152505050565b5f612cca612cc584612c7a565b612c60565b905082815260208101848484011115612ce657612ce5612bfe565b5b612cf1848285612caa565b509392505050565b5f82601f830112612d0d57612d0c612bfa565b5b8135612d1d848260208601612cb8565b91505092915050565b5f60208284031215612d3b57612d3a6128aa565b5b5f82013567ffffffffffffffff811115612d5857612d576128ae565b5b612d6484828501612cf9565b91505092915050565b5f60208284031215612d8257612d816128aa565b5b5f612d8f84828501612b30565b91505092915050565b5f8060408385031215612dae57612dad6128aa565b5b5f612dbb85828601612b30565b9250506020612dcc8582860161297b565b9150509250929050565b5f67ffffffffffffffff821115612df057612def612c02565b5b612df9826129fc565b9050602081019050919050565b5f612e18612e1384612dd6565b612c60565b905082815260208101848484011115612e3457612e33612bfe565b5b612e3f848285612caa565b509392505050565b5f82601f830112612e5b57612e5a612bfa565b5b8135612e6b848260208601612e06565b91505092915050565b5f805f8060808587031215612e8c57612e8b6128aa565b5b5f612e9987828801612b30565b9450506020612eaa87828801612b30565b9350506040612ebb87828801612a83565b925050606085013567ffffffffffffffff811115612edc57612edb6128ae565b5b612ee887828801612e47565b91505092959194509250565b5f612efe82612ac2565b9050919050565b612f0e81612ef4565b8114612f18575f80fd5b50565b5f81359050612f2981612f05565b92915050565b5f60208284031215612f4457612f436128aa565b5b5f612f5184828501612f1b565b91505092915050565b5f8060408385031215612f7057612f6f6128aa565b5b5f612f7d85828601612b30565b9250506020612f8e85828601612b30565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fcc6020836129c4565b9150612fd782612f98565b602082019050919050565b5f6020820190508181035f830152612ff981612fc0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061304457607f821691505b60208210810361305757613056613000565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f6130b7602c836129c4565b91506130c28261305d565b604082019050919050565b5f6020820190508181035f8301526130e4816130ab565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131456021836129c4565b9150613150826130eb565b604082019050919050565b5f6020820190508181035f83015261317281613139565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f6131d36038836129c4565b91506131de82613179565b604082019050919050565b5f6020820190508181035f830152613200816131c7565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f6132616031836129c4565b915061326c82613207565b604082019050919050565b5f6020820190508181035f83015261328e81613255565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f6132ef602b836129c4565b91506132fa82613295565b604082019050919050565b5f6020820190508181035f83015261331c816132e3565b9050919050565b5f81905092915050565b50565b5f61333b5f83613323565b91506133468261332d565b5f82019050919050565b5f61335a82613330565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f6133be602c836129c4565b91506133c982613364565b604082019050919050565b5f6020820190508181035f8301526133eb816133b2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261347b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613440565b6134858683613440565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6134c06134bb6134b684612a64565b61349d565b612a64565b9050919050565b5f819050919050565b6134d9836134a6565b6134ed6134e5826134c7565b84845461344c565b825550505050565b5f90565b6135016134f5565b61350c8184846134d0565b505050565b5b8181101561352f576135245f826134f9565b600181019050613512565b5050565b601f821115613574576135458161341f565b61354e84613431565b8101602085101561355d578190505b61357161356985613431565b830182613511565b50505b505050565b5f82821c905092915050565b5f6135945f1984600802613579565b1980831691505092915050565b5f6135ac8383613585565b9150826002028217905092915050565b6135c5826129ba565b67ffffffffffffffff8111156135de576135dd612c02565b5b6135e8825461302d565b6135f3828285613533565b5f60209050601f831160018114613624575f8415613612578287015190505b61361c85826135a1565b865550613683565b601f1984166136328661341f565b5f5b8281101561365957848901518255600182019150602085019450602081019050613634565b868310156136765784890151613672601f891682613585565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f6136e56029836129c4565b91506136f08261368b565b604082019050919050565b5f6020820190508181035f830152613712816136d9565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f613773602a836129c4565b915061377e82613719565b604082019050919050565b5f6020820190508181035f8301526137a081613767565b9050919050565b7f436f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f6137db6012836129c4565b91506137e6826137a7565b602082019050919050565b5f6020820190508181035f830152613808816137cf565b9050919050565b7f496e76616c6964206d696e7420616d6f756e74000000000000000000000000005f82015250565b5f6138436013836129c4565b915061384e8261380f565b602082019050919050565b5f6020820190508181035f83015261387081613837565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6138ae82612a64565b91506138b983612a64565b92508282019050808211156138d1576138d0613877565b5b92915050565b7f45786365656473206d6178696d756d20737570706c79000000000000000000005f82015250565b5f61390b6016836129c4565b9150613916826138d7565b602082019050919050565b5f6020820190508181035f830152613938816138ff565b9050919050565b5f61394982612a64565b915061395483612a64565b925082820261396281612a64565b9150828204841483151761397957613978613877565b5b5092915050565b7f496e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f6139b46012836129c4565b91506139bf82613980565b602082019050919050565b5f6020820190508181035f8301526139e1816139a8565b9050919050565b5f6139f282612a64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a2457613a23613877565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f613a636019836129c4565b9150613a6e82613a2f565b602082019050919050565b5f6020820190508181035f830152613a9081613a57565b9050919050565b7f546f6b656e20646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613acb6014836129c4565b9150613ad682613a97565b602082019050919050565b5f6020820190508181035f830152613af881613abf565b9050919050565b5f81905092915050565b5f8154613b158161302d565b613b1f8186613aff565b9450600182165f8114613b395760018114613b4e57613b80565b60ff1983168652811515820286019350613b80565b613b578561341f565b5f5b83811015613b7857815481890152600182019150602081019050613b59565b838801955050505b50505092915050565b5f613b93826129ba565b613b9d8185613aff565b9350613bad8185602086016129d4565b80840191505092915050565b5f613bc48285613b09565b9150613bd08284613b89565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c366026836129c4565b9150613c4182613bdc565b604082019050919050565b5f6020820190508181035f830152613c6381613c2a565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f613cc4602c836129c4565b9150613ccf82613c6a565b604082019050919050565b5f6020820190508181035f830152613cf181613cb8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f613d526029836129c4565b9150613d5d82613cf8565b604082019050919050565b5f6020820190508181035f830152613d7f81613d46565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613de06024836129c4565b9150613deb82613d86565b604082019050919050565b5f6020820190508181035f830152613e0d81613dd4565b9050919050565b5f613e1e82612a64565b9150613e2983612a64565b9250828203905081811115613e4157613e40613877565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f613ea16032836129c4565b9150613eac82613e47565b604082019050919050565b5f6020820190508181035f830152613ece81613e95565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f0c82612a64565b9150613f1783612a64565b925082613f2757613f26613ed5565b5b828204905092915050565b5f613f3c82612a64565b9150613f4783612a64565b925082613f5757613f56613ed5565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f613f8682613f62565b613f908185613f6c565b9350613fa08185602086016129d4565b613fa9816129fc565b840191505092915050565b5f608082019050613fc75f830187612af2565b613fd46020830186612af2565b613fe16040830185612b82565b8181036060830152613ff38184613f7c565b905095945050505050565b5f8151905061400c816128dd565b92915050565b5f60208284031215614027576140266128aa565b5b5f61403484828501613ffe565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61409e6020836129c4565b91506140a98261406a565b602082019050919050565b5f6020820190508181035f8301526140cb81614092565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f614106601c836129c4565b9150614111826140d2565b602082019050919050565b5f6020820190508181035f830152614133816140fa565b905091905056fea26469706673582212203e44f56a38ef2b5687e805afd20808166e0441c6423e8064a0ed689c837466c464736f6c63430008150033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000018d9de262f0ac594f3ccae2fe447b8cb5128622900000000000000000000000000000000000000000000000000000000000000124e6578744869726520436c75622050617373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e45585448495245000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005268747470733a2f2f63646e2e6e657874686972652e636c75622f746f6b656e2d6d657461646174612f6e657874686972652d636c75622d706173732f6d657461646174612e6a736f6e3f746f6b656e49643d0000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101d7575f3560e01c80636352211e11610101578063b88d4fde11610094578063d5abeb0111610063578063d5abeb0114610673578063e985e9c51461069d578063f2fde38b146106d9578063f4a0a52814610701576101d7565b8063b88d4fde146105bd578063c87b56dd146105e5578063d25ce5e314610621578063d547cfb714610649576101d7565b80638da5cb5b116100d05780638da5cb5b1461052557806395d89b411461054f578063a0712d6814610579578063a22cb46514610595576101d7565b80636352211e1461046d5780636817c76c146104a957806370a08231146104d3578063715018a61461050f576101d7565b8063239c70ae1161017957806342842e0e1161014857806342842e0e146103b75780634f6ccce7146103df57806355f804b31461041b5780635c975abb14610443576101d7565b8063239c70ae1461031f57806323b872dd146103495780632f745c59146103715780633ccfd60b146103ad576101d7565b8063081812fc116101b5578063081812fc14610269578063088a4ed0146102a5578063095ea7b3146102cd57806318160ddd146102f5576101d7565b806301ffc9a7146101db57806302329a291461021757806306fdde031461023f575b5f80fd5b3480156101e6575f80fd5b5061020160048036038101906101fc9190612907565b610729565b60405161020e919061294c565b60405180910390f35b348015610222575f80fd5b5061023d6004803603810190610238919061298f565b6107a2565b005b34801561024a575f80fd5b5061025361083a565b6040516102609190612a44565b60405180910390f35b348015610274575f80fd5b5061028f600480360381019061028a9190612a97565b6108c9565b60405161029c9190612b01565b60405180910390f35b3480156102b0575f80fd5b506102cb60048036038101906102c69190612a97565b61094a565b005b3480156102d8575f80fd5b506102f360048036038101906102ee9190612b44565b6109d0565b005b348015610300575f80fd5b50610309610ae6565b6040516103169190612b91565b60405180910390f35b34801561032a575f80fd5b50610333610af2565b6040516103409190612b91565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a9190612baa565b610af8565b005b34801561037c575f80fd5b5061039760048036038101906103929190612b44565b610b58565b6040516103a49190612b91565b60405180910390f35b6103b5610bf8565b005b3480156103c2575f80fd5b506103dd60048036038101906103d89190612baa565b610d09565b005b3480156103ea575f80fd5b5061040560048036038101906104009190612a97565b610d28565b6040516104129190612b91565b60405180910390f35b348015610426575f80fd5b50610441600480360381019061043c9190612d26565b610d96565b005b34801561044e575f80fd5b50610457610e25565b604051610464919061294c565b60405180910390f35b348015610478575f80fd5b50610493600480360381019061048e9190612a97565b610e37565b6040516104a09190612b01565b60405180910390f35b3480156104b4575f80fd5b506104bd610ee3565b6040516104ca9190612b91565b60405180910390f35b3480156104de575f80fd5b506104f960048036038101906104f49190612d6d565b610ee9565b6040516105069190612b91565b60405180910390f35b34801561051a575f80fd5b50610523610f9d565b005b348015610530575f80fd5b50610539611024565b6040516105469190612b01565b60405180910390f35b34801561055a575f80fd5b5061056361104c565b6040516105709190612a44565b60405180910390f35b610593600480360381019061058e9190612a97565b6110dc565b005b3480156105a0575f80fd5b506105bb60048036038101906105b69190612d98565b6112ab565b005b3480156105c8575f80fd5b506105e360048036038101906105de9190612e74565b611426565b005b3480156105f0575f80fd5b5061060b60048036038101906106069190612a97565b611488565b6040516106189190612a44565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190612f2f565b61152e565b005b348015610654575f80fd5b5061065d6115ed565b60405161066a9190612a44565b60405180910390f35b34801561067e575f80fd5b50610687611679565b6040516106949190612b91565b60405180910390f35b3480156106a8575f80fd5b506106c360048036038101906106be9190612f5a565b61167f565b6040516106d0919061294c565b60405180910390f35b3480156106e4575f80fd5b506106ff60048036038101906106fa9190612d6d565b61170d565b005b34801561070c575f80fd5b5061072760048036038101906107229190612a97565b611803565b005b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061079b575061079a82611889565b5b9050919050565b6107aa61196a565b73ffffffffffffffffffffffffffffffffffffffff166107c8611024565b73ffffffffffffffffffffffffffffffffffffffff161461081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590612fe2565b60405180910390fd5b8060115f6101000a81548160ff02191690831515021790555050565b60605f80546108489061302d565b80601f01602080910402602001604051908101604052809291908181526020018280546108749061302d565b80156108bf5780601f10610896576101008083540402835291602001916108bf565b820191905f5260205f20905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b5f6108d382611971565b610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610909906130cd565b60405180910390fd5b60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61095261196a565b73ffffffffffffffffffffffffffffffffffffffff16610970611024565b73ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90612fe2565b60405180910390fd5b8060108190555050565b5f6109da82610e37565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a419061315b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6961196a565b73ffffffffffffffffffffffffffffffffffffffff161480610a985750610a9781610a9261196a565b61167f565b5b610ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ace906131e9565b60405180910390fd5b610ae183836119d9565b505050565b5f600880549050905090565b60105481565b610b09610b0361196a565b82611a8f565b610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613277565b60405180910390fd5b610b53838383611b6b565b505050565b5f610b6283610ee9565b8210610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613305565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b610c0061196a565b73ffffffffffffffffffffffffffffffffffffffff16610c1e611024565b73ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90612fe2565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610cba90613350565b5f6040518083038185875af1925050503d805f8114610cf4576040519150601f19603f3d011682016040523d82523d5f602084013e610cf9565b606091505b5050905080610d06575f80fd5b50565b610d2383838360405180602001604052805f815250611426565b505050565b5f610d31610ae6565b8210610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d69906133d4565b60405180910390fd5b60088281548110610d8657610d856133f2565b5b905f5260205f2001549050919050565b610d9e61196a565b73ffffffffffffffffffffffffffffffffffffffff16610dbc611024565b73ffffffffffffffffffffffffffffffffffffffff1614610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0990612fe2565b60405180910390fd5b80600c9081610e2191906135bc565b5050565b60115f9054906101000a900460ff1681565b5f8060025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed1906136fb565b60405180910390fd5b80915050919050565b600e5481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613789565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fa561196a565b73ffffffffffffffffffffffffffffffffffffffff16610fc3611024565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090612fe2565b60405180910390fd5b6110225f611dbb565b565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461105b9061302d565b80601f01602080910402602001604051908101604052809291908181526020018280546110879061302d565b80156110d25780601f106110a9576101008083540402835291602001916110d2565b820191905f5260205f20905b8154815290600101906020018083116110b557829003601f168201915b5050505050905090565b6110e4611e7e565b5f6110ed610ae6565b905060115f9054906101000a900460ff161561113e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611135906137f1565b60405180910390fd5b5f8211801561114f57506010548211155b61118e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118590613859565b60405180910390fd5b600f54828261119d91906138a4565b11156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590613921565b60405180910390fd5b6111e6611024565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112695781600e54611226919061393f565b341015611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f906139ca565b60405180910390fd5b5b5f600190505b82811161129e5761128b33828461128691906138a4565b611ec4565b8080611296906139e8565b91505061126f565b50506112a8611ee1565b50565b6112b361196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131790613a79565b60405180910390fd5b8060055f61132c61196a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113d561196a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161141a919061294c565b60405180910390a35050565b61143761143161196a565b83611a8f565b611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90613277565b60405180910390fd5b61148284848484611eeb565b50505050565b606061149382611971565b6114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990613ae1565b60405180910390fd5b5f600c80546114e09061302d565b9050116114fb5760405180602001604052805f815250611527565b600c61150683611f47565b604051602001611517929190613bb9565b6040516020818303038152906040525b9050919050565b61153661196a565b73ffffffffffffffffffffffffffffffffffffffff16611554611024565b73ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190612fe2565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c80546115fa9061302d565b80601f01602080910402602001604051908101604052809291908181526020018280546116269061302d565b80156116715780601f1061164857610100808354040283529160200191611671565b820191905f5260205f20905b81548152906001019060200180831161165457829003601f168201915b505050505081565b600f5481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61171561196a565b73ffffffffffffffffffffffffffffffffffffffff16611733611024565b73ffffffffffffffffffffffffffffffffffffffff1614611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090612fe2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ee90613c4c565b60405180910390fd5b61180081611dbb565b50565b61180b61196a565b73ffffffffffffffffffffffffffffffffffffffff16611829611024565b73ffffffffffffffffffffffffffffffffffffffff161461187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690612fe2565b60405180910390fd5b80600e8190555050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806119635750611962826120a0565b5b9050919050565b5f33905090565b5f8073ffffffffffffffffffffffffffffffffffffffff1660025f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b8160045f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a4983610e37565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f611a9982611971565b611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf90613cda565b60405180910390fd5b5f611ae283610e37565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b5157508373ffffffffffffffffffffffffffffffffffffffff16611b39846108c9565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b625750611b61818561167f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b8b82610e37565b73ffffffffffffffffffffffffffffffffffffffff1614611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890613d68565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690613df6565b60405180910390fd5b611c5a838383612109565b611c645f826119d9565b600160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cb19190613e14565b92505081905550600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d0591906138a4565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6002600b5403611eba576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600b81905550565b611edd828260405180602001604052805f815250612219565b5050565b6001600b81905550565b611ef6848484611b6b565b611f0284848484612273565b611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890613eb7565b60405180910390fd5b50505050565b60605f8203611f8d576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061209b565b5f8290505f5b5f8214611fbc578080611fa5906139e8565b915050600a82611fb59190613f02565b9150611f93565b5f8167ffffffffffffffff811115611fd757611fd6612c02565b5b6040519080825280601f01601f1916602001820160405280156120095781602001600182028036833780820191505090505b5090505b5f8514612094576001826120219190613e14565b9150600a856120309190613f32565b603061203c91906138a4565b60f81b818381518110612052576120516133f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561208d9190613f02565b945061200d565b8093505050505b919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121148383836123f5565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361215557612150816123fa565b612194565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461219357612192838261243e565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d5576121d081612594565b612214565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612213576122128282612654565b5b5b505050565b61222383836126cc565b61222f5f848484612273565b61226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590613eb7565b60405180910390fd5b505050565b5f6122938473ffffffffffffffffffffffffffffffffffffffff16612890565b156123e8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122bc61196a565b8786866040518563ffffffff1660e01b81526004016122de9493929190613fb4565b6020604051808303815f875af192505050801561231957506040513d601f19601f820116820180604052508101906123169190614012565b60015b612398573d805f8114612347576040519150601f19603f3d011682016040523d82523d5f602084013e61234c565b606091505b505f815103612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238790613eb7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123ed565b600190505b949350505050565b505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f600161244a84610ee9565b6124549190613e14565b90505f60075f8481526020019081526020015f2054905081811461252b575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f60016008805490506125a79190613e14565b90505f60095f8481526020019081526020015f205490505f600883815481106125d3576125d26133f2565b5b905f5260205f200154905080600883815481106125f3576125f26133f2565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f9055600880548061263b5761263a61403d565b5b600190038181905f5260205f20015f9055905550505050565b5f61265e83610ee9565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612731906140b4565b60405180910390fd5b61274381611971565b15612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a9061411c565b60405180910390fd5b61278e5f8383612109565b600160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127db91906138a4565b925050819055508160025f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80823b90505f8111915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128e6816128b2565b81146128f0575f80fd5b50565b5f81359050612901816128dd565b92915050565b5f6020828403121561291c5761291b6128aa565b5b5f612929848285016128f3565b91505092915050565b5f8115159050919050565b61294681612932565b82525050565b5f60208201905061295f5f83018461293d565b92915050565b61296e81612932565b8114612978575f80fd5b50565b5f8135905061298981612965565b92915050565b5f602082840312156129a4576129a36128aa565b5b5f6129b18482850161297b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129f15780820151818401526020810190506129d6565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612a16826129ba565b612a2081856129c4565b9350612a308185602086016129d4565b612a39816129fc565b840191505092915050565b5f6020820190508181035f830152612a5c8184612a0c565b905092915050565b5f819050919050565b612a7681612a64565b8114612a80575f80fd5b50565b5f81359050612a9181612a6d565b92915050565b5f60208284031215612aac57612aab6128aa565b5b5f612ab984828501612a83565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612aeb82612ac2565b9050919050565b612afb81612ae1565b82525050565b5f602082019050612b145f830184612af2565b92915050565b612b2381612ae1565b8114612b2d575f80fd5b50565b5f81359050612b3e81612b1a565b92915050565b5f8060408385031215612b5a57612b596128aa565b5b5f612b6785828601612b30565b9250506020612b7885828601612a83565b9150509250929050565b612b8b81612a64565b82525050565b5f602082019050612ba45f830184612b82565b92915050565b5f805f60608486031215612bc157612bc06128aa565b5b5f612bce86828701612b30565b9350506020612bdf86828701612b30565b9250506040612bf086828701612a83565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612c38826129fc565b810181811067ffffffffffffffff82111715612c5757612c56612c02565b5b80604052505050565b5f612c696128a1565b9050612c758282612c2f565b919050565b5f67ffffffffffffffff821115612c9457612c93612c02565b5b612c9d826129fc565b9050602081019050919050565b828183375f83830152505050565b5f612cca612cc584612c7a565b612c60565b905082815260208101848484011115612ce657612ce5612bfe565b5b612cf1848285612caa565b509392505050565b5f82601f830112612d0d57612d0c612bfa565b5b8135612d1d848260208601612cb8565b91505092915050565b5f60208284031215612d3b57612d3a6128aa565b5b5f82013567ffffffffffffffff811115612d5857612d576128ae565b5b612d6484828501612cf9565b91505092915050565b5f60208284031215612d8257612d816128aa565b5b5f612d8f84828501612b30565b91505092915050565b5f8060408385031215612dae57612dad6128aa565b5b5f612dbb85828601612b30565b9250506020612dcc8582860161297b565b9150509250929050565b5f67ffffffffffffffff821115612df057612def612c02565b5b612df9826129fc565b9050602081019050919050565b5f612e18612e1384612dd6565b612c60565b905082815260208101848484011115612e3457612e33612bfe565b5b612e3f848285612caa565b509392505050565b5f82601f830112612e5b57612e5a612bfa565b5b8135612e6b848260208601612e06565b91505092915050565b5f805f8060808587031215612e8c57612e8b6128aa565b5b5f612e9987828801612b30565b9450506020612eaa87828801612b30565b9350506040612ebb87828801612a83565b925050606085013567ffffffffffffffff811115612edc57612edb6128ae565b5b612ee887828801612e47565b91505092959194509250565b5f612efe82612ac2565b9050919050565b612f0e81612ef4565b8114612f18575f80fd5b50565b5f81359050612f2981612f05565b92915050565b5f60208284031215612f4457612f436128aa565b5b5f612f5184828501612f1b565b91505092915050565b5f8060408385031215612f7057612f6f6128aa565b5b5f612f7d85828601612b30565b9250506020612f8e85828601612b30565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612fcc6020836129c4565b9150612fd782612f98565b602082019050919050565b5f6020820190508181035f830152612ff981612fc0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061304457607f821691505b60208210810361305757613056613000565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f6130b7602c836129c4565b91506130c28261305d565b604082019050919050565b5f6020820190508181035f8301526130e4816130ab565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e655f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131456021836129c4565b9150613150826130eb565b604082019050919050565b5f6020820190508181035f83015261317281613139565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f775f8201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b5f6131d36038836129c4565b91506131de82613179565b604082019050919050565b5f6020820190508181035f830152613200816131c7565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b5f6132616031836129c4565b915061326c82613207565b604082019050919050565b5f6020820190508181035f83015261328e81613255565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f755f8201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b5f6132ef602b836129c4565b91506132fa82613295565b604082019050919050565b5f6020820190508181035f83015261331c816132e3565b9050919050565b5f81905092915050565b50565b5f61333b5f83613323565b91506133468261332d565b5f82019050919050565b5f61335a82613330565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f5f8201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b5f6133be602c836129c4565b91506133c982613364565b604082019050919050565b5f6020820190508181035f8301526133eb816133b2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261347b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613440565b6134858683613440565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6134c06134bb6134b684612a64565b61349d565b612a64565b9050919050565b5f819050919050565b6134d9836134a6565b6134ed6134e5826134c7565b84845461344c565b825550505050565b5f90565b6135016134f5565b61350c8184846134d0565b505050565b5b8181101561352f576135245f826134f9565b600181019050613512565b5050565b601f821115613574576135458161341f565b61354e84613431565b8101602085101561355d578190505b61357161356985613431565b830182613511565b50505b505050565b5f82821c905092915050565b5f6135945f1984600802613579565b1980831691505092915050565b5f6135ac8383613585565b9150826002028217905092915050565b6135c5826129ba565b67ffffffffffffffff8111156135de576135dd612c02565b5b6135e8825461302d565b6135f3828285613533565b5f60209050601f831160018114613624575f8415613612578287015190505b61361c85826135a1565b865550613683565b601f1984166136328661341f565b5f5b8281101561365957848901518255600182019150602085019450602081019050613634565b868310156136765784890151613672601f891682613585565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e65786973745f8201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b5f6136e56029836129c4565b91506136f08261368b565b604082019050919050565b5f6020820190508181035f830152613712816136d9565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f613773602a836129c4565b915061377e82613719565b604082019050919050565b5f6020820190508181035f8301526137a081613767565b9050919050565b7f436f6e74726163742069732070617573656400000000000000000000000000005f82015250565b5f6137db6012836129c4565b91506137e6826137a7565b602082019050919050565b5f6020820190508181035f830152613808816137cf565b9050919050565b7f496e76616c6964206d696e7420616d6f756e74000000000000000000000000005f82015250565b5f6138436013836129c4565b915061384e8261380f565b602082019050919050565b5f6020820190508181035f83015261387081613837565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6138ae82612a64565b91506138b983612a64565b92508282019050808211156138d1576138d0613877565b5b92915050565b7f45786365656473206d6178696d756d20737570706c79000000000000000000005f82015250565b5f61390b6016836129c4565b9150613916826138d7565b602082019050919050565b5f6020820190508181035f830152613938816138ff565b9050919050565b5f61394982612a64565b915061395483612a64565b925082820261396281612a64565b9150828204841483151761397957613978613877565b5b5092915050565b7f496e73756666696369656e742066756e647300000000000000000000000000005f82015250565b5f6139b46012836129c4565b91506139bf82613980565b602082019050919050565b5f6020820190508181035f8301526139e1816139a8565b9050919050565b5f6139f282612a64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a2457613a23613877565b5b600182019050919050565b7f4552433732313a20617070726f766520746f2063616c6c6572000000000000005f82015250565b5f613a636019836129c4565b9150613a6e82613a2f565b602082019050919050565b5f6020820190508181035f830152613a9081613a57565b9050919050565b7f546f6b656e20646f6573206e6f742065786973740000000000000000000000005f82015250565b5f613acb6014836129c4565b9150613ad682613a97565b602082019050919050565b5f6020820190508181035f830152613af881613abf565b9050919050565b5f81905092915050565b5f8154613b158161302d565b613b1f8186613aff565b9450600182165f8114613b395760018114613b4e57613b80565b60ff1983168652811515820286019350613b80565b613b578561341f565b5f5b83811015613b7857815481890152600182019150602081019050613b59565b838801955050505b50505092915050565b5f613b93826129ba565b613b9d8185613aff565b9350613bad8185602086016129d4565b80840191505092915050565b5f613bc48285613b09565b9150613bd08284613b89565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613c366026836129c4565b9150613c4182613bdc565b604082019050919050565b5f6020820190508181035f830152613c6381613c2a565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e65785f8201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b5f613cc4602c836129c4565b9150613ccf82613c6a565b604082019050919050565b5f6020820190508181035f830152613cf181613cb8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e207468617420695f8201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b5f613d526029836129c4565b9150613d5d82613cf8565b604082019050919050565b5f6020820190508181035f830152613d7f81613d46565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613de06024836129c4565b9150613deb82613d86565b604082019050919050565b5f6020820190508181035f830152613e0d81613dd4565b9050919050565b5f613e1e82612a64565b9150613e2983612a64565b9250828203905081811115613e4157613e40613877565b5b92915050565b7f4552433732313a207472616e7366657220746f206e6f6e2045524337323152655f8201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b5f613ea16032836129c4565b9150613eac82613e47565b604082019050919050565b5f6020820190508181035f830152613ece81613e95565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f0c82612a64565b9150613f1783612a64565b925082613f2757613f26613ed5565b5b828204905092915050565b5f613f3c82612a64565b9150613f4783612a64565b925082613f5757613f56613ed5565b5b828206905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f613f8682613f62565b613f908185613f6c565b9350613fa08185602086016129d4565b613fa9816129fc565b840191505092915050565b5f608082019050613fc75f830187612af2565b613fd46020830186612af2565b613fe16040830185612b82565b8181036060830152613ff38184613f7c565b905095945050505050565b5f8151905061400c816128dd565b92915050565b5f60208284031215614027576140266128aa565b5b5f61403484828501613ffe565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4552433732313a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61409e6020836129c4565b91506140a98261406a565b602082019050919050565b5f6020820190508181035f8301526140cb81614092565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e746564000000005f82015250565b5f614106601c836129c4565b9150614111826140d2565b602082019050919050565b5f6020820190508181035f830152614133816140fa565b905091905056fea26469706673582212203e44f56a38ef2b5687e805afd20808166e0441c6423e8064a0ed689c837466c464736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000018d9de262f0ac594f3ccae2fe447b8cb5128622900000000000000000000000000000000000000000000000000000000000000124e6578744869726520436c75622050617373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084e45585448495245000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005268747470733a2f2f63646e2e6e657874686972652e636c75622f746f6b656e2d6d657461646174612f6e657874686972652d636c75622d706173732f6d657461646174612e6a736f6e3f746f6b656e49643d0000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): NextHire Club Pass
Arg [1] : symbol (string): NEXTHIRE
Arg [2] : uri (string): https://cdn.nexthire.club/token-metadata/nexthire-club-pass/metadata.json?tokenId=
Arg [3] : wallet (address): 0x18d9de262f0aC594F3CCaE2FE447B8cB51286229
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000018d9de262f0ac594f3ccae2fe447b8cb51286229
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [5] : 4e6578744869726520436c756220506173730000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 4e45585448495245000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000052
Arg [9] : 68747470733a2f2f63646e2e6e657874686972652e636c75622f746f6b656e2d
Arg [10] : 6d657461646174612f6e657874686972652d636c75622d706173732f6d657461
Arg [11] : 646174612e6a736f6e3f746f6b656e49643d0000000000000000000000000000
Deployed Bytecode Sourcemap
48021:2274:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36023:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50044:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23303:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24962:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49656:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24485:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36767:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48291:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25955:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36373:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50131:161;;;:::i;:::-;;26402:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36957:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49786:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48330:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22944:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48208:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22621:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44019:94;;;;;;;;;;;;;:::i;:::-;;43368:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23472:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48605:615;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25308:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26658:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49228:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49903:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48134:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48252:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25699:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44268:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49542:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36023:266;36141:4;36193:35;36178:50;;;:11;:50;;;;:103;;;;36245:36;36269:11;36245:23;:36::i;:::-;36178:103;36158:123;;36023:266;;;:::o;50044:79::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50109:6:::1;50100;;:15;;;;;;;;;;;;;;;;;;50044:79:::0;:::o;23303:100::-;23357:13;23390:5;23383:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23303:100;:::o;24962:274::-;25054:7;25096:16;25104:7;25096;:16::i;:::-;25074:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25204:15;:24;25220:7;25204:24;;;;;;;;;;;;;;;;;;;;;25197:31;;24962:274;;;:::o;49656:122::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49753:17:::1;49737:13;:33;;;;49656:122:::0;:::o;24485:411::-;24566:13;24582:23;24597:7;24582:14;:23::i;:::-;24566:39;;24630:5;24624:11;;:2;:11;;;24616:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24724:5;24708:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24733:37;24750:5;24757:12;:10;:12::i;:::-;24733:16;:37::i;:::-;24708:62;24686:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24867:21;24876:2;24880:7;24867:8;:21::i;:::-;24555:341;24485:411;;:::o;36767:113::-;36828:7;36855:10;:17;;;;36848:24;;36767:113;:::o;48291:32::-;;;;:::o;25955:376::-;26164:41;26183:12;:10;:12::i;:::-;26197:7;26164:18;:41::i;:::-;26142:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26295:28;26305:4;26311:2;26315:7;26295:9;:28::i;:::-;25955:376;;;:::o;36373:318::-;36495:7;36545:23;36562:5;36545:16;:23::i;:::-;36537:5;:31;36515:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;36657:12;:19;36670:5;36657:19;;;;;;;;;;;;;;;:26;36677:5;36657:26;;;;;;;;;;;;36650:33;;36373:318;;;;:::o;50131:161::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50188:7:::1;50209:13;;;;;;;;;;;50201:27;;50236:21;50201:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50187:75;;;50281:2;50273:11;;;::::0;::::1;;50176:116;50131:161::o:0;26402:185::-;26540:39;26557:4;26563:2;26567:7;26540:39;;;;;;;;;;;;:16;:39::i;:::-;26402:185;;;:::o;36957:286::-;37048:7;37098:30;:28;:30::i;:::-;37090:5;:38;37068:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37218:10;37229:5;37218:17;;;;;;;;:::i;:::-;;;;;;;;;;37211:24;;36957:286;;;:::o;49786:109::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49876:11:::1;49861:12;:26;;;;;;:::i;:::-;;49786:109:::0;:::o;48330:26::-;;;;;;;;;;;;;:::o;22944:292::-;23032:7;23052:13;23068:7;:16;23076:7;23068:16;;;;;;;;;;;;;;;;;;;;;23052:32;;23134:1;23117:19;;:5;:19;;;23095:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23223:5;23216:12;;;22944:292;;;:::o;48208:37::-;;;;:::o;22621:261::-;22709:7;22768:1;22751:19;;:5;:19;;;22729:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;22858:9;:16;22868:5;22858:16;;;;;;;;;;;;;;;;22851:23;;22621:261;;;:::o;44019:94::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44084:21:::1;44102:1;44084:9;:21::i;:::-;44019:94::o:0;43368:87::-;43414:7;43441:6;;;;;;;;;;;43434:13;;43368:87;:::o;23472:104::-;23528:13;23561:7;23554:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23472:104;:::o;48605:615::-;47066:21;:19;:21::i;:::-;48679:14:::1;48696:13;:11;:13::i;:::-;48679:30;;48729:6;;;;;;;;;;;48728:7;48720:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48805:1;48791:11;:15;:47;;;;;48825:13;;48810:11;:28;;48791:47;48769:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;48928:9;;48913:11;48904:6;:20;;;;:::i;:::-;:33;;48896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48995:7;:5;:7::i;:::-;48981:21;;:10;:21;;;48977:121;;49052:11;49040:9;;:23;;;;:::i;:::-;49027:9;:36;;49019:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48977:121;49115:9;49127:1;49115:13;;49110:103;49135:11;49130:1;:16;49110:103;;49168:33;49178:10;49199:1;49190:6;:10;;;;:::i;:::-;49168:9;:33::i;:::-;49148:3;;;;;:::i;:::-;;;;49110:103;;;;48668:552;47110:20:::0;:18;:20::i;:::-;48605:615;:::o;25308:320::-;25448:12;:10;:12::i;:::-;25436:24;;:8;:24;;;25428:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25548:8;25503:18;:32;25522:12;:10;:12::i;:::-;25503:32;;;;;;;;;;;;;;;:42;25536:8;25503:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25601:8;25572:48;;25587:12;:10;:12::i;:::-;25572:48;;;25611:8;25572:48;;;;;;:::i;:::-;;;;;;;;25308:320;;:::o;26658:365::-;26847:41;26866:12;:10;:12::i;:::-;26880:7;26847:18;:41::i;:::-;26825:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26976:39;26990:4;26996:2;27000:7;27009:5;26976:13;:39::i;:::-;26658:365;;;;:::o;49228:306::-;49317:13;49351:16;49359:7;49351;:16::i;:::-;49343:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49441:1;49418:12;49412:26;;;;;:::i;:::-;;;:30;:114;;;;;;;;;;;;;;;;;49478:12;49492:18;:7;:16;:18::i;:::-;49461:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49412:114;49405:121;;49228:306;;;:::o;49903:133::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50010:18:::1;49994:13;;:34;;;;;;;;;;;;;;;;;;49903:133:::0;:::o;48134:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48252:32::-;;;;:::o;25699:189::-;25821:4;25845:18;:25;25864:5;25845:25;;;;;;;;;;;;;;;:35;25871:8;25845:35;;;;;;;;;;;;;;;;;;;;;;;;;25838:42;;25699:189;;;;:::o;44268:229::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44391:1:::1;44371:22;;:8;:22;;::::0;44349:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44470:19;44480:8;44470:9;:19::i;:::-;44268:229:::0;:::o;49542:106::-;43599:12;:10;:12::i;:::-;43588:23;;:7;:5;:7::i;:::-;:23;;;43580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49627:13:::1;49615:9;:25;;;;49542:106:::0;:::o;22236:321::-;22354:4;22406:25;22391:40;;;:11;:40;;;;:105;;;;22463:33;22448:48;;;:11;:48;;;;22391:105;:158;;;;22513:36;22537:11;22513:23;:36::i;:::-;22391:158;22371:178;;22236:321;;;:::o;20710:98::-;20763:7;20790:10;20783:17;;20710:98;:::o;28570:127::-;28635:4;28687:1;28659:30;;:7;:16;28667:7;28659:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28652:37;;28570:127;;;:::o;32677:174::-;32779:2;32752:15;:24;32768:7;32752:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32835:7;32831:2;32797:46;;32806:23;32821:7;32806:14;:23::i;:::-;32797:46;;;;;;;;;;;;32677:174;;:::o;28864:436::-;28982:4;29021:16;29029:7;29021;:16::i;:::-;28999:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29120:13;29136:23;29151:7;29136:14;:23::i;:::-;29120:39;;29189:5;29178:16;;:7;:16;;;:64;;;;29235:7;29211:31;;:20;29223:7;29211:11;:20::i;:::-;:31;;;29178:64;:113;;;;29259:32;29276:5;29283:7;29259:16;:32::i;:::-;29178:113;29170:122;;;28864:436;;;;:::o;31944:615::-;32117:4;32090:31;;:23;32105:7;32090:14;:23::i;:::-;:31;;;32068:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32223:1;32209:16;;:2;:16;;;32201:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:39;32300:4;32306:2;32310:7;32279:20;:39::i;:::-;32383:29;32400:1;32404:7;32383:8;:29::i;:::-;32444:1;32425:9;:15;32435:4;32425:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32473:1;32456:9;:13;32466:2;32456:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32504:2;32485:7;:16;32493:7;32485:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32543:7;32539:2;32524:27;;32533:4;32524:27;;;;;;;;;;;;31944:615;;;:::o;44505:173::-;44561:16;44580:6;;;;;;;;;;;44561:25;;44606:8;44597:6;;:17;;;;;;;;;;;;;;;;;;44661:8;44630:40;;44651:8;44630:40;;;;;;;;;;;;44550:128;44505:173;:::o;47146:318::-;46443:1;47276:7;;:19;47272:89;;47319:30;;;;;;;;;;;;;;47272:89;46443:1;47438:7;:18;;;;47146:318::o;29642:110::-;29718:26;29728:2;29732:7;29718:26;;;;;;;;;;;;:9;:26::i;:::-;29642:110;;:::o;47472:213::-;46399:1;47655:7;:22;;;;47472:213::o;27905:352::-;28062:28;28072:4;28078:2;28082:7;28062:9;:28::i;:::-;28123:48;28146:4;28152:2;28156:7;28165:5;28123:22;:48::i;:::-;28101:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;27905:352;;;;:::o;8065:723::-;8121:13;8351:1;8342:5;:10;8338:53;;8369:10;;;;;;;;;;;;;;;;;;;;;8338:53;8401:12;8416:5;8401:20;;8432:14;8457:78;8472:1;8464:4;:9;8457:78;;8490:8;;;;;:::i;:::-;;;;8521:2;8513:10;;;;;:::i;:::-;;;8457:78;;;8545:19;8577:6;8567:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8545:39;;8595:154;8611:1;8602:5;:10;8595:154;;8639:1;8629:11;;;;;:::i;:::-;;;8706:2;8698:5;:10;;;;:::i;:::-;8685:2;:24;;;;:::i;:::-;8672:39;;8655:6;8662;8655:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8735:2;8726:11;;;;;:::i;:::-;;;8595:154;;;8773:6;8759:21;;;;;8065:723;;;;:::o;7578:173::-;7679:4;7718:25;7703:40;;;:11;:40;;;;7696:47;;7578:173;;;:::o;37856:589::-;38000:45;38027:4;38033:2;38037:7;38000:26;:45::i;:::-;38078:1;38062:18;;:4;:18;;;38058:187;;38097:40;38129:7;38097:31;:40::i;:::-;38058:187;;;38167:2;38159:10;;:4;:10;;;38155:90;;38186:47;38219:4;38225:7;38186:32;:47::i;:::-;38155:90;38058:187;38273:1;38259:16;;:2;:16;;;38255:183;;38292:45;38329:7;38292:36;:45::i;:::-;38255:183;;;38365:4;38359:10;;:2;:10;;;38355:83;;38386:40;38414:2;38418:7;38386:27;:40::i;:::-;38355:83;38255:183;37856:589;;;:::o;29979:321::-;30109:18;30115:2;30119:7;30109:5;:18::i;:::-;30160:54;30191:1;30195:2;30199:7;30208:5;30160:22;:54::i;:::-;30138:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29979:321;;;:::o;33416:980::-;33571:4;33592:15;:2;:13;;;:15::i;:::-;33588:801;;;33661:2;33645:36;;;33704:12;:10;:12::i;:::-;33739:4;33766:7;33796:5;33645:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33624:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34020:1;34003:6;:13;:18;33999:320;;34046:108;;;;;;;;;;:::i;:::-;;;;;;;;33999:320;34269:6;34263:13;34254:6;34250:2;34246:15;34239:38;33624:710;33894:41;;;33884:51;;;:6;:51;;;;33877:58;;;;;33588:801;34373:4;34366:11;;33416:980;;;;;;;:::o;34968:126::-;;;;:::o;39168:164::-;39272:10;:17;;;;39245:15;:24;39261:7;39245:24;;;;;;;;;;;:44;;;;39300:10;39316:7;39300:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39168:164;:::o;39959:1013::-;40250:22;40300:1;40275:22;40292:4;40275:16;:22::i;:::-;:26;;;;:::i;:::-;40250:51;;40312:18;40333:17;:26;40351:7;40333:26;;;;;;;;;;;;40312:47;;40480:14;40466:10;:28;40462:328;;40511:19;40533:12;:18;40546:4;40533:18;;;;;;;;;;;;;;;:34;40552:14;40533:34;;;;;;;;;;;;40511:56;;40617:11;40584:12;:18;40597:4;40584:18;;;;;;;;;;;;;;;:30;40603:10;40584:30;;;;;;;;;;;:44;;;;40734:10;40701:17;:30;40719:11;40701:30;;;;;;;;;;;:43;;;;40496:294;40462:328;40886:17;:26;40904:7;40886:26;;;;;;;;;;;40879:33;;;40930:12;:18;40943:4;40930:18;;;;;;;;;;;;;;;:34;40949:14;40930:34;;;;;;;;;;;40923:41;;;40065:907;;39959:1013;;:::o;41267:1079::-;41520:22;41565:1;41545:10;:17;;;;:21;;;;:::i;:::-;41520:46;;41577:18;41598:15;:24;41614:7;41598:24;;;;;;;;;;;;41577:45;;41949:19;41971:10;41982:14;41971:26;;;;;;;;:::i;:::-;;;;;;;;;;41949:48;;42035:11;42010:10;42021;42010:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42146:10;42115:15;:28;42131:11;42115:28;;;;;;;;;;;:41;;;;42287:15;:24;42303:7;42287:24;;;;;;;;;;;42280:31;;;42322:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41338:1008;;;41267:1079;:::o;38746:221::-;38831:14;38848:20;38865:2;38848:16;:20::i;:::-;38831:37;;38906:7;38879:12;:16;38892:2;38879:16;;;;;;;;;;;;;;;:24;38896:6;38879:24;;;;;;;;;;;:34;;;;38953:6;38924:17;:26;38942:7;38924:26;;;;;;;;;;;:35;;;;38820:147;38746:221;;:::o;30636:382::-;30730:1;30716:16;;:2;:16;;;30708:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30789:16;30797:7;30789;:16::i;:::-;30788:17;30780:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30851:45;30880:1;30884:2;30888:7;30851:20;:45::i;:::-;30926:1;30909:9;:13;30919:2;30909:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30957:2;30938:7;:16;30946:7;30938:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31002:7;30998:2;30977:33;;30994:1;30977:33;;;;;;;;;;;;30636:382;;:::o;10611:387::-;10671:4;10879:12;10946:7;10934:20;10926:28;;10989:1;10982:4;:8;10975:15;;;10611: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:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:117::-;6566:1;6563;6556:12;6580:117;6689:1;6686;6679:12;6703:180;6751:77;6748:1;6741:88;6848:4;6845:1;6838:15;6872:4;6869:1;6862:15;6889:281;6972:27;6994:4;6972:27;:::i;:::-;6964:6;6960:40;7102:6;7090:10;7087:22;7066:18;7054:10;7051:34;7048:62;7045:88;;;7113:18;;:::i;:::-;7045:88;7153:10;7149:2;7142:22;6932:238;6889:281;;:::o;7176:129::-;7210:6;7237:20;;:::i;:::-;7227:30;;7266:33;7294:4;7286:6;7266:33;:::i;:::-;7176:129;;;:::o;7311:308::-;7373:4;7463:18;7455:6;7452:30;7449:56;;;7485:18;;:::i;:::-;7449:56;7523:29;7545:6;7523:29;:::i;:::-;7515:37;;7607:4;7601;7597:15;7589:23;;7311:308;;;:::o;7625:146::-;7722:6;7717:3;7712;7699:30;7763:1;7754:6;7749:3;7745:16;7738:27;7625:146;;;:::o;7777:425::-;7855:5;7880:66;7896:49;7938:6;7896:49;:::i;:::-;7880:66;:::i;:::-;7871:75;;7969:6;7962:5;7955:21;8007:4;8000:5;7996:16;8045:3;8036:6;8031:3;8027:16;8024:25;8021:112;;;8052:79;;:::i;:::-;8021:112;8142:54;8189:6;8184:3;8179;8142:54;:::i;:::-;7861:341;7777:425;;;;;:::o;8222:340::-;8278:5;8327:3;8320:4;8312:6;8308:17;8304:27;8294:122;;8335:79;;:::i;:::-;8294:122;8452:6;8439:20;8477:79;8552:3;8544:6;8537:4;8529:6;8525:17;8477:79;:::i;:::-;8468:88;;8284:278;8222:340;;;;:::o;8568:509::-;8637:6;8686:2;8674:9;8665:7;8661:23;8657:32;8654:119;;;8692:79;;:::i;:::-;8654:119;8840:1;8829:9;8825:17;8812:31;8870:18;8862:6;8859:30;8856:117;;;8892:79;;:::i;:::-;8856:117;8997:63;9052:7;9043:6;9032:9;9028:22;8997:63;:::i;:::-;8987:73;;8783:287;8568:509;;;;:::o;9083:329::-;9142:6;9191:2;9179:9;9170:7;9166:23;9162:32;9159:119;;;9197:79;;:::i;:::-;9159:119;9317:1;9342:53;9387:7;9378:6;9367:9;9363:22;9342:53;:::i;:::-;9332:63;;9288:117;9083:329;;;;:::o;9418:468::-;9483:6;9491;9540:2;9528:9;9519:7;9515:23;9511:32;9508:119;;;9546:79;;:::i;:::-;9508:119;9666:1;9691:53;9736:7;9727:6;9716:9;9712:22;9691:53;:::i;:::-;9681:63;;9637:117;9793:2;9819:50;9861:7;9852:6;9841:9;9837:22;9819:50;:::i;:::-;9809:60;;9764:115;9418:468;;;;;:::o;9892:307::-;9953:4;10043:18;10035:6;10032:30;10029:56;;;10065:18;;:::i;:::-;10029:56;10103:29;10125:6;10103:29;:::i;:::-;10095:37;;10187:4;10181;10177:15;10169:23;;9892:307;;;:::o;10205:423::-;10282:5;10307:65;10323:48;10364:6;10323:48;:::i;:::-;10307:65;:::i;:::-;10298:74;;10395:6;10388:5;10381:21;10433:4;10426:5;10422:16;10471:3;10462:6;10457:3;10453:16;10450:25;10447:112;;;10478:79;;:::i;:::-;10447:112;10568:54;10615:6;10610:3;10605;10568:54;:::i;:::-;10288:340;10205:423;;;;;:::o;10647:338::-;10702:5;10751:3;10744:4;10736:6;10732:17;10728:27;10718:122;;10759:79;;:::i;:::-;10718:122;10876:6;10863:20;10901:78;10975:3;10967:6;10960:4;10952:6;10948:17;10901:78;:::i;:::-;10892:87;;10708:277;10647:338;;;;:::o;10991:943::-;11086:6;11094;11102;11110;11159:3;11147:9;11138:7;11134:23;11130:33;11127:120;;;11166:79;;:::i;:::-;11127:120;11286:1;11311:53;11356:7;11347:6;11336:9;11332:22;11311:53;:::i;:::-;11301:63;;11257:117;11413:2;11439:53;11484:7;11475:6;11464:9;11460:22;11439:53;:::i;:::-;11429:63;;11384:118;11541:2;11567:53;11612:7;11603:6;11592:9;11588:22;11567:53;:::i;:::-;11557:63;;11512:118;11697:2;11686:9;11682:18;11669:32;11728:18;11720:6;11717:30;11714:117;;;11750:79;;:::i;:::-;11714:117;11855:62;11909:7;11900:6;11889:9;11885:22;11855:62;:::i;:::-;11845:72;;11640:287;10991:943;;;;;;;:::o;11940:104::-;11985:7;12014:24;12032:5;12014:24;:::i;:::-;12003:35;;11940:104;;;:::o;12050:138::-;12131:32;12157:5;12131:32;:::i;:::-;12124:5;12121:43;12111:71;;12178:1;12175;12168:12;12111:71;12050:138;:::o;12194:155::-;12248:5;12286:6;12273:20;12264:29;;12302:41;12337:5;12302:41;:::i;:::-;12194:155;;;;:::o;12355:345::-;12422:6;12471:2;12459:9;12450:7;12446:23;12442:32;12439:119;;;12477:79;;:::i;:::-;12439:119;12597:1;12622:61;12675:7;12666:6;12655:9;12651:22;12622:61;:::i;:::-;12612:71;;12568:125;12355:345;;;;:::o;12706:474::-;12774:6;12782;12831:2;12819:9;12810:7;12806:23;12802:32;12799:119;;;12837:79;;:::i;:::-;12799:119;12957:1;12982:53;13027:7;13018:6;13007:9;13003:22;12982:53;:::i;:::-;12972:63;;12928:117;13084:2;13110:53;13155:7;13146:6;13135:9;13131:22;13110:53;:::i;:::-;13100:63;;13055:118;12706:474;;;;;:::o;13186:182::-;13326:34;13322:1;13314:6;13310:14;13303:58;13186:182;:::o;13374:366::-;13516:3;13537:67;13601:2;13596:3;13537:67;:::i;:::-;13530:74;;13613:93;13702:3;13613:93;:::i;:::-;13731:2;13726:3;13722:12;13715:19;;13374:366;;;:::o;13746:419::-;13912:4;13950:2;13939:9;13935:18;13927:26;;13999:9;13993:4;13989:20;13985:1;13974:9;13970:17;13963:47;14027:131;14153:4;14027:131;:::i;:::-;14019:139;;13746:419;;;:::o;14171:180::-;14219:77;14216:1;14209:88;14316:4;14313:1;14306:15;14340:4;14337:1;14330:15;14357:320;14401:6;14438:1;14432:4;14428:12;14418:22;;14485:1;14479:4;14475:12;14506:18;14496:81;;14562:4;14554:6;14550:17;14540:27;;14496:81;14624:2;14616:6;14613:14;14593:18;14590:38;14587:84;;14643:18;;:::i;:::-;14587:84;14408:269;14357:320;;;:::o;14683:231::-;14823:34;14819:1;14811:6;14807:14;14800:58;14892:14;14887:2;14879:6;14875:15;14868:39;14683:231;:::o;14920:366::-;15062:3;15083:67;15147:2;15142:3;15083:67;:::i;:::-;15076:74;;15159:93;15248:3;15159:93;:::i;:::-;15277:2;15272:3;15268:12;15261:19;;14920:366;;;:::o;15292:419::-;15458:4;15496:2;15485:9;15481:18;15473:26;;15545:9;15539:4;15535:20;15531:1;15520:9;15516:17;15509:47;15573:131;15699:4;15573:131;:::i;:::-;15565:139;;15292:419;;;:::o;15717:220::-;15857:34;15853:1;15845:6;15841:14;15834:58;15926:3;15921:2;15913:6;15909:15;15902:28;15717:220;:::o;15943:366::-;16085:3;16106:67;16170:2;16165:3;16106:67;:::i;:::-;16099:74;;16182:93;16271:3;16182:93;:::i;:::-;16300:2;16295:3;16291:12;16284:19;;15943:366;;;:::o;16315:419::-;16481:4;16519:2;16508:9;16504:18;16496:26;;16568:9;16562:4;16558:20;16554:1;16543:9;16539:17;16532:47;16596:131;16722:4;16596:131;:::i;:::-;16588:139;;16315:419;;;:::o;16740:243::-;16880:34;16876:1;16868:6;16864:14;16857:58;16949:26;16944:2;16936:6;16932:15;16925:51;16740:243;:::o;16989:366::-;17131:3;17152:67;17216:2;17211:3;17152:67;:::i;:::-;17145:74;;17228:93;17317:3;17228:93;:::i;:::-;17346:2;17341:3;17337:12;17330:19;;16989:366;;;:::o;17361:419::-;17527:4;17565:2;17554:9;17550:18;17542:26;;17614:9;17608:4;17604:20;17600:1;17589:9;17585:17;17578:47;17642:131;17768:4;17642:131;:::i;:::-;17634:139;;17361:419;;;:::o;17786:236::-;17926:34;17922:1;17914:6;17910:14;17903:58;17995:19;17990:2;17982:6;17978:15;17971:44;17786:236;:::o;18028:366::-;18170:3;18191:67;18255:2;18250:3;18191:67;:::i;:::-;18184:74;;18267:93;18356:3;18267:93;:::i;:::-;18385:2;18380:3;18376:12;18369:19;;18028:366;;;:::o;18400:419::-;18566:4;18604:2;18593:9;18589:18;18581:26;;18653:9;18647:4;18643:20;18639:1;18628:9;18624:17;18617:47;18681:131;18807:4;18681:131;:::i;:::-;18673:139;;18400:419;;;:::o;18825:230::-;18965:34;18961:1;18953:6;18949:14;18942:58;19034:13;19029:2;19021:6;19017:15;19010:38;18825:230;:::o;19061:366::-;19203:3;19224:67;19288:2;19283:3;19224:67;:::i;:::-;19217:74;;19300:93;19389:3;19300:93;:::i;:::-;19418:2;19413:3;19409:12;19402:19;;19061:366;;;:::o;19433:419::-;19599:4;19637:2;19626:9;19622:18;19614:26;;19686:9;19680:4;19676:20;19672:1;19661:9;19657:17;19650:47;19714:131;19840:4;19714:131;:::i;:::-;19706:139;;19433:419;;;:::o;19858:147::-;19959:11;19996:3;19981:18;;19858:147;;;;:::o;20011:114::-;;:::o;20131:398::-;20290:3;20311:83;20392:1;20387:3;20311:83;:::i;:::-;20304:90;;20403:93;20492:3;20403:93;:::i;:::-;20521:1;20516:3;20512:11;20505:18;;20131:398;;;:::o;20535:379::-;20719:3;20741:147;20884:3;20741:147;:::i;:::-;20734:154;;20905:3;20898:10;;20535:379;;;:::o;20920:231::-;21060:34;21056:1;21048:6;21044:14;21037:58;21129:14;21124:2;21116:6;21112:15;21105:39;20920:231;:::o;21157:366::-;21299:3;21320:67;21384:2;21379:3;21320:67;:::i;:::-;21313:74;;21396:93;21485:3;21396:93;:::i;:::-;21514:2;21509:3;21505:12;21498:19;;21157:366;;;:::o;21529:419::-;21695:4;21733:2;21722:9;21718:18;21710:26;;21782:9;21776:4;21772:20;21768:1;21757:9;21753:17;21746:47;21810:131;21936:4;21810:131;:::i;:::-;21802:139;;21529:419;;;:::o;21954:180::-;22002:77;21999:1;21992:88;22099:4;22096:1;22089:15;22123:4;22120:1;22113:15;22140:141;22189:4;22212:3;22204:11;;22235:3;22232:1;22225:14;22269:4;22266:1;22256:18;22248:26;;22140:141;;;:::o;22287:93::-;22324:6;22371:2;22366;22359:5;22355:14;22351:23;22341:33;;22287:93;;;:::o;22386:107::-;22430:8;22480:5;22474:4;22470:16;22449:37;;22386:107;;;;:::o;22499:393::-;22568:6;22618:1;22606:10;22602:18;22641:97;22671:66;22660:9;22641:97;:::i;:::-;22759:39;22789:8;22778:9;22759:39;:::i;:::-;22747:51;;22831:4;22827:9;22820:5;22816:21;22807:30;;22880:4;22870:8;22866:19;22859:5;22856:30;22846:40;;22575:317;;22499:393;;;;;:::o;22898:60::-;22926:3;22947:5;22940:12;;22898:60;;;:::o;22964:142::-;23014:9;23047:53;23065:34;23074:24;23092:5;23074:24;:::i;:::-;23065:34;:::i;:::-;23047:53;:::i;:::-;23034:66;;22964:142;;;:::o;23112:75::-;23155:3;23176:5;23169:12;;23112:75;;;:::o;23193:269::-;23303:39;23334:7;23303:39;:::i;:::-;23364:91;23413:41;23437:16;23413:41;:::i;:::-;23405:6;23398:4;23392:11;23364:91;:::i;:::-;23358:4;23351:105;23269:193;23193:269;;;:::o;23468:73::-;23513:3;23468:73;:::o;23547:189::-;23624:32;;:::i;:::-;23665:65;23723:6;23715;23709:4;23665:65;:::i;:::-;23600:136;23547:189;;:::o;23742:186::-;23802:120;23819:3;23812:5;23809:14;23802:120;;;23873:39;23910:1;23903:5;23873:39;:::i;:::-;23846:1;23839:5;23835:13;23826:22;;23802:120;;;23742:186;;:::o;23934:543::-;24035:2;24030:3;24027:11;24024:446;;;24069:38;24101:5;24069:38;:::i;:::-;24153:29;24171:10;24153:29;:::i;:::-;24143:8;24139:44;24336:2;24324:10;24321:18;24318:49;;;24357:8;24342:23;;24318:49;24380:80;24436:22;24454:3;24436:22;:::i;:::-;24426:8;24422:37;24409:11;24380:80;:::i;:::-;24039:431;;24024:446;23934:543;;;:::o;24483:117::-;24537:8;24587:5;24581:4;24577:16;24556:37;;24483:117;;;;:::o;24606:169::-;24650:6;24683:51;24731:1;24727:6;24719:5;24716:1;24712:13;24683:51;:::i;:::-;24679:56;24764:4;24758;24754:15;24744:25;;24657:118;24606:169;;;;:::o;24780:295::-;24856:4;25002:29;25027:3;25021:4;25002:29;:::i;:::-;24994:37;;25064:3;25061:1;25057:11;25051:4;25048:21;25040:29;;24780:295;;;;:::o;25080:1395::-;25197:37;25230:3;25197:37;:::i;:::-;25299:18;25291:6;25288:30;25285:56;;;25321:18;;:::i;:::-;25285:56;25365:38;25397:4;25391:11;25365:38;:::i;:::-;25450:67;25510:6;25502;25496:4;25450:67;:::i;:::-;25544:1;25568:4;25555:17;;25600:2;25592:6;25589:14;25617:1;25612:618;;;;26274:1;26291:6;26288:77;;;26340:9;26335:3;26331:19;26325:26;26316:35;;26288:77;26391:67;26451:6;26444:5;26391:67;:::i;:::-;26385:4;26378:81;26247:222;25582:887;;25612:618;25664:4;25660:9;25652:6;25648:22;25698:37;25730:4;25698:37;:::i;:::-;25757:1;25771:208;25785:7;25782:1;25779:14;25771:208;;;25864:9;25859:3;25855:19;25849:26;25841:6;25834:42;25915:1;25907:6;25903:14;25893:24;;25962:2;25951:9;25947:18;25934:31;;25808:4;25805:1;25801:12;25796:17;;25771:208;;;26007:6;25998:7;25995:19;25992:179;;;26065:9;26060:3;26056:19;26050:26;26108:48;26150:4;26142:6;26138:17;26127:9;26108:48;:::i;:::-;26100:6;26093:64;26015:156;25992:179;26217:1;26213;26205:6;26201:14;26197:22;26191:4;26184:36;25619:611;;;25582:887;;25172:1303;;;25080:1395;;:::o;26481:228::-;26621:34;26617:1;26609:6;26605:14;26598:58;26690:11;26685:2;26677:6;26673:15;26666:36;26481:228;:::o;26715:366::-;26857:3;26878:67;26942:2;26937:3;26878:67;:::i;:::-;26871:74;;26954:93;27043:3;26954:93;:::i;:::-;27072:2;27067:3;27063:12;27056:19;;26715:366;;;:::o;27087:419::-;27253:4;27291:2;27280:9;27276:18;27268:26;;27340:9;27334:4;27330:20;27326:1;27315:9;27311:17;27304:47;27368:131;27494:4;27368:131;:::i;:::-;27360:139;;27087:419;;;:::o;27512:229::-;27652:34;27648:1;27640:6;27636:14;27629:58;27721:12;27716:2;27708:6;27704:15;27697:37;27512:229;:::o;27747:366::-;27889:3;27910:67;27974:2;27969:3;27910:67;:::i;:::-;27903:74;;27986:93;28075:3;27986:93;:::i;:::-;28104:2;28099:3;28095:12;28088:19;;27747:366;;;:::o;28119:419::-;28285:4;28323:2;28312:9;28308:18;28300:26;;28372:9;28366:4;28362:20;28358:1;28347:9;28343:17;28336:47;28400:131;28526:4;28400:131;:::i;:::-;28392:139;;28119:419;;;:::o;28544:168::-;28684:20;28680:1;28672:6;28668:14;28661:44;28544:168;:::o;28718:366::-;28860:3;28881:67;28945:2;28940:3;28881:67;:::i;:::-;28874:74;;28957:93;29046:3;28957:93;:::i;:::-;29075:2;29070:3;29066:12;29059:19;;28718:366;;;:::o;29090:419::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:169::-;29655:21;29651:1;29643:6;29639:14;29632:45;29515:169;:::o;29690:366::-;29832:3;29853:67;29917:2;29912:3;29853:67;:::i;:::-;29846:74;;29929:93;30018:3;29929:93;:::i;:::-;30047:2;30042:3;30038:12;30031:19;;29690:366;;;:::o;30062:419::-;30228:4;30266:2;30255:9;30251:18;30243:26;;30315:9;30309:4;30305:20;30301:1;30290:9;30286:17;30279:47;30343:131;30469:4;30343:131;:::i;:::-;30335:139;;30062:419;;;:::o;30487:180::-;30535:77;30532:1;30525:88;30632:4;30629:1;30622:15;30656:4;30653:1;30646:15;30673:191;30713:3;30732:20;30750:1;30732:20;:::i;:::-;30727:25;;30766:20;30784:1;30766:20;:::i;:::-;30761:25;;30809:1;30806;30802:9;30795:16;;30830:3;30827:1;30824:10;30821:36;;;30837:18;;:::i;:::-;30821:36;30673:191;;;;:::o;30870:172::-;31010:24;31006:1;30998:6;30994:14;30987:48;30870:172;:::o;31048:366::-;31190:3;31211:67;31275:2;31270:3;31211:67;:::i;:::-;31204:74;;31287:93;31376:3;31287:93;:::i;:::-;31405:2;31400:3;31396:12;31389:19;;31048:366;;;:::o;31420:419::-;31586:4;31624:2;31613:9;31609:18;31601:26;;31673:9;31667:4;31663:20;31659:1;31648:9;31644:17;31637:47;31701:131;31827:4;31701:131;:::i;:::-;31693:139;;31420:419;;;:::o;31845:410::-;31885:7;31908:20;31926:1;31908:20;:::i;:::-;31903:25;;31942:20;31960:1;31942:20;:::i;:::-;31937:25;;31997:1;31994;31990:9;32019:30;32037:11;32019:30;:::i;:::-;32008:41;;32198:1;32189:7;32185:15;32182:1;32179:22;32159:1;32152:9;32132:83;32109:139;;32228:18;;:::i;:::-;32109:139;31893:362;31845:410;;;;:::o;32261:168::-;32401:20;32397:1;32389:6;32385:14;32378:44;32261:168;:::o;32435:366::-;32577:3;32598:67;32662:2;32657:3;32598:67;:::i;:::-;32591:74;;32674:93;32763:3;32674:93;:::i;:::-;32792:2;32787:3;32783:12;32776:19;;32435:366;;;:::o;32807:419::-;32973:4;33011:2;33000:9;32996:18;32988:26;;33060:9;33054:4;33050:20;33046:1;33035:9;33031:17;33024:47;33088:131;33214:4;33088:131;:::i;:::-;33080:139;;32807:419;;;:::o;33232:233::-;33271:3;33294:24;33312:5;33294:24;:::i;:::-;33285:33;;33340:66;33333:5;33330:77;33327:103;;33410:18;;:::i;:::-;33327:103;33457:1;33450:5;33446:13;33439:20;;33232:233;;;:::o;33471:175::-;33611:27;33607:1;33599:6;33595:14;33588:51;33471:175;:::o;33652:366::-;33794:3;33815:67;33879:2;33874:3;33815:67;:::i;:::-;33808:74;;33891:93;33980:3;33891:93;:::i;:::-;34009:2;34004:3;34000:12;33993:19;;33652:366;;;:::o;34024:419::-;34190:4;34228:2;34217:9;34213:18;34205:26;;34277:9;34271:4;34267:20;34263:1;34252:9;34248:17;34241:47;34305:131;34431:4;34305:131;:::i;:::-;34297:139;;34024:419;;;:::o;34449:170::-;34589:22;34585:1;34577:6;34573:14;34566:46;34449:170;:::o;34625:366::-;34767:3;34788:67;34852:2;34847:3;34788:67;:::i;:::-;34781:74;;34864:93;34953:3;34864:93;:::i;:::-;34982:2;34977:3;34973:12;34966:19;;34625:366;;;:::o;34997:419::-;35163:4;35201:2;35190:9;35186:18;35178:26;;35250:9;35244:4;35240:20;35236:1;35225:9;35221:17;35214:47;35278:131;35404:4;35278:131;:::i;:::-;35270:139;;34997:419;;;:::o;35422:148::-;35524:11;35561:3;35546:18;;35422:148;;;;:::o;35600:874::-;35703:3;35740:5;35734:12;35769:36;35795:9;35769:36;:::i;:::-;35821:89;35903:6;35898:3;35821:89;:::i;:::-;35814:96;;35941:1;35930:9;35926:17;35957:1;35952:166;;;;36132:1;36127:341;;;;35919:549;;35952:166;36036:4;36032:9;36021;36017:25;36012:3;36005:38;36098:6;36091:14;36084:22;36076:6;36072:35;36067:3;36063:45;36056:52;;35952:166;;36127:341;36194:38;36226:5;36194:38;:::i;:::-;36254:1;36268:154;36282:6;36279:1;36276:13;36268:154;;;36356:7;36350:14;36346:1;36341:3;36337:11;36330:35;36406:1;36397:7;36393:15;36382:26;;36304:4;36301:1;36297:12;36292:17;;36268:154;;;36451:6;36446:3;36442:16;36435:23;;36134:334;;35919:549;;35707:767;;35600:874;;;;:::o;36480:390::-;36586:3;36614:39;36647:5;36614:39;:::i;:::-;36669:89;36751:6;36746:3;36669:89;:::i;:::-;36662:96;;36767:65;36825:6;36820:3;36813:4;36806:5;36802:16;36767:65;:::i;:::-;36857:6;36852:3;36848:16;36841:23;;36590:280;36480:390;;;;:::o;36876:429::-;37053:3;37075:92;37163:3;37154:6;37075:92;:::i;:::-;37068:99;;37184:95;37275:3;37266:6;37184:95;:::i;:::-;37177:102;;37296:3;37289:10;;36876:429;;;;;:::o;37311:225::-;37451:34;37447:1;37439:6;37435:14;37428:58;37520:8;37515:2;37507:6;37503:15;37496:33;37311:225;:::o;37542:366::-;37684:3;37705:67;37769:2;37764:3;37705:67;:::i;:::-;37698:74;;37781:93;37870:3;37781:93;:::i;:::-;37899:2;37894:3;37890:12;37883:19;;37542:366;;;:::o;37914:419::-;38080:4;38118:2;38107:9;38103:18;38095:26;;38167:9;38161:4;38157:20;38153:1;38142:9;38138:17;38131:47;38195:131;38321:4;38195:131;:::i;:::-;38187:139;;37914:419;;;:::o;38339:231::-;38479:34;38475:1;38467:6;38463:14;38456:58;38548:14;38543:2;38535:6;38531:15;38524:39;38339:231;:::o;38576:366::-;38718:3;38739:67;38803:2;38798:3;38739:67;:::i;:::-;38732:74;;38815:93;38904:3;38815:93;:::i;:::-;38933:2;38928:3;38924:12;38917:19;;38576:366;;;:::o;38948:419::-;39114:4;39152:2;39141:9;39137:18;39129:26;;39201:9;39195:4;39191:20;39187:1;39176:9;39172:17;39165:47;39229:131;39355:4;39229:131;:::i;:::-;39221:139;;38948:419;;;:::o;39373:228::-;39513:34;39509:1;39501:6;39497:14;39490:58;39582:11;39577:2;39569:6;39565:15;39558:36;39373:228;:::o;39607:366::-;39749:3;39770:67;39834:2;39829:3;39770:67;:::i;:::-;39763:74;;39846:93;39935:3;39846:93;:::i;:::-;39964:2;39959:3;39955:12;39948:19;;39607:366;;;:::o;39979:419::-;40145:4;40183:2;40172:9;40168:18;40160:26;;40232:9;40226:4;40222:20;40218:1;40207:9;40203:17;40196:47;40260:131;40386:4;40260:131;:::i;:::-;40252:139;;39979:419;;;:::o;40404:223::-;40544:34;40540:1;40532:6;40528:14;40521:58;40613:6;40608:2;40600:6;40596:15;40589:31;40404:223;:::o;40633:366::-;40775:3;40796:67;40860:2;40855:3;40796:67;:::i;:::-;40789:74;;40872:93;40961:3;40872:93;:::i;:::-;40990:2;40985:3;40981:12;40974:19;;40633:366;;;:::o;41005:419::-;41171:4;41209:2;41198:9;41194:18;41186:26;;41258:9;41252:4;41248:20;41244:1;41233:9;41229:17;41222:47;41286:131;41412:4;41286:131;:::i;:::-;41278:139;;41005:419;;;:::o;41430:194::-;41470:4;41490:20;41508:1;41490:20;:::i;:::-;41485:25;;41524:20;41542:1;41524:20;:::i;:::-;41519:25;;41568:1;41565;41561:9;41553:17;;41592:1;41586:4;41583:11;41580:37;;;41597:18;;:::i;:::-;41580:37;41430:194;;;;:::o;41630:237::-;41770:34;41766:1;41758:6;41754:14;41747:58;41839:20;41834:2;41826:6;41822:15;41815:45;41630:237;:::o;41873:366::-;42015:3;42036:67;42100:2;42095:3;42036:67;:::i;:::-;42029:74;;42112:93;42201:3;42112:93;:::i;:::-;42230:2;42225:3;42221:12;42214:19;;41873:366;;;:::o;42245:419::-;42411:4;42449:2;42438:9;42434:18;42426:26;;42498:9;42492:4;42488:20;42484:1;42473:9;42469:17;42462:47;42526:131;42652:4;42526:131;:::i;:::-;42518:139;;42245:419;;;:::o;42670:180::-;42718:77;42715:1;42708:88;42815:4;42812:1;42805:15;42839:4;42836:1;42829:15;42856:185;42896:1;42913:20;42931:1;42913:20;:::i;:::-;42908:25;;42947:20;42965:1;42947:20;:::i;:::-;42942:25;;42986:1;42976:35;;42991:18;;:::i;:::-;42976:35;43033:1;43030;43026:9;43021:14;;42856:185;;;;:::o;43047:176::-;43079:1;43096:20;43114:1;43096:20;:::i;:::-;43091:25;;43130:20;43148:1;43130:20;:::i;:::-;43125:25;;43169:1;43159:35;;43174:18;;:::i;:::-;43159:35;43215:1;43212;43208:9;43203:14;;43047:176;;;;:::o;43229:98::-;43280:6;43314:5;43308:12;43298:22;;43229:98;;;:::o;43333:168::-;43416:11;43450:6;43445:3;43438:19;43490:4;43485:3;43481:14;43466:29;;43333:168;;;;:::o;43507:373::-;43593:3;43621:38;43653:5;43621:38;:::i;:::-;43675:70;43738:6;43733:3;43675:70;:::i;:::-;43668:77;;43754:65;43812:6;43807:3;43800:4;43793:5;43789:16;43754:65;:::i;:::-;43844:29;43866:6;43844:29;:::i;:::-;43839:3;43835:39;43828:46;;43597:283;43507:373;;;;:::o;43886:640::-;44081:4;44119:3;44108:9;44104:19;44096:27;;44133:71;44201:1;44190:9;44186:17;44177:6;44133:71;:::i;:::-;44214:72;44282:2;44271:9;44267:18;44258:6;44214:72;:::i;:::-;44296;44364:2;44353:9;44349:18;44340:6;44296:72;:::i;:::-;44415:9;44409:4;44405:20;44400:2;44389:9;44385:18;44378:48;44443:76;44514:4;44505:6;44443:76;:::i;:::-;44435:84;;43886:640;;;;;;;:::o;44532:141::-;44588:5;44619:6;44613:13;44604:22;;44635:32;44661:5;44635:32;:::i;:::-;44532:141;;;;:::o;44679:349::-;44748:6;44797:2;44785:9;44776:7;44772:23;44768:32;44765:119;;;44803:79;;:::i;:::-;44765:119;44923:1;44948:63;45003:7;44994:6;44983:9;44979:22;44948:63;:::i;:::-;44938:73;;44894:127;44679:349;;;;:::o;45034:180::-;45082:77;45079:1;45072:88;45179:4;45176:1;45169:15;45203:4;45200:1;45193:15;45220:182;45360:34;45356:1;45348:6;45344:14;45337:58;45220:182;:::o;45408:366::-;45550:3;45571:67;45635:2;45630:3;45571:67;:::i;:::-;45564:74;;45647:93;45736:3;45647:93;:::i;:::-;45765:2;45760:3;45756:12;45749:19;;45408:366;;;:::o;45780:419::-;45946:4;45984:2;45973:9;45969:18;45961:26;;46033:9;46027:4;46023:20;46019:1;46008:9;46004:17;45997:47;46061:131;46187:4;46061:131;:::i;:::-;46053:139;;45780:419;;;:::o;46205:178::-;46345:30;46341:1;46333:6;46329:14;46322:54;46205:178;:::o;46389:366::-;46531:3;46552:67;46616:2;46611:3;46552:67;:::i;:::-;46545:74;;46628:93;46717:3;46628:93;:::i;:::-;46746:2;46741:3;46737:12;46730:19;;46389:366;;;:::o;46761:419::-;46927:4;46965:2;46954:9;46950:18;46942:26;;47014:9;47008:4;47004:20;47000:1;46989:9;46985:17;46978:47;47042:131;47168:4;47042:131;:::i;:::-;47034:139;;46761:419;;;:::o
Swarm Source
ipfs://3e44f56a38ef2b5687e805afd20808166e0441c6423e8064a0ed689c837466c4
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.