ERC-721
Overview
Max Total Supply
1,000 CS
Holders
375
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CryptoSphere
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-11 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT 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/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/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Context.sol 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/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/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/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/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/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); } } // File: contracts/CryptoSphere.sol pragma solidity ^0.8.0; contract CryptoSphere is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public extension = ".json"; uint256 public cost = 0.05 ether; uint256 public maxSupply = 4000; uint public maxMintAmount = 20; bool public paused = false; bool public preSale = false; mapping(address => bool) public whitelist; constructor(string memory _name, string memory _symbol, string memory _initBaseURI) ERC721 (_name, _symbol){ setBaseURI(_initBaseURI); } function _baseURI() internal view virtual override returns (string memory){ return baseURI; } // function presaleMint(uint _mintAmount) public payable { // require(preSale, "Pre-sale is not currently running"); // require(whitelist[msg.sender] == true, "Address not whitelisted for presale"); // mint(_mintAmount); // } // // // public // function mint(uint _mintAmount) public payable { // uint256 supply = totalSupply(); // require(!paused, "Minting currently on hold"); // require(_mintAmount > 0, "Amount to mint can not be 0"); // require(_mintAmount <= maxMintAmount, "Maximum mint amount exceeded"); // require(supply + _mintAmount<= maxSupply, "Purchase would exceed max supply of NFT"); // // if (msg.sender != owner()) { // require(msg.value >= cost * _mintAmount, "Amount sent less than the cost of minting NFT(s)"); // } // // for (uint256 i = 1; i <= _mintAmount; i++) { // //require(supply + i < maxSupply + 1, "MaxSupply Reached"); // _safeMint(msg.sender, supply + i); // } // } function mint(uint _mintAmount) public payable { require(!paused , "Minting currently on hold"); require(!preSale, "Minting is in pre-sale mode"); mintX(_mintAmount); } function presaleMint(uint _mintAmount) public payable { require(preSale, "Pre-sale is not currently running"); require(whitelist[msg.sender] == true, "Address not whitelisted for presale"); mintX(_mintAmount); } function mintX(uint _mintAmount) private { uint256 supply = totalSupply(); require(_mintAmount > 0, "Amount to mint can not be 0"); require(_mintAmount <= maxMintAmount, "Maximum mint amount exceeded"); require(supply + _mintAmount<= maxSupply, "Purchase would exceed max supply of NFT"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount, "Amount sent less than the cost of minting NFT(s)"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory){ uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory){ require(_exists(tokenId), "ERC721Metadata: tokenURI queried for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), extension)) : ""; } function whitelistAddresses(address[] memory addresses) public onlyOwner() { for (uint256 i; i < addresses.length; i++) { address addressI = addresses[i]; whitelist[addressI] = true; } } function whitelistAddressesRemove(address[] memory addresses) public onlyOwner() { for (uint256 i; i < addresses.length; i++) { address addressI = addresses[i]; whitelist[addressI] = false; } } function setBaseURI(string memory _newBaseURI) public onlyOwner() { baseURI = _newBaseURI; } function togglePause() public onlyOwner() { paused = !paused; } function togglePreSale() public onlyOwner() { preSale = !preSale; } function withdraw() public payable onlyOwner() { require(payable(msg.sender).send(address(this).balance)); } }
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":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extension","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"whitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"whitelistAddressesRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002e4565b5066b1a2bc2ec50000600d55610fa0600e556014600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000ab57600080fd5b50604051620050fd380380620050fd8339818101604052810190620000d1919062000412565b82828160009080519060200190620000eb929190620002e4565b50806001908051906020019062000104929190620002e4565b505050620001276200011b6200014160201b60201c565b6200014960201b60201c565b62000138816200020f60201b60201c565b505050620006d2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021f6200014160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000245620002ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029590620004f2565b60405180910390fd5b80600b9080519060200190620002b6929190620002e4565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002f290620005ba565b90600052602060002090601f01602090048101928262000316576000855562000362565b82601f106200033157805160ff191683800117855562000362565b8280016001018555821562000362579182015b828111156200036157825182559160200191906001019062000344565b5b50905062000371919062000375565b5090565b5b808211156200039057600081600090555060010162000376565b5090565b6000620003ab620003a5846200053d565b62000514565b905082815260208101848484011115620003ca57620003c962000689565b5b620003d784828562000584565b509392505050565b600082601f830112620003f757620003f662000684565b5b81516200040984826020860162000394565b91505092915050565b6000806000606084860312156200042e576200042d62000693565b5b600084015167ffffffffffffffff8111156200044f576200044e6200068e565b5b6200045d86828701620003df565b935050602084015167ffffffffffffffff8111156200048157620004806200068e565b5b6200048f86828701620003df565b925050604084015167ffffffffffffffff811115620004b357620004b26200068e565b5b620004c186828701620003df565b9150509250925092565b6000620004da60208362000573565b9150620004e782620006a9565b602082019050919050565b600060208201905081810360008301526200050d81620004cb565b9050919050565b60006200052062000533565b90506200052e8282620005f0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200055b576200055a62000655565b5b620005668262000698565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005a457808201518184015260208101905062000587565b83811115620005b4576000848401525b50505050565b60006002820490506001821680620005d357607f821691505b60208210811415620005ea57620005e962000626565b5b50919050565b620005fb8262000698565b810181811067ffffffffffffffff821117156200061d576200061c62000655565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614a1b80620006e26000396000f3fe60806040526004361061020f5760003560e01c80636352211e11610118578063b307898b116100a0578063c9b298f11161006f578063c9b298f114610783578063ca3cb5221461079f578063d5abeb01146107b6578063e985e9c5146107e1578063f2fde38b1461081e5761020f565b8063b307898b146106dd578063b88d4fde14610706578063c4ae31681461072f578063c87b56dd146107465761020f565b80638da5cb5b116100e75780638da5cb5b1461060557806395d89b41146106305780639b19251a1461065b578063a0712d6814610698578063a22cb465146106b45761020f565b80636352211e146105495780636c0360eb1461058657806370a08231146105b1578063715018a6146105ee5761020f565b80632d5537b01161019b578063438b63001161016a578063438b6300146104505780634f6ccce71461048d57806355f804b3146104ca5780635a7adf7f146104f35780635c975abb1461051e5761020f565b80632d5537b0146103b55780632f745c59146103e05780633ccfd60b1461041d57806342842e0e146104275761020f565b806313faede6116101e257806313faede6146102e257806318160ddd1461030d578063239c70ae1461033857806323b872dd146103635780632bf043041461038c5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906132ff565b610847565b60405161024891906139eb565b60405180910390f35b34801561025d57600080fd5b506102666108c1565b6040516102739190613a06565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e91906133a2565b610953565b6040516102b09190613962565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190613276565b6109d8565b005b3480156102ee57600080fd5b506102f7610af0565b6040516103049190613d68565b60405180910390f35b34801561031957600080fd5b50610322610af6565b60405161032f9190613d68565b60405180910390f35b34801561034457600080fd5b5061034d610b03565b60405161035a9190613d68565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613160565b610b09565b005b34801561039857600080fd5b506103b360048036038101906103ae91906132b6565b610b69565b005b3480156103c157600080fd5b506103ca610c80565b6040516103d79190613a06565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190613276565b610d0e565b6040516104149190613d68565b60405180910390f35b610425610db3565b005b34801561043357600080fd5b5061044e60048036038101906104499190613160565b610e6f565b005b34801561045c57600080fd5b50610477600480360381019061047291906130f3565b610e8f565b60405161048491906139c9565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af91906133a2565b610f3d565b6040516104c19190613d68565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613359565b610fae565b005b3480156104ff57600080fd5b50610508611044565b60405161051591906139eb565b60405180910390f35b34801561052a57600080fd5b50610533611057565b60405161054091906139eb565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b91906133a2565b61106a565b60405161057d9190613962565b60405180910390f35b34801561059257600080fd5b5061059b61111c565b6040516105a89190613a06565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906130f3565b6111aa565b6040516105e59190613d68565b60405180910390f35b3480156105fa57600080fd5b50610603611262565b005b34801561061157600080fd5b5061061a6112ea565b6040516106279190613962565b60405180910390f35b34801561063c57600080fd5b50610645611314565b6040516106529190613a06565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d91906130f3565b6113a6565b60405161068f91906139eb565b60405180910390f35b6106b260048036038101906106ad91906133a2565b6113c6565b005b3480156106c057600080fd5b506106db60048036038101906106d69190613236565b611472565b005b3480156106e957600080fd5b5061070460048036038101906106ff91906132b6565b6115f3565b005b34801561071257600080fd5b5061072d600480360381019061072891906131b3565b61170a565b005b34801561073b57600080fd5b5061074461176c565b005b34801561075257600080fd5b5061076d600480360381019061076891906133a2565b611814565b60405161077a9190613a06565b60405180910390f35b61079d600480360381019061079891906133a2565b6118bf565b005b3480156107ab57600080fd5b506107b46119ad565b005b3480156107c257600080fd5b506107cb611a55565b6040516107d89190613d68565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190613120565b611a5b565b60405161081591906139eb565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906130f3565b611aef565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ba57506108b982611be7565b5b9050919050565b6060600080546108d090614092565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90614092565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600061095e82611cc9565b61099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099490613c28565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e38261106a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613cc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a73611d35565b73ffffffffffffffffffffffffffffffffffffffff161480610aa25750610aa181610a9c611d35565b611a5b565b5b610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad890613b88565b60405180910390fd5b610aeb8383611d3d565b505050565b600d5481565b6000600880549050905090565b600f5481565b610b1a610b14611d35565b82611df6565b610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090613ce8565b60405180910390fd5b610b64838383611ed4565b505050565b610b71611d35565b73ffffffffffffffffffffffffffffffffffffffff16610b8f6112ea565b73ffffffffffffffffffffffffffffffffffffffff1614610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613c48565b60405180910390fd5b60005b8151811015610c7c576000828281518110610c0657610c0561422b565b5b602002602001015190506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610c74906140f5565b915050610be8565b5050565b600c8054610c8d90614092565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb990614092565b8015610d065780601f10610cdb57610100808354040283529160200191610d06565b820191906000526020600020905b815481529060010190602001808311610ce957829003601f168201915b505050505081565b6000610d19836111aa565b8210610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613a28565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dbb611d35565b73ffffffffffffffffffffffffffffffffffffffff16610dd96112ea565b73ffffffffffffffffffffffffffffffffffffffff1614610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2690613c48565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6d57600080fd5b565b610e8a8383836040518060200160405280600081525061170a565b505050565b60606000610e9c836111aa565b905060008167ffffffffffffffff811115610eba57610eb961425a565b5b604051908082528060200260200182016040528015610ee85781602001602082028036833780820191505090505b50905060005b82811015610f3257610f008582610d0e565b828281518110610f1357610f1261422b565b5b6020026020010181815250508080610f2a906140f5565b915050610eee565b508092505050919050565b6000610f47610af6565b8210610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90613d28565b60405180910390fd5b60088281548110610f9c57610f9b61422b565b5b90600052602060002001549050919050565b610fb6611d35565b73ffffffffffffffffffffffffffffffffffffffff16610fd46112ea565b73ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190613c48565b60405180910390fd5b80600b9080519060200190611040929190612e69565b5050565b601060019054906101000a900460ff1681565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90613bc8565b60405180910390fd5b80915050919050565b600b805461112990614092565b80601f016020809104026020016040519081016040528092919081815260200182805461115590614092565b80156111a25780601f10611177576101008083540402835291602001916111a2565b820191906000526020600020905b81548152906001019060200180831161118557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613ba8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61126a611d35565b73ffffffffffffffffffffffffffffffffffffffff166112886112ea565b73ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613c48565b60405180910390fd5b6112e86000612130565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132390614092565b80601f016020809104026020016040519081016040528092919081815260200182805461134f90614092565b801561139c5780601f106113715761010080835404028352916020019161139c565b820191906000526020600020905b81548152906001019060200180831161137f57829003601f168201915b5050505050905090565b60116020528060005260406000206000915054906101000a900460ff1681565b601060009054906101000a900460ff1615611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613b68565b60405180910390fd5b601060019054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90613aa8565b60405180910390fd5b61146f816121f6565b50565b61147a611d35565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613b28565b60405180910390fd5b80600560006114f5611d35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a2611d35565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e791906139eb565b60405180910390a35050565b6115fb611d35565b73ffffffffffffffffffffffffffffffffffffffff166116196112ea565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613c48565b60405180910390fd5b60005b81518110156117065760008282815181106116905761168f61422b565b5b602002602001015190506000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806116fe906140f5565b915050611672565b5050565b61171b611715611d35565b83611df6565b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613ce8565b60405180910390fd5b611766848484846123a0565b50505050565b611774611d35565b73ffffffffffffffffffffffffffffffffffffffff166117926112ea565b73ffffffffffffffffffffffffffffffffffffffff16146117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613c48565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b606061181f82611cc9565b61185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590613d48565b60405180910390fd5b60006118686123fc565b9050600081511161188857604051806020016040528060008152506118b7565b600b6118938461248e565b600c6040516020016118a793929190613931565b6040516020818303038152906040525b915050919050565b601060019054906101000a900460ff1661190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613ca8565b60405180910390fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613c68565b60405180910390fd5b6119aa816121f6565b50565b6119b5611d35565b73ffffffffffffffffffffffffffffffffffffffff166119d36112ea565b73ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090613c48565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611af7611d35565b73ffffffffffffffffffffffffffffffffffffffff16611b156112ea565b73ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6290613c48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd290613a68565b60405180910390fd5b611be481612130565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cb257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cc25750611cc1826125ef565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611db08361106a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0182611cc9565b611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613b48565b60405180910390fd5b6000611e4b8361106a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eba57508373ffffffffffffffffffffffffffffffffffffffff16611ea284610953565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ecb5750611eca8185611a5b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ef48261106a565b73ffffffffffffffffffffffffffffffffffffffff1614611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190613c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190613b08565b60405180910390fd5b611fc5838383612659565b611fd0600082611d3d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120209190613fa8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120779190613ec7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612200610af6565b905060008211612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90613d08565b60405180910390fd5b600f5482111561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190613be8565b60405180910390fd5b600e5482826122999190613ec7565b11156122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d190613ae8565b60405180910390fd5b6122e26112ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123655781600d546123229190613f4e565b341015612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90613ac8565b60405180910390fd5b5b6000600190505b82811161239b576123883382846123839190613ec7565b61276d565b8080612393906140f5565b91505061236c565b505050565b6123ab848484611ed4565b6123b78484848461278b565b6123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90613a48565b60405180910390fd5b50505050565b6060600b805461240b90614092565b80601f016020809104026020016040519081016040528092919081815260200182805461243790614092565b80156124845780601f1061245957610100808354040283529160200191612484565b820191906000526020600020905b81548152906001019060200180831161246757829003601f168201915b5050505050905090565b606060008214156124d6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ea565b600082905060005b600082146125085780806124f1906140f5565b915050600a826125019190613f1d565b91506124de565b60008167ffffffffffffffff8111156125245761252361425a565b5b6040519080825280601f01601f1916602001820160405280156125565781602001600182028036833780820191505090505b5090505b600085146125e35760018261256f9190613fa8565b9150600a8561257e919061413e565b603061258a9190613ec7565b60f81b8183815181106125a05761259f61422b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125dc9190613f1d565b945061255a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612664838383612922565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a7576126a281612927565b6126e6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126e5576126e48382612970565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127295761272481612add565b612768565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612767576127668282612bae565b5b5b505050565b612787828260405180602001604052806000815250612c2d565b5050565b60006127ac8473ffffffffffffffffffffffffffffffffffffffff16612c88565b15612915578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127d5611d35565b8786866040518563ffffffff1660e01b81526004016127f7949392919061397d565b602060405180830381600087803b15801561281157600080fd5b505af192505050801561284257506040513d601f19601f8201168201806040525081019061283f919061332c565b60015b6128c5573d8060008114612872576040519150601f19603f3d011682016040523d82523d6000602084013e612877565b606091505b506000815114156128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b490613a48565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161297d846111aa565b6129879190613fa8565b9050600060076000848152602001908152602001600020549050818114612a6c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612af19190613fa8565b9050600060096000848152602001908152602001600020549050600060088381548110612b2157612b2061422b565b5b906000526020600020015490508060088381548110612b4357612b4261422b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b9257612b916141fc565b5b6001900381819060005260206000200160009055905550505050565b6000612bb9836111aa565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612c378383612c9b565b612c44600084848461278b565b612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a90613a48565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0290613c08565b60405180910390fd5b612d1481611cc9565b15612d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4b90613a88565b60405180910390fd5b612d6060008383612659565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db09190613ec7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e7590614092565b90600052602060002090601f016020900481019282612e975760008555612ede565b82601f10612eb057805160ff1916838001178555612ede565b82800160010185558215612ede579182015b82811115612edd578251825591602001919060010190612ec2565b5b509050612eeb9190612eef565b5090565b5b80821115612f08576000816000905550600101612ef0565b5090565b6000612f1f612f1a84613da8565b613d83565b90508083825260208201905082856020860282011115612f4257612f4161428e565b5b60005b85811015612f725781612f588882613000565b845260208401935060208301925050600181019050612f45565b5050509392505050565b6000612f8f612f8a84613dd4565b613d83565b905082815260208101848484011115612fab57612faa614293565b5b612fb6848285614050565b509392505050565b6000612fd1612fcc84613e05565b613d83565b905082815260208101848484011115612fed57612fec614293565b5b612ff8848285614050565b509392505050565b60008135905061300f81614989565b92915050565b600082601f83011261302a57613029614289565b5b813561303a848260208601612f0c565b91505092915050565b600081359050613052816149a0565b92915050565b600081359050613067816149b7565b92915050565b60008151905061307c816149b7565b92915050565b600082601f83011261309757613096614289565b5b81356130a7848260208601612f7c565b91505092915050565b600082601f8301126130c5576130c4614289565b5b81356130d5848260208601612fbe565b91505092915050565b6000813590506130ed816149ce565b92915050565b6000602082840312156131095761310861429d565b5b600061311784828501613000565b91505092915050565b600080604083850312156131375761313661429d565b5b600061314585828601613000565b925050602061315685828601613000565b9150509250929050565b6000806000606084860312156131795761317861429d565b5b600061318786828701613000565b935050602061319886828701613000565b92505060406131a9868287016130de565b9150509250925092565b600080600080608085870312156131cd576131cc61429d565b5b60006131db87828801613000565b94505060206131ec87828801613000565b93505060406131fd878288016130de565b925050606085013567ffffffffffffffff81111561321e5761321d614298565b5b61322a87828801613082565b91505092959194509250565b6000806040838503121561324d5761324c61429d565b5b600061325b85828601613000565b925050602061326c85828601613043565b9150509250929050565b6000806040838503121561328d5761328c61429d565b5b600061329b85828601613000565b92505060206132ac858286016130de565b9150509250929050565b6000602082840312156132cc576132cb61429d565b5b600082013567ffffffffffffffff8111156132ea576132e9614298565b5b6132f684828501613015565b91505092915050565b6000602082840312156133155761331461429d565b5b600061332384828501613058565b91505092915050565b6000602082840312156133425761334161429d565b5b60006133508482850161306d565b91505092915050565b60006020828403121561336f5761336e61429d565b5b600082013567ffffffffffffffff81111561338d5761338c614298565b5b613399848285016130b0565b91505092915050565b6000602082840312156133b8576133b761429d565b5b60006133c6848285016130de565b91505092915050565b60006133db8383613913565b60208301905092915050565b6133f081613fdc565b82525050565b600061340182613e5b565b61340b8185613e89565b935061341683613e36565b8060005b8381101561344757815161342e88826133cf565b975061343983613e7c565b92505060018101905061341a565b5085935050505092915050565b61345d81613fee565b82525050565b600061346e82613e66565b6134788185613e9a565b935061348881856020860161405f565b613491816142a2565b840191505092915050565b60006134a782613e71565b6134b18185613eab565b93506134c181856020860161405f565b6134ca816142a2565b840191505092915050565b60006134e082613e71565b6134ea8185613ebc565b93506134fa81856020860161405f565b80840191505092915050565b6000815461351381614092565b61351d8186613ebc565b9450600182166000811461353857600181146135495761357c565b60ff1983168652818601935061357c565b61355285613e46565b60005b8381101561357457815481890152600182019150602081019050613555565b838801955050505b50505092915050565b6000613592602b83613eab565b915061359d826142b3565b604082019050919050565b60006135b5603283613eab565b91506135c082614302565b604082019050919050565b60006135d8602683613eab565b91506135e382614351565b604082019050919050565b60006135fb601c83613eab565b9150613606826143a0565b602082019050919050565b600061361e601b83613eab565b9150613629826143c9565b602082019050919050565b6000613641603083613eab565b915061364c826143f2565b604082019050919050565b6000613664602783613eab565b915061366f82614441565b604082019050919050565b6000613687602483613eab565b915061369282614490565b604082019050919050565b60006136aa601983613eab565b91506136b5826144df565b602082019050919050565b60006136cd602c83613eab565b91506136d882614508565b604082019050919050565b60006136f0601983613eab565b91506136fb82614557565b602082019050919050565b6000613713603883613eab565b915061371e82614580565b604082019050919050565b6000613736602a83613eab565b9150613741826145cf565b604082019050919050565b6000613759602983613eab565b91506137648261461e565b604082019050919050565b600061377c601c83613eab565b91506137878261466d565b602082019050919050565b600061379f602083613eab565b91506137aa82614696565b602082019050919050565b60006137c2602c83613eab565b91506137cd826146bf565b604082019050919050565b60006137e5602083613eab565b91506137f08261470e565b602082019050919050565b6000613808602383613eab565b915061381382614737565b604082019050919050565b600061382b602983613eab565b915061383682614786565b604082019050919050565b600061384e602183613eab565b9150613859826147d5565b604082019050919050565b6000613871602183613eab565b915061387c82614824565b604082019050919050565b6000613894603183613eab565b915061389f82614873565b604082019050919050565b60006138b7601b83613eab565b91506138c2826148c2565b602082019050919050565b60006138da602c83613eab565b91506138e5826148eb565b604082019050919050565b60006138fd603683613eab565b91506139088261493a565b604082019050919050565b61391c81614046565b82525050565b61392b81614046565b82525050565b600061393d8286613506565b915061394982856134d5565b91506139558284613506565b9150819050949350505050565b600060208201905061397760008301846133e7565b92915050565b600060808201905061399260008301876133e7565b61399f60208301866133e7565b6139ac6040830185613922565b81810360608301526139be8184613463565b905095945050505050565b600060208201905081810360008301526139e381846133f6565b905092915050565b6000602082019050613a006000830184613454565b92915050565b60006020820190508181036000830152613a20818461349c565b905092915050565b60006020820190508181036000830152613a4181613585565b9050919050565b60006020820190508181036000830152613a61816135a8565b9050919050565b60006020820190508181036000830152613a81816135cb565b9050919050565b60006020820190508181036000830152613aa1816135ee565b9050919050565b60006020820190508181036000830152613ac181613611565b9050919050565b60006020820190508181036000830152613ae181613634565b9050919050565b60006020820190508181036000830152613b0181613657565b9050919050565b60006020820190508181036000830152613b218161367a565b9050919050565b60006020820190508181036000830152613b418161369d565b9050919050565b60006020820190508181036000830152613b61816136c0565b9050919050565b60006020820190508181036000830152613b81816136e3565b9050919050565b60006020820190508181036000830152613ba181613706565b9050919050565b60006020820190508181036000830152613bc181613729565b9050919050565b60006020820190508181036000830152613be18161374c565b9050919050565b60006020820190508181036000830152613c018161376f565b9050919050565b60006020820190508181036000830152613c2181613792565b9050919050565b60006020820190508181036000830152613c41816137b5565b9050919050565b60006020820190508181036000830152613c61816137d8565b9050919050565b60006020820190508181036000830152613c81816137fb565b9050919050565b60006020820190508181036000830152613ca18161381e565b9050919050565b60006020820190508181036000830152613cc181613841565b9050919050565b60006020820190508181036000830152613ce181613864565b9050919050565b60006020820190508181036000830152613d0181613887565b9050919050565b60006020820190508181036000830152613d21816138aa565b9050919050565b60006020820190508181036000830152613d41816138cd565b9050919050565b60006020820190508181036000830152613d61816138f0565b9050919050565b6000602082019050613d7d6000830184613922565b92915050565b6000613d8d613d9e565b9050613d9982826140c4565b919050565b6000604051905090565b600067ffffffffffffffff821115613dc357613dc261425a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613def57613dee61425a565b5b613df8826142a2565b9050602081019050919050565b600067ffffffffffffffff821115613e2057613e1f61425a565b5b613e29826142a2565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ed282614046565b9150613edd83614046565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f1257613f1161416f565b5b828201905092915050565b6000613f2882614046565b9150613f3383614046565b925082613f4357613f4261419e565b5b828204905092915050565b6000613f5982614046565b9150613f6483614046565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f9d57613f9c61416f565b5b828202905092915050565b6000613fb382614046565b9150613fbe83614046565b925082821015613fd157613fd061416f565b5b828203905092915050565b6000613fe782614026565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561407d578082015181840152602081019050614062565b8381111561408c576000848401525b50505050565b600060028204905060018216806140aa57607f821691505b602082108114156140be576140bd6141cd565b5b50919050565b6140cd826142a2565b810181811067ffffffffffffffff821117156140ec576140eb61425a565b5b80604052505050565b600061410082614046565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141335761413261416f565b5b600182019050919050565b600061414982614046565b915061415483614046565b9250826141645761416361419e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e74696e6720697320696e207072652d73616c65206d6f64650000000000600082015250565b7f416d6f756e742073656e74206c657373207468616e2074686520636f7374206f60008201527f66206d696e74696e67204e465428732900000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e465400000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672063757272656e746c79206f6e20686f6c6400000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178696d756d206d696e7420616d6f756e7420657863656564656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41646472657373206e6f742077686974656c697374656420666f72207072657360008201527f616c650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f742063757272656e746c792072756e6e696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416d6f756e7420746f206d696e742063616e206e6f7420626520300000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a20746f6b656e555249207175657269656460008201527f20666f72206e6f6e6578697374656e7420746f6b656e00000000000000000000602082015250565b61499281613fdc565b811461499d57600080fd5b50565b6149a981613fee565b81146149b457600080fd5b50565b6149c081613ffa565b81146149cb57600080fd5b50565b6149d781614046565b81146149e257600080fd5b5056fea264697066735822122061740b2f0b7b82ab5315d97b399dec95a6ce25ec217a4a1ac29698ea0fe273ee64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c43727970746f537068657265000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024353000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f63727970746f7370686572656e66742e636f6d2f6e66742f
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80636352211e11610118578063b307898b116100a0578063c9b298f11161006f578063c9b298f114610783578063ca3cb5221461079f578063d5abeb01146107b6578063e985e9c5146107e1578063f2fde38b1461081e5761020f565b8063b307898b146106dd578063b88d4fde14610706578063c4ae31681461072f578063c87b56dd146107465761020f565b80638da5cb5b116100e75780638da5cb5b1461060557806395d89b41146106305780639b19251a1461065b578063a0712d6814610698578063a22cb465146106b45761020f565b80636352211e146105495780636c0360eb1461058657806370a08231146105b1578063715018a6146105ee5761020f565b80632d5537b01161019b578063438b63001161016a578063438b6300146104505780634f6ccce71461048d57806355f804b3146104ca5780635a7adf7f146104f35780635c975abb1461051e5761020f565b80632d5537b0146103b55780632f745c59146103e05780633ccfd60b1461041d57806342842e0e146104275761020f565b806313faede6116101e257806313faede6146102e257806318160ddd1461030d578063239c70ae1461033857806323b872dd146103635780632bf043041461038c5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906132ff565b610847565b60405161024891906139eb565b60405180910390f35b34801561025d57600080fd5b506102666108c1565b6040516102739190613a06565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e91906133a2565b610953565b6040516102b09190613962565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db9190613276565b6109d8565b005b3480156102ee57600080fd5b506102f7610af0565b6040516103049190613d68565b60405180910390f35b34801561031957600080fd5b50610322610af6565b60405161032f9190613d68565b60405180910390f35b34801561034457600080fd5b5061034d610b03565b60405161035a9190613d68565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613160565b610b09565b005b34801561039857600080fd5b506103b360048036038101906103ae91906132b6565b610b69565b005b3480156103c157600080fd5b506103ca610c80565b6040516103d79190613a06565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190613276565b610d0e565b6040516104149190613d68565b60405180910390f35b610425610db3565b005b34801561043357600080fd5b5061044e60048036038101906104499190613160565b610e6f565b005b34801561045c57600080fd5b50610477600480360381019061047291906130f3565b610e8f565b60405161048491906139c9565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af91906133a2565b610f3d565b6040516104c19190613d68565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613359565b610fae565b005b3480156104ff57600080fd5b50610508611044565b60405161051591906139eb565b60405180910390f35b34801561052a57600080fd5b50610533611057565b60405161054091906139eb565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b91906133a2565b61106a565b60405161057d9190613962565b60405180910390f35b34801561059257600080fd5b5061059b61111c565b6040516105a89190613a06565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906130f3565b6111aa565b6040516105e59190613d68565b60405180910390f35b3480156105fa57600080fd5b50610603611262565b005b34801561061157600080fd5b5061061a6112ea565b6040516106279190613962565b60405180910390f35b34801561063c57600080fd5b50610645611314565b6040516106529190613a06565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d91906130f3565b6113a6565b60405161068f91906139eb565b60405180910390f35b6106b260048036038101906106ad91906133a2565b6113c6565b005b3480156106c057600080fd5b506106db60048036038101906106d69190613236565b611472565b005b3480156106e957600080fd5b5061070460048036038101906106ff91906132b6565b6115f3565b005b34801561071257600080fd5b5061072d600480360381019061072891906131b3565b61170a565b005b34801561073b57600080fd5b5061074461176c565b005b34801561075257600080fd5b5061076d600480360381019061076891906133a2565b611814565b60405161077a9190613a06565b60405180910390f35b61079d600480360381019061079891906133a2565b6118bf565b005b3480156107ab57600080fd5b506107b46119ad565b005b3480156107c257600080fd5b506107cb611a55565b6040516107d89190613d68565b60405180910390f35b3480156107ed57600080fd5b5061080860048036038101906108039190613120565b611a5b565b60405161081591906139eb565b60405180910390f35b34801561082a57600080fd5b50610845600480360381019061084091906130f3565b611aef565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ba57506108b982611be7565b5b9050919050565b6060600080546108d090614092565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90614092565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600061095e82611cc9565b61099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099490613c28565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e38261106a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613cc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a73611d35565b73ffffffffffffffffffffffffffffffffffffffff161480610aa25750610aa181610a9c611d35565b611a5b565b5b610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad890613b88565b60405180910390fd5b610aeb8383611d3d565b505050565b600d5481565b6000600880549050905090565b600f5481565b610b1a610b14611d35565b82611df6565b610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090613ce8565b60405180910390fd5b610b64838383611ed4565b505050565b610b71611d35565b73ffffffffffffffffffffffffffffffffffffffff16610b8f6112ea565b73ffffffffffffffffffffffffffffffffffffffff1614610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613c48565b60405180910390fd5b60005b8151811015610c7c576000828281518110610c0657610c0561422b565b5b602002602001015190506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610c74906140f5565b915050610be8565b5050565b600c8054610c8d90614092565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb990614092565b8015610d065780601f10610cdb57610100808354040283529160200191610d06565b820191906000526020600020905b815481529060010190602001808311610ce957829003601f168201915b505050505081565b6000610d19836111aa565b8210610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613a28565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610dbb611d35565b73ffffffffffffffffffffffffffffffffffffffff16610dd96112ea565b73ffffffffffffffffffffffffffffffffffffffff1614610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2690613c48565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6d57600080fd5b565b610e8a8383836040518060200160405280600081525061170a565b505050565b60606000610e9c836111aa565b905060008167ffffffffffffffff811115610eba57610eb961425a565b5b604051908082528060200260200182016040528015610ee85781602001602082028036833780820191505090505b50905060005b82811015610f3257610f008582610d0e565b828281518110610f1357610f1261422b565b5b6020026020010181815250508080610f2a906140f5565b915050610eee565b508092505050919050565b6000610f47610af6565b8210610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90613d28565b60405180910390fd5b60088281548110610f9c57610f9b61422b565b5b90600052602060002001549050919050565b610fb6611d35565b73ffffffffffffffffffffffffffffffffffffffff16610fd46112ea565b73ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190613c48565b60405180910390fd5b80600b9080519060200190611040929190612e69565b5050565b601060019054906101000a900460ff1681565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90613bc8565b60405180910390fd5b80915050919050565b600b805461112990614092565b80601f016020809104026020016040519081016040528092919081815260200182805461115590614092565b80156111a25780601f10611177576101008083540402835291602001916111a2565b820191906000526020600020905b81548152906001019060200180831161118557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290613ba8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61126a611d35565b73ffffffffffffffffffffffffffffffffffffffff166112886112ea565b73ffffffffffffffffffffffffffffffffffffffff16146112de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d590613c48565b60405180910390fd5b6112e86000612130565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461132390614092565b80601f016020809104026020016040519081016040528092919081815260200182805461134f90614092565b801561139c5780601f106113715761010080835404028352916020019161139c565b820191906000526020600020905b81548152906001019060200180831161137f57829003601f168201915b5050505050905090565b60116020528060005260406000206000915054906101000a900460ff1681565b601060009054906101000a900460ff1615611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613b68565b60405180910390fd5b601060019054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90613aa8565b60405180910390fd5b61146f816121f6565b50565b61147a611d35565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df90613b28565b60405180910390fd5b80600560006114f5611d35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a2611d35565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e791906139eb565b60405180910390a35050565b6115fb611d35565b73ffffffffffffffffffffffffffffffffffffffff166116196112ea565b73ffffffffffffffffffffffffffffffffffffffff161461166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690613c48565b60405180910390fd5b60005b81518110156117065760008282815181106116905761168f61422b565b5b602002602001015190506000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806116fe906140f5565b915050611672565b5050565b61171b611715611d35565b83611df6565b61175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613ce8565b60405180910390fd5b611766848484846123a0565b50505050565b611774611d35565b73ffffffffffffffffffffffffffffffffffffffff166117926112ea565b73ffffffffffffffffffffffffffffffffffffffff16146117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613c48565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b606061181f82611cc9565b61185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590613d48565b60405180910390fd5b60006118686123fc565b9050600081511161188857604051806020016040528060008152506118b7565b600b6118938461248e565b600c6040516020016118a793929190613931565b6040516020818303038152906040525b915050919050565b601060019054906101000a900460ff1661190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613ca8565b60405180910390fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613c68565b60405180910390fd5b6119aa816121f6565b50565b6119b5611d35565b73ffffffffffffffffffffffffffffffffffffffff166119d36112ea565b73ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090613c48565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611af7611d35565b73ffffffffffffffffffffffffffffffffffffffff16611b156112ea565b73ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6290613c48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd290613a68565b60405180910390fd5b611be481612130565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cb257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cc25750611cc1826125ef565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611db08361106a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e0182611cc9565b611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613b48565b60405180910390fd5b6000611e4b8361106a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eba57508373ffffffffffffffffffffffffffffffffffffffff16611ea284610953565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ecb5750611eca8185611a5b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ef48261106a565b73ffffffffffffffffffffffffffffffffffffffff1614611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190613c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190613b08565b60405180910390fd5b611fc5838383612659565b611fd0600082611d3d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120209190613fa8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120779190613ec7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612200610af6565b905060008211612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90613d08565b60405180910390fd5b600f5482111561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190613be8565b60405180910390fd5b600e5482826122999190613ec7565b11156122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d190613ae8565b60405180910390fd5b6122e26112ea565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123655781600d546123229190613f4e565b341015612364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235b90613ac8565b60405180910390fd5b5b6000600190505b82811161239b576123883382846123839190613ec7565b61276d565b8080612393906140f5565b91505061236c565b505050565b6123ab848484611ed4565b6123b78484848461278b565b6123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90613a48565b60405180910390fd5b50505050565b6060600b805461240b90614092565b80601f016020809104026020016040519081016040528092919081815260200182805461243790614092565b80156124845780601f1061245957610100808354040283529160200191612484565b820191906000526020600020905b81548152906001019060200180831161246757829003601f168201915b5050505050905090565b606060008214156124d6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ea565b600082905060005b600082146125085780806124f1906140f5565b915050600a826125019190613f1d565b91506124de565b60008167ffffffffffffffff8111156125245761252361425a565b5b6040519080825280601f01601f1916602001820160405280156125565781602001600182028036833780820191505090505b5090505b600085146125e35760018261256f9190613fa8565b9150600a8561257e919061413e565b603061258a9190613ec7565b60f81b8183815181106125a05761259f61422b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125dc9190613f1d565b945061255a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612664838383612922565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a7576126a281612927565b6126e6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126e5576126e48382612970565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127295761272481612add565b612768565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612767576127668282612bae565b5b5b505050565b612787828260405180602001604052806000815250612c2d565b5050565b60006127ac8473ffffffffffffffffffffffffffffffffffffffff16612c88565b15612915578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127d5611d35565b8786866040518563ffffffff1660e01b81526004016127f7949392919061397d565b602060405180830381600087803b15801561281157600080fd5b505af192505050801561284257506040513d601f19601f8201168201806040525081019061283f919061332c565b60015b6128c5573d8060008114612872576040519150601f19603f3d011682016040523d82523d6000602084013e612877565b606091505b506000815114156128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b490613a48565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161297d846111aa565b6129879190613fa8565b9050600060076000848152602001908152602001600020549050818114612a6c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612af19190613fa8565b9050600060096000848152602001908152602001600020549050600060088381548110612b2157612b2061422b565b5b906000526020600020015490508060088381548110612b4357612b4261422b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b9257612b916141fc565b5b6001900381819060005260206000200160009055905550505050565b6000612bb9836111aa565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612c378383612c9b565b612c44600084848461278b565b612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a90613a48565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0290613c08565b60405180910390fd5b612d1481611cc9565b15612d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4b90613a88565b60405180910390fd5b612d6060008383612659565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db09190613ec7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e7590614092565b90600052602060002090601f016020900481019282612e975760008555612ede565b82601f10612eb057805160ff1916838001178555612ede565b82800160010185558215612ede579182015b82811115612edd578251825591602001919060010190612ec2565b5b509050612eeb9190612eef565b5090565b5b80821115612f08576000816000905550600101612ef0565b5090565b6000612f1f612f1a84613da8565b613d83565b90508083825260208201905082856020860282011115612f4257612f4161428e565b5b60005b85811015612f725781612f588882613000565b845260208401935060208301925050600181019050612f45565b5050509392505050565b6000612f8f612f8a84613dd4565b613d83565b905082815260208101848484011115612fab57612faa614293565b5b612fb6848285614050565b509392505050565b6000612fd1612fcc84613e05565b613d83565b905082815260208101848484011115612fed57612fec614293565b5b612ff8848285614050565b509392505050565b60008135905061300f81614989565b92915050565b600082601f83011261302a57613029614289565b5b813561303a848260208601612f0c565b91505092915050565b600081359050613052816149a0565b92915050565b600081359050613067816149b7565b92915050565b60008151905061307c816149b7565b92915050565b600082601f83011261309757613096614289565b5b81356130a7848260208601612f7c565b91505092915050565b600082601f8301126130c5576130c4614289565b5b81356130d5848260208601612fbe565b91505092915050565b6000813590506130ed816149ce565b92915050565b6000602082840312156131095761310861429d565b5b600061311784828501613000565b91505092915050565b600080604083850312156131375761313661429d565b5b600061314585828601613000565b925050602061315685828601613000565b9150509250929050565b6000806000606084860312156131795761317861429d565b5b600061318786828701613000565b935050602061319886828701613000565b92505060406131a9868287016130de565b9150509250925092565b600080600080608085870312156131cd576131cc61429d565b5b60006131db87828801613000565b94505060206131ec87828801613000565b93505060406131fd878288016130de565b925050606085013567ffffffffffffffff81111561321e5761321d614298565b5b61322a87828801613082565b91505092959194509250565b6000806040838503121561324d5761324c61429d565b5b600061325b85828601613000565b925050602061326c85828601613043565b9150509250929050565b6000806040838503121561328d5761328c61429d565b5b600061329b85828601613000565b92505060206132ac858286016130de565b9150509250929050565b6000602082840312156132cc576132cb61429d565b5b600082013567ffffffffffffffff8111156132ea576132e9614298565b5b6132f684828501613015565b91505092915050565b6000602082840312156133155761331461429d565b5b600061332384828501613058565b91505092915050565b6000602082840312156133425761334161429d565b5b60006133508482850161306d565b91505092915050565b60006020828403121561336f5761336e61429d565b5b600082013567ffffffffffffffff81111561338d5761338c614298565b5b613399848285016130b0565b91505092915050565b6000602082840312156133b8576133b761429d565b5b60006133c6848285016130de565b91505092915050565b60006133db8383613913565b60208301905092915050565b6133f081613fdc565b82525050565b600061340182613e5b565b61340b8185613e89565b935061341683613e36565b8060005b8381101561344757815161342e88826133cf565b975061343983613e7c565b92505060018101905061341a565b5085935050505092915050565b61345d81613fee565b82525050565b600061346e82613e66565b6134788185613e9a565b935061348881856020860161405f565b613491816142a2565b840191505092915050565b60006134a782613e71565b6134b18185613eab565b93506134c181856020860161405f565b6134ca816142a2565b840191505092915050565b60006134e082613e71565b6134ea8185613ebc565b93506134fa81856020860161405f565b80840191505092915050565b6000815461351381614092565b61351d8186613ebc565b9450600182166000811461353857600181146135495761357c565b60ff1983168652818601935061357c565b61355285613e46565b60005b8381101561357457815481890152600182019150602081019050613555565b838801955050505b50505092915050565b6000613592602b83613eab565b915061359d826142b3565b604082019050919050565b60006135b5603283613eab565b91506135c082614302565b604082019050919050565b60006135d8602683613eab565b91506135e382614351565b604082019050919050565b60006135fb601c83613eab565b9150613606826143a0565b602082019050919050565b600061361e601b83613eab565b9150613629826143c9565b602082019050919050565b6000613641603083613eab565b915061364c826143f2565b604082019050919050565b6000613664602783613eab565b915061366f82614441565b604082019050919050565b6000613687602483613eab565b915061369282614490565b604082019050919050565b60006136aa601983613eab565b91506136b5826144df565b602082019050919050565b60006136cd602c83613eab565b91506136d882614508565b604082019050919050565b60006136f0601983613eab565b91506136fb82614557565b602082019050919050565b6000613713603883613eab565b915061371e82614580565b604082019050919050565b6000613736602a83613eab565b9150613741826145cf565b604082019050919050565b6000613759602983613eab565b91506137648261461e565b604082019050919050565b600061377c601c83613eab565b91506137878261466d565b602082019050919050565b600061379f602083613eab565b91506137aa82614696565b602082019050919050565b60006137c2602c83613eab565b91506137cd826146bf565b604082019050919050565b60006137e5602083613eab565b91506137f08261470e565b602082019050919050565b6000613808602383613eab565b915061381382614737565b604082019050919050565b600061382b602983613eab565b915061383682614786565b604082019050919050565b600061384e602183613eab565b9150613859826147d5565b604082019050919050565b6000613871602183613eab565b915061387c82614824565b604082019050919050565b6000613894603183613eab565b915061389f82614873565b604082019050919050565b60006138b7601b83613eab565b91506138c2826148c2565b602082019050919050565b60006138da602c83613eab565b91506138e5826148eb565b604082019050919050565b60006138fd603683613eab565b91506139088261493a565b604082019050919050565b61391c81614046565b82525050565b61392b81614046565b82525050565b600061393d8286613506565b915061394982856134d5565b91506139558284613506565b9150819050949350505050565b600060208201905061397760008301846133e7565b92915050565b600060808201905061399260008301876133e7565b61399f60208301866133e7565b6139ac6040830185613922565b81810360608301526139be8184613463565b905095945050505050565b600060208201905081810360008301526139e381846133f6565b905092915050565b6000602082019050613a006000830184613454565b92915050565b60006020820190508181036000830152613a20818461349c565b905092915050565b60006020820190508181036000830152613a4181613585565b9050919050565b60006020820190508181036000830152613a61816135a8565b9050919050565b60006020820190508181036000830152613a81816135cb565b9050919050565b60006020820190508181036000830152613aa1816135ee565b9050919050565b60006020820190508181036000830152613ac181613611565b9050919050565b60006020820190508181036000830152613ae181613634565b9050919050565b60006020820190508181036000830152613b0181613657565b9050919050565b60006020820190508181036000830152613b218161367a565b9050919050565b60006020820190508181036000830152613b418161369d565b9050919050565b60006020820190508181036000830152613b61816136c0565b9050919050565b60006020820190508181036000830152613b81816136e3565b9050919050565b60006020820190508181036000830152613ba181613706565b9050919050565b60006020820190508181036000830152613bc181613729565b9050919050565b60006020820190508181036000830152613be18161374c565b9050919050565b60006020820190508181036000830152613c018161376f565b9050919050565b60006020820190508181036000830152613c2181613792565b9050919050565b60006020820190508181036000830152613c41816137b5565b9050919050565b60006020820190508181036000830152613c61816137d8565b9050919050565b60006020820190508181036000830152613c81816137fb565b9050919050565b60006020820190508181036000830152613ca18161381e565b9050919050565b60006020820190508181036000830152613cc181613841565b9050919050565b60006020820190508181036000830152613ce181613864565b9050919050565b60006020820190508181036000830152613d0181613887565b9050919050565b60006020820190508181036000830152613d21816138aa565b9050919050565b60006020820190508181036000830152613d41816138cd565b9050919050565b60006020820190508181036000830152613d61816138f0565b9050919050565b6000602082019050613d7d6000830184613922565b92915050565b6000613d8d613d9e565b9050613d9982826140c4565b919050565b6000604051905090565b600067ffffffffffffffff821115613dc357613dc261425a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613def57613dee61425a565b5b613df8826142a2565b9050602081019050919050565b600067ffffffffffffffff821115613e2057613e1f61425a565b5b613e29826142a2565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ed282614046565b9150613edd83614046565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f1257613f1161416f565b5b828201905092915050565b6000613f2882614046565b9150613f3383614046565b925082613f4357613f4261419e565b5b828204905092915050565b6000613f5982614046565b9150613f6483614046565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f9d57613f9c61416f565b5b828202905092915050565b6000613fb382614046565b9150613fbe83614046565b925082821015613fd157613fd061416f565b5b828203905092915050565b6000613fe782614026565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561407d578082015181840152602081019050614062565b8381111561408c576000848401525b50505050565b600060028204905060018216806140aa57607f821691505b602082108114156140be576140bd6141cd565b5b50919050565b6140cd826142a2565b810181811067ffffffffffffffff821117156140ec576140eb61425a565b5b80604052505050565b600061410082614046565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141335761413261416f565b5b600182019050919050565b600061414982614046565b915061415483614046565b9250826141645761416361419e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e74696e6720697320696e207072652d73616c65206d6f64650000000000600082015250565b7f416d6f756e742073656e74206c657373207468616e2074686520636f7374206f60008201527f66206d696e74696e67204e465428732900000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e465400000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672063757272656e746c79206f6e20686f6c6400000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178696d756d206d696e7420616d6f756e7420657863656564656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41646472657373206e6f742077686974656c697374656420666f72207072657360008201527f616c650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f742063757272656e746c792072756e6e696e60008201527f6700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416d6f756e7420746f206d696e742063616e206e6f7420626520300000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a20746f6b656e555249207175657269656460008201527f20666f72206e6f6e6578697374656e7420746f6b656e00000000000000000000602082015250565b61499281613fdc565b811461499d57600080fd5b50565b6149a981613fee565b81146149b457600080fd5b50565b6149c081613ffa565b81146149cb57600080fd5b50565b6149d781614046565b81146149e257600080fd5b5056fea264697066735822122061740b2f0b7b82ab5315d97b399dec95a6ce25ec217a4a1ac29698ea0fe273ee64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c43727970746f537068657265000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024353000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f63727970746f7370686572656e66742e636f6d2f6e66742f
-----Decoded View---------------
Arg [0] : _name (string): CryptoSphere
Arg [1] : _symbol (string): CS
Arg [2] : _initBaseURI (string): https://cryptospherenft.com/nft/
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 43727970746f5370686572650000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4353000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [8] : 68747470733a2f2f63727970746f7370686572656e66742e636f6d2f6e66742f
Deployed Bytecode Sourcemap
43220:4441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34720:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21621:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23180:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22703:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43380:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35360:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43457:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24070:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46753:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43340:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35028:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47534:122;;;:::i;:::-;;24480:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46015:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35550:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47246:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43527:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43494:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21315:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43312:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21045:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42517:94;;;;;;;;;;;;;:::i;:::-;;41866:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21790:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43561:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44944:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23473:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46996:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24736:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47360:77;;;;;;;;;;;;;:::i;:::-;;46380:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45152:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47445:81;;;;;;;;;;;;;:::i;:::-;;43419:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23839:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42766:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34720:224;34822:4;34861:35;34846:50;;;:11;:50;;;;:90;;;;34900:36;34924:11;34900:23;:36::i;:::-;34846:90;34839:97;;34720:224;;;:::o;21621:100::-;21675:13;21708:5;21701:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21621:100;:::o;23180:221::-;23256:7;23284:16;23292:7;23284;:16::i;:::-;23276:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23369:15;:24;23385:7;23369:24;;;;;;;;;;;;;;;;;;;;;23362:31;;23180:221;;;:::o;22703:411::-;22784:13;22800:23;22815:7;22800:14;:23::i;:::-;22784:39;;22848:5;22842:11;;:2;:11;;;;22834:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22942:5;22926:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22951:37;22968:5;22975:12;:10;:12::i;:::-;22951:16;:37::i;:::-;22926:62;22904:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23085:21;23094:2;23098:7;23085:8;:21::i;:::-;22773:341;22703:411;;:::o;43380:32::-;;;;:::o;35360:113::-;35421:7;35448:10;:17;;;;35441:24;;35360:113;:::o;43457:30::-;;;;:::o;24070:339::-;24265:41;24284:12;:10;:12::i;:::-;24298:7;24265:18;:41::i;:::-;24257:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24373:28;24383:4;24389:2;24393:7;24373:9;:28::i;:::-;24070:339;;;:::o;46753:235::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46844:9:::1;46839:142;46859:9;:16;46855:1;:20;46839:142;;;46897:16;46916:9;46926:1;46916:12;;;;;;;;:::i;:::-;;;;;;;;46897:31;;46965:4;46943:9;:19;46953:8;46943:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46882:99;46877:3;;;;;:::i;:::-;;;;46839:142;;;;46753:235:::0;:::o;43340:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35028:256::-;35125:7;35161:23;35178:5;35161:16;:23::i;:::-;35153:5;:31;35145:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35250:12;:19;35263:5;35250:19;;;;;;;;;;;;;;;:26;35270:5;35250:26;;;;;;;;;;;;35243:33;;35028:256;;;;:::o;47534:122::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47608:10:::1;47600:24;;:47;47625:21;47600:47;;;;;;;;;;;;;;;;;;;;;;;47592:56;;;::::0;::::1;;47534:122::o:0;24480:185::-;24618:39;24635:4;24641:2;24645:7;24618:39;;;;;;;;;;;;:16;:39::i;:::-;24480:185;;;:::o;46015:357::-;46075:16;46103:23;46129:17;46139:6;46129:9;:17::i;:::-;46103:43;;46157:25;46199:15;46185:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46157:58;;46231:9;46226:113;46246:15;46242:1;:19;46226:113;;;46297:30;46317:6;46325:1;46297:19;:30::i;:::-;46283:8;46292:1;46283:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46263:3;;;;;:::i;:::-;;;;46226:113;;;;46356:8;46349:15;;;;46015:357;;;:::o;35550:233::-;35625:7;35661:30;:28;:30::i;:::-;35653:5;:38;35645:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35758:10;35769:5;35758:17;;;;;;;;:::i;:::-;;;;;;;;;;35751:24;;35550:233;;;:::o;47246:106::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47333:11:::1;47323:7;:21;;;;;;;;;;;;:::i;:::-;;47246:106:::0;:::o;43527:27::-;;;;;;;;;;;;;:::o;43494:26::-;;;;;;;;;;;;;:::o;21315:239::-;21387:7;21407:13;21423:7;:16;21431:7;21423:16;;;;;;;;;;;;;;;;;;;;;21407:32;;21475:1;21458:19;;:5;:19;;;;21450:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21541:5;21534:12;;;21315:239;;;:::o;43312:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21045:208::-;21117:7;21162:1;21145:19;;:5;:19;;;;21137:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21229:9;:16;21239:5;21229:16;;;;;;;;;;;;;;;;21222:23;;21045:208;;;:::o;42517:94::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42582:21:::1;42600:1;42582:9;:21::i;:::-;42517:94::o:0;41866:87::-;41912:7;41939:6;;;;;;;;;;;41932:13;;41866:87;:::o;21790:104::-;21846:13;21879:7;21872:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21790:104;:::o;43561:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;44944:200::-;45011:6;;;;;;;;;;;45010:7;45002:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;45068:7;;;;;;;;;;;45067:8;45059:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:18;45124:11;45118:5;:18::i;:::-;44944:200;:::o;23473:295::-;23588:12;:10;:12::i;:::-;23576:24;;:8;:24;;;;23568:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23688:8;23643:18;:32;23662:12;:10;:12::i;:::-;23643:32;;;;;;;;;;;;;;;:42;23676:8;23643:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23741:8;23712:48;;23727:12;:10;:12::i;:::-;23712:48;;;23751:8;23712:48;;;;;;:::i;:::-;;;;;;;;23473:295;;:::o;46996:242::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47093:9:::1;47088:143;47108:9;:16;47104:1;:20;47088:143;;;47146:16;47165:9;47175:1;47165:12;;;;;;;;:::i;:::-;;;;;;;;47146:31;;47214:5;47192:9;:19;47202:8;47192:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;47131:100;47126:3;;;;;:::i;:::-;;;;47088:143;;;;46996:242:::0;:::o;24736:328::-;24911:41;24930:12;:10;:12::i;:::-;24944:7;24911:18;:41::i;:::-;24903:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25017:39;25031:4;25037:2;25041:7;25050:5;25017:13;:39::i;:::-;24736:328;;;;:::o;47360:77::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47423:6:::1;;;;;;;;;;;47422:7;47413:6;;:16;;;;;;;;;;;;;;;;;;47360:77::o:0;46380:365::-;46453:13;46488:16;46496:7;46488;:16::i;:::-;46480:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46574:28;46605:10;:8;:10::i;:::-;46574:41;;46664:1;46639:14;46633:28;:32;:104;;;;;;;;;;;;;;;;;46692:7;46701:18;:7;:16;:18::i;:::-;46721:9;46675:56;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46633:104;46626:111;;;46380:365;;;:::o;45152:243::-;45225:7;;;;;;;;;;;45217:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45314:4;45289:29;;:9;:21;45299:10;45289:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;45281:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45369:18;45375:11;45369:5;:18::i;:::-;45152:243;:::o;47445:81::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47511:7:::1;;;;;;;;;;;47510:8;47500:7;;:18;;;;;;;;;;;;;;;;;;47445:81::o:0;43419:31::-;;;;:::o;23839:164::-;23936:4;23960:18;:25;23979:5;23960:25;;;;;;;;;;;;;;;:35;23986:8;23960:35;;;;;;;;;;;;;;;;;;;;;;;;;23953:42;;23839:164;;;;:::o;42766:192::-;42097:12;:10;:12::i;:::-;42086:23;;:7;:5;:7::i;:::-;:23;;;42078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42875:1:::1;42855:22;;:8;:22;;;;42847:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42931:19;42941:8;42931:9;:19::i;:::-;42766:192:::0;:::o;20676:305::-;20778:4;20830:25;20815:40;;;:11;:40;;;;:105;;;;20887:33;20872:48;;;:11;:48;;;;20815:105;:158;;;;20937:36;20961:11;20937:23;:36::i;:::-;20815:158;20795:178;;20676:305;;;:::o;26574:127::-;26639:4;26691:1;26663:30;;:7;:16;26671:7;26663:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26656:37;;26574:127;;;:::o;16098:98::-;16151:7;16178:10;16171:17;;16098:98;:::o;30556:174::-;30658:2;30631:15;:24;30647:7;30631:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30714:7;30710:2;30676:46;;30685:23;30700:7;30685:14;:23::i;:::-;30676:46;;;;;;;;;;;;30556:174;;:::o;26868:348::-;26961:4;26986:16;26994:7;26986;:16::i;:::-;26978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27062:13;27078:23;27093:7;27078:14;:23::i;:::-;27062:39;;27131:5;27120:16;;:7;:16;;;:51;;;;27164:7;27140:31;;:20;27152:7;27140:11;:20::i;:::-;:31;;;27120:51;:87;;;;27175:32;27192:5;27199:7;27175:16;:32::i;:::-;27120:87;27112:96;;;26868:348;;;;:::o;29860:578::-;30019:4;29992:31;;:23;30007:7;29992:14;:23::i;:::-;:31;;;29984:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30102:1;30088:16;;:2;:16;;;;30080:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30158:39;30179:4;30185:2;30189:7;30158:20;:39::i;:::-;30262:29;30279:1;30283:7;30262:8;:29::i;:::-;30323:1;30304:9;:15;30314:4;30304:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30352:1;30335:9;:13;30345:2;30335:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30383:2;30364:7;:16;30372:7;30364:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30422:7;30418:2;30403:27;;30412:4;30403:27;;;;;;;;;;;;29860:578;;;:::o;42966:173::-;43022:16;43041:6;;;;;;;;;;;43022:25;;43067:8;43058:6;;:17;;;;;;;;;;;;;;;;;;43122:8;43091:40;;43112:8;43091:40;;;;;;;;;;;;43011:128;42966:173;:::o;45403:604::-;45455:14;45472:13;:11;:13::i;:::-;45455:30;;45518:1;45504:11;:15;45496:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45585:13;;45570:11;:28;;45562:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45673:9;;45659:11;45650:6;:20;;;;:::i;:::-;:32;;45642:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45757:7;:5;:7::i;:::-;45743:21;;:10;:21;;;45739:146;;45809:11;45802:4;;:18;;;;:::i;:::-;45789:9;:31;;45781:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45739:146;45902:9;45914:1;45902:13;;45897:103;45922:11;45917:1;:16;45897:103;;45955:33;45965:10;45986:1;45977:6;:10;;;;:::i;:::-;45955:9;:33::i;:::-;45935:3;;;;;:::i;:::-;;;;45897:103;;;;45444:563;45403:604;:::o;25946:315::-;26103:28;26113:4;26119:2;26123:7;26103:9;:28::i;:::-;26150:48;26173:4;26179:2;26183:7;26192:5;26150:22;:48::i;:::-;26142:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25946:315;;;;:::o;43769:107::-;43829:13;43861:7;43854:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43769:107;:::o;16623:723::-;16679:13;16909:1;16900:5;:10;16896:53;;;16927:10;;;;;;;;;;;;;;;;;;;;;16896:53;16959:12;16974:5;16959:20;;16990:14;17015:78;17030:1;17022:4;:9;17015:78;;17048:8;;;;;:::i;:::-;;;;17079:2;17071:10;;;;;:::i;:::-;;;17015:78;;;17103:19;17135:6;17125:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17103:39;;17153:154;17169:1;17160:5;:10;17153:154;;17197:1;17187:11;;;;;:::i;:::-;;;17264:2;17256:5;:10;;;;:::i;:::-;17243:2;:24;;;;:::i;:::-;17230:39;;17213:6;17220;17213:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17293:2;17284:11;;;;;:::i;:::-;;;17153:154;;;17331:6;17317:21;;;;;16623:723;;;;:::o;19180:157::-;19265:4;19304:25;19289:40;;;:11;:40;;;;19282:47;;19180:157;;;:::o;36396:589::-;36540:45;36567:4;36573:2;36577:7;36540:26;:45::i;:::-;36618:1;36602:18;;:4;:18;;;36598:187;;;36637:40;36669:7;36637:31;:40::i;:::-;36598:187;;;36707:2;36699:10;;:4;:10;;;36695:90;;36726:47;36759:4;36765:7;36726:32;:47::i;:::-;36695:90;36598:187;36813:1;36799:16;;:2;:16;;;36795:183;;;36832:45;36869:7;36832:36;:45::i;:::-;36795:183;;;36905:4;36899:10;;:2;:10;;;36895:83;;36926:40;36954:2;36958:7;36926:27;:40::i;:::-;36895:83;36795:183;36396:589;;;:::o;27558:110::-;27634:26;27644:2;27648:7;27634:26;;;;;;;;;;;;:9;:26::i;:::-;27558:110;;:::o;31295:799::-;31450:4;31471:15;:2;:13;;;:15::i;:::-;31467:620;;;31523:2;31507:36;;;31544:12;:10;:12::i;:::-;31558:4;31564:7;31573:5;31507:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31503:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31766:1;31749:6;:13;:18;31745:272;;;31792:60;;;;;;;;;;:::i;:::-;;;;;;;;31745:272;31967:6;31961:13;31952:6;31948:2;31944:15;31937:38;31503:529;31640:41;;;31630:51;;;:6;:51;;;;31623:58;;;;;31467:620;32071:4;32064:11;;31295:799;;;;;;;:::o;32666:126::-;;;;:::o;37708:164::-;37812:10;:17;;;;37785:15;:24;37801:7;37785:24;;;;;;;;;;;:44;;;;37840:10;37856:7;37840:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37708:164;:::o;38499:988::-;38765:22;38815:1;38790:22;38807:4;38790:16;:22::i;:::-;:26;;;;:::i;:::-;38765:51;;38827:18;38848:17;:26;38866:7;38848:26;;;;;;;;;;;;38827:47;;38995:14;38981:10;:28;38977:328;;39026:19;39048:12;:18;39061:4;39048:18;;;;;;;;;;;;;;;:34;39067:14;39048:34;;;;;;;;;;;;39026:56;;39132:11;39099:12;:18;39112:4;39099:18;;;;;;;;;;;;;;;:30;39118:10;39099:30;;;;;;;;;;;:44;;;;39249:10;39216:17;:30;39234:11;39216:30;;;;;;;;;;;:43;;;;39011:294;38977:328;39401:17;:26;39419:7;39401:26;;;;;;;;;;;39394:33;;;39445:12;:18;39458:4;39445:18;;;;;;;;;;;;;;;:34;39464:14;39445:34;;;;;;;;;;;39438:41;;;38580:907;;38499:988;;:::o;39782:1079::-;40035:22;40080:1;40060:10;:17;;;;:21;;;;:::i;:::-;40035:46;;40092:18;40113:15;:24;40129:7;40113:24;;;;;;;;;;;;40092:45;;40464:19;40486:10;40497:14;40486:26;;;;;;;;:::i;:::-;;;;;;;;;;40464:48;;40550:11;40525:10;40536;40525:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40661:10;40630:15;:28;40646:11;40630:28;;;;;;;;;;;:41;;;;40802:15;:24;40818:7;40802:24;;;;;;;;;;;40795:31;;;40837:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39853:1008;;;39782:1079;:::o;37286:221::-;37371:14;37388:20;37405:2;37388:16;:20::i;:::-;37371:37;;37446:7;37419:12;:16;37432:2;37419:16;;;;;;;;;;;;;;;:24;37436:6;37419:24;;;;;;;;;;;:34;;;;37493:6;37464:17;:26;37482:7;37464:26;;;;;;;;;;;:35;;;;37360:147;37286:221;;:::o;27895:321::-;28025:18;28031:2;28035:7;28025:5;:18::i;:::-;28076:54;28107:1;28111:2;28115:7;28124:5;28076:22;:54::i;:::-;28054:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27895:321;;;:::o;8142:387::-;8202:4;8410:12;8477:7;8465:20;8457:28;;8520:1;8513:4;:8;8506:15;;;8142:387;;;:::o;28552:382::-;28646:1;28632:16;;:2;:16;;;;28624:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28705:16;28713:7;28705;:16::i;:::-;28704:17;28696:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28767:45;28796:1;28800:2;28804:7;28767:20;:45::i;:::-;28842:1;28825:9;:13;28835:2;28825:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28873:2;28854:7;:16;28862:7;28854:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28918:7;28914:2;28893:33;;28910:1;28893:33;;;;;;;;;;;;28552:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:179::-;8910:10;8931:46;8973:3;8965:6;8931:46;:::i;:::-;9009:4;9004:3;9000:14;8986:28;;8841:179;;;;:::o;9026:118::-;9113:24;9131:5;9113:24;:::i;:::-;9108:3;9101:37;9026:118;;:::o;9180:732::-;9299:3;9328:54;9376:5;9328:54;:::i;:::-;9398:86;9477:6;9472:3;9398:86;:::i;:::-;9391:93;;9508:56;9558:5;9508:56;:::i;:::-;9587:7;9618:1;9603:284;9628:6;9625:1;9622:13;9603:284;;;9704:6;9698:13;9731:63;9790:3;9775:13;9731:63;:::i;:::-;9724:70;;9817:60;9870:6;9817:60;:::i;:::-;9807:70;;9663:224;9650:1;9647;9643:9;9638:14;;9603:284;;;9607:14;9903:3;9896:10;;9304:608;;;9180:732;;;;:::o;9918:109::-;9999:21;10014:5;9999:21;:::i;:::-;9994:3;9987:34;9918:109;;:::o;10033:360::-;10119:3;10147:38;10179:5;10147:38;:::i;:::-;10201:70;10264:6;10259:3;10201:70;:::i;:::-;10194:77;;10280:52;10325:6;10320:3;10313:4;10306:5;10302:16;10280:52;:::i;:::-;10357:29;10379:6;10357:29;:::i;:::-;10352:3;10348:39;10341:46;;10123:270;10033:360;;;;:::o;10399:364::-;10487:3;10515:39;10548:5;10515:39;:::i;:::-;10570:71;10634:6;10629:3;10570:71;:::i;:::-;10563:78;;10650:52;10695:6;10690:3;10683:4;10676:5;10672:16;10650:52;:::i;:::-;10727:29;10749:6;10727:29;:::i;:::-;10722:3;10718:39;10711:46;;10491:272;10399:364;;;;:::o;10769:377::-;10875:3;10903:39;10936:5;10903:39;:::i;:::-;10958:89;11040:6;11035:3;10958:89;:::i;:::-;10951:96;;11056:52;11101:6;11096:3;11089:4;11082:5;11078:16;11056:52;:::i;:::-;11133:6;11128:3;11124:16;11117:23;;10879:267;10769:377;;;;:::o;11176:845::-;11279:3;11316:5;11310:12;11345:36;11371:9;11345:36;:::i;:::-;11397:89;11479:6;11474:3;11397:89;:::i;:::-;11390:96;;11517:1;11506:9;11502:17;11533:1;11528:137;;;;11679:1;11674:341;;;;11495:520;;11528:137;11612:4;11608:9;11597;11593:25;11588:3;11581:38;11648:6;11643:3;11639:16;11632:23;;11528:137;;11674:341;11741:38;11773:5;11741:38;:::i;:::-;11801:1;11815:154;11829:6;11826:1;11823:13;11815:154;;;11903:7;11897:14;11893:1;11888:3;11884:11;11877:35;11953:1;11944:7;11940:15;11929:26;;11851:4;11848:1;11844:12;11839:17;;11815:154;;;11998:6;11993:3;11989:16;11982:23;;11681:334;;11495:520;;11283:738;;11176:845;;;;:::o;12027:366::-;12169:3;12190:67;12254:2;12249:3;12190:67;:::i;:::-;12183:74;;12266:93;12355:3;12266:93;:::i;:::-;12384:2;12379:3;12375:12;12368:19;;12027:366;;;:::o;12399:::-;12541:3;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12638:93;12727:3;12638:93;:::i;:::-;12756:2;12751:3;12747:12;12740:19;;12399:366;;;:::o;12771:::-;12913:3;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13010:93;13099:3;13010:93;:::i;:::-;13128:2;13123:3;13119:12;13112:19;;12771:366;;;:::o;13143:::-;13285:3;13306:67;13370:2;13365:3;13306:67;:::i;:::-;13299:74;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13143:366;;;:::o;13515:::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13515:366;;;:::o;13887:::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:::-;17377:3;17398:67;17462:2;17457:3;17398:67;:::i;:::-;17391:74;;17474:93;17563:3;17474:93;:::i;:::-;17592:2;17587:3;17583:12;17576:19;;17235:366;;;:::o;17607:::-;17749:3;17770:67;17834:2;17829:3;17770:67;:::i;:::-;17763:74;;17846:93;17935:3;17846:93;:::i;:::-;17964:2;17959:3;17955:12;17948:19;;17607:366;;;:::o;17979:::-;18121:3;18142:67;18206:2;18201:3;18142:67;:::i;:::-;18135:74;;18218:93;18307:3;18218:93;:::i;:::-;18336:2;18331:3;18327:12;18320:19;;17979:366;;;:::o;18351:::-;18493:3;18514:67;18578:2;18573:3;18514:67;:::i;:::-;18507:74;;18590:93;18679:3;18590:93;:::i;:::-;18708:2;18703:3;18699:12;18692:19;;18351:366;;;:::o;18723:::-;18865:3;18886:67;18950:2;18945:3;18886:67;:::i;:::-;18879:74;;18962:93;19051:3;18962:93;:::i;:::-;19080:2;19075:3;19071:12;19064:19;;18723:366;;;:::o;19095:::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:::-;19609:3;19630:67;19694:2;19689:3;19630:67;:::i;:::-;19623:74;;19706:93;19795:3;19706:93;:::i;:::-;19824:2;19819:3;19815:12;19808:19;;19467:366;;;:::o;19839:::-;19981:3;20002:67;20066:2;20061:3;20002:67;:::i;:::-;19995:74;;20078:93;20167:3;20078:93;:::i;:::-;20196:2;20191:3;20187:12;20180:19;;19839:366;;;:::o;20211:::-;20353:3;20374:67;20438:2;20433:3;20374:67;:::i;:::-;20367:74;;20450:93;20539:3;20450:93;:::i;:::-;20568:2;20563:3;20559:12;20552:19;;20211:366;;;:::o;20583:::-;20725:3;20746:67;20810:2;20805:3;20746:67;:::i;:::-;20739:74;;20822:93;20911:3;20822:93;:::i;:::-;20940:2;20935:3;20931:12;20924:19;;20583:366;;;:::o;20955:::-;21097:3;21118:67;21182:2;21177:3;21118:67;:::i;:::-;21111:74;;21194:93;21283:3;21194:93;:::i;:::-;21312:2;21307:3;21303:12;21296:19;;20955:366;;;:::o;21327:::-;21469:3;21490:67;21554:2;21549:3;21490:67;:::i;:::-;21483:74;;21566:93;21655:3;21566:93;:::i;:::-;21684:2;21679:3;21675:12;21668:19;;21327:366;;;:::o;21699:108::-;21776:24;21794:5;21776:24;:::i;:::-;21771:3;21764:37;21699:108;;:::o;21813:118::-;21900:24;21918:5;21900:24;:::i;:::-;21895:3;21888:37;21813:118;;:::o;21937:583::-;22159:3;22181:92;22269:3;22260:6;22181:92;:::i;:::-;22174:99;;22290:95;22381:3;22372:6;22290:95;:::i;:::-;22283:102;;22402:92;22490:3;22481:6;22402:92;:::i;:::-;22395:99;;22511:3;22504:10;;21937:583;;;;;;:::o;22526:222::-;22619:4;22657:2;22646:9;22642:18;22634:26;;22670:71;22738:1;22727:9;22723:17;22714:6;22670:71;:::i;:::-;22526:222;;;;:::o;22754:640::-;22949:4;22987:3;22976:9;22972:19;22964:27;;23001:71;23069:1;23058:9;23054:17;23045:6;23001:71;:::i;:::-;23082:72;23150:2;23139:9;23135:18;23126:6;23082:72;:::i;:::-;23164;23232:2;23221:9;23217:18;23208:6;23164:72;:::i;:::-;23283:9;23277:4;23273:20;23268:2;23257:9;23253:18;23246:48;23311:76;23382:4;23373:6;23311:76;:::i;:::-;23303:84;;22754:640;;;;;;;:::o;23400:373::-;23543:4;23581:2;23570:9;23566:18;23558:26;;23630:9;23624:4;23620:20;23616:1;23605:9;23601:17;23594:47;23658:108;23761:4;23752:6;23658:108;:::i;:::-;23650:116;;23400:373;;;;:::o;23779:210::-;23866:4;23904:2;23893:9;23889:18;23881:26;;23917:65;23979:1;23968:9;23964:17;23955:6;23917:65;:::i;:::-;23779:210;;;;:::o;23995:313::-;24108:4;24146:2;24135:9;24131:18;24123:26;;24195:9;24189:4;24185:20;24181:1;24170:9;24166:17;24159:47;24223:78;24296:4;24287:6;24223:78;:::i;:::-;24215:86;;23995:313;;;;:::o;24314:419::-;24480:4;24518:2;24507:9;24503:18;24495:26;;24567:9;24561:4;24557:20;24553:1;24542:9;24538:17;24531:47;24595:131;24721:4;24595:131;:::i;:::-;24587:139;;24314:419;;;:::o;24739:::-;24905:4;24943:2;24932:9;24928:18;24920:26;;24992:9;24986:4;24982:20;24978:1;24967:9;24963:17;24956:47;25020:131;25146:4;25020:131;:::i;:::-;25012:139;;24739:419;;;:::o;25164:::-;25330:4;25368:2;25357:9;25353:18;25345:26;;25417:9;25411:4;25407:20;25403:1;25392:9;25388:17;25381:47;25445:131;25571:4;25445:131;:::i;:::-;25437:139;;25164:419;;;:::o;25589:::-;25755:4;25793:2;25782:9;25778:18;25770:26;;25842:9;25836:4;25832:20;25828:1;25817:9;25813:17;25806:47;25870:131;25996:4;25870:131;:::i;:::-;25862:139;;25589:419;;;:::o;26014:::-;26180:4;26218:2;26207:9;26203:18;26195:26;;26267:9;26261:4;26257:20;26253:1;26242:9;26238:17;26231:47;26295:131;26421:4;26295:131;:::i;:::-;26287:139;;26014:419;;;:::o;26439:::-;26605:4;26643:2;26632:9;26628:18;26620:26;;26692:9;26686:4;26682:20;26678:1;26667:9;26663:17;26656:47;26720:131;26846:4;26720:131;:::i;:::-;26712:139;;26439:419;;;:::o;26864:::-;27030:4;27068:2;27057:9;27053:18;27045:26;;27117:9;27111:4;27107:20;27103:1;27092:9;27088:17;27081:47;27145:131;27271:4;27145:131;:::i;:::-;27137:139;;26864:419;;;:::o;27289:::-;27455:4;27493:2;27482:9;27478:18;27470:26;;27542:9;27536:4;27532:20;27528:1;27517:9;27513:17;27506:47;27570:131;27696:4;27570:131;:::i;:::-;27562:139;;27289:419;;;:::o;27714:::-;27880:4;27918:2;27907:9;27903:18;27895:26;;27967:9;27961:4;27957:20;27953:1;27942:9;27938:17;27931:47;27995:131;28121:4;27995:131;:::i;:::-;27987:139;;27714:419;;;:::o;28139:::-;28305:4;28343:2;28332:9;28328:18;28320:26;;28392:9;28386:4;28382:20;28378:1;28367:9;28363:17;28356:47;28420:131;28546:4;28420:131;:::i;:::-;28412:139;;28139:419;;;:::o;28564:::-;28730:4;28768:2;28757:9;28753:18;28745:26;;28817:9;28811:4;28807:20;28803:1;28792:9;28788:17;28781:47;28845:131;28971:4;28845:131;:::i;:::-;28837:139;;28564:419;;;:::o;28989:::-;29155:4;29193:2;29182:9;29178:18;29170:26;;29242:9;29236:4;29232:20;29228:1;29217:9;29213:17;29206:47;29270:131;29396:4;29270:131;:::i;:::-;29262:139;;28989:419;;;:::o;29414:::-;29580:4;29618:2;29607:9;29603:18;29595:26;;29667:9;29661:4;29657:20;29653:1;29642:9;29638:17;29631:47;29695:131;29821:4;29695:131;:::i;:::-;29687:139;;29414:419;;;:::o;29839:::-;30005:4;30043:2;30032:9;30028:18;30020:26;;30092:9;30086:4;30082:20;30078:1;30067:9;30063:17;30056:47;30120:131;30246:4;30120:131;:::i;:::-;30112:139;;29839:419;;;:::o;30264:::-;30430:4;30468:2;30457:9;30453:18;30445:26;;30517:9;30511:4;30507:20;30503:1;30492:9;30488:17;30481:47;30545:131;30671:4;30545:131;:::i;:::-;30537:139;;30264:419;;;:::o;30689:::-;30855:4;30893:2;30882:9;30878:18;30870:26;;30942:9;30936:4;30932:20;30928:1;30917:9;30913:17;30906:47;30970:131;31096:4;30970:131;:::i;:::-;30962:139;;30689:419;;;:::o;31114:::-;31280:4;31318:2;31307:9;31303:18;31295:26;;31367:9;31361:4;31357:20;31353:1;31342:9;31338:17;31331:47;31395:131;31521:4;31395:131;:::i;:::-;31387:139;;31114:419;;;:::o;31539:::-;31705:4;31743:2;31732:9;31728:18;31720:26;;31792:9;31786:4;31782:20;31778:1;31767:9;31763:17;31756:47;31820:131;31946:4;31820:131;:::i;:::-;31812:139;;31539:419;;;:::o;31964:::-;32130:4;32168:2;32157:9;32153:18;32145:26;;32217:9;32211:4;32207:20;32203:1;32192:9;32188:17;32181:47;32245:131;32371:4;32245:131;:::i;:::-;32237:139;;31964:419;;;:::o;32389:::-;32555:4;32593:2;32582:9;32578:18;32570:26;;32642:9;32636:4;32632:20;32628:1;32617:9;32613:17;32606:47;32670:131;32796:4;32670:131;:::i;:::-;32662:139;;32389:419;;;:::o;32814:::-;32980:4;33018:2;33007:9;33003:18;32995:26;;33067:9;33061:4;33057:20;33053:1;33042:9;33038:17;33031:47;33095:131;33221:4;33095:131;:::i;:::-;33087:139;;32814:419;;;:::o;33239:::-;33405:4;33443:2;33432:9;33428:18;33420:26;;33492:9;33486:4;33482:20;33478:1;33467:9;33463:17;33456:47;33520:131;33646:4;33520:131;:::i;:::-;33512:139;;33239:419;;;:::o;33664:::-;33830:4;33868:2;33857:9;33853:18;33845:26;;33917:9;33911:4;33907:20;33903:1;33892:9;33888:17;33881:47;33945:131;34071:4;33945:131;:::i;:::-;33937:139;;33664:419;;;:::o;34089:::-;34255:4;34293:2;34282:9;34278:18;34270:26;;34342:9;34336:4;34332:20;34328:1;34317:9;34313:17;34306:47;34370:131;34496:4;34370:131;:::i;:::-;34362:139;;34089:419;;;:::o;34514:::-;34680:4;34718:2;34707:9;34703:18;34695:26;;34767:9;34761:4;34757:20;34753:1;34742:9;34738:17;34731:47;34795:131;34921:4;34795:131;:::i;:::-;34787:139;;34514:419;;;:::o;34939:::-;35105:4;35143:2;35132:9;35128:18;35120:26;;35192:9;35186:4;35182:20;35178:1;35167:9;35163:17;35156:47;35220:131;35346:4;35220:131;:::i;:::-;35212:139;;34939:419;;;:::o;35364:222::-;35457:4;35495:2;35484:9;35480:18;35472:26;;35508:71;35576:1;35565:9;35561:17;35552:6;35508:71;:::i;:::-;35364:222;;;;:::o;35592:129::-;35626:6;35653:20;;:::i;:::-;35643:30;;35682:33;35710:4;35702:6;35682:33;:::i;:::-;35592:129;;;:::o;35727:75::-;35760:6;35793:2;35787:9;35777:19;;35727:75;:::o;35808:311::-;35885:4;35975:18;35967:6;35964:30;35961:56;;;35997:18;;:::i;:::-;35961:56;36047:4;36039:6;36035:17;36027:25;;36107:4;36101;36097:15;36089:23;;35808:311;;;:::o;36125:307::-;36186:4;36276:18;36268:6;36265:30;36262:56;;;36298:18;;:::i;:::-;36262:56;36336:29;36358:6;36336:29;:::i;:::-;36328:37;;36420:4;36414;36410:15;36402:23;;36125:307;;;:::o;36438:308::-;36500:4;36590:18;36582:6;36579:30;36576:56;;;36612:18;;:::i;:::-;36576:56;36650:29;36672:6;36650:29;:::i;:::-;36642:37;;36734:4;36728;36724:15;36716:23;;36438:308;;;:::o;36752:132::-;36819:4;36842:3;36834:11;;36872:4;36867:3;36863:14;36855:22;;36752:132;;;:::o;36890:141::-;36939:4;36962:3;36954:11;;36985:3;36982:1;36975:14;37019:4;37016:1;37006:18;36998:26;;36890:141;;;:::o;37037:114::-;37104:6;37138:5;37132:12;37122:22;;37037:114;;;:::o;37157:98::-;37208:6;37242:5;37236:12;37226:22;;37157:98;;;:::o;37261:99::-;37313:6;37347:5;37341:12;37331:22;;37261:99;;;:::o;37366:113::-;37436:4;37468;37463:3;37459:14;37451:22;;37366:113;;;:::o;37485:184::-;37584:11;37618:6;37613:3;37606:19;37658:4;37653:3;37649:14;37634:29;;37485:184;;;;:::o;37675:168::-;37758:11;37792:6;37787:3;37780:19;37832:4;37827:3;37823:14;37808:29;;37675:168;;;;:::o;37849:169::-;37933:11;37967:6;37962:3;37955:19;38007:4;38002:3;37998:14;37983:29;;37849:169;;;;:::o;38024:148::-;38126:11;38163:3;38148:18;;38024:148;;;;:::o;38178:305::-;38218:3;38237:20;38255:1;38237:20;:::i;:::-;38232:25;;38271:20;38289:1;38271:20;:::i;:::-;38266:25;;38425:1;38357:66;38353:74;38350:1;38347:81;38344:107;;;38431:18;;:::i;:::-;38344:107;38475:1;38472;38468:9;38461:16;;38178:305;;;;:::o;38489:185::-;38529:1;38546:20;38564:1;38546:20;:::i;:::-;38541:25;;38580:20;38598:1;38580:20;:::i;:::-;38575:25;;38619:1;38609:35;;38624:18;;:::i;:::-;38609:35;38666:1;38663;38659:9;38654:14;;38489:185;;;;:::o;38680:348::-;38720:7;38743:20;38761:1;38743:20;:::i;:::-;38738:25;;38777:20;38795:1;38777:20;:::i;:::-;38772:25;;38965:1;38897:66;38893:74;38890:1;38887:81;38882:1;38875:9;38868:17;38864:105;38861:131;;;38972:18;;:::i;:::-;38861:131;39020:1;39017;39013:9;39002:20;;38680:348;;;;:::o;39034:191::-;39074:4;39094:20;39112:1;39094:20;:::i;:::-;39089:25;;39128:20;39146:1;39128:20;:::i;:::-;39123:25;;39167:1;39164;39161:8;39158:34;;;39172:18;;:::i;:::-;39158:34;39217:1;39214;39210:9;39202:17;;39034:191;;;;:::o;39231:96::-;39268:7;39297:24;39315:5;39297:24;:::i;:::-;39286:35;;39231:96;;;:::o;39333:90::-;39367:7;39410:5;39403:13;39396:21;39385:32;;39333:90;;;:::o;39429:149::-;39465:7;39505:66;39498:5;39494:78;39483:89;;39429:149;;;:::o;39584:126::-;39621:7;39661:42;39654:5;39650:54;39639:65;;39584:126;;;:::o;39716:77::-;39753:7;39782:5;39771:16;;39716:77;;;:::o;39799:154::-;39883:6;39878:3;39873;39860:30;39945:1;39936:6;39931:3;39927:16;39920:27;39799:154;;;:::o;39959:307::-;40027:1;40037:113;40051:6;40048:1;40045:13;40037:113;;;40136:1;40131:3;40127:11;40121:18;40117:1;40112:3;40108:11;40101:39;40073:2;40070:1;40066:10;40061:15;;40037:113;;;40168:6;40165:1;40162:13;40159:101;;;40248:1;40239:6;40234:3;40230:16;40223:27;40159:101;40008:258;39959:307;;;:::o;40272:320::-;40316:6;40353:1;40347:4;40343:12;40333:22;;40400:1;40394:4;40390:12;40421:18;40411:81;;40477:4;40469:6;40465:17;40455:27;;40411:81;40539:2;40531:6;40528:14;40508:18;40505:38;40502:84;;;40558:18;;:::i;:::-;40502:84;40323:269;40272:320;;;:::o;40598:281::-;40681:27;40703:4;40681:27;:::i;:::-;40673:6;40669:40;40811:6;40799:10;40796:22;40775:18;40763:10;40760:34;40757:62;40754:88;;;40822:18;;:::i;:::-;40754:88;40862:10;40858:2;40851:22;40641:238;40598:281;;:::o;40885:233::-;40924:3;40947:24;40965:5;40947:24;:::i;:::-;40938:33;;40993:66;40986:5;40983:77;40980:103;;;41063:18;;:::i;:::-;40980:103;41110:1;41103:5;41099:13;41092:20;;40885:233;;;:::o;41124:176::-;41156:1;41173:20;41191:1;41173:20;:::i;:::-;41168:25;;41207:20;41225:1;41207:20;:::i;:::-;41202:25;;41246:1;41236:35;;41251:18;;:::i;:::-;41236:35;41292:1;41289;41285:9;41280:14;;41124:176;;;;:::o;41306:180::-;41354:77;41351:1;41344:88;41451:4;41448:1;41441:15;41475:4;41472:1;41465:15;41492:180;41540:77;41537:1;41530:88;41637:4;41634:1;41627:15;41661:4;41658:1;41651:15;41678:180;41726:77;41723:1;41716:88;41823:4;41820:1;41813:15;41847:4;41844:1;41837:15;41864:180;41912:77;41909:1;41902:88;42009:4;42006:1;41999:15;42033:4;42030:1;42023:15;42050:180;42098:77;42095:1;42088:88;42195:4;42192:1;42185:15;42219:4;42216:1;42209:15;42236:180;42284:77;42281:1;42274:88;42381:4;42378:1;42371:15;42405:4;42402:1;42395:15;42422:117;42531:1;42528;42521:12;42545:117;42654:1;42651;42644:12;42668:117;42777:1;42774;42767:12;42791:117;42900:1;42897;42890:12;42914:117;43023:1;43020;43013:12;43037:102;43078:6;43129:2;43125:7;43120:2;43113:5;43109:14;43105:28;43095:38;;43037:102;;;:::o;43145:230::-;43285:34;43281:1;43273:6;43269:14;43262:58;43354:13;43349:2;43341:6;43337:15;43330:38;43145:230;:::o;43381:237::-;43521:34;43517:1;43509:6;43505:14;43498:58;43590:20;43585:2;43577:6;43573:15;43566:45;43381:237;:::o;43624:225::-;43764:34;43760:1;43752:6;43748:14;43741:58;43833:8;43828:2;43820:6;43816:15;43809:33;43624:225;:::o;43855:178::-;43995:30;43991:1;43983:6;43979:14;43972:54;43855:178;:::o;44039:177::-;44179:29;44175:1;44167:6;44163:14;44156:53;44039:177;:::o;44222:235::-;44362:34;44358:1;44350:6;44346:14;44339:58;44431:18;44426:2;44418:6;44414:15;44407:43;44222:235;:::o;44463:226::-;44603:34;44599:1;44591:6;44587:14;44580:58;44672:9;44667:2;44659:6;44655:15;44648:34;44463:226;:::o;44695:223::-;44835:34;44831:1;44823:6;44819:14;44812:58;44904:6;44899:2;44891:6;44887:15;44880:31;44695:223;:::o;44924:175::-;45064:27;45060:1;45052:6;45048:14;45041:51;44924:175;:::o;45105:231::-;45245:34;45241:1;45233:6;45229:14;45222:58;45314:14;45309:2;45301:6;45297:15;45290:39;45105:231;:::o;45342:175::-;45482:27;45478:1;45470:6;45466:14;45459:51;45342:175;:::o;45523:243::-;45663:34;45659:1;45651:6;45647:14;45640:58;45732:26;45727:2;45719:6;45715:15;45708:51;45523:243;:::o;45772:229::-;45912:34;45908:1;45900:6;45896:14;45889:58;45981:12;45976:2;45968:6;45964:15;45957:37;45772:229;:::o;46007:228::-;46147:34;46143:1;46135:6;46131:14;46124:58;46216:11;46211:2;46203:6;46199:15;46192:36;46007:228;:::o;46241:178::-;46381:30;46377:1;46369:6;46365:14;46358:54;46241:178;:::o;46425:182::-;46565:34;46561:1;46553:6;46549:14;46542:58;46425:182;:::o;46613:231::-;46753:34;46749:1;46741:6;46737:14;46730:58;46822:14;46817:2;46809:6;46805:15;46798:39;46613:231;:::o;46850:182::-;46990:34;46986:1;46978:6;46974:14;46967:58;46850:182;:::o;47038:222::-;47178:34;47174:1;47166:6;47162:14;47155:58;47247:5;47242:2;47234:6;47230:15;47223:30;47038:222;:::o;47266:228::-;47406:34;47402:1;47394:6;47390:14;47383:58;47475:11;47470:2;47462:6;47458:15;47451:36;47266:228;:::o;47500:220::-;47640:34;47636:1;47628:6;47624:14;47617:58;47709:3;47704:2;47696:6;47692:15;47685:28;47500:220;:::o;47726:::-;47866:34;47862:1;47854:6;47850:14;47843:58;47935:3;47930:2;47922:6;47918:15;47911:28;47726:220;:::o;47952:236::-;48092:34;48088:1;48080:6;48076:14;48069:58;48161:19;48156:2;48148:6;48144:15;48137:44;47952:236;:::o;48194:177::-;48334:29;48330:1;48322:6;48318:14;48311:53;48194:177;:::o;48377:231::-;48517:34;48513:1;48505:6;48501:14;48494:58;48586:14;48581:2;48573:6;48569:15;48562:39;48377:231;:::o;48614:241::-;48754:34;48750:1;48742:6;48738:14;48731:58;48823:24;48818:2;48810:6;48806:15;48799:49;48614:241;:::o;48861:122::-;48934:24;48952:5;48934:24;:::i;:::-;48927:5;48924:35;48914:63;;48973:1;48970;48963:12;48914:63;48861:122;:::o;48989:116::-;49059:21;49074:5;49059:21;:::i;:::-;49052:5;49049:32;49039:60;;49095:1;49092;49085:12;49039:60;48989:116;:::o;49111:120::-;49183:23;49200:5;49183:23;:::i;:::-;49176:5;49173:34;49163:62;;49221:1;49218;49211:12;49163:62;49111:120;:::o;49237:122::-;49310:24;49328:5;49310:24;:::i;:::-;49303:5;49300:35;49290:63;;49349:1;49346;49339:12;49290:63;49237:122;:::o
Swarm Source
ipfs://61740b2f0b7b82ab5315d97b399dec95a6ce25ec217a4a1ac29698ea0fe273ee
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.