ERC-721
NFT
Overview
Max Total Supply
3,500 GKEY
Holders
1,258
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 GKEYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GenAlcLab
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-25 */ /** *Submitted for verification at Etherscan.io on 2021-08-31 */ // Sources flattened with hardhat v2.5.0 https://hardhat.org // File 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 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 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 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 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File 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 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}. 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` 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 { } } // File contracts/token/ERC721/extensions/ERC721URIStorage.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity ^0.8.0; contract GenAlcLab is ERC721URIStorage, Ownable{ event MintGenApe (address indexed minter, uint256 startWith, uint256 times); uint256 public totalGenApe; uint256 public totalCount = 3500; //bruhTotal uint256 public presaleMax = 688; uint256 public maxBatch = 10; // bruhBatch uint256 public price = 55000000000000000; // 0.055 eth string public baseURI; bool public started; bool public whiteListStart; mapping(address => uint256) whiteListMintCount; uint addressRegistryCount; constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) { baseURI = baseURI_; } modifier canWhitelistMint() { require(whiteListStart, "Hang on boys, youll get in soon"); _; } modifier mintEnabled() { require(started, "not started"); _; } function totalSupply() public view virtual returns (uint256) { return totalGenApe; } function _baseURI() internal view virtual override returns (string memory){ return baseURI; } function setBaseURI(string memory _newURI) public onlyOwner { baseURI = _newURI; } function changePrice(uint256 _newPrice) public onlyOwner { price = _newPrice; } function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner { _setTokenURI(_tokenId, _tokenURI); } function setNormalStart(bool _start) public onlyOwner { started = _start; } function setWhiteListStart(bool _start) public onlyOwner { whiteListStart = _start; } function getWhitelistMintAmount(address _addr) public view virtual returns (uint256) { return whiteListMintCount[_addr]; } function mintGenApes(uint256 _times) payable public mintEnabled { require(_times >0 && _times <= maxBatch, "mint wrong number"); require(totalGenApe + _times <= totalCount, "too much"); require(msg.value == _times * price, "value error"); payable(owner()).transfer(msg.value); emit MintGenApe(_msgSender(), totalGenApe+1, _times); for(uint256 i=0; i< _times; i++){ _mint(_msgSender(), 1 + totalGenApe++); } } function adminMint(uint256 _times) payable public onlyOwner { require(_times >0 && _times <= maxBatch, "mint wrong number"); require(totalGenApe + _times <= totalCount, "too much"); require(msg.value == _times * price, "value error"); payable(owner()).transfer(msg.value); emit MintGenApe(_msgSender(), totalGenApe+1, _times); for(uint256 i=0; i< _times; i++){ _mint(_msgSender(), 1 + totalGenApe++); } } function whitelistMint(uint _times) payable public canWhitelistMint { if (whiteListMintCount[msg.sender]==0) { whiteListMintCount[msg.sender] = 4; } require(whiteListMintCount[msg.sender] - _times >= 1, "Over mint limit for address."); require(totalGenApe + _times <= presaleMax, "Mint amount will exceed total presale amount."); require(msg.value == _times * price, "Incorrect transaction value."); payable(owner()).transfer(msg.value); whiteListMintCount[_msgSender()] -= _times; emit MintGenApe(_msgSender(), totalGenApe+1, _times); for(uint256 i=0; i< _times; i++){ _mint(_msgSender(), 1 + totalGenApe++); } } function adminMintGiveaways(address _addr) public onlyOwner { require(totalGenApe + 1 <= totalCount, "Mint amount will exceed total collection amount."); emit MintGenApe(_addr, totalGenApe+1, 1); _mint(_addr, 1 + totalGenApe++); } }
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":"baseURI_","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":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"MintGenApe","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"adminMintGiveaways","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"mintGenApes","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":"presaleMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setNormalStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setWhiteListStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGenApe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052610dac6009556102b0600a55600a600b5566c3663566a58000600c553480156200002d57600080fd5b5060405162004c9f38038062004c9f833981810160405281019062000053919062000292565b828281600090805190602001906200006d92919062000164565b5080600190805190602001906200008692919062000164565b50505060006200009b6200015c60201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600d90805190602001906200015292919062000164565b50505050620004cf565b600033905090565b8280546200017290620003e0565b90600052602060002090601f016020900481019282620001965760008555620001e2565b82601f10620001b157805160ff1916838001178555620001e2565b82800160010185558215620001e2579182015b82811115620001e1578251825591602001919060010190620001c4565b5b509050620001f19190620001f5565b5090565b5b8082111562000210576000816000905550600101620001f6565b5090565b60006200022b620002258462000374565b6200034b565b9050828152602081018484840111156200024a5762000249620004af565b5b62000257848285620003aa565b509392505050565b600082601f830112620002775762000276620004aa565b5b81516200028984826020860162000214565b91505092915050565b600080600060608486031215620002ae57620002ad620004b9565b5b600084015167ffffffffffffffff811115620002cf57620002ce620004b4565b5b620002dd868287016200025f565b935050602084015167ffffffffffffffff811115620003015762000300620004b4565b5b6200030f868287016200025f565b925050604084015167ffffffffffffffff811115620003335762000332620004b4565b5b62000341868287016200025f565b9150509250925092565b6000620003576200036a565b905062000365828262000416565b919050565b6000604051905090565b600067ffffffffffffffff8211156200039257620003916200047b565b5b6200039d82620004be565b9050602081019050919050565b60005b83811015620003ca578082015181840152602081019050620003ad565b83811115620003da576000848401525b50505050565b60006002820490506001821680620003f957607f821691505b6020821081141562000410576200040f6200044c565b5b50919050565b6200042182620004be565b810181811067ffffffffffffffff821117156200044357620004426200047b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6147c080620004df6000396000f3fe6080604052600436106102045760003560e01c80636c0360eb11610118578063a035b1fe116100a0578063c1f261231161006f578063c1f2612314610725578063c87b56dd14610741578063e985e9c51461077e578063f2fde38b146107bb578063f34acb7c146107e457610204565b8063a035b1fe1461067f578063a22cb465146106aa578063a2b40d19146106d3578063b88d4fde146106fc57610204565b806388eae705116100e757806388eae705146105985780638da5cb5b146105c3578063917bb57f146105ee57806395d89b41146106175780639afdf2f31461064257610204565b80636c0360eb146104fd57806370a0823114610528578063715018a614610565578063868ff4a21461057c57610204565b80632cb35b901161019b57806355f804b31161016a57806355f804b3146104275780635aa74af4146104505780635f4f603d1461046c5780636352211e1461049557806367765b87146104d257610204565b80632cb35b901461037f57806334eafb11146103aa5780633c49a8a9146103d557806342842e0e146103fe57610204565b8063162094c4116101d7578063162094c4146102d757806318160ddd146103005780631f2698ab1461032b57806323b872dd1461035657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613196565b61080f565b60405161023d91906137dd565b60405180910390f35b34801561025257600080fd5b5061025b6108f1565b60405161026891906137f8565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613239565b610983565b6040516102a59190613776565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613129565b610a08565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190613266565b610b20565b005b34801561030c57600080fd5b50610315610baa565b6040516103229190613b7a565b60405180910390f35b34801561033757600080fd5b50610340610bb4565b60405161034d91906137dd565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613013565b610bc7565b005b34801561038b57600080fd5b50610394610c27565b6040516103a19190613b7a565b60405180910390f35b3480156103b657600080fd5b506103bf610c2d565b6040516103cc9190613b7a565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612fa6565b610c33565b005b34801561040a57600080fd5b5061042560048036038101906104209190613013565b610d90565b005b34801561043357600080fd5b5061044e600480360381019061044991906131f0565b610db0565b005b61046a60048036038101906104659190613239565b610e46565b005b34801561047857600080fd5b50610493600480360381019061048e9190613169565b61108f565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613239565b611128565b6040516104c99190613776565b60405180910390f35b3480156104de57600080fd5b506104e76111da565b6040516104f49190613b7a565b60405180910390f35b34801561050957600080fd5b506105126111e0565b60405161051f91906137f8565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612fa6565b61126e565b60405161055c9190613b7a565b60405180910390f35b34801561057157600080fd5b5061057a611326565b005b61059660048036038101906105919190613239565b611463565b005b3480156105a457600080fd5b506105ad6117d4565b6040516105ba91906137dd565b60405180910390f35b3480156105cf57600080fd5b506105d86117e7565b6040516105e59190613776565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613169565b611811565b005b34801561062357600080fd5b5061062c6118aa565b60405161063991906137f8565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190612fa6565b61193c565b6040516106769190613b7a565b60405180910390f35b34801561068b57600080fd5b50610694611985565b6040516106a19190613b7a565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906130e9565b61198b565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613239565b611b0c565b005b34801561070857600080fd5b50610723600480360381019061071e9190613066565b611b92565b005b61073f600480360381019061073a9190613239565b611bf4565b005b34801561074d57600080fd5b5061076860048036038101906107639190613239565b611e6a565b60405161077591906137f8565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190612fd3565b611fbc565b6040516107b291906137dd565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190612fa6565b612050565b005b3480156107f057600080fd5b506107f96121fc565b6040516108069190613b7a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ea57506108e982612202565b5b9050919050565b60606000805461090090613e8e565b80601f016020809104026020016040519081016040528092919081815260200182805461092c90613e8e565b80156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b600061098e8261226c565b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490613a3a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1382611128565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b90613aba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa36122d8565b73ffffffffffffffffffffffffffffffffffffffff161480610ad25750610ad181610acc6122d8565b611fbc565b5b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b089061395a565b60405180910390fd5b610b1b83836122e0565b505050565b610b286122d8565b73ffffffffffffffffffffffffffffffffffffffff16610b466117e7565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613a5a565b60405180910390fd5b610ba68282612399565b5050565b6000600854905090565b600e60009054906101000a900460ff1681565b610bd8610bd26122d8565b8261240d565b610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613ada565b60405180910390fd5b610c228383836124eb565b505050565b60085481565b60095481565b610c3b6122d8565b73ffffffffffffffffffffffffffffffffffffffff16610c596117e7565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613a5a565b60405180910390fd5b6009546001600854610cc19190613cb1565b1115610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990613afa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c6001600854610d499190613cb1565b6001604051610d59929190613b95565b60405180910390a2610d8d8160086000815480929190610d7890613ef1565b919050556001610d889190613cb1565b612747565b50565b610dab83838360405180602001604052806000815250611b92565b505050565b610db86122d8565b73ffffffffffffffffffffffffffffffffffffffff16610dd66117e7565b73ffffffffffffffffffffffffffffffffffffffff1614610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2390613a5a565b60405180910390fd5b80600d9080519060200190610e42929190612dba565b5050565b600e60009054906101000a900460ff16610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90613b1a565b60405180910390fd5b600081118015610ea75750600b548111155b610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd9061389a565b60405180910390fd5b60095481600854610ef79190613cb1565b1115610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f9061381a565b60405180910390fd5b600c5481610f469190613d38565b3414610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613b5a565b60405180910390fd5b610f8f6117e7565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610fd4573d6000803e3d6000fd5b50610fdd6122d8565b73ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c60016008546110239190613cb1565b83604051611032929190613bbe565b60405180910390a260005b8181101561108b576110786110506122d8565b6008600081548092919061106390613ef1565b9190505560016110739190613cb1565b612747565b808061108390613ef1565b91505061103d565b5050565b6110976122d8565b73ffffffffffffffffffffffffffffffffffffffff166110b56117e7565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613a5a565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061399a565b60405180910390fd5b80915050919050565b600b5481565b600d80546111ed90613e8e565b80601f016020809104026020016040519081016040528092919081815260200182805461121990613e8e565b80156112665780601f1061123b57610100808354040283529160200191611266565b820191906000526020600020905b81548152906001019060200180831161124957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061397a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61132e6122d8565b73ffffffffffffffffffffffffffffffffffffffff1661134c6117e7565b73ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60019054906101000a900460ff166114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613b3a565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611540576004600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600181600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158d9190613d92565b10156115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c5906138fa565b60405180910390fd5b600a54816008546115df9190613cb1565b1115611620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116179061393a565b60405180910390fd5b600c548161162e9190613d38565b341461166f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611666906139da565b60405180910390fd5b6116776117e7565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156116bc573d6000803e3d6000fd5b5080600f60006116ca6122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117139190613d92565b925050819055506117226122d8565b73ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c60016008546117689190613cb1565b83604051611777929190613bbe565b60405180910390a260005b818110156117d0576117bd6117956122d8565b600860008154809291906117a890613ef1565b9190505560016117b89190613cb1565b612747565b80806117c890613ef1565b915050611782565b5050565b600e60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118196122d8565b73ffffffffffffffffffffffffffffffffffffffff166118376117e7565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490613a5a565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600180546118b990613e8e565b80601f01602080910402602001604051908101604052809291908181526020018280546118e590613e8e565b80156119325780601f1061190757610100808354040283529160200191611932565b820191906000526020600020905b81548152906001019060200180831161191557829003601f168201915b5050505050905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b6119936122d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906138da565b60405180910390fd5b8060056000611a0e6122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611abb6122d8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b0091906137dd565b60405180910390a35050565b611b146122d8565b73ffffffffffffffffffffffffffffffffffffffff16611b326117e7565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613a5a565b60405180910390fd5b80600c8190555050565b611ba3611b9d6122d8565b8361240d565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613ada565b60405180910390fd5b611bee84848484612915565b50505050565b611bfc6122d8565b73ffffffffffffffffffffffffffffffffffffffff16611c1a6117e7565b73ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613a5a565b60405180910390fd5b600081118015611c825750600b548111155b611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb89061389a565b60405180910390fd5b60095481600854611cd29190613cb1565b1115611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a9061381a565b60405180910390fd5b600c5481611d219190613d38565b3414611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5990613b5a565b60405180910390fd5b611d6a6117e7565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611daf573d6000803e3d6000fd5b50611db86122d8565b73ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c6001600854611dfe9190613cb1565b83604051611e0d929190613bbe565b60405180910390a260005b81811015611e6657611e53611e2b6122d8565b60086000815480929190611e3e90613ef1565b919050556001611e4e9190613cb1565b612747565b8080611e5e90613ef1565b915050611e18565b5050565b6060611e758261226c565b611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90613a1a565b60405180910390fd5b6000600660008481526020019081526020016000208054611ed490613e8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090613e8e565b8015611f4d5780601f10611f2257610100808354040283529160200191611f4d565b820191906000526020600020905b815481529060010190602001808311611f3057829003601f168201915b505050505090506000611f5e612971565b9050600081511415611f74578192505050611fb7565b600082511115611fa9578082604051602001611f91929190613752565b60405160208183030381529060405292505050611fb7565b611fb284612a03565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120586122d8565b73ffffffffffffffffffffffffffffffffffffffff166120766117e7565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121339061385a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661235383611128565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6123a28261226c565b6123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d8906139ba565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612408929190612dba565b505050565b60006124188261226c565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e9061391a565b60405180910390fd5b600061246283611128565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124d157508373ffffffffffffffffffffffffffffffffffffffff166124b984610983565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e257506124e18185611fbc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661250b82611128565b73ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890613a7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c8906138ba565b60405180910390fd5b6125dc838383612aaa565b6125e76000826122e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126379190613d92565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268e9190613cb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906139fa565b60405180910390fd5b6127c08161226c565b15612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f79061387a565b60405180910390fd5b61280c60008383612aaa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285c9190613cb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6129208484846124eb565b61292c84848484612aaf565b61296b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129629061383a565b60405180910390fd5b50505050565b6060600d805461298090613e8e565b80601f01602080910402602001604051908101604052809291908181526020018280546129ac90613e8e565b80156129f95780601f106129ce576101008083540402835291602001916129f9565b820191906000526020600020905b8154815290600101906020018083116129dc57829003601f168201915b5050505050905090565b6060612a0e8261226c565b612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4490613a9a565b60405180910390fd5b6000612a57612971565b90506000815111612a775760405180602001604052806000815250612aa2565b80612a8184612c46565b604051602001612a92929190613752565b6040516020818303038152906040525b915050919050565b505050565b6000612ad08473ffffffffffffffffffffffffffffffffffffffff16612da7565b15612c39578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af96122d8565b8786866040518563ffffffff1660e01b8152600401612b1b9493929190613791565b602060405180830381600087803b158015612b3557600080fd5b505af1925050508015612b6657506040513d601f19601f82011682018060405250810190612b6391906131c3565b60015b612be9573d8060008114612b96576040519150601f19603f3d011682016040523d82523d6000602084013e612b9b565b606091505b50600081511415612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd89061383a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3e565b600190505b949350505050565b60606000821415612c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612da2565b600082905060005b60008214612cc0578080612ca990613ef1565b915050600a82612cb99190613d07565b9150612c96565b60008167ffffffffffffffff811115612cdc57612cdb614027565b5b6040519080825280601f01601f191660200182016040528015612d0e5781602001600182028036833780820191505090505b5090505b60008514612d9b57600182612d279190613d92565b9150600a85612d369190613f3a565b6030612d429190613cb1565b60f81b818381518110612d5857612d57613ff8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d949190613d07565b9450612d12565b8093505050505b919050565b600080823b905060008111915050919050565b828054612dc690613e8e565b90600052602060002090601f016020900481019282612de85760008555612e2f565b82601f10612e0157805160ff1916838001178555612e2f565b82800160010185558215612e2f579182015b82811115612e2e578251825591602001919060010190612e13565b5b509050612e3c9190612e40565b5090565b5b80821115612e59576000816000905550600101612e41565b5090565b6000612e70612e6b84613c0c565b613be7565b905082815260208101848484011115612e8c57612e8b61405b565b5b612e97848285613e4c565b509392505050565b6000612eb2612ead84613c3d565b613be7565b905082815260208101848484011115612ece57612ecd61405b565b5b612ed9848285613e4c565b509392505050565b600081359050612ef08161472e565b92915050565b600081359050612f0581614745565b92915050565b600081359050612f1a8161475c565b92915050565b600081519050612f2f8161475c565b92915050565b600082601f830112612f4a57612f49614056565b5b8135612f5a848260208601612e5d565b91505092915050565b600082601f830112612f7857612f77614056565b5b8135612f88848260208601612e9f565b91505092915050565b600081359050612fa081614773565b92915050565b600060208284031215612fbc57612fbb614065565b5b6000612fca84828501612ee1565b91505092915050565b60008060408385031215612fea57612fe9614065565b5b6000612ff885828601612ee1565b925050602061300985828601612ee1565b9150509250929050565b60008060006060848603121561302c5761302b614065565b5b600061303a86828701612ee1565b935050602061304b86828701612ee1565b925050604061305c86828701612f91565b9150509250925092565b600080600080608085870312156130805761307f614065565b5b600061308e87828801612ee1565b945050602061309f87828801612ee1565b93505060406130b087828801612f91565b925050606085013567ffffffffffffffff8111156130d1576130d0614060565b5b6130dd87828801612f35565b91505092959194509250565b60008060408385031215613100576130ff614065565b5b600061310e85828601612ee1565b925050602061311f85828601612ef6565b9150509250929050565b600080604083850312156131405761313f614065565b5b600061314e85828601612ee1565b925050602061315f85828601612f91565b9150509250929050565b60006020828403121561317f5761317e614065565b5b600061318d84828501612ef6565b91505092915050565b6000602082840312156131ac576131ab614065565b5b60006131ba84828501612f0b565b91505092915050565b6000602082840312156131d9576131d8614065565b5b60006131e784828501612f20565b91505092915050565b60006020828403121561320657613205614065565b5b600082013567ffffffffffffffff81111561322457613223614060565b5b61323084828501612f63565b91505092915050565b60006020828403121561324f5761324e614065565b5b600061325d84828501612f91565b91505092915050565b6000806040838503121561327d5761327c614065565b5b600061328b85828601612f91565b925050602083013567ffffffffffffffff8111156132ac576132ab614060565b5b6132b885828601612f63565b9150509250929050565b6132cb81613dc6565b82525050565b6132da81613dd8565b82525050565b60006132eb82613c6e565b6132f58185613c84565b9350613305818560208601613e5b565b61330e8161406a565b840191505092915050565b61332281613e3a565b82525050565b600061333382613c79565b61333d8185613c95565b935061334d818560208601613e5b565b6133568161406a565b840191505092915050565b600061336c82613c79565b6133768185613ca6565b9350613386818560208601613e5b565b80840191505092915050565b600061339f600883613c95565b91506133aa8261407b565b602082019050919050565b60006133c2603283613c95565b91506133cd826140a4565b604082019050919050565b60006133e5602683613c95565b91506133f0826140f3565b604082019050919050565b6000613408601c83613c95565b915061341382614142565b602082019050919050565b600061342b601183613c95565b91506134368261416b565b602082019050919050565b600061344e602483613c95565b915061345982614194565b604082019050919050565b6000613471601983613c95565b915061347c826141e3565b602082019050919050565b6000613494601c83613c95565b915061349f8261420c565b602082019050919050565b60006134b7602c83613c95565b91506134c282614235565b604082019050919050565b60006134da602d83613c95565b91506134e582614284565b604082019050919050565b60006134fd603883613c95565b9150613508826142d3565b604082019050919050565b6000613520602a83613c95565b915061352b82614322565b604082019050919050565b6000613543602983613c95565b915061354e82614371565b604082019050919050565b6000613566602e83613c95565b9150613571826143c0565b604082019050919050565b6000613589601c83613c95565b91506135948261440f565b602082019050919050565b60006135ac602083613c95565b91506135b782614438565b602082019050919050565b60006135cf603183613c95565b91506135da82614461565b604082019050919050565b60006135f2602c83613c95565b91506135fd826144b0565b604082019050919050565b6000613615602083613c95565b9150613620826144ff565b602082019050919050565b6000613638602983613c95565b915061364382614528565b604082019050919050565b600061365b602f83613c95565b915061366682614577565b604082019050919050565b600061367e602183613c95565b9150613689826145c6565b604082019050919050565b60006136a1603183613c95565b91506136ac82614615565b604082019050919050565b60006136c4603083613c95565b91506136cf82614664565b604082019050919050565b60006136e7600b83613c95565b91506136f2826146b3565b602082019050919050565b600061370a601f83613c95565b9150613715826146dc565b602082019050919050565b600061372d600b83613c95565b915061373882614705565b602082019050919050565b61374c81613e30565b82525050565b600061375e8285613361565b915061376a8284613361565b91508190509392505050565b600060208201905061378b60008301846132c2565b92915050565b60006080820190506137a660008301876132c2565b6137b360208301866132c2565b6137c06040830185613743565b81810360608301526137d281846132e0565b905095945050505050565b60006020820190506137f260008301846132d1565b92915050565b600060208201905081810360008301526138128184613328565b905092915050565b6000602082019050818103600083015261383381613392565b9050919050565b60006020820190508181036000830152613853816133b5565b9050919050565b60006020820190508181036000830152613873816133d8565b9050919050565b60006020820190508181036000830152613893816133fb565b9050919050565b600060208201905081810360008301526138b38161341e565b9050919050565b600060208201905081810360008301526138d381613441565b9050919050565b600060208201905081810360008301526138f381613464565b9050919050565b6000602082019050818103600083015261391381613487565b9050919050565b60006020820190508181036000830152613933816134aa565b9050919050565b60006020820190508181036000830152613953816134cd565b9050919050565b60006020820190508181036000830152613973816134f0565b9050919050565b6000602082019050818103600083015261399381613513565b9050919050565b600060208201905081810360008301526139b381613536565b9050919050565b600060208201905081810360008301526139d381613559565b9050919050565b600060208201905081810360008301526139f38161357c565b9050919050565b60006020820190508181036000830152613a138161359f565b9050919050565b60006020820190508181036000830152613a33816135c2565b9050919050565b60006020820190508181036000830152613a53816135e5565b9050919050565b60006020820190508181036000830152613a7381613608565b9050919050565b60006020820190508181036000830152613a938161362b565b9050919050565b60006020820190508181036000830152613ab38161364e565b9050919050565b60006020820190508181036000830152613ad381613671565b9050919050565b60006020820190508181036000830152613af381613694565b9050919050565b60006020820190508181036000830152613b13816136b7565b9050919050565b60006020820190508181036000830152613b33816136da565b9050919050565b60006020820190508181036000830152613b53816136fd565b9050919050565b60006020820190508181036000830152613b7381613720565b9050919050565b6000602082019050613b8f6000830184613743565b92915050565b6000604082019050613baa6000830185613743565b613bb76020830184613319565b9392505050565b6000604082019050613bd36000830185613743565b613be06020830184613743565b9392505050565b6000613bf1613c02565b9050613bfd8282613ec0565b919050565b6000604051905090565b600067ffffffffffffffff821115613c2757613c26614027565b5b613c308261406a565b9050602081019050919050565b600067ffffffffffffffff821115613c5857613c57614027565b5b613c618261406a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cbc82613e30565b9150613cc783613e30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cfc57613cfb613f6b565b5b828201905092915050565b6000613d1282613e30565b9150613d1d83613e30565b925082613d2d57613d2c613f9a565b5b828204905092915050565b6000613d4382613e30565b9150613d4e83613e30565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8757613d86613f6b565b5b828202905092915050565b6000613d9d82613e30565b9150613da883613e30565b925082821015613dbb57613dba613f6b565b5b828203905092915050565b6000613dd182613e10565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613e4582613e30565b9050919050565b82818337600083830152505050565b60005b83811015613e79578082015181840152602081019050613e5e565b83811115613e88576000848401525b50505050565b60006002820490506001821680613ea657607f821691505b60208210811415613eba57613eb9613fc9565b5b50919050565b613ec98261406a565b810181811067ffffffffffffffff82111715613ee857613ee7614027565b5b80604052505050565b6000613efc82613e30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2f57613f2e613f6b565b5b600182019050919050565b6000613f4582613e30565b9150613f5083613e30565b925082613f6057613f5f613f9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f766572206d696e74206c696d697420666f7220616464726573732e00000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20707260008201527f6573616c6520616d6f756e742e00000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b61473781613dc6565b811461474257600080fd5b50565b61474e81613dd8565b811461475957600080fd5b50565b61476581613de4565b811461477057600080fd5b50565b61477c81613e30565b811461478757600080fd5b5056fea264697066735822122042799c5356cdbcebb405404bff0f1a7d4d134d2cc5403c3aac411b4908746c1164736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001647656e6572617469766520416c6368656d79204c6162000000000000000000000000000000000000000000000000000000000000000000000000000000000004474b4559000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c80636c0360eb11610118578063a035b1fe116100a0578063c1f261231161006f578063c1f2612314610725578063c87b56dd14610741578063e985e9c51461077e578063f2fde38b146107bb578063f34acb7c146107e457610204565b8063a035b1fe1461067f578063a22cb465146106aa578063a2b40d19146106d3578063b88d4fde146106fc57610204565b806388eae705116100e757806388eae705146105985780638da5cb5b146105c3578063917bb57f146105ee57806395d89b41146106175780639afdf2f31461064257610204565b80636c0360eb146104fd57806370a0823114610528578063715018a614610565578063868ff4a21461057c57610204565b80632cb35b901161019b57806355f804b31161016a57806355f804b3146104275780635aa74af4146104505780635f4f603d1461046c5780636352211e1461049557806367765b87146104d257610204565b80632cb35b901461037f57806334eafb11146103aa5780633c49a8a9146103d557806342842e0e146103fe57610204565b8063162094c4116101d7578063162094c4146102d757806318160ddd146103005780631f2698ab1461032b57806323b872dd1461035657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613196565b61080f565b60405161023d91906137dd565b60405180910390f35b34801561025257600080fd5b5061025b6108f1565b60405161026891906137f8565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613239565b610983565b6040516102a59190613776565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190613129565b610a08565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190613266565b610b20565b005b34801561030c57600080fd5b50610315610baa565b6040516103229190613b7a565b60405180910390f35b34801561033757600080fd5b50610340610bb4565b60405161034d91906137dd565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613013565b610bc7565b005b34801561038b57600080fd5b50610394610c27565b6040516103a19190613b7a565b60405180910390f35b3480156103b657600080fd5b506103bf610c2d565b6040516103cc9190613b7a565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612fa6565b610c33565b005b34801561040a57600080fd5b5061042560048036038101906104209190613013565b610d90565b005b34801561043357600080fd5b5061044e600480360381019061044991906131f0565b610db0565b005b61046a60048036038101906104659190613239565b610e46565b005b34801561047857600080fd5b50610493600480360381019061048e9190613169565b61108f565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613239565b611128565b6040516104c99190613776565b60405180910390f35b3480156104de57600080fd5b506104e76111da565b6040516104f49190613b7a565b60405180910390f35b34801561050957600080fd5b506105126111e0565b60405161051f91906137f8565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612fa6565b61126e565b60405161055c9190613b7a565b60405180910390f35b34801561057157600080fd5b5061057a611326565b005b61059660048036038101906105919190613239565b611463565b005b3480156105a457600080fd5b506105ad6117d4565b6040516105ba91906137dd565b60405180910390f35b3480156105cf57600080fd5b506105d86117e7565b6040516105e59190613776565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613169565b611811565b005b34801561062357600080fd5b5061062c6118aa565b60405161063991906137f8565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190612fa6565b61193c565b6040516106769190613b7a565b60405180910390f35b34801561068b57600080fd5b50610694611985565b6040516106a19190613b7a565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc91906130e9565b61198b565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613239565b611b0c565b005b34801561070857600080fd5b50610723600480360381019061071e9190613066565b611b92565b005b61073f600480360381019061073a9190613239565b611bf4565b005b34801561074d57600080fd5b5061076860048036038101906107639190613239565b611e6a565b60405161077591906137f8565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a09190612fd3565b611fbc565b6040516107b291906137dd565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190612fa6565b612050565b005b3480156107f057600080fd5b506107f96121fc565b6040516108069190613b7a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ea57506108e982612202565b5b9050919050565b60606000805461090090613e8e565b80601f016020809104026020016040519081016040528092919081815260200182805461092c90613e8e565b80156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b600061098e8261226c565b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490613a3a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1382611128565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b90613aba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa36122d8565b73ffffffffffffffffffffffffffffffffffffffff161480610ad25750610ad181610acc6122d8565b611fbc565b5b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b089061395a565b60405180910390fd5b610b1b83836122e0565b505050565b610b286122d8565b73ffffffffffffffffffffffffffffffffffffffff16610b466117e7565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613a5a565b60405180910390fd5b610ba68282612399565b5050565b6000600854905090565b600e60009054906101000a900460ff1681565b610bd8610bd26122d8565b8261240d565b610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613ada565b60405180910390fd5b610c228383836124eb565b505050565b60085481565b60095481565b610c3b6122d8565b73ffffffffffffffffffffffffffffffffffffffff16610c596117e7565b73ffffffffffffffffffffffffffffffffffffffff1614610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613a5a565b60405180910390fd5b6009546001600854610cc19190613cb1565b1115610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990613afa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c6001600854610d499190613cb1565b6001604051610d59929190613b95565b60405180910390a2610d8d8160086000815480929190610d7890613ef1565b919050556001610d889190613cb1565b612747565b50565b610dab83838360405180602001604052806000815250611b92565b505050565b610db86122d8565b73ffffffffffffffffffffffffffffffffffffffff16610dd66117e7565b73ffffffffffffffffffffffffffffffffffffffff1614610e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2390613a5a565b60405180910390fd5b80600d9080519060200190610e42929190612dba565b5050565b600e60009054906101000a900460ff16610e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8c90613b1a565b60405180910390fd5b600081118015610ea75750600b548111155b610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd9061389a565b60405180910390fd5b60095481600854610ef79190613cb1565b1115610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f9061381a565b60405180910390fd5b600c5481610f469190613d38565b3414610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613b5a565b60405180910390fd5b610f8f6117e7565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610fd4573d6000803e3d6000fd5b50610fdd6122d8565b73ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c60016008546110239190613cb1565b83604051611032929190613bbe565b60405180910390a260005b8181101561108b576110786110506122d8565b6008600081548092919061106390613ef1565b9190505560016110739190613cb1565b612747565b808061108390613ef1565b91505061103d565b5050565b6110976122d8565b73ffffffffffffffffffffffffffffffffffffffff166110b56117e7565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613a5a565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061399a565b60405180910390fd5b80915050919050565b600b5481565b600d80546111ed90613e8e565b80601f016020809104026020016040519081016040528092919081815260200182805461121990613e8e565b80156112665780601f1061123b57610100808354040283529160200191611266565b820191906000526020600020905b81548152906001019060200180831161124957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061397a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61132e6122d8565b73ffffffffffffffffffffffffffffffffffffffff1661134c6117e7565b73ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990613a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60019054906101000a900460ff166114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613b3a565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611540576004600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600181600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461158d9190613d92565b10156115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c5906138fa565b60405180910390fd5b600a54816008546115df9190613cb1565b1115611620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116179061393a565b60405180910390fd5b600c548161162e9190613d38565b341461166f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611666906139da565b60405180910390fd5b6116776117e7565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156116bc573d6000803e3d6000fd5b5080600f60006116ca6122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117139190613d92565b925050819055506117226122d8565b73ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c60016008546117689190613cb1565b83604051611777929190613bbe565b60405180910390a260005b818110156117d0576117bd6117956122d8565b600860008154809291906117a890613ef1565b9190505560016117b89190613cb1565b612747565b80806117c890613ef1565b915050611782565b5050565b600e60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118196122d8565b73ffffffffffffffffffffffffffffffffffffffff166118376117e7565b73ffffffffffffffffffffffffffffffffffffffff161461188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490613a5a565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600180546118b990613e8e565b80601f01602080910402602001604051908101604052809291908181526020018280546118e590613e8e565b80156119325780601f1061190757610100808354040283529160200191611932565b820191906000526020600020905b81548152906001019060200180831161191557829003601f168201915b5050505050905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b6119936122d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906138da565b60405180910390fd5b8060056000611a0e6122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611abb6122d8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b0091906137dd565b60405180910390a35050565b611b146122d8565b73ffffffffffffffffffffffffffffffffffffffff16611b326117e7565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613a5a565b60405180910390fd5b80600c8190555050565b611ba3611b9d6122d8565b8361240d565b611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd990613ada565b60405180910390fd5b611bee84848484612915565b50505050565b611bfc6122d8565b73ffffffffffffffffffffffffffffffffffffffff16611c1a6117e7565b73ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613a5a565b60405180910390fd5b600081118015611c825750600b548111155b611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb89061389a565b60405180910390fd5b60095481600854611cd29190613cb1565b1115611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a9061381a565b60405180910390fd5b600c5481611d219190613d38565b3414611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5990613b5a565b60405180910390fd5b611d6a6117e7565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611daf573d6000803e3d6000fd5b50611db86122d8565b73ffffffffffffffffffffffffffffffffffffffff167ffa8a9e4278757ba47911ada59318bd102b948844b554cef5d90f067db7ed021c6001600854611dfe9190613cb1565b83604051611e0d929190613bbe565b60405180910390a260005b81811015611e6657611e53611e2b6122d8565b60086000815480929190611e3e90613ef1565b919050556001611e4e9190613cb1565b612747565b8080611e5e90613ef1565b915050611e18565b5050565b6060611e758261226c565b611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90613a1a565b60405180910390fd5b6000600660008481526020019081526020016000208054611ed490613e8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090613e8e565b8015611f4d5780601f10611f2257610100808354040283529160200191611f4d565b820191906000526020600020905b815481529060010190602001808311611f3057829003601f168201915b505050505090506000611f5e612971565b9050600081511415611f74578192505050611fb7565b600082511115611fa9578082604051602001611f91929190613752565b60405160208183030381529060405292505050611fb7565b611fb284612a03565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120586122d8565b73ffffffffffffffffffffffffffffffffffffffff166120766117e7565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121339061385a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661235383611128565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6123a28261226c565b6123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d8906139ba565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612408929190612dba565b505050565b60006124188261226c565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e9061391a565b60405180910390fd5b600061246283611128565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124d157508373ffffffffffffffffffffffffffffffffffffffff166124b984610983565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e257506124e18185611fbc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661250b82611128565b73ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890613a7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c8906138ba565b60405180910390fd5b6125dc838383612aaa565b6125e76000826122e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126379190613d92565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268e9190613cb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae906139fa565b60405180910390fd5b6127c08161226c565b15612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f79061387a565b60405180910390fd5b61280c60008383612aaa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285c9190613cb1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6129208484846124eb565b61292c84848484612aaf565b61296b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129629061383a565b60405180910390fd5b50505050565b6060600d805461298090613e8e565b80601f01602080910402602001604051908101604052809291908181526020018280546129ac90613e8e565b80156129f95780601f106129ce576101008083540402835291602001916129f9565b820191906000526020600020905b8154815290600101906020018083116129dc57829003601f168201915b5050505050905090565b6060612a0e8261226c565b612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4490613a9a565b60405180910390fd5b6000612a57612971565b90506000815111612a775760405180602001604052806000815250612aa2565b80612a8184612c46565b604051602001612a92929190613752565b6040516020818303038152906040525b915050919050565b505050565b6000612ad08473ffffffffffffffffffffffffffffffffffffffff16612da7565b15612c39578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af96122d8565b8786866040518563ffffffff1660e01b8152600401612b1b9493929190613791565b602060405180830381600087803b158015612b3557600080fd5b505af1925050508015612b6657506040513d601f19601f82011682018060405250810190612b6391906131c3565b60015b612be9573d8060008114612b96576040519150601f19603f3d011682016040523d82523d6000602084013e612b9b565b606091505b50600081511415612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd89061383a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3e565b600190505b949350505050565b60606000821415612c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612da2565b600082905060005b60008214612cc0578080612ca990613ef1565b915050600a82612cb99190613d07565b9150612c96565b60008167ffffffffffffffff811115612cdc57612cdb614027565b5b6040519080825280601f01601f191660200182016040528015612d0e5781602001600182028036833780820191505090505b5090505b60008514612d9b57600182612d279190613d92565b9150600a85612d369190613f3a565b6030612d429190613cb1565b60f81b818381518110612d5857612d57613ff8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d949190613d07565b9450612d12565b8093505050505b919050565b600080823b905060008111915050919050565b828054612dc690613e8e565b90600052602060002090601f016020900481019282612de85760008555612e2f565b82601f10612e0157805160ff1916838001178555612e2f565b82800160010185558215612e2f579182015b82811115612e2e578251825591602001919060010190612e13565b5b509050612e3c9190612e40565b5090565b5b80821115612e59576000816000905550600101612e41565b5090565b6000612e70612e6b84613c0c565b613be7565b905082815260208101848484011115612e8c57612e8b61405b565b5b612e97848285613e4c565b509392505050565b6000612eb2612ead84613c3d565b613be7565b905082815260208101848484011115612ece57612ecd61405b565b5b612ed9848285613e4c565b509392505050565b600081359050612ef08161472e565b92915050565b600081359050612f0581614745565b92915050565b600081359050612f1a8161475c565b92915050565b600081519050612f2f8161475c565b92915050565b600082601f830112612f4a57612f49614056565b5b8135612f5a848260208601612e5d565b91505092915050565b600082601f830112612f7857612f77614056565b5b8135612f88848260208601612e9f565b91505092915050565b600081359050612fa081614773565b92915050565b600060208284031215612fbc57612fbb614065565b5b6000612fca84828501612ee1565b91505092915050565b60008060408385031215612fea57612fe9614065565b5b6000612ff885828601612ee1565b925050602061300985828601612ee1565b9150509250929050565b60008060006060848603121561302c5761302b614065565b5b600061303a86828701612ee1565b935050602061304b86828701612ee1565b925050604061305c86828701612f91565b9150509250925092565b600080600080608085870312156130805761307f614065565b5b600061308e87828801612ee1565b945050602061309f87828801612ee1565b93505060406130b087828801612f91565b925050606085013567ffffffffffffffff8111156130d1576130d0614060565b5b6130dd87828801612f35565b91505092959194509250565b60008060408385031215613100576130ff614065565b5b600061310e85828601612ee1565b925050602061311f85828601612ef6565b9150509250929050565b600080604083850312156131405761313f614065565b5b600061314e85828601612ee1565b925050602061315f85828601612f91565b9150509250929050565b60006020828403121561317f5761317e614065565b5b600061318d84828501612ef6565b91505092915050565b6000602082840312156131ac576131ab614065565b5b60006131ba84828501612f0b565b91505092915050565b6000602082840312156131d9576131d8614065565b5b60006131e784828501612f20565b91505092915050565b60006020828403121561320657613205614065565b5b600082013567ffffffffffffffff81111561322457613223614060565b5b61323084828501612f63565b91505092915050565b60006020828403121561324f5761324e614065565b5b600061325d84828501612f91565b91505092915050565b6000806040838503121561327d5761327c614065565b5b600061328b85828601612f91565b925050602083013567ffffffffffffffff8111156132ac576132ab614060565b5b6132b885828601612f63565b9150509250929050565b6132cb81613dc6565b82525050565b6132da81613dd8565b82525050565b60006132eb82613c6e565b6132f58185613c84565b9350613305818560208601613e5b565b61330e8161406a565b840191505092915050565b61332281613e3a565b82525050565b600061333382613c79565b61333d8185613c95565b935061334d818560208601613e5b565b6133568161406a565b840191505092915050565b600061336c82613c79565b6133768185613ca6565b9350613386818560208601613e5b565b80840191505092915050565b600061339f600883613c95565b91506133aa8261407b565b602082019050919050565b60006133c2603283613c95565b91506133cd826140a4565b604082019050919050565b60006133e5602683613c95565b91506133f0826140f3565b604082019050919050565b6000613408601c83613c95565b915061341382614142565b602082019050919050565b600061342b601183613c95565b91506134368261416b565b602082019050919050565b600061344e602483613c95565b915061345982614194565b604082019050919050565b6000613471601983613c95565b915061347c826141e3565b602082019050919050565b6000613494601c83613c95565b915061349f8261420c565b602082019050919050565b60006134b7602c83613c95565b91506134c282614235565b604082019050919050565b60006134da602d83613c95565b91506134e582614284565b604082019050919050565b60006134fd603883613c95565b9150613508826142d3565b604082019050919050565b6000613520602a83613c95565b915061352b82614322565b604082019050919050565b6000613543602983613c95565b915061354e82614371565b604082019050919050565b6000613566602e83613c95565b9150613571826143c0565b604082019050919050565b6000613589601c83613c95565b91506135948261440f565b602082019050919050565b60006135ac602083613c95565b91506135b782614438565b602082019050919050565b60006135cf603183613c95565b91506135da82614461565b604082019050919050565b60006135f2602c83613c95565b91506135fd826144b0565b604082019050919050565b6000613615602083613c95565b9150613620826144ff565b602082019050919050565b6000613638602983613c95565b915061364382614528565b604082019050919050565b600061365b602f83613c95565b915061366682614577565b604082019050919050565b600061367e602183613c95565b9150613689826145c6565b604082019050919050565b60006136a1603183613c95565b91506136ac82614615565b604082019050919050565b60006136c4603083613c95565b91506136cf82614664565b604082019050919050565b60006136e7600b83613c95565b91506136f2826146b3565b602082019050919050565b600061370a601f83613c95565b9150613715826146dc565b602082019050919050565b600061372d600b83613c95565b915061373882614705565b602082019050919050565b61374c81613e30565b82525050565b600061375e8285613361565b915061376a8284613361565b91508190509392505050565b600060208201905061378b60008301846132c2565b92915050565b60006080820190506137a660008301876132c2565b6137b360208301866132c2565b6137c06040830185613743565b81810360608301526137d281846132e0565b905095945050505050565b60006020820190506137f260008301846132d1565b92915050565b600060208201905081810360008301526138128184613328565b905092915050565b6000602082019050818103600083015261383381613392565b9050919050565b60006020820190508181036000830152613853816133b5565b9050919050565b60006020820190508181036000830152613873816133d8565b9050919050565b60006020820190508181036000830152613893816133fb565b9050919050565b600060208201905081810360008301526138b38161341e565b9050919050565b600060208201905081810360008301526138d381613441565b9050919050565b600060208201905081810360008301526138f381613464565b9050919050565b6000602082019050818103600083015261391381613487565b9050919050565b60006020820190508181036000830152613933816134aa565b9050919050565b60006020820190508181036000830152613953816134cd565b9050919050565b60006020820190508181036000830152613973816134f0565b9050919050565b6000602082019050818103600083015261399381613513565b9050919050565b600060208201905081810360008301526139b381613536565b9050919050565b600060208201905081810360008301526139d381613559565b9050919050565b600060208201905081810360008301526139f38161357c565b9050919050565b60006020820190508181036000830152613a138161359f565b9050919050565b60006020820190508181036000830152613a33816135c2565b9050919050565b60006020820190508181036000830152613a53816135e5565b9050919050565b60006020820190508181036000830152613a7381613608565b9050919050565b60006020820190508181036000830152613a938161362b565b9050919050565b60006020820190508181036000830152613ab38161364e565b9050919050565b60006020820190508181036000830152613ad381613671565b9050919050565b60006020820190508181036000830152613af381613694565b9050919050565b60006020820190508181036000830152613b13816136b7565b9050919050565b60006020820190508181036000830152613b33816136da565b9050919050565b60006020820190508181036000830152613b53816136fd565b9050919050565b60006020820190508181036000830152613b7381613720565b9050919050565b6000602082019050613b8f6000830184613743565b92915050565b6000604082019050613baa6000830185613743565b613bb76020830184613319565b9392505050565b6000604082019050613bd36000830185613743565b613be06020830184613743565b9392505050565b6000613bf1613c02565b9050613bfd8282613ec0565b919050565b6000604051905090565b600067ffffffffffffffff821115613c2757613c26614027565b5b613c308261406a565b9050602081019050919050565b600067ffffffffffffffff821115613c5857613c57614027565b5b613c618261406a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cbc82613e30565b9150613cc783613e30565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cfc57613cfb613f6b565b5b828201905092915050565b6000613d1282613e30565b9150613d1d83613e30565b925082613d2d57613d2c613f9a565b5b828204905092915050565b6000613d4382613e30565b9150613d4e83613e30565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8757613d86613f6b565b5b828202905092915050565b6000613d9d82613e30565b9150613da883613e30565b925082821015613dbb57613dba613f6b565b5b828203905092915050565b6000613dd182613e10565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613e4582613e30565b9050919050565b82818337600083830152505050565b60005b83811015613e79578082015181840152602081019050613e5e565b83811115613e88576000848401525b50505050565b60006002820490506001821680613ea657607f821691505b60208210811415613eba57613eb9613fc9565b5b50919050565b613ec98261406a565b810181811067ffffffffffffffff82111715613ee857613ee7614027565b5b80604052505050565b6000613efc82613e30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2f57613f2e613f6b565b5b600182019050919050565b6000613f4582613e30565b9150613f5083613e30565b925082613f6057613f5f613f9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4f766572206d696e74206c696d697420666f7220616464726573732e00000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20707260008201527f6573616c6520616d6f756e742e00000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f6e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b61473781613dc6565b811461474257600080fd5b50565b61474e81613dd8565b811461475957600080fd5b50565b61476581613de4565b811461477057600080fd5b50565b61477c81613e30565b811461478757600080fd5b5056fea264697066735822122042799c5356cdbcebb405404bff0f1a7d4d134d2cc5403c3aac411b4908746c1164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001647656e6572617469766520416c6368656d79204c6162000000000000000000000000000000000000000000000000000000000000000000000000000000000004474b4559000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Generative Alchemy Lab
Arg [1] : symbol_ (string): GKEY
Arg [2] : baseURI_ (string):
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000016
Arg [4] : 47656e6572617469766520416c6368656d79204c616200000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 474b455900000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
36815:3937:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20707:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21642:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23110:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22644:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38190:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37745:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37223:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24005:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36964:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36997:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40456:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24383:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37977:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38689:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38433:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21335:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37087:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37195:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21064:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36219:148;;;;;;;;;;;;;:::i;:::-;;39703:735;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37249:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35566:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38332:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21812:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38544:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37135:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23405:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38082:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24606:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39200:485;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32976:682;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23773:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36523:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37048:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20707:292;20809:4;20848:25;20833:40;;;:11;:40;;;;:105;;;;20905:33;20890:48;;;:11;:48;;;;20833:105;:158;;;;20955:36;20979:11;20955:23;:36::i;:::-;20833:158;20826:165;;20707:292;;;:::o;21642:100::-;21696:13;21729:5;21722:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21642:100;:::o;23110:222::-;23186:7;23214:16;23222:7;23214;:16::i;:::-;23206:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23300:15;:24;23316:7;23300:24;;;;;;;;;;;;;;;;;;;;;23293:31;;23110:222;;;:::o;22644:399::-;22725:13;22741:23;22756:7;22741:14;:23::i;:::-;22725:39;;22789:5;22783:11;;:2;:11;;;;22775:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22870:5;22854:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22879:37;22896:5;22903:12;:10;:12::i;:::-;22879:16;:37::i;:::-;22854:62;22846:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;23014:21;23023:2;23027:7;23014:8;:21::i;:::-;22714:329;22644:399;;:::o;38190:133::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38282:33:::1;38295:8;38305:9;38282:12;:33::i;:::-;38190:133:::0;;:::o;37745:107::-;37797:7;37824:11;;37817:18;;37745:107;:::o;37223:19::-;;;;;;;;;;;;;:::o;24005:306::-;24166:41;24185:12;:10;:12::i;:::-;24199:7;24166:18;:41::i;:::-;24158:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24275:28;24285:4;24291:2;24295:7;24275:9;:28::i;:::-;24005:306;;;:::o;36964:26::-;;;;:::o;36997:32::-;;;;:::o;40456:262::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40554:10:::1;;40549:1;40535:11;;:15;;;;:::i;:::-;:29;;40527:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;40644:5;40633:35;;;40663:1;40651:11;;:13;;;;:::i;:::-;40666:1;40633:35;;;;;;;:::i;:::-;;;;;;;;40679:31;40685:5;40696:11;;:13;;;;;;;;;:::i;:::-;;;;;40692:1;:17;;;;:::i;:::-;40679:5;:31::i;:::-;40456:262:::0;:::o;24383:151::-;24487:39;24504:4;24510:2;24514:7;24487:39;;;;;;;;;;;;:16;:39::i;:::-;24383:151;;;:::o;37977:96::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38058:7:::1;38048;:17;;;;;;;;;;;;:::i;:::-;;37977:96:::0;:::o;38689:498::-;37693:7;;;;;;;;;;;37685:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;38789:1:::1;38781:6;:9;:31;;;;;38804:8;;38794:6;:18;;38781:31;38773:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38877:10;;38867:6;38853:11;;:20;;;;:::i;:::-;:34;;38845:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38941:5;;38932:6;:14;;;;:::i;:::-;38919:9;:27;38911:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38981:7;:5;:7::i;:::-;38973:25;;:36;38999:9;38973:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39036:12;:10;:12::i;:::-;39025:47;;;39062:1;39050:11;;:13;;;;:::i;:::-;39065:6;39025:47;;;;;;;:::i;:::-;;;;;;;;39087:9;39083:97;39103:6;39100:1;:9;39083:97;;;39130:38;39136:12;:10;:12::i;:::-;39154:11;;:13;;;;;;;;;:::i;:::-;;;;;39150:1;:17;;;;:::i;:::-;39130:5;:38::i;:::-;39111:3;;;;;:::i;:::-;;;;39083:97;;;;38689:498:::0;:::o;38433:99::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38518:6:::1;38501:14;;:23;;;;;;;;;;;;;;;;;;38433:99:::0;:::o;21335:239::-;21407:7;21427:13;21443:7;:16;21451:7;21443:16;;;;;;;;;;;;;;;;;;;;;21427:32;;21495:1;21478:19;;:5;:19;;;;21470:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21561:5;21554:12;;;21335:239;;;:::o;37087:28::-;;;;:::o;37195:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21064:208::-;21136:7;21181:1;21164:19;;:5;:19;;;;21156:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21248:9;:16;21258:5;21248:16;;;;;;;;;;;;;;;;21241:23;;21064:208;;;:::o;36219:148::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36326:1:::1;36289:40;;36310:6;;;;;;;;;;;36289:40;;;;;;;;;;;;36357:1;36340:6;;:19;;;;;;;;;;;;;;;;;;36219:148::o:0;39703:735::-;37572:14;;;;;;;;;;;37564:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39818:1:::1;39786:18;:30;39805:10;39786:30;;;;;;;;;;;;;;;;:33;39782:101;;;39870:1;39837:18;:30;39856:10;39837:30;;;;;;;;;;;;;;;:34;;;;39782:101;39944:1;39934:6;39901:18;:30;39920:10;39901:30;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:44;;39893:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40021:10;;40011:6;39997:11;;:20;;;;:::i;:::-;:34;;39989:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;40122:5;;40113:6;:14;;;;:::i;:::-;40100:9;:27;40092:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40179:7;:5;:7::i;:::-;40171:25;;:36;40197:9;40171:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40254:6;40218:18;:32;40237:12;:10;:12::i;:::-;40218:32;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;40287:12;:10;:12::i;:::-;40276:47;;;40313:1;40301:11;;:13;;;;:::i;:::-;40316:6;40276:47;;;;;;;:::i;:::-;;;;;;;;40338:9;40334:97;40354:6;40351:1;:9;40334:97;;;40381:38;40387:12;:10;:12::i;:::-;40405:11;;:13;;;;;;;;;:::i;:::-;;;;;40401:1;:17;;;;:::i;:::-;40381:5;:38::i;:::-;40362:3;;;;;:::i;:::-;;;;40334:97;;;;39703:735:::0;:::o;37249:26::-;;;;;;;;;;;;;:::o;35566:87::-;35612:7;35639:6;;;;;;;;;;;35632:13;;35566:87;:::o;38332:89::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38407:6:::1;38397:7;;:16;;;;;;;;;;;;;;;;;;38332:89:::0;:::o;21812:104::-;21868:13;21901:7;21894:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21812:104;:::o;38544:136::-;38620:7;38647:18;:25;38666:5;38647:25;;;;;;;;;;;;;;;;38640:32;;38544:136;;;:::o;37135:40::-;;;;:::o;23405:296::-;23520:12;:10;:12::i;:::-;23508:24;;:8;:24;;;;23500:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23621:8;23576:18;:32;23595:12;:10;:12::i;:::-;23576:32;;;;;;;;;;;;;;;:42;23609:8;23576:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23674:8;23645:48;;23660:12;:10;:12::i;:::-;23645:48;;;23684:8;23645:48;;;;;;:::i;:::-;;;;;;;;23405:296;;:::o;38082:93::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38158:9:::1;38150:5;:17;;;;38082:93:::0;:::o;24606:285::-;24738:41;24757:12;:10;:12::i;:::-;24771:7;24738:18;:41::i;:::-;24730:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24844:39;24858:4;24864:2;24868:7;24877:5;24844:13;:39::i;:::-;24606:285;;;;:::o;39200:485::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39287:1:::1;39279:6;:9;:31;;;;;39302:8;;39292:6;:18;;39279:31;39271:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39375:10;;39365:6;39351:11;;:20;;;;:::i;:::-;:34;;39343:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39439:5;;39430:6;:14;;;;:::i;:::-;39417:9;:27;39409:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39479:7;:5;:7::i;:::-;39471:25;;:36;39497:9;39471:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39534:12;:10;:12::i;:::-;39523:47;;;39560:1;39548:11;;:13;;;;:::i;:::-;39563:6;39523:47;;;;;;;:::i;:::-;;;;;;;;39585:9;39581:97;39601:6;39598:1;:9;39581:97;;;39628:38;39634:12;:10;:12::i;:::-;39652:11;;:13;;;;;;;;;:::i;:::-;;;;;39648:1;:17;;;;:::i;:::-;39628:5;:38::i;:::-;39609:3;;;;;:::i;:::-;;;;39581:97;;;;39200:485:::0;:::o;32976:682::-;33049:13;33083:16;33091:7;33083;:16::i;:::-;33075:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33167:23;33193:10;:19;33204:7;33193:19;;;;;;;;;;;33167:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33223:18;33244:10;:8;:10::i;:::-;33223:31;;33353:1;33337:4;33331:18;:23;33327:72;;;33378:9;33371:16;;;;;;33327:72;33529:1;33509:9;33503:23;:27;33499:108;;;33578:4;33584:9;33561:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33547:48;;;;;;33499:108;33627:23;33642:7;33627:14;:23::i;:::-;33620:30;;;;32976:682;;;;:::o;23773:164::-;23870:4;23894:18;:25;23913:5;23894:25;;;;;;;;;;;;;;;:35;23920:8;23894:35;;;;;;;;;;;;;;;;;;;;;;;;;23887:42;;23773:164;;;;:::o;36523:244::-;35798:12;:10;:12::i;:::-;35787:23;;:7;:5;:7::i;:::-;:23;;;35779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36632:1:::1;36612:22;;:8;:22;;;;36604:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36722:8;36693:38;;36714:6;;;;;;;;;;;36693:38;;;;;;;;;;;;36751:8;36742:6;;:17;;;;;;;;;;;;;;;;;;36523:244:::0;:::o;37048:31::-;;;;:::o;19200:157::-;19285:4;19324:25;19309:40;;;:11;:40;;;;19302:47;;19200:157;;;:::o;26360:127::-;26425:4;26477:1;26449:30;;:7;:16;26457:7;26449:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26442:37;;26360:127;;;:::o;16000:98::-;16053:7;16080:10;16073:17;;16000:98;:::o;30255:174::-;30357:2;30330:15;:24;30346:7;30330:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30413:7;30409:2;30375:46;;30384:23;30399:7;30384:14;:23::i;:::-;30375:46;;;;;;;;;;;;30255:174;;:::o;33815:217::-;33915:16;33923:7;33915;:16::i;:::-;33907:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34015:9;33993:10;:19;34004:7;33993:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;33815:217;;:::o;26655:348::-;26748:4;26773:16;26781:7;26773;:16::i;:::-;26765:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26849:13;26865:23;26880:7;26865:14;:23::i;:::-;26849:39;;26918:5;26907:16;;:7;:16;;;:51;;;;26951:7;26927:31;;:20;26939:7;26927:11;:20::i;:::-;:31;;;26907:51;:87;;;;26962:32;26979:5;26986:7;26962:16;:32::i;:::-;26907:87;26899:96;;;26655:348;;;;:::o;29588:548::-;29713:4;29686:31;;:23;29701:7;29686:14;:23::i;:::-;:31;;;29678:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29796:1;29782:16;;:2;:16;;;;29774:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29853:39;29874:4;29880:2;29884:7;29853:20;:39::i;:::-;29958:29;29975:1;29979:7;29958:8;:29::i;:::-;30020:1;30001:9;:15;30011:4;30001:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30049:1;30032:9;:13;30042:2;30032:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30080:2;30061:7;:16;30069:7;30061:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30120:7;30116:2;30101:27;;30110:4;30101:27;;;;;;;;;;;;29588:548;;;:::o;28271:385::-;28365:1;28351:16;;:2;:16;;;;28343:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28424:16;28432:7;28424;:16::i;:::-;28423:17;28415:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28487:45;28516:1;28520:2;28524:7;28487:20;:45::i;:::-;28563:1;28546:9;:13;28556:2;28546:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28594:2;28575:7;:16;28583:7;28575:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28640:7;28636:2;28615:33;;28632:1;28615:33;;;;;;;;;;;;28271:385;;:::o;25774:272::-;25888:28;25898:4;25904:2;25908:7;25888:9;:28::i;:::-;25935:48;25958:4;25964:2;25968:7;25977:5;25935:22;:48::i;:::-;25927:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25774:272;;;;:::o;37861:107::-;37921:13;37953:7;37946:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37861:107;:::o;21988:361::-;22061:13;22095:16;22103:7;22095;:16::i;:::-;22087:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22177:21;22201:10;:8;:10::i;:::-;22177:34;;22253:1;22235:7;22229:21;:25;:112;;;;;;;;;;;;;;;;;22294:7;22303:18;:7;:16;:18::i;:::-;22277:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22229:112;22222:119;;;21988:361;;;:::o;32452:93::-;;;;:::o;30995:843::-;31116:4;31142:15;:2;:13;;;:15::i;:::-;31138:693;;;31194:2;31178:36;;;31215:12;:10;:12::i;:::-;31229:4;31235:7;31244:5;31178:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31174:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31441:1;31424:6;:13;:18;31420:341;;;31467:60;;;;;;;;;;:::i;:::-;;;;;;;;31420:341;31711:6;31705:13;31696:6;31692:2;31688:15;31681:38;31174:602;31311:45;;;31301:55;;;:6;:55;;;;31294:62;;;;;31138:693;31815:4;31808:11;;30995:843;;;;;;;:::o;16650:724::-;16706:13;16937:1;16928:5;:10;16924:53;;;16955:10;;;;;;;;;;;;;;;;;;;;;16924:53;16987:12;17002:5;16987:20;;17018:14;17043:78;17058:1;17050:4;:9;17043:78;;17076:8;;;;;:::i;:::-;;;;17107:2;17099:10;;;;;:::i;:::-;;;17043:78;;;17131:19;17163:6;17153:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17131:39;;17181:154;17197:1;17188:5;:10;17181:154;;17225:1;17215:11;;;;;:::i;:::-;;;17292:2;17284:5;:10;;;;:::i;:::-;17271:2;:24;;;;:::i;:::-;17258:39;;17241:6;17248;17241:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17321:2;17312:11;;;;;:::i;:::-;;;17181:154;;;17359:6;17345:21;;;;;16650:724;;;;:::o;8108:423::-;8168:4;8377:12;8488:7;8476:20;8468:28;;8522:1;8515:4;:8;8508:15;;;8108:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:654::-;7565:6;7573;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:53;7818:7;7809:6;7798:9;7794:22;7773:53;:::i;:::-;7763:63;;7719:117;7903:2;7892:9;7888:18;7875:32;7934:18;7926:6;7923:30;7920:117;;;7956:79;;:::i;:::-;7920:117;8061:63;8116:7;8107:6;8096:9;8092:22;8061:63;:::i;:::-;8051:73;;7846:288;7487:654;;;;;:::o;8147:118::-;8234:24;8252:5;8234:24;:::i;:::-;8229:3;8222:37;8147:118;;:::o;8271:109::-;8352:21;8367:5;8352:21;:::i;:::-;8347:3;8340:34;8271:109;;:::o;8386:360::-;8472:3;8500:38;8532:5;8500:38;:::i;:::-;8554:70;8617:6;8612:3;8554:70;:::i;:::-;8547:77;;8633:52;8678:6;8673:3;8666:4;8659:5;8655:16;8633:52;:::i;:::-;8710:29;8732:6;8710:29;:::i;:::-;8705:3;8701:39;8694:46;;8476:270;8386:360;;;;:::o;8752:147::-;8847:45;8886:5;8847:45;:::i;:::-;8842:3;8835:58;8752:147;;:::o;8905:364::-;8993:3;9021:39;9054:5;9021:39;:::i;:::-;9076:71;9140:6;9135:3;9076:71;:::i;:::-;9069:78;;9156:52;9201:6;9196:3;9189:4;9182:5;9178:16;9156:52;:::i;:::-;9233:29;9255:6;9233:29;:::i;:::-;9228:3;9224:39;9217:46;;8997:272;8905:364;;;;:::o;9275:377::-;9381:3;9409:39;9442:5;9409:39;:::i;:::-;9464:89;9546:6;9541:3;9464:89;:::i;:::-;9457:96;;9562:52;9607:6;9602:3;9595:4;9588:5;9584:16;9562:52;:::i;:::-;9639:6;9634:3;9630:16;9623:23;;9385:267;9275:377;;;;:::o;9658:365::-;9800:3;9821:66;9885:1;9880:3;9821:66;:::i;:::-;9814:73;;9896:93;9985:3;9896:93;:::i;:::-;10014:2;10009:3;10005:12;9998:19;;9658:365;;;:::o;10029:366::-;10171:3;10192:67;10256:2;10251:3;10192:67;:::i;:::-;10185:74;;10268:93;10357:3;10268:93;:::i;:::-;10386:2;10381:3;10377:12;10370:19;;10029:366;;;:::o;10401:::-;10543:3;10564:67;10628:2;10623:3;10564:67;:::i;:::-;10557:74;;10640:93;10729:3;10640:93;:::i;:::-;10758:2;10753:3;10749:12;10742:19;;10401:366;;;:::o;10773:::-;10915:3;10936:67;11000:2;10995:3;10936:67;:::i;:::-;10929:74;;11012:93;11101:3;11012:93;:::i;:::-;11130:2;11125:3;11121:12;11114:19;;10773:366;;;:::o;11145:::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:::-;11659:3;11680:67;11744:2;11739:3;11680:67;:::i;:::-;11673:74;;11756:93;11845:3;11756:93;:::i;:::-;11874:2;11869:3;11865:12;11858:19;;11517:366;;;:::o;11889:::-;12031:3;12052:67;12116:2;12111:3;12052:67;:::i;:::-;12045:74;;12128:93;12217:3;12128:93;:::i;:::-;12246:2;12241:3;12237:12;12230:19;;11889:366;;;:::o;12261:::-;12403:3;12424:67;12488:2;12483:3;12424:67;:::i;:::-;12417:74;;12500:93;12589:3;12500:93;:::i;:::-;12618:2;12613:3;12609:12;12602:19;;12261:366;;;:::o;12633:::-;12775:3;12796:67;12860:2;12855:3;12796:67;:::i;:::-;12789:74;;12872:93;12961:3;12872:93;:::i;:::-;12990:2;12985:3;12981:12;12974:19;;12633:366;;;:::o;13005:::-;13147:3;13168:67;13232:2;13227:3;13168:67;:::i;:::-;13161:74;;13244:93;13333:3;13244:93;:::i;:::-;13362:2;13357:3;13353:12;13346:19;;13005:366;;;:::o;13377:::-;13519:3;13540:67;13604:2;13599:3;13540:67;:::i;:::-;13533:74;;13616:93;13705:3;13616:93;:::i;:::-;13734:2;13729:3;13725:12;13718:19;;13377:366;;;:::o;13749:::-;13891:3;13912:67;13976:2;13971:3;13912:67;:::i;:::-;13905:74;;13988:93;14077:3;13988:93;:::i;:::-;14106:2;14101:3;14097:12;14090:19;;13749:366;;;:::o;14121:::-;14263:3;14284:67;14348:2;14343:3;14284:67;:::i;:::-;14277:74;;14360:93;14449:3;14360:93;:::i;:::-;14478:2;14473:3;14469:12;14462:19;;14121:366;;;:::o;14493:::-;14635:3;14656:67;14720:2;14715:3;14656:67;:::i;:::-;14649:74;;14732:93;14821:3;14732:93;:::i;:::-;14850:2;14845:3;14841:12;14834:19;;14493:366;;;:::o;14865:::-;15007:3;15028:67;15092:2;15087:3;15028:67;:::i;:::-;15021:74;;15104:93;15193:3;15104:93;:::i;:::-;15222:2;15217:3;15213:12;15206:19;;14865:366;;;:::o;15237:::-;15379:3;15400:67;15464:2;15459:3;15400:67;:::i;:::-;15393:74;;15476:93;15565:3;15476:93;:::i;:::-;15594:2;15589:3;15585:12;15578:19;;15237:366;;;:::o;15609:::-;15751:3;15772:67;15836:2;15831:3;15772:67;:::i;:::-;15765:74;;15848:93;15937:3;15848:93;:::i;:::-;15966:2;15961:3;15957:12;15950:19;;15609:366;;;:::o;15981:::-;16123:3;16144:67;16208:2;16203:3;16144:67;:::i;:::-;16137:74;;16220:93;16309:3;16220:93;:::i;:::-;16338:2;16333:3;16329:12;16322:19;;15981:366;;;:::o;16353:::-;16495:3;16516:67;16580:2;16575:3;16516:67;:::i;:::-;16509:74;;16592:93;16681:3;16592:93;:::i;:::-;16710:2;16705:3;16701:12;16694:19;;16353:366;;;:::o;16725:::-;16867:3;16888:67;16952:2;16947:3;16888:67;:::i;:::-;16881:74;;16964:93;17053:3;16964:93;:::i;:::-;17082:2;17077:3;17073:12;17066:19;;16725:366;;;:::o;17097:::-;17239:3;17260:67;17324:2;17319:3;17260:67;:::i;:::-;17253:74;;17336:93;17425:3;17336:93;:::i;:::-;17454:2;17449:3;17445:12;17438:19;;17097:366;;;:::o;17469:::-;17611:3;17632:67;17696:2;17691:3;17632:67;:::i;:::-;17625:74;;17708:93;17797:3;17708:93;:::i;:::-;17826:2;17821:3;17817:12;17810:19;;17469:366;;;:::o;17841:::-;17983:3;18004:67;18068:2;18063:3;18004:67;:::i;:::-;17997:74;;18080:93;18169:3;18080:93;:::i;:::-;18198:2;18193:3;18189:12;18182:19;;17841:366;;;:::o;18213:::-;18355:3;18376:67;18440:2;18435:3;18376:67;:::i;:::-;18369:74;;18452:93;18541:3;18452:93;:::i;:::-;18570:2;18565:3;18561:12;18554:19;;18213:366;;;:::o;18585:::-;18727:3;18748:67;18812:2;18807:3;18748:67;:::i;:::-;18741:74;;18824:93;18913:3;18824:93;:::i;:::-;18942:2;18937:3;18933:12;18926:19;;18585:366;;;:::o;18957:::-;19099:3;19120:67;19184:2;19179:3;19120:67;:::i;:::-;19113:74;;19196:93;19285:3;19196:93;:::i;:::-;19314:2;19309:3;19305:12;19298:19;;18957:366;;;:::o;19329:::-;19471:3;19492:67;19556:2;19551:3;19492:67;:::i;:::-;19485:74;;19568:93;19657:3;19568:93;:::i;:::-;19686:2;19681:3;19677:12;19670:19;;19329:366;;;:::o;19701:118::-;19788:24;19806:5;19788:24;:::i;:::-;19783:3;19776:37;19701:118;;:::o;19825:435::-;20005:3;20027:95;20118:3;20109:6;20027:95;:::i;:::-;20020:102;;20139:95;20230:3;20221:6;20139:95;:::i;:::-;20132:102;;20251:3;20244:10;;19825:435;;;;;:::o;20266:222::-;20359:4;20397:2;20386:9;20382:18;20374:26;;20410:71;20478:1;20467:9;20463:17;20454:6;20410:71;:::i;:::-;20266:222;;;;:::o;20494:640::-;20689:4;20727:3;20716:9;20712:19;20704:27;;20741:71;20809:1;20798:9;20794:17;20785:6;20741:71;:::i;:::-;20822:72;20890:2;20879:9;20875:18;20866:6;20822:72;:::i;:::-;20904;20972:2;20961:9;20957:18;20948:6;20904:72;:::i;:::-;21023:9;21017:4;21013:20;21008:2;20997:9;20993:18;20986:48;21051:76;21122:4;21113:6;21051:76;:::i;:::-;21043:84;;20494:640;;;;;;;:::o;21140:210::-;21227:4;21265:2;21254:9;21250:18;21242:26;;21278:65;21340:1;21329:9;21325:17;21316:6;21278:65;:::i;:::-;21140:210;;;;:::o;21356:313::-;21469:4;21507:2;21496:9;21492:18;21484:26;;21556:9;21550:4;21546:20;21542:1;21531:9;21527:17;21520:47;21584:78;21657:4;21648:6;21584:78;:::i;:::-;21576:86;;21356:313;;;;:::o;21675:419::-;21841:4;21879:2;21868:9;21864:18;21856:26;;21928:9;21922:4;21918:20;21914:1;21903:9;21899:17;21892:47;21956:131;22082:4;21956:131;:::i;:::-;21948:139;;21675:419;;;:::o;22100:::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22100:419;;;:::o;22525:::-;22691:4;22729:2;22718:9;22714:18;22706:26;;22778:9;22772:4;22768:20;22764:1;22753:9;22749:17;22742:47;22806:131;22932:4;22806:131;:::i;:::-;22798:139;;22525:419;;;:::o;22950:::-;23116:4;23154:2;23143:9;23139:18;23131:26;;23203:9;23197:4;23193:20;23189:1;23178:9;23174:17;23167:47;23231:131;23357:4;23231:131;:::i;:::-;23223:139;;22950:419;;;:::o;23375:::-;23541:4;23579:2;23568:9;23564:18;23556:26;;23628:9;23622:4;23618:20;23614:1;23603:9;23599:17;23592:47;23656:131;23782:4;23656:131;:::i;:::-;23648:139;;23375:419;;;:::o;23800:::-;23966:4;24004:2;23993:9;23989:18;23981:26;;24053:9;24047:4;24043:20;24039:1;24028:9;24024:17;24017:47;24081:131;24207:4;24081:131;:::i;:::-;24073:139;;23800:419;;;:::o;24225:::-;24391:4;24429:2;24418:9;24414:18;24406:26;;24478:9;24472:4;24468:20;24464:1;24453:9;24449:17;24442:47;24506:131;24632:4;24506:131;:::i;:::-;24498:139;;24225:419;;;:::o;24650:::-;24816:4;24854:2;24843:9;24839:18;24831:26;;24903:9;24897:4;24893:20;24889:1;24878:9;24874:17;24867:47;24931:131;25057:4;24931:131;:::i;:::-;24923:139;;24650:419;;;:::o;25075:::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25328:9;25322:4;25318:20;25314:1;25303:9;25299:17;25292:47;25356:131;25482:4;25356:131;:::i;:::-;25348:139;;25075:419;;;:::o;25500:::-;25666:4;25704:2;25693:9;25689:18;25681:26;;25753:9;25747:4;25743:20;25739:1;25728:9;25724:17;25717:47;25781:131;25907:4;25781:131;:::i;:::-;25773:139;;25500:419;;;:::o;25925:::-;26091:4;26129:2;26118:9;26114:18;26106:26;;26178:9;26172:4;26168:20;26164:1;26153:9;26149:17;26142:47;26206:131;26332:4;26206:131;:::i;:::-;26198:139;;25925:419;;;:::o;26350:::-;26516:4;26554:2;26543:9;26539:18;26531:26;;26603:9;26597:4;26593:20;26589:1;26578:9;26574:17;26567:47;26631:131;26757:4;26631:131;:::i;:::-;26623:139;;26350:419;;;:::o;26775:::-;26941:4;26979:2;26968:9;26964:18;26956:26;;27028:9;27022:4;27018:20;27014:1;27003:9;26999:17;26992:47;27056:131;27182:4;27056:131;:::i;:::-;27048:139;;26775:419;;;:::o;27200:::-;27366:4;27404:2;27393:9;27389:18;27381:26;;27453:9;27447:4;27443:20;27439:1;27428:9;27424:17;27417:47;27481:131;27607:4;27481:131;:::i;:::-;27473:139;;27200:419;;;:::o;27625:::-;27791:4;27829:2;27818:9;27814:18;27806:26;;27878:9;27872:4;27868:20;27864:1;27853:9;27849:17;27842:47;27906:131;28032:4;27906:131;:::i;:::-;27898:139;;27625:419;;;:::o;28050:::-;28216:4;28254:2;28243:9;28239:18;28231:26;;28303:9;28297:4;28293:20;28289:1;28278:9;28274:17;28267:47;28331:131;28457:4;28331:131;:::i;:::-;28323:139;;28050:419;;;:::o;28475:::-;28641:4;28679:2;28668:9;28664:18;28656:26;;28728:9;28722:4;28718:20;28714:1;28703:9;28699:17;28692:47;28756:131;28882:4;28756:131;:::i;:::-;28748:139;;28475:419;;;:::o;28900:::-;29066:4;29104:2;29093:9;29089:18;29081:26;;29153:9;29147:4;29143:20;29139:1;29128:9;29124:17;29117:47;29181:131;29307:4;29181:131;:::i;:::-;29173:139;;28900:419;;;:::o;29325:::-;29491:4;29529:2;29518:9;29514:18;29506:26;;29578:9;29572:4;29568:20;29564:1;29553:9;29549:17;29542:47;29606:131;29732:4;29606:131;:::i;:::-;29598:139;;29325:419;;;:::o;29750:::-;29916:4;29954:2;29943:9;29939:18;29931:26;;30003:9;29997:4;29993:20;29989:1;29978:9;29974:17;29967:47;30031:131;30157:4;30031:131;:::i;:::-;30023:139;;29750:419;;;:::o;30175:::-;30341:4;30379:2;30368:9;30364:18;30356:26;;30428:9;30422:4;30418:20;30414:1;30403:9;30399:17;30392:47;30456:131;30582:4;30456:131;:::i;:::-;30448:139;;30175:419;;;:::o;30600:::-;30766:4;30804:2;30793:9;30789:18;30781:26;;30853:9;30847:4;30843:20;30839:1;30828:9;30824:17;30817:47;30881:131;31007:4;30881:131;:::i;:::-;30873:139;;30600:419;;;:::o;31025:::-;31191:4;31229:2;31218:9;31214:18;31206:26;;31278:9;31272:4;31268:20;31264:1;31253:9;31249:17;31242:47;31306:131;31432:4;31306:131;:::i;:::-;31298:139;;31025:419;;;:::o;31450:::-;31616:4;31654:2;31643:9;31639:18;31631:26;;31703:9;31697:4;31693:20;31689:1;31678:9;31674:17;31667:47;31731:131;31857:4;31731:131;:::i;:::-;31723:139;;31450:419;;;:::o;31875:::-;32041:4;32079:2;32068:9;32064:18;32056:26;;32128:9;32122:4;32118:20;32114:1;32103:9;32099:17;32092:47;32156:131;32282:4;32156:131;:::i;:::-;32148:139;;31875:419;;;:::o;32300:::-;32466:4;32504:2;32493:9;32489:18;32481:26;;32553:9;32547:4;32543:20;32539:1;32528:9;32524:17;32517:47;32581:131;32707:4;32581:131;:::i;:::-;32573:139;;32300:419;;;:::o;32725:::-;32891:4;32929:2;32918:9;32914:18;32906:26;;32978:9;32972:4;32968:20;32964:1;32953:9;32949:17;32942:47;33006:131;33132:4;33006:131;:::i;:::-;32998:139;;32725:419;;;:::o;33150:222::-;33243:4;33281:2;33270:9;33266:18;33258:26;;33294:71;33362:1;33351:9;33347:17;33338:6;33294:71;:::i;:::-;33150:222;;;;:::o;33378:348::-;33507:4;33545:2;33534:9;33530:18;33522:26;;33558:71;33626:1;33615:9;33611:17;33602:6;33558:71;:::i;:::-;33639:80;33715:2;33704:9;33700:18;33691:6;33639:80;:::i;:::-;33378:348;;;;;:::o;33732:332::-;33853:4;33891:2;33880:9;33876:18;33868:26;;33904:71;33972:1;33961:9;33957:17;33948:6;33904:71;:::i;:::-;33985:72;34053:2;34042:9;34038:18;34029:6;33985:72;:::i;:::-;33732:332;;;;;:::o;34070:129::-;34104:6;34131:20;;:::i;:::-;34121:30;;34160:33;34188:4;34180:6;34160:33;:::i;:::-;34070:129;;;:::o;34205:75::-;34238:6;34271:2;34265:9;34255:19;;34205:75;:::o;34286:307::-;34347:4;34437:18;34429:6;34426:30;34423:56;;;34459:18;;:::i;:::-;34423:56;34497:29;34519:6;34497:29;:::i;:::-;34489:37;;34581:4;34575;34571:15;34563:23;;34286:307;;;:::o;34599:308::-;34661:4;34751:18;34743:6;34740:30;34737:56;;;34773:18;;:::i;:::-;34737:56;34811:29;34833:6;34811:29;:::i;:::-;34803:37;;34895:4;34889;34885:15;34877:23;;34599:308;;;:::o;34913:98::-;34964:6;34998:5;34992:12;34982:22;;34913:98;;;:::o;35017:99::-;35069:6;35103:5;35097:12;35087:22;;35017:99;;;:::o;35122:168::-;35205:11;35239:6;35234:3;35227:19;35279:4;35274:3;35270:14;35255:29;;35122:168;;;;:::o;35296:169::-;35380:11;35414:6;35409:3;35402:19;35454:4;35449:3;35445:14;35430:29;;35296:169;;;;:::o;35471:148::-;35573:11;35610:3;35595:18;;35471:148;;;;:::o;35625:305::-;35665:3;35684:20;35702:1;35684:20;:::i;:::-;35679:25;;35718:20;35736:1;35718:20;:::i;:::-;35713:25;;35872:1;35804:66;35800:74;35797:1;35794:81;35791:107;;;35878:18;;:::i;:::-;35791:107;35922:1;35919;35915:9;35908:16;;35625:305;;;;:::o;35936:185::-;35976:1;35993:20;36011:1;35993:20;:::i;:::-;35988:25;;36027:20;36045:1;36027:20;:::i;:::-;36022:25;;36066:1;36056:35;;36071:18;;:::i;:::-;36056:35;36113:1;36110;36106:9;36101:14;;35936:185;;;;:::o;36127:348::-;36167:7;36190:20;36208:1;36190:20;:::i;:::-;36185:25;;36224:20;36242:1;36224:20;:::i;:::-;36219:25;;36412:1;36344:66;36340:74;36337:1;36334:81;36329:1;36322:9;36315:17;36311:105;36308:131;;;36419:18;;:::i;:::-;36308:131;36467:1;36464;36460:9;36449:20;;36127:348;;;;:::o;36481:191::-;36521:4;36541:20;36559:1;36541:20;:::i;:::-;36536:25;;36575:20;36593:1;36575:20;:::i;:::-;36570:25;;36614:1;36611;36608:8;36605:34;;;36619:18;;:::i;:::-;36605:34;36664:1;36661;36657:9;36649:17;;36481:191;;;;:::o;36678:96::-;36715:7;36744:24;36762:5;36744:24;:::i;:::-;36733:35;;36678:96;;;:::o;36780:90::-;36814:7;36857:5;36850:13;36843:21;36832:32;;36780:90;;;:::o;36876:149::-;36912:7;36952:66;36945:5;36941:78;36930:89;;36876:149;;;:::o;37031:126::-;37068:7;37108:42;37101:5;37097:54;37086:65;;37031:126;;;:::o;37163:77::-;37200:7;37229:5;37218:16;;37163:77;;;:::o;37246:121::-;37304:9;37337:24;37355:5;37337:24;:::i;:::-;37324:37;;37246:121;;;:::o;37373:154::-;37457:6;37452:3;37447;37434:30;37519:1;37510:6;37505:3;37501:16;37494:27;37373:154;;;:::o;37533:307::-;37601:1;37611:113;37625:6;37622:1;37619:13;37611:113;;;37710:1;37705:3;37701:11;37695:18;37691:1;37686:3;37682:11;37675:39;37647:2;37644:1;37640:10;37635:15;;37611:113;;;37742:6;37739:1;37736:13;37733:101;;;37822:1;37813:6;37808:3;37804:16;37797:27;37733:101;37582:258;37533:307;;;:::o;37846:320::-;37890:6;37927:1;37921:4;37917:12;37907:22;;37974:1;37968:4;37964:12;37995:18;37985:81;;38051:4;38043:6;38039:17;38029:27;;37985:81;38113:2;38105:6;38102:14;38082:18;38079:38;38076:84;;;38132:18;;:::i;:::-;38076:84;37897:269;37846:320;;;:::o;38172:281::-;38255:27;38277:4;38255:27;:::i;:::-;38247:6;38243:40;38385:6;38373:10;38370:22;38349:18;38337:10;38334:34;38331:62;38328:88;;;38396:18;;:::i;:::-;38328:88;38436:10;38432:2;38425:22;38215:238;38172:281;;:::o;38459:233::-;38498:3;38521:24;38539:5;38521:24;:::i;:::-;38512:33;;38567:66;38560:5;38557:77;38554:103;;;38637:18;;:::i;:::-;38554:103;38684:1;38677:5;38673:13;38666:20;;38459:233;;;:::o;38698:176::-;38730:1;38747:20;38765:1;38747:20;:::i;:::-;38742:25;;38781:20;38799:1;38781:20;:::i;:::-;38776:25;;38820:1;38810:35;;38825:18;;:::i;:::-;38810:35;38866:1;38863;38859:9;38854:14;;38698:176;;;;:::o;38880:180::-;38928:77;38925:1;38918:88;39025:4;39022:1;39015:15;39049:4;39046:1;39039:15;39066:180;39114:77;39111:1;39104:88;39211:4;39208:1;39201:15;39235:4;39232:1;39225:15;39252:180;39300:77;39297:1;39290:88;39397:4;39394:1;39387:15;39421:4;39418:1;39411:15;39438:180;39486:77;39483:1;39476:88;39583:4;39580:1;39573:15;39607:4;39604:1;39597:15;39624:180;39672:77;39669:1;39662:88;39769:4;39766:1;39759:15;39793:4;39790:1;39783:15;39810:117;39919:1;39916;39909:12;39933:117;40042:1;40039;40032:12;40056:117;40165:1;40162;40155:12;40179:117;40288:1;40285;40278:12;40302:102;40343:6;40394:2;40390:7;40385:2;40378:5;40374:14;40370:28;40360:38;;40302:102;;;:::o;40410:158::-;40550:10;40546:1;40538:6;40534:14;40527:34;40410:158;:::o;40574:237::-;40714:34;40710:1;40702:6;40698:14;40691:58;40783:20;40778:2;40770:6;40766:15;40759:45;40574:237;:::o;40817:225::-;40957:34;40953:1;40945:6;40941:14;40934:58;41026:8;41021:2;41013:6;41009:15;41002:33;40817:225;:::o;41048:178::-;41188:30;41184:1;41176:6;41172:14;41165:54;41048:178;:::o;41232:167::-;41372:19;41368:1;41360:6;41356:14;41349:43;41232:167;:::o;41405:223::-;41545:34;41541:1;41533:6;41529:14;41522:58;41614:6;41609:2;41601:6;41597:15;41590:31;41405:223;:::o;41634:175::-;41774:27;41770:1;41762:6;41758:14;41751:51;41634:175;:::o;41815:178::-;41955:30;41951:1;41943:6;41939:14;41932:54;41815:178;:::o;41999:231::-;42139:34;42135:1;42127:6;42123:14;42116:58;42208:14;42203:2;42195:6;42191:15;42184:39;41999:231;:::o;42236:232::-;42376:34;42372:1;42364:6;42360:14;42353:58;42445:15;42440:2;42432:6;42428:15;42421:40;42236:232;:::o;42474:243::-;42614:34;42610:1;42602:6;42598:14;42591:58;42683:26;42678:2;42670:6;42666:15;42659:51;42474:243;:::o;42723:229::-;42863:34;42859:1;42851:6;42847:14;42840:58;42932:12;42927:2;42919:6;42915:15;42908:37;42723:229;:::o;42958:228::-;43098:34;43094:1;43086:6;43082:14;43075:58;43167:11;43162:2;43154:6;43150:15;43143:36;42958:228;:::o;43192:233::-;43332:34;43328:1;43320:6;43316:14;43309:58;43401:16;43396:2;43388:6;43384:15;43377:41;43192:233;:::o;43431:178::-;43571:30;43567:1;43559:6;43555:14;43548:54;43431:178;:::o;43615:182::-;43755:34;43751:1;43743:6;43739:14;43732:58;43615:182;:::o;43803:236::-;43943:34;43939:1;43931:6;43927:14;43920:58;44012:19;44007:2;43999:6;43995:15;43988:44;43803:236;:::o;44045:231::-;44185:34;44181:1;44173:6;44169:14;44162:58;44254:14;44249:2;44241:6;44237:15;44230:39;44045:231;:::o;44282:182::-;44422:34;44418:1;44410:6;44406:14;44399:58;44282:182;:::o;44470:228::-;44610:34;44606:1;44598:6;44594:14;44587:58;44679:11;44674:2;44666:6;44662:15;44655:36;44470:228;:::o;44704:234::-;44844:34;44840:1;44832:6;44828:14;44821:58;44913:17;44908:2;44900:6;44896:15;44889:42;44704:234;:::o;44944:220::-;45084:34;45080:1;45072:6;45068:14;45061:58;45153:3;45148:2;45140:6;45136:15;45129:28;44944:220;:::o;45170:236::-;45310:34;45306:1;45298:6;45294:14;45287:58;45379:19;45374:2;45366:6;45362:15;45355:44;45170:236;:::o;45412:235::-;45552:34;45548:1;45540:6;45536:14;45529:58;45621:18;45616:2;45608:6;45604:15;45597:43;45412:235;:::o;45653:161::-;45793:13;45789:1;45781:6;45777:14;45770:37;45653:161;:::o;45820:181::-;45960:33;45956:1;45948:6;45944:14;45937:57;45820:181;:::o;46007:161::-;46147:13;46143:1;46135:6;46131:14;46124:37;46007:161;:::o;46174:122::-;46247:24;46265:5;46247:24;:::i;:::-;46240:5;46237:35;46227:63;;46286:1;46283;46276:12;46227:63;46174:122;:::o;46302:116::-;46372:21;46387:5;46372:21;:::i;:::-;46365:5;46362:32;46352:60;;46408:1;46405;46398:12;46352:60;46302:116;:::o;46424:120::-;46496:23;46513:5;46496:23;:::i;:::-;46489:5;46486:34;46476:62;;46534:1;46531;46524:12;46476:62;46424:120;:::o;46550:122::-;46623:24;46641:5;46623:24;:::i;:::-;46616:5;46613:35;46603:63;;46662:1;46659;46652:12;46603:63;46550:122;:::o
Swarm Source
ipfs://42799c5356cdbcebb405404bff0f1a7d4d134d2cc5403c3aac411b4908746c11
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.