Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 14726146 | 788 days ago | IN | 0 ETH | 0.00272223 | ||||
Set Approval For... | 14561134 | 814 days ago | IN | 0 ETH | 0.00105221 | ||||
Set Approval For... | 14510088 | 822 days ago | IN | 0 ETH | 0.001419 | ||||
Transfer From | 14470852 | 828 days ago | IN | 0 ETH | 0.00637622 | ||||
Transfer From | 14470846 | 828 days ago | IN | 0 ETH | 0.00580019 | ||||
Transfer From | 14470842 | 828 days ago | IN | 0 ETH | 0.00637587 | ||||
Pause | 14470834 | 828 days ago | IN | 0 ETH | 0.00212715 | ||||
Set Base URI | 14470817 | 828 days ago | IN | 0 ETH | 0.00417445 | ||||
Set Base URI | 14467080 | 829 days ago | IN | 0 ETH | 0.00051468 | ||||
Set Base URI | 14466968 | 829 days ago | IN | 0 ETH | 0.00058986 | ||||
Reveal | 14466893 | 829 days ago | IN | 0 ETH | 0.00052587 | ||||
Mintg4g | 14466885 | 829 days ago | IN | 0 ETH | 0.00721648 | ||||
0x60806040 | 14466746 | 829 days ago | IN | Create: SINCE3000GENESIS | 0 ETH | 0.11503992 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SINCE3000GENESIS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-27 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC165.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be payed in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/common/ERC2981.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `tokenId` must be already minted. * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/ERC721Royalty.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC721 with the ERC2981 NFT Royalty Standard, a standardized way to retrieve royalty payment * information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC721Royalty is ERC2981, ERC721 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } /** * @dev See {ERC721-_burn}. This override additionally clears the royalty information for the token. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); _resetTokenRoyalty(tokenId); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/SINCE3000GENESIS.sol pragma solidity >=0.7.0 <0.9.0; contract SINCE3000GENESIS is ERC721Enumerable, Ownable, ERC2981 { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; string public contractUri; uint256 public cost = 0.3 ether; uint256 public maxSupply = 3000; uint256 public maxMintAmount = 5; uint256 public nftPerAddressLimit = 5; bool public paused = false; bool public revealed = false; bool public onlyAllowlisted = true; address[] public allowlistedAddresses; address payable beneficiary; address payable gownsForGood; mapping(address => uint256) public addressMintedBalance; constructor( address _beneficiary, address _gownsForGood, string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri, string memory _contractUri ) ERC721(_name, _symbol) { beneficiary = payable(_beneficiary); gownsForGood = payable(_gownsForGood); setBaseURI(_initBaseURI); setContractUri(_contractUri); setNotRevealedURI(_initNotRevealedUri); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyAllowlisted == true) { require(isAllowlisted(msg.sender), "user is not allowlisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); _setTokenRoyalty(supply + i, beneficiary, 1000); } } function mintg4g(uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(gownsForGood, supply + i); _setTokenRoyalty(supply + i, gownsForGood , 1000); } } function isAllowlisted(address _user) public view returns (bool) { for (uint i = 0; i < allowlistedAddresses.length; i++) { if (allowlistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setBeneficiary(address payable _beneficiary) public onlyOwner { beneficiary= payable(_beneficiary); } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setContractUri(string memory _contractUri) public onlyOwner { contractUri = _contractUri; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyAllowlisted(bool _state) public onlyOwner { onlyAllowlisted = _state; } function allowlistUsers(address[] calldata _users) public onlyOwner { delete allowlistedAddresses; allowlistedAddresses = _users; } function supportsInterface(bytes4 interfaceId) public view override(ERC721Enumerable,ERC2981) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function withdraw() public payable onlyOwner { (bool os, ) = payable(beneficiary).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"address","name":"_gownsForGood","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"string","name":"_contractUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"allowlistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowlistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintg4g","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractUri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyAllowlisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90805190602001906200005192919062000503565b50670429d069189e0000601155610bb8601255600560135560056014556000601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff021916908315150217905550348015620000cc57600080fd5b50604051620065e8380380620065e88339818101604052810190620000f2919062000648565b848481600090805190602001906200010c92919062000503565b5080600190805190602001906200012592919062000503565b505050620001486200013c6200020a60201b60201c565b6200021260201b60201c565b86601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001db83620002d860201b60201c565b620001ec816200038360201b60201c565b620001fd826200042e60201b60201c565b50505050505050620009eb565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002e86200020a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200030e620004d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000367576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035e90620007bd565b60405180910390fd5b80600d90805190602001906200037f92919062000503565b5050565b620003936200020a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003b9620004d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040990620007bd565b60405180910390fd5b80601090805190602001906200042a92919062000503565b5050565b6200043e6200020a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000464620004d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b490620007bd565b60405180910390fd5b80600f9080519060200190620004d592919062000503565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200051190620008b9565b90600052602060002090601f01602090048101928262000535576000855562000581565b82601f106200055057805160ff191683800117855562000581565b8280016001018555821562000581579182015b828111156200058057825182559160200191906001019062000563565b5b50905062000590919062000594565b5090565b5b80821115620005af57600081600090555060010162000595565b5090565b6000620005ca620005c48462000808565b620007df565b905082815260208101848484011115620005e957620005e862000988565b5b620005f684828562000883565b509392505050565b6000815190506200060f81620009d1565b92915050565b600082601f8301126200062d576200062c62000983565b5b81516200063f848260208601620005b3565b91505092915050565b600080600080600080600060e0888a0312156200066a576200066962000992565b5b60006200067a8a828b01620005fe565b97505060206200068d8a828b01620005fe565b965050604088015167ffffffffffffffff811115620006b157620006b06200098d565b5b620006bf8a828b0162000615565b955050606088015167ffffffffffffffff811115620006e357620006e26200098d565b5b620006f18a828b0162000615565b945050608088015167ffffffffffffffff8111156200071557620007146200098d565b5b620007238a828b0162000615565b93505060a088015167ffffffffffffffff8111156200074757620007466200098d565b5b620007558a828b0162000615565b92505060c088015167ffffffffffffffff8111156200077957620007786200098d565b5b620007878a828b0162000615565b91505092959891949750929550565b6000620007a56020836200083e565b9150620007b282620009a8565b602082019050919050565b60006020820190508181036000830152620007d88162000796565b9050919050565b6000620007eb620007fe565b9050620007f98282620008ef565b919050565b6000604051905090565b600067ffffffffffffffff82111562000826576200082562000954565b5b620008318262000997565b9050602081019050919050565b600082825260208201905092915050565b60006200085c8262000863565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620008a357808201518184015260208101905062000886565b83811115620008b3576000848401525b50505050565b60006002820490506001821680620008d257607f821691505b60208210811415620008e957620008e862000925565b5b50919050565b620008fa8262000997565b810181811067ffffffffffffffff821117156200091c576200091b62000954565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620009dc816200084f565b8114620009e857600080fd5b50565b615bed80620009fb6000396000f3fe6080604052600436106102c95760003560e01c80635b9e3ccf11610175578063a475b5dd116100dc578063ccb4807b11610095578063da3ef23f1161006f578063da3ef23f14610aeb578063e985e9c514610b14578063f2c4ce1e14610b51578063f2fde38b14610b7a576102c9565b8063ccb4807b14610a6e578063d0eb26b014610a97578063d5abeb0114610ac0576102c9565b8063a475b5dd14610970578063b88d4fde14610987578063ba7d2c76146109b0578063c0e24d5e146109db578063c668286214610a06578063c87b56dd14610a31576102c9565b8063715018a61161012e578063715018a6146108955780637f00c7a6146108ac5780638da5cb5b146108d557806395d89b4114610900578063a0712d681461092b578063a22cb46514610947576102c9565b80635b9e3ccf146107715780635c975abb1461079a5780636352211e146107c5578063674c02aa146108025780636c0360eb1461082d57806370a0823114610858576102c9565b80631a188d3d116102345780633ccfd60b116101ed57806344a0d68a116101c757806344a0d68a146106b75780634f6ccce7146106e0578063518302271461071d57806355f804b314610748576102c9565b80633ccfd60b1461064757806342842e0e14610651578063438b63001461067a576102c9565b80631a188d3d146105125780631c31f7101461054f578063239c70ae1461057857806323b872dd146105a35780632a55205a146105cc5780632f745c591461060a576102c9565b8063095ea7b311610286578063095ea7b31461040457806309f310da1461042d57806313faede61461045657806317dc10c41461048157806318160ddd146104aa57806318cae269146104d5576102c9565b806301ffc9a7146102ce57806302329a291461030b57806305a3b8091461033457806306fdde0314610371578063081812fc1461039c578063081c8c44146103d9575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190614400565b610ba3565b6040516103029190614bb0565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d91906143d3565b610c1d565b005b34801561034057600080fd5b5061035b60048036038101906103569190614196565b610cb6565b6040516103689190614bb0565b60405180910390f35b34801561037d57600080fd5b50610386610d65565b6040516103939190614bcb565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be91906144a3565b610df7565b6040516103d09190614afe565b60405180910390f35b3480156103e557600080fd5b506103ee610e7c565b6040516103fb9190614bcb565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190614346565b610f0a565b005b34801561043957600080fd5b50610454600480360381019061044f91906144a3565b611022565b005b34801561046257600080fd5b5061046b6111e6565b6040516104789190614f4d565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906143d3565b6111ec565b005b3480156104b657600080fd5b506104bf611285565b6040516104cc9190614f4d565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190614196565b611292565b6040516105099190614f4d565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906144a3565b6112aa565b6040516105469190614afe565b60405180910390f35b34801561055b57600080fd5b50610576600480360381019061057191906141c3565b6112e9565b005b34801561058457600080fd5b5061058d6113a9565b60405161059a9190614f4d565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190614230565b6113af565b005b3480156105d857600080fd5b506105f360048036038101906105ee91906144d0565b61140f565b604051610601929190614b65565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614346565b6115fa565b60405161063e9190614f4d565b60405180910390f35b61064f61169f565b005b34801561065d57600080fd5b5061067860048036038101906106739190614230565b6117b6565b005b34801561068657600080fd5b506106a1600480360381019061069c9190614196565b6117d6565b6040516106ae9190614b8e565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906144a3565b611884565b005b3480156106ec57600080fd5b50610707600480360381019061070291906144a3565b61190a565b6040516107149190614f4d565b60405180910390f35b34801561072957600080fd5b5061073261197b565b60405161073f9190614bb0565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a919061445a565b61198e565b005b34801561077d57600080fd5b5061079860048036038101906107939190614386565b611a24565b005b3480156107a657600080fd5b506107af611ac4565b6040516107bc9190614bb0565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906144a3565b611ad7565b6040516107f99190614afe565b60405180910390f35b34801561080e57600080fd5b50610817611b89565b6040516108249190614bb0565b60405180910390f35b34801561083957600080fd5b50610842611b9c565b60405161084f9190614bcb565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a9190614196565b611c2a565b60405161088c9190614f4d565b60405180910390f35b3480156108a157600080fd5b506108aa611ce2565b005b3480156108b857600080fd5b506108d360048036038101906108ce91906144a3565b611d6a565b005b3480156108e157600080fd5b506108ea611df0565b6040516108f79190614afe565b60405180910390f35b34801561090c57600080fd5b50610915611e1a565b6040516109229190614bcb565b60405180910390f35b610945600480360381019061094091906144a3565b611eac565b005b34801561095357600080fd5b5061096e60048036038101906109699190614306565b61222f565b005b34801561097c57600080fd5b506109856123b0565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614283565b612449565b005b3480156109bc57600080fd5b506109c56124ab565b6040516109d29190614f4d565b60405180910390f35b3480156109e757600080fd5b506109f06124b1565b6040516109fd9190614bcb565b60405180910390f35b348015610a1257600080fd5b50610a1b61253f565b604051610a289190614bcb565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a5391906144a3565b6125cd565b604051610a659190614bcb565b60405180910390f35b348015610a7a57600080fd5b50610a956004803603810190610a90919061445a565b612726565b005b348015610aa357600080fd5b50610abe6004803603810190610ab991906144a3565b6127bc565b005b348015610acc57600080fd5b50610ad5612842565b604051610ae29190614f4d565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d919061445a565b612848565b005b348015610b2057600080fd5b50610b3b6004803603810190610b3691906141f0565b6128de565b604051610b489190614bb0565b60405180910390f35b348015610b5d57600080fd5b50610b786004803603810190610b73919061445a565b612972565b005b348015610b8657600080fd5b50610ba16004803603810190610b9c9190614196565b612a08565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c165750610c1582612b00565b5b9050919050565b610c25612b7a565b73ffffffffffffffffffffffffffffffffffffffff16610c43611df0565b73ffffffffffffffffffffffffffffffffffffffff1614610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090614dcd565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600080600090505b601680549050811015610d5a578273ffffffffffffffffffffffffffffffffffffffff1660168281548110610cf657610cf5615401565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d47576001915050610d60565b8080610d52906152cb565b915050610cbe565b50600090505b919050565b606060008054610d7490615268565b80601f0160208091040260200160405190810160405280929190818152602001828054610da090615268565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b6000610e0282612b82565b610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614dad565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610e8990615268565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590615268565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b505050505081565b6000610f1582611ad7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614e4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fa5612b7a565b73ffffffffffffffffffffffffffffffffffffffff161480610fd45750610fd381610fce612b7a565b6128de565b5b611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90614ced565b60405180910390fd5b61101d8383612bee565b505050565b61102a612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611048611df0565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590614dcd565b60405180910390fd5b60006110a8611285565b905060125482826110b9919061508b565b11156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190614d4d565b60405180910390fd5b6000600190505b8281116111e157601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611158906152cb565b9190505550611194601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828461118f919061508b565b612ca7565b6111ce81836111a3919061508b565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8612cc5565b80806111d9906152cb565b915050611101565b505050565b60115481565b6111f4612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611212611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90614dcd565b60405180910390fd5b80601560026101000a81548160ff02191690831515021790555050565b6000600880549050905090565b60196020528060005260406000206000915090505481565b601681815481106112ba57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f1612b7a565b73ffffffffffffffffffffffffffffffffffffffff1661130f611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90614dcd565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6113c06113ba612b7a565b82612e6d565b6113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690614e8d565b60405180910390fd5b61140a838383612f4b565b505050565b6000806000600c60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156115a557600b6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006115af6131a7565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866115db9190615112565b6115e591906150e1565b90508160000151819350935050509250929050565b600061160583611c2a565b8210611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90614bed565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6116a7612b7a565b73ffffffffffffffffffffffffffffffffffffffff166116c5611df0565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614dcd565b60405180910390fd5b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161176390614ae9565b60006040518083038185875af1925050503d80600081146117a0576040519150601f19603f3d011682016040523d82523d6000602084013e6117a5565b606091505b50509050806117b357600080fd5b50565b6117d183838360405180602001604052806000815250612449565b505050565b606060006117e383611c2a565b905060008167ffffffffffffffff81111561180157611800615430565b5b60405190808252806020026020018201604052801561182f5781602001602082028036833780820191505090505b50905060005b828110156118795761184785826115fa565b82828151811061185a57611859615401565b5b6020026020010181815250508080611871906152cb565b915050611835565b508092505050919050565b61188c612b7a565b73ffffffffffffffffffffffffffffffffffffffff166118aa611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790614dcd565b60405180910390fd5b8060118190555050565b6000611914611285565b8210611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614ecd565b60405180910390fd5b6008828154811061196957611968615401565b5b90600052602060002001549050919050565b601560019054906101000a900460ff1681565b611996612b7a565b73ffffffffffffffffffffffffffffffffffffffff166119b4611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614dcd565b60405180910390fd5b80600d9080519060200190611a20929190613e7e565b5050565b611a2c612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611a4a611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614dcd565b60405180910390fd5b60166000611aae9190613f04565b818160169190611abf929190613f25565b505050565b601560009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790614d2d565b60405180910390fd5b80915050919050565b601560029054906101000a900460ff1681565b600d8054611ba990615268565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd590615268565b8015611c225780601f10611bf757610100808354040283529160200191611c22565b820191906000526020600020905b815481529060010190602001808311611c0557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290614d0d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611cea612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611d08611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590614dcd565b60405180910390fd5b611d6860006131b1565b565b611d72612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611d90611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90614dcd565b60405180910390fd5b8060138190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611e2990615268565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5590615268565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b5050505050905090565b601560009054906101000a900460ff1615611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614ded565b60405180910390fd5b6000611f06611285565b905060008211611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614f2d565b60405180910390fd5b601354821115611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8790614d6d565b60405180910390fd5b6012548282611f9f919061508b565b1115611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790614d4d565b60405180910390fd5b611fe8611df0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121655760011515601560029054906101000a900460ff16151514156121145761203f33610cb6565b61207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590614f0d565b60405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060145483826120d1919061508b565b1115612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614c6d565b60405180910390fd5b505b816011546121229190615112565b341015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614e6d565b60405180910390fd5b5b6000600190505b82811161222a57601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906121c3906152cb565b91905055506121dd3382846121d8919061508b565b612ca7565b61221781836121ec919061508b565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8612cc5565b8080612222906152cb565b91505061216c565b505050565b612237612b7a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90614cad565b60405180910390fd5b80600560006122b2612b7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661235f612b7a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123a49190614bb0565b60405180910390a35050565b6123b8612b7a565b73ffffffffffffffffffffffffffffffffffffffff166123d6611df0565b73ffffffffffffffffffffffffffffffffffffffff161461242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614dcd565b60405180910390fd5b6001601560016101000a81548160ff021916908315150217905550565b61245a612454612b7a565b83612e6d565b612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614e8d565b60405180910390fd5b6124a584848484613277565b50505050565b60145481565b601080546124be90615268565b80601f01602080910402602001604051908101604052809291908181526020018280546124ea90615268565b80156125375780601f1061250c57610100808354040283529160200191612537565b820191906000526020600020905b81548152906001019060200180831161251a57829003601f168201915b505050505081565b600e805461254c90615268565b80601f016020809104026020016040519081016040528092919081815260200182805461257890615268565b80156125c55780601f1061259a576101008083540402835291602001916125c5565b820191906000526020600020905b8154815290600101906020018083116125a857829003601f168201915b505050505081565b60606125d882612b82565b612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90614e2d565b60405180910390fd5b60001515601560019054906101000a900460ff16151514156126c557600f805461264090615268565b80601f016020809104026020016040519081016040528092919081815260200182805461266c90615268565b80156126b95780601f1061268e576101008083540402835291602001916126b9565b820191906000526020600020905b81548152906001019060200180831161269c57829003601f168201915b50505050509050612721565b60006126cf6132d3565b905060008151116126ef576040518060200160405280600081525061271d565b806126f984613365565b600e60405160200161270d93929190614ab8565b6040516020818303038152906040525b9150505b919050565b61272e612b7a565b73ffffffffffffffffffffffffffffffffffffffff1661274c611df0565b73ffffffffffffffffffffffffffffffffffffffff16146127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614dcd565b60405180910390fd5b80601090805190602001906127b8929190613e7e565b5050565b6127c4612b7a565b73ffffffffffffffffffffffffffffffffffffffff166127e2611df0565b73ffffffffffffffffffffffffffffffffffffffff1614612838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282f90614dcd565b60405180910390fd5b8060148190555050565b60125481565b612850612b7a565b73ffffffffffffffffffffffffffffffffffffffff1661286e611df0565b73ffffffffffffffffffffffffffffffffffffffff16146128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614dcd565b60405180910390fd5b80600e90805190602001906128da929190613e7e565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61297a612b7a565b73ffffffffffffffffffffffffffffffffffffffff16612998611df0565b73ffffffffffffffffffffffffffffffffffffffff16146129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590614dcd565b60405180910390fd5b80600f9080519060200190612a04929190613e7e565b5050565b612a10612b7a565b73ffffffffffffffffffffffffffffffffffffffff16612a2e611df0565b73ffffffffffffffffffffffffffffffffffffffff1614612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b90614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614c2d565b60405180910390fd5b612afd816131b1565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b735750612b72826134c6565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c6183611ad7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612cc1828260405180602001604052806000815250613540565b5050565b612ccd6131a7565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2290614eed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9290614ead565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600c600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000612e7882612b82565b612eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eae90614ccd565b60405180910390fd5b6000612ec283611ad7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f3157508373ffffffffffffffffffffffffffffffffffffffff16612f1984610df7565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f425750612f4181856128de565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f6b82611ad7565b73ffffffffffffffffffffffffffffffffffffffff1614612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb890614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302890614c8d565b60405180910390fd5b61303c83838361359b565b613047600082612bee565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613097919061516c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ee919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612710905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613282848484612f4b565b61328e848484846136af565b6132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c490614c0d565b60405180910390fd5b50505050565b6060600d80546132e290615268565b80601f016020809104026020016040519081016040528092919081815260200182805461330e90615268565b801561335b5780601f106133305761010080835404028352916020019161335b565b820191906000526020600020905b81548152906001019060200180831161333e57829003601f168201915b5050505050905090565b606060008214156133ad576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134c1565b600082905060005b600082146133df5780806133c8906152cb565b915050600a826133d891906150e1565b91506133b5565b60008167ffffffffffffffff8111156133fb576133fa615430565b5b6040519080825280601f01601f19166020018201604052801561342d5781602001600182028036833780820191505090505b5090505b600085146134ba57600182613446919061516c565b9150600a856134559190615314565b6030613461919061508b565b60f81b81838151811061347757613476615401565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134b391906150e1565b9450613431565b8093505050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613539575061353882613846565b5b9050919050565b61354a8383613928565b61355760008484846136af565b613596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358d90614c0d565b60405180910390fd5b505050565b6135a6838383613af6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135e9576135e481613afb565b613628565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613627576136268382613b44565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561366b5761366681613cb1565b6136aa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136a9576136a88282613d82565b5b5b505050565b60006136d08473ffffffffffffffffffffffffffffffffffffffff16613e01565b15613839578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136f9612b7a565b8786866040518563ffffffff1660e01b815260040161371b9493929190614b19565b602060405180830381600087803b15801561373557600080fd5b505af192505050801561376657506040513d601f19601f82011682018060405250810190613763919061442d565b60015b6137e9573d8060008114613796576040519150601f19603f3d011682016040523d82523d6000602084013e61379b565b606091505b506000815114156137e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d890614c0d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061383e565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061391157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613921575061392082613e14565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398f90614d8d565b60405180910390fd5b6139a181612b82565b156139e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d890614c4d565b60405180910390fd5b6139ed6000838361359b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a3d919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b5184611c2a565b613b5b919061516c565b9050600060076000848152602001908152602001600020549050818114613c40576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613cc5919061516c565b9050600060096000848152602001908152602001600020549050600060088381548110613cf557613cf4615401565b5b906000526020600020015490508060088381548110613d1757613d16615401565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613d6657613d656153d2565b5b6001900381819060005260206000200160009055905550505050565b6000613d8d83611c2a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054613e8a90615268565b90600052602060002090601f016020900481019282613eac5760008555613ef3565b82601f10613ec557805160ff1916838001178555613ef3565b82800160010185558215613ef3579182015b82811115613ef2578251825591602001919060010190613ed7565b5b509050613f009190613fc5565b5090565b5080546000825590600052602060002090810190613f229190613fc5565b50565b828054828255906000526020600020908101928215613fb4579160200282015b82811115613fb357823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613f45565b5b509050613fc19190613fc5565b5090565b5b80821115613fde576000816000905550600101613fc6565b5090565b6000613ff5613ff084614f8d565b614f68565b9050828152602081018484840111156140115761401061546e565b5b61401c848285615226565b509392505050565b600061403761403284614fbe565b614f68565b9050828152602081018484840111156140535761405261546e565b5b61405e848285615226565b509392505050565b60008135905061407581615b44565b92915050565b60008135905061408a81615b5b565b92915050565b60008083601f8401126140a6576140a5615464565b5b8235905067ffffffffffffffff8111156140c3576140c261545f565b5b6020830191508360208202830111156140df576140de615469565b5b9250929050565b6000813590506140f581615b72565b92915050565b60008135905061410a81615b89565b92915050565b60008151905061411f81615b89565b92915050565b600082601f83011261413a57614139615464565b5b813561414a848260208601613fe2565b91505092915050565b600082601f83011261416857614167615464565b5b8135614178848260208601614024565b91505092915050565b60008135905061419081615ba0565b92915050565b6000602082840312156141ac576141ab615478565b5b60006141ba84828501614066565b91505092915050565b6000602082840312156141d9576141d8615478565b5b60006141e78482850161407b565b91505092915050565b6000806040838503121561420757614206615478565b5b600061421585828601614066565b925050602061422685828601614066565b9150509250929050565b60008060006060848603121561424957614248615478565b5b600061425786828701614066565b935050602061426886828701614066565b925050604061427986828701614181565b9150509250925092565b6000806000806080858703121561429d5761429c615478565b5b60006142ab87828801614066565b94505060206142bc87828801614066565b93505060406142cd87828801614181565b925050606085013567ffffffffffffffff8111156142ee576142ed615473565b5b6142fa87828801614125565b91505092959194509250565b6000806040838503121561431d5761431c615478565b5b600061432b85828601614066565b925050602061433c858286016140e6565b9150509250929050565b6000806040838503121561435d5761435c615478565b5b600061436b85828601614066565b925050602061437c85828601614181565b9150509250929050565b6000806020838503121561439d5761439c615478565b5b600083013567ffffffffffffffff8111156143bb576143ba615473565b5b6143c785828601614090565b92509250509250929050565b6000602082840312156143e9576143e8615478565b5b60006143f7848285016140e6565b91505092915050565b60006020828403121561441657614415615478565b5b6000614424848285016140fb565b91505092915050565b60006020828403121561444357614442615478565b5b600061445184828501614110565b91505092915050565b6000602082840312156144705761446f615478565b5b600082013567ffffffffffffffff81111561448e5761448d615473565b5b61449a84828501614153565b91505092915050565b6000602082840312156144b9576144b8615478565b5b60006144c784828501614181565b91505092915050565b600080604083850312156144e7576144e6615478565b5b60006144f585828601614181565b925050602061450685828601614181565b9150509250929050565b600061451c8383614a9a565b60208301905092915050565b614531816151a0565b82525050565b600061454282615014565b61454c8185615042565b935061455783614fef565b8060005b8381101561458857815161456f8882614510565b975061457a83615035565b92505060018101905061455b565b5085935050505092915050565b61459e816151c4565b82525050565b60006145af8261501f565b6145b98185615053565b93506145c9818560208601615235565b6145d28161547d565b840191505092915050565b60006145e88261502a565b6145f2818561506f565b9350614602818560208601615235565b61460b8161547d565b840191505092915050565b60006146218261502a565b61462b8185615080565b935061463b818560208601615235565b80840191505092915050565b6000815461465481615268565b61465e8186615080565b94506001821660008114614679576001811461468a576146bd565b60ff198316865281860193506146bd565b61469385614fff565b60005b838110156146b557815481890152600182019150602081019050614696565b838801955050505b50505092915050565b60006146d3602b8361506f565b91506146de8261548e565b604082019050919050565b60006146f660328361506f565b9150614701826154dd565b604082019050919050565b600061471960268361506f565b91506147248261552c565b604082019050919050565b600061473c601c8361506f565b91506147478261557b565b602082019050919050565b600061475f601c8361506f565b915061476a826155a4565b602082019050919050565b600061478260248361506f565b915061478d826155cd565b604082019050919050565b60006147a560198361506f565b91506147b08261561c565b602082019050919050565b60006147c8602c8361506f565b91506147d382615645565b604082019050919050565b60006147eb60388361506f565b91506147f682615694565b604082019050919050565b600061480e602a8361506f565b9150614819826156e3565b604082019050919050565b600061483160298361506f565b915061483c82615732565b604082019050919050565b600061485460168361506f565b915061485f82615781565b602082019050919050565b600061487760248361506f565b9150614882826157aa565b604082019050919050565b600061489a60208361506f565b91506148a5826157f9565b602082019050919050565b60006148bd602c8361506f565b91506148c882615822565b604082019050919050565b60006148e060208361506f565b91506148eb82615871565b602082019050919050565b600061490360168361506f565b915061490e8261589a565b602082019050919050565b600061492660298361506f565b9150614931826158c3565b604082019050919050565b6000614949602f8361506f565b915061495482615912565b604082019050919050565b600061496c60218361506f565b915061497782615961565b604082019050919050565b600061498f600083615064565b915061499a826159b0565b600082019050919050565b60006149b260128361506f565b91506149bd826159b3565b602082019050919050565b60006149d560318361506f565b91506149e0826159dc565b604082019050919050565b60006149f8601b8361506f565b9150614a0382615a2b565b602082019050919050565b6000614a1b602c8361506f565b9150614a2682615a54565b604082019050919050565b6000614a3e602a8361506f565b9150614a4982615aa3565b604082019050919050565b6000614a6160178361506f565b9150614a6c82615af2565b602082019050919050565b6000614a84601b8361506f565b9150614a8f82615b1b565b602082019050919050565b614aa38161521c565b82525050565b614ab28161521c565b82525050565b6000614ac48286614616565b9150614ad08285614616565b9150614adc8284614647565b9150819050949350505050565b6000614af482614982565b9150819050919050565b6000602082019050614b136000830184614528565b92915050565b6000608082019050614b2e6000830187614528565b614b3b6020830186614528565b614b486040830185614aa9565b8181036060830152614b5a81846145a4565b905095945050505050565b6000604082019050614b7a6000830185614528565b614b876020830184614aa9565b9392505050565b60006020820190508181036000830152614ba88184614537565b905092915050565b6000602082019050614bc56000830184614595565b92915050565b60006020820190508181036000830152614be581846145dd565b905092915050565b60006020820190508181036000830152614c06816146c6565b9050919050565b60006020820190508181036000830152614c26816146e9565b9050919050565b60006020820190508181036000830152614c468161470c565b9050919050565b60006020820190508181036000830152614c668161472f565b9050919050565b60006020820190508181036000830152614c8681614752565b9050919050565b60006020820190508181036000830152614ca681614775565b9050919050565b60006020820190508181036000830152614cc681614798565b9050919050565b60006020820190508181036000830152614ce6816147bb565b9050919050565b60006020820190508181036000830152614d06816147de565b9050919050565b60006020820190508181036000830152614d2681614801565b9050919050565b60006020820190508181036000830152614d4681614824565b9050919050565b60006020820190508181036000830152614d6681614847565b9050919050565b60006020820190508181036000830152614d868161486a565b9050919050565b60006020820190508181036000830152614da68161488d565b9050919050565b60006020820190508181036000830152614dc6816148b0565b9050919050565b60006020820190508181036000830152614de6816148d3565b9050919050565b60006020820190508181036000830152614e06816148f6565b9050919050565b60006020820190508181036000830152614e2681614919565b9050919050565b60006020820190508181036000830152614e468161493c565b9050919050565b60006020820190508181036000830152614e668161495f565b9050919050565b60006020820190508181036000830152614e86816149a5565b9050919050565b60006020820190508181036000830152614ea6816149c8565b9050919050565b60006020820190508181036000830152614ec6816149eb565b9050919050565b60006020820190508181036000830152614ee681614a0e565b9050919050565b60006020820190508181036000830152614f0681614a31565b9050919050565b60006020820190508181036000830152614f2681614a54565b9050919050565b60006020820190508181036000830152614f4681614a77565b9050919050565b6000602082019050614f626000830184614aa9565b92915050565b6000614f72614f83565b9050614f7e828261529a565b919050565b6000604051905090565b600067ffffffffffffffff821115614fa857614fa7615430565b5b614fb18261547d565b9050602081019050919050565b600067ffffffffffffffff821115614fd957614fd8615430565b5b614fe28261547d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006150968261521c565b91506150a18361521c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150d6576150d5615345565b5b828201905092915050565b60006150ec8261521c565b91506150f78361521c565b92508261510757615106615374565b5b828204905092915050565b600061511d8261521c565b91506151288361521c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561516157615160615345565b5b828202905092915050565b60006151778261521c565b91506151828361521c565b92508282101561519557615194615345565b5b828203905092915050565b60006151ab826151fc565b9050919050565b60006151bd826151fc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615253578082015181840152602081019050615238565b83811115615262576000848401525b50505050565b6000600282049050600182168061528057607f821691505b60208210811415615294576152936153a3565b5b50919050565b6152a38261547d565b810181811067ffffffffffffffff821117156152c2576152c1615430565b5b80604052505050565b60006152d68261521c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561530957615308615345565b5b600182019050919050565b600061531f8261521c565b915061532a8361521c565b92508261533a57615339615374565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f7420616c6c6f776c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615b4d816151a0565b8114615b5857600080fd5b50565b615b64816151b2565b8114615b6f57600080fd5b50565b615b7b816151c4565b8114615b8657600080fd5b50565b615b92816151d0565b8114615b9d57600080fd5b50565b615ba98161521c565b8114615bb457600080fd5b5056fea264697066735822122046c5ae76b059380476da73b2ffde4f0aa7b759d27ae82566288761335afdd5b464736f6c63430008070033000000000000000000000000dcb77cfa5aaa44c7b71dace94a79271c435f1b73000000000000000000000000b933017e0f0ba4fc6104a3757439594fd954308e00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000001053494e43453330303047454e4553495300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353334700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558484146646a51345a58704e7a6a46775400000000000000000000000000000000000000000000000000000000000000000000000000000000000042697066733a2f2f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558484146646a51345a58704e7a6a4677542f5f68696464656e2e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558484146646a51345a58704e7a6a4677542f5f636f6e74726163745552492e6a736f6e000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102c95760003560e01c80635b9e3ccf11610175578063a475b5dd116100dc578063ccb4807b11610095578063da3ef23f1161006f578063da3ef23f14610aeb578063e985e9c514610b14578063f2c4ce1e14610b51578063f2fde38b14610b7a576102c9565b8063ccb4807b14610a6e578063d0eb26b014610a97578063d5abeb0114610ac0576102c9565b8063a475b5dd14610970578063b88d4fde14610987578063ba7d2c76146109b0578063c0e24d5e146109db578063c668286214610a06578063c87b56dd14610a31576102c9565b8063715018a61161012e578063715018a6146108955780637f00c7a6146108ac5780638da5cb5b146108d557806395d89b4114610900578063a0712d681461092b578063a22cb46514610947576102c9565b80635b9e3ccf146107715780635c975abb1461079a5780636352211e146107c5578063674c02aa146108025780636c0360eb1461082d57806370a0823114610858576102c9565b80631a188d3d116102345780633ccfd60b116101ed57806344a0d68a116101c757806344a0d68a146106b75780634f6ccce7146106e0578063518302271461071d57806355f804b314610748576102c9565b80633ccfd60b1461064757806342842e0e14610651578063438b63001461067a576102c9565b80631a188d3d146105125780631c31f7101461054f578063239c70ae1461057857806323b872dd146105a35780632a55205a146105cc5780632f745c591461060a576102c9565b8063095ea7b311610286578063095ea7b31461040457806309f310da1461042d57806313faede61461045657806317dc10c41461048157806318160ddd146104aa57806318cae269146104d5576102c9565b806301ffc9a7146102ce57806302329a291461030b57806305a3b8091461033457806306fdde0314610371578063081812fc1461039c578063081c8c44146103d9575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190614400565b610ba3565b6040516103029190614bb0565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d91906143d3565b610c1d565b005b34801561034057600080fd5b5061035b60048036038101906103569190614196565b610cb6565b6040516103689190614bb0565b60405180910390f35b34801561037d57600080fd5b50610386610d65565b6040516103939190614bcb565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be91906144a3565b610df7565b6040516103d09190614afe565b60405180910390f35b3480156103e557600080fd5b506103ee610e7c565b6040516103fb9190614bcb565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190614346565b610f0a565b005b34801561043957600080fd5b50610454600480360381019061044f91906144a3565b611022565b005b34801561046257600080fd5b5061046b6111e6565b6040516104789190614f4d565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906143d3565b6111ec565b005b3480156104b657600080fd5b506104bf611285565b6040516104cc9190614f4d565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190614196565b611292565b6040516105099190614f4d565b60405180910390f35b34801561051e57600080fd5b50610539600480360381019061053491906144a3565b6112aa565b6040516105469190614afe565b60405180910390f35b34801561055b57600080fd5b50610576600480360381019061057191906141c3565b6112e9565b005b34801561058457600080fd5b5061058d6113a9565b60405161059a9190614f4d565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190614230565b6113af565b005b3480156105d857600080fd5b506105f360048036038101906105ee91906144d0565b61140f565b604051610601929190614b65565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190614346565b6115fa565b60405161063e9190614f4d565b60405180910390f35b61064f61169f565b005b34801561065d57600080fd5b5061067860048036038101906106739190614230565b6117b6565b005b34801561068657600080fd5b506106a1600480360381019061069c9190614196565b6117d6565b6040516106ae9190614b8e565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906144a3565b611884565b005b3480156106ec57600080fd5b50610707600480360381019061070291906144a3565b61190a565b6040516107149190614f4d565b60405180910390f35b34801561072957600080fd5b5061073261197b565b60405161073f9190614bb0565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a919061445a565b61198e565b005b34801561077d57600080fd5b5061079860048036038101906107939190614386565b611a24565b005b3480156107a657600080fd5b506107af611ac4565b6040516107bc9190614bb0565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e791906144a3565b611ad7565b6040516107f99190614afe565b60405180910390f35b34801561080e57600080fd5b50610817611b89565b6040516108249190614bb0565b60405180910390f35b34801561083957600080fd5b50610842611b9c565b60405161084f9190614bcb565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a9190614196565b611c2a565b60405161088c9190614f4d565b60405180910390f35b3480156108a157600080fd5b506108aa611ce2565b005b3480156108b857600080fd5b506108d360048036038101906108ce91906144a3565b611d6a565b005b3480156108e157600080fd5b506108ea611df0565b6040516108f79190614afe565b60405180910390f35b34801561090c57600080fd5b50610915611e1a565b6040516109229190614bcb565b60405180910390f35b610945600480360381019061094091906144a3565b611eac565b005b34801561095357600080fd5b5061096e60048036038101906109699190614306565b61222f565b005b34801561097c57600080fd5b506109856123b0565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614283565b612449565b005b3480156109bc57600080fd5b506109c56124ab565b6040516109d29190614f4d565b60405180910390f35b3480156109e757600080fd5b506109f06124b1565b6040516109fd9190614bcb565b60405180910390f35b348015610a1257600080fd5b50610a1b61253f565b604051610a289190614bcb565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a5391906144a3565b6125cd565b604051610a659190614bcb565b60405180910390f35b348015610a7a57600080fd5b50610a956004803603810190610a90919061445a565b612726565b005b348015610aa357600080fd5b50610abe6004803603810190610ab991906144a3565b6127bc565b005b348015610acc57600080fd5b50610ad5612842565b604051610ae29190614f4d565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d919061445a565b612848565b005b348015610b2057600080fd5b50610b3b6004803603810190610b3691906141f0565b6128de565b604051610b489190614bb0565b60405180910390f35b348015610b5d57600080fd5b50610b786004803603810190610b73919061445a565b612972565b005b348015610b8657600080fd5b50610ba16004803603810190610b9c9190614196565b612a08565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c165750610c1582612b00565b5b9050919050565b610c25612b7a565b73ffffffffffffffffffffffffffffffffffffffff16610c43611df0565b73ffffffffffffffffffffffffffffffffffffffff1614610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090614dcd565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600080600090505b601680549050811015610d5a578273ffffffffffffffffffffffffffffffffffffffff1660168281548110610cf657610cf5615401565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d47576001915050610d60565b8080610d52906152cb565b915050610cbe565b50600090505b919050565b606060008054610d7490615268565b80601f0160208091040260200160405190810160405280929190818152602001828054610da090615268565b8015610ded5780601f10610dc257610100808354040283529160200191610ded565b820191906000526020600020905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b6000610e0282612b82565b610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890614dad565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600f8054610e8990615268565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590615268565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b505050505081565b6000610f1582611ad7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614e4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fa5612b7a565b73ffffffffffffffffffffffffffffffffffffffff161480610fd45750610fd381610fce612b7a565b6128de565b5b611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90614ced565b60405180910390fd5b61101d8383612bee565b505050565b61102a612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611048611df0565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590614dcd565b60405180910390fd5b60006110a8611285565b905060125482826110b9919061508b565b11156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190614d4d565b60405180910390fd5b6000600190505b8281116111e157601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611158906152cb565b9190505550611194601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828461118f919061508b565b612ca7565b6111ce81836111a3919061508b565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8612cc5565b80806111d9906152cb565b915050611101565b505050565b60115481565b6111f4612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611212611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90614dcd565b60405180910390fd5b80601560026101000a81548160ff02191690831515021790555050565b6000600880549050905090565b60196020528060005260406000206000915090505481565b601681815481106112ba57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f1612b7a565b73ffffffffffffffffffffffffffffffffffffffff1661130f611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90614dcd565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6113c06113ba612b7a565b82612e6d565b6113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690614e8d565b60405180910390fd5b61140a838383612f4b565b505050565b6000806000600c60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156115a557600b6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006115af6131a7565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866115db9190615112565b6115e591906150e1565b90508160000151819350935050509250929050565b600061160583611c2a565b8210611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90614bed565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6116a7612b7a565b73ffffffffffffffffffffffffffffffffffffffff166116c5611df0565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614dcd565b60405180910390fd5b6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161176390614ae9565b60006040518083038185875af1925050503d80600081146117a0576040519150601f19603f3d011682016040523d82523d6000602084013e6117a5565b606091505b50509050806117b357600080fd5b50565b6117d183838360405180602001604052806000815250612449565b505050565b606060006117e383611c2a565b905060008167ffffffffffffffff81111561180157611800615430565b5b60405190808252806020026020018201604052801561182f5781602001602082028036833780820191505090505b50905060005b828110156118795761184785826115fa565b82828151811061185a57611859615401565b5b6020026020010181815250508080611871906152cb565b915050611835565b508092505050919050565b61188c612b7a565b73ffffffffffffffffffffffffffffffffffffffff166118aa611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790614dcd565b60405180910390fd5b8060118190555050565b6000611914611285565b8210611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90614ecd565b60405180910390fd5b6008828154811061196957611968615401565b5b90600052602060002001549050919050565b601560019054906101000a900460ff1681565b611996612b7a565b73ffffffffffffffffffffffffffffffffffffffff166119b4611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614dcd565b60405180910390fd5b80600d9080519060200190611a20929190613e7e565b5050565b611a2c612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611a4a611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9790614dcd565b60405180910390fd5b60166000611aae9190613f04565b818160169190611abf929190613f25565b505050565b601560009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790614d2d565b60405180910390fd5b80915050919050565b601560029054906101000a900460ff1681565b600d8054611ba990615268565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd590615268565b8015611c225780601f10611bf757610100808354040283529160200191611c22565b820191906000526020600020905b815481529060010190602001808311611c0557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290614d0d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611cea612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611d08611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590614dcd565b60405180910390fd5b611d6860006131b1565b565b611d72612b7a565b73ffffffffffffffffffffffffffffffffffffffff16611d90611df0565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90614dcd565b60405180910390fd5b8060138190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611e2990615268565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5590615268565b8015611ea25780601f10611e7757610100808354040283529160200191611ea2565b820191906000526020600020905b815481529060010190602001808311611e8557829003601f168201915b5050505050905090565b601560009054906101000a900460ff1615611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614ded565b60405180910390fd5b6000611f06611285565b905060008211611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614f2d565b60405180910390fd5b601354821115611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8790614d6d565b60405180910390fd5b6012548282611f9f919061508b565b1115611fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd790614d4d565b60405180910390fd5b611fe8611df0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121655760011515601560029054906101000a900460ff16151514156121145761203f33610cb6565b61207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590614f0d565b60405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060145483826120d1919061508b565b1115612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614c6d565b60405180910390fd5b505b816011546121229190615112565b341015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614e6d565b60405180910390fd5b5b6000600190505b82811161222a57601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906121c3906152cb565b91905055506121dd3382846121d8919061508b565b612ca7565b61221781836121ec919061508b565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103e8612cc5565b8080612222906152cb565b91505061216c565b505050565b612237612b7a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90614cad565b60405180910390fd5b80600560006122b2612b7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661235f612b7a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123a49190614bb0565b60405180910390a35050565b6123b8612b7a565b73ffffffffffffffffffffffffffffffffffffffff166123d6611df0565b73ffffffffffffffffffffffffffffffffffffffff161461242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614dcd565b60405180910390fd5b6001601560016101000a81548160ff021916908315150217905550565b61245a612454612b7a565b83612e6d565b612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614e8d565b60405180910390fd5b6124a584848484613277565b50505050565b60145481565b601080546124be90615268565b80601f01602080910402602001604051908101604052809291908181526020018280546124ea90615268565b80156125375780601f1061250c57610100808354040283529160200191612537565b820191906000526020600020905b81548152906001019060200180831161251a57829003601f168201915b505050505081565b600e805461254c90615268565b80601f016020809104026020016040519081016040528092919081815260200182805461257890615268565b80156125c55780601f1061259a576101008083540402835291602001916125c5565b820191906000526020600020905b8154815290600101906020018083116125a857829003601f168201915b505050505081565b60606125d882612b82565b612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90614e2d565b60405180910390fd5b60001515601560019054906101000a900460ff16151514156126c557600f805461264090615268565b80601f016020809104026020016040519081016040528092919081815260200182805461266c90615268565b80156126b95780601f1061268e576101008083540402835291602001916126b9565b820191906000526020600020905b81548152906001019060200180831161269c57829003601f168201915b50505050509050612721565b60006126cf6132d3565b905060008151116126ef576040518060200160405280600081525061271d565b806126f984613365565b600e60405160200161270d93929190614ab8565b6040516020818303038152906040525b9150505b919050565b61272e612b7a565b73ffffffffffffffffffffffffffffffffffffffff1661274c611df0565b73ffffffffffffffffffffffffffffffffffffffff16146127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614dcd565b60405180910390fd5b80601090805190602001906127b8929190613e7e565b5050565b6127c4612b7a565b73ffffffffffffffffffffffffffffffffffffffff166127e2611df0565b73ffffffffffffffffffffffffffffffffffffffff1614612838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282f90614dcd565b60405180910390fd5b8060148190555050565b60125481565b612850612b7a565b73ffffffffffffffffffffffffffffffffffffffff1661286e611df0565b73ffffffffffffffffffffffffffffffffffffffff16146128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90614dcd565b60405180910390fd5b80600e90805190602001906128da929190613e7e565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61297a612b7a565b73ffffffffffffffffffffffffffffffffffffffff16612998611df0565b73ffffffffffffffffffffffffffffffffffffffff16146129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590614dcd565b60405180910390fd5b80600f9080519060200190612a04929190613e7e565b5050565b612a10612b7a565b73ffffffffffffffffffffffffffffffffffffffff16612a2e611df0565b73ffffffffffffffffffffffffffffffffffffffff1614612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b90614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614c2d565b60405180910390fd5b612afd816131b1565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b735750612b72826134c6565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c6183611ad7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612cc1828260405180602001604052806000815250613540565b5050565b612ccd6131a7565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2290614eed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9290614ead565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600c600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000612e7882612b82565b612eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eae90614ccd565b60405180910390fd5b6000612ec283611ad7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612f3157508373ffffffffffffffffffffffffffffffffffffffff16612f1984610df7565b73ffffffffffffffffffffffffffffffffffffffff16145b80612f425750612f4181856128de565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f6b82611ad7565b73ffffffffffffffffffffffffffffffffffffffff1614612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb890614e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302890614c8d565b60405180910390fd5b61303c83838361359b565b613047600082612bee565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613097919061516c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130ee919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612710905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613282848484612f4b565b61328e848484846136af565b6132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c490614c0d565b60405180910390fd5b50505050565b6060600d80546132e290615268565b80601f016020809104026020016040519081016040528092919081815260200182805461330e90615268565b801561335b5780601f106133305761010080835404028352916020019161335b565b820191906000526020600020905b81548152906001019060200180831161333e57829003601f168201915b5050505050905090565b606060008214156133ad576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134c1565b600082905060005b600082146133df5780806133c8906152cb565b915050600a826133d891906150e1565b91506133b5565b60008167ffffffffffffffff8111156133fb576133fa615430565b5b6040519080825280601f01601f19166020018201604052801561342d5781602001600182028036833780820191505090505b5090505b600085146134ba57600182613446919061516c565b9150600a856134559190615314565b6030613461919061508b565b60f81b81838151811061347757613476615401565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134b391906150e1565b9450613431565b8093505050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613539575061353882613846565b5b9050919050565b61354a8383613928565b61355760008484846136af565b613596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358d90614c0d565b60405180910390fd5b505050565b6135a6838383613af6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135e9576135e481613afb565b613628565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613627576136268382613b44565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561366b5761366681613cb1565b6136aa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136a9576136a88282613d82565b5b5b505050565b60006136d08473ffffffffffffffffffffffffffffffffffffffff16613e01565b15613839578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136f9612b7a565b8786866040518563ffffffff1660e01b815260040161371b9493929190614b19565b602060405180830381600087803b15801561373557600080fd5b505af192505050801561376657506040513d601f19601f82011682018060405250810190613763919061442d565b60015b6137e9573d8060008114613796576040519150601f19603f3d011682016040523d82523d6000602084013e61379b565b606091505b506000815114156137e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d890614c0d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061383e565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061391157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613921575061392082613e14565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398f90614d8d565b60405180910390fd5b6139a181612b82565b156139e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d890614c4d565b60405180910390fd5b6139ed6000838361359b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a3d919061508b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613b5184611c2a565b613b5b919061516c565b9050600060076000848152602001908152602001600020549050818114613c40576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613cc5919061516c565b9050600060096000848152602001908152602001600020549050600060088381548110613cf557613cf4615401565b5b906000526020600020015490508060088381548110613d1757613d16615401565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613d6657613d656153d2565b5b6001900381819060005260206000200160009055905550505050565b6000613d8d83611c2a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054613e8a90615268565b90600052602060002090601f016020900481019282613eac5760008555613ef3565b82601f10613ec557805160ff1916838001178555613ef3565b82800160010185558215613ef3579182015b82811115613ef2578251825591602001919060010190613ed7565b5b509050613f009190613fc5565b5090565b5080546000825590600052602060002090810190613f229190613fc5565b50565b828054828255906000526020600020908101928215613fb4579160200282015b82811115613fb357823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613f45565b5b509050613fc19190613fc5565b5090565b5b80821115613fde576000816000905550600101613fc6565b5090565b6000613ff5613ff084614f8d565b614f68565b9050828152602081018484840111156140115761401061546e565b5b61401c848285615226565b509392505050565b600061403761403284614fbe565b614f68565b9050828152602081018484840111156140535761405261546e565b5b61405e848285615226565b509392505050565b60008135905061407581615b44565b92915050565b60008135905061408a81615b5b565b92915050565b60008083601f8401126140a6576140a5615464565b5b8235905067ffffffffffffffff8111156140c3576140c261545f565b5b6020830191508360208202830111156140df576140de615469565b5b9250929050565b6000813590506140f581615b72565b92915050565b60008135905061410a81615b89565b92915050565b60008151905061411f81615b89565b92915050565b600082601f83011261413a57614139615464565b5b813561414a848260208601613fe2565b91505092915050565b600082601f83011261416857614167615464565b5b8135614178848260208601614024565b91505092915050565b60008135905061419081615ba0565b92915050565b6000602082840312156141ac576141ab615478565b5b60006141ba84828501614066565b91505092915050565b6000602082840312156141d9576141d8615478565b5b60006141e78482850161407b565b91505092915050565b6000806040838503121561420757614206615478565b5b600061421585828601614066565b925050602061422685828601614066565b9150509250929050565b60008060006060848603121561424957614248615478565b5b600061425786828701614066565b935050602061426886828701614066565b925050604061427986828701614181565b9150509250925092565b6000806000806080858703121561429d5761429c615478565b5b60006142ab87828801614066565b94505060206142bc87828801614066565b93505060406142cd87828801614181565b925050606085013567ffffffffffffffff8111156142ee576142ed615473565b5b6142fa87828801614125565b91505092959194509250565b6000806040838503121561431d5761431c615478565b5b600061432b85828601614066565b925050602061433c858286016140e6565b9150509250929050565b6000806040838503121561435d5761435c615478565b5b600061436b85828601614066565b925050602061437c85828601614181565b9150509250929050565b6000806020838503121561439d5761439c615478565b5b600083013567ffffffffffffffff8111156143bb576143ba615473565b5b6143c785828601614090565b92509250509250929050565b6000602082840312156143e9576143e8615478565b5b60006143f7848285016140e6565b91505092915050565b60006020828403121561441657614415615478565b5b6000614424848285016140fb565b91505092915050565b60006020828403121561444357614442615478565b5b600061445184828501614110565b91505092915050565b6000602082840312156144705761446f615478565b5b600082013567ffffffffffffffff81111561448e5761448d615473565b5b61449a84828501614153565b91505092915050565b6000602082840312156144b9576144b8615478565b5b60006144c784828501614181565b91505092915050565b600080604083850312156144e7576144e6615478565b5b60006144f585828601614181565b925050602061450685828601614181565b9150509250929050565b600061451c8383614a9a565b60208301905092915050565b614531816151a0565b82525050565b600061454282615014565b61454c8185615042565b935061455783614fef565b8060005b8381101561458857815161456f8882614510565b975061457a83615035565b92505060018101905061455b565b5085935050505092915050565b61459e816151c4565b82525050565b60006145af8261501f565b6145b98185615053565b93506145c9818560208601615235565b6145d28161547d565b840191505092915050565b60006145e88261502a565b6145f2818561506f565b9350614602818560208601615235565b61460b8161547d565b840191505092915050565b60006146218261502a565b61462b8185615080565b935061463b818560208601615235565b80840191505092915050565b6000815461465481615268565b61465e8186615080565b94506001821660008114614679576001811461468a576146bd565b60ff198316865281860193506146bd565b61469385614fff565b60005b838110156146b557815481890152600182019150602081019050614696565b838801955050505b50505092915050565b60006146d3602b8361506f565b91506146de8261548e565b604082019050919050565b60006146f660328361506f565b9150614701826154dd565b604082019050919050565b600061471960268361506f565b91506147248261552c565b604082019050919050565b600061473c601c8361506f565b91506147478261557b565b602082019050919050565b600061475f601c8361506f565b915061476a826155a4565b602082019050919050565b600061478260248361506f565b915061478d826155cd565b604082019050919050565b60006147a560198361506f565b91506147b08261561c565b602082019050919050565b60006147c8602c8361506f565b91506147d382615645565b604082019050919050565b60006147eb60388361506f565b91506147f682615694565b604082019050919050565b600061480e602a8361506f565b9150614819826156e3565b604082019050919050565b600061483160298361506f565b915061483c82615732565b604082019050919050565b600061485460168361506f565b915061485f82615781565b602082019050919050565b600061487760248361506f565b9150614882826157aa565b604082019050919050565b600061489a60208361506f565b91506148a5826157f9565b602082019050919050565b60006148bd602c8361506f565b91506148c882615822565b604082019050919050565b60006148e060208361506f565b91506148eb82615871565b602082019050919050565b600061490360168361506f565b915061490e8261589a565b602082019050919050565b600061492660298361506f565b9150614931826158c3565b604082019050919050565b6000614949602f8361506f565b915061495482615912565b604082019050919050565b600061496c60218361506f565b915061497782615961565b604082019050919050565b600061498f600083615064565b915061499a826159b0565b600082019050919050565b60006149b260128361506f565b91506149bd826159b3565b602082019050919050565b60006149d560318361506f565b91506149e0826159dc565b604082019050919050565b60006149f8601b8361506f565b9150614a0382615a2b565b602082019050919050565b6000614a1b602c8361506f565b9150614a2682615a54565b604082019050919050565b6000614a3e602a8361506f565b9150614a4982615aa3565b604082019050919050565b6000614a6160178361506f565b9150614a6c82615af2565b602082019050919050565b6000614a84601b8361506f565b9150614a8f82615b1b565b602082019050919050565b614aa38161521c565b82525050565b614ab28161521c565b82525050565b6000614ac48286614616565b9150614ad08285614616565b9150614adc8284614647565b9150819050949350505050565b6000614af482614982565b9150819050919050565b6000602082019050614b136000830184614528565b92915050565b6000608082019050614b2e6000830187614528565b614b3b6020830186614528565b614b486040830185614aa9565b8181036060830152614b5a81846145a4565b905095945050505050565b6000604082019050614b7a6000830185614528565b614b876020830184614aa9565b9392505050565b60006020820190508181036000830152614ba88184614537565b905092915050565b6000602082019050614bc56000830184614595565b92915050565b60006020820190508181036000830152614be581846145dd565b905092915050565b60006020820190508181036000830152614c06816146c6565b9050919050565b60006020820190508181036000830152614c26816146e9565b9050919050565b60006020820190508181036000830152614c468161470c565b9050919050565b60006020820190508181036000830152614c668161472f565b9050919050565b60006020820190508181036000830152614c8681614752565b9050919050565b60006020820190508181036000830152614ca681614775565b9050919050565b60006020820190508181036000830152614cc681614798565b9050919050565b60006020820190508181036000830152614ce6816147bb565b9050919050565b60006020820190508181036000830152614d06816147de565b9050919050565b60006020820190508181036000830152614d2681614801565b9050919050565b60006020820190508181036000830152614d4681614824565b9050919050565b60006020820190508181036000830152614d6681614847565b9050919050565b60006020820190508181036000830152614d868161486a565b9050919050565b60006020820190508181036000830152614da68161488d565b9050919050565b60006020820190508181036000830152614dc6816148b0565b9050919050565b60006020820190508181036000830152614de6816148d3565b9050919050565b60006020820190508181036000830152614e06816148f6565b9050919050565b60006020820190508181036000830152614e2681614919565b9050919050565b60006020820190508181036000830152614e468161493c565b9050919050565b60006020820190508181036000830152614e668161495f565b9050919050565b60006020820190508181036000830152614e86816149a5565b9050919050565b60006020820190508181036000830152614ea6816149c8565b9050919050565b60006020820190508181036000830152614ec6816149eb565b9050919050565b60006020820190508181036000830152614ee681614a0e565b9050919050565b60006020820190508181036000830152614f0681614a31565b9050919050565b60006020820190508181036000830152614f2681614a54565b9050919050565b60006020820190508181036000830152614f4681614a77565b9050919050565b6000602082019050614f626000830184614aa9565b92915050565b6000614f72614f83565b9050614f7e828261529a565b919050565b6000604051905090565b600067ffffffffffffffff821115614fa857614fa7615430565b5b614fb18261547d565b9050602081019050919050565b600067ffffffffffffffff821115614fd957614fd8615430565b5b614fe28261547d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006150968261521c565b91506150a18361521c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150d6576150d5615345565b5b828201905092915050565b60006150ec8261521c565b91506150f78361521c565b92508261510757615106615374565b5b828204905092915050565b600061511d8261521c565b91506151288361521c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561516157615160615345565b5b828202905092915050565b60006151778261521c565b91506151828361521c565b92508282101561519557615194615345565b5b828203905092915050565b60006151ab826151fc565b9050919050565b60006151bd826151fc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615253578082015181840152602081019050615238565b83811115615262576000848401525b50505050565b6000600282049050600182168061528057607f821691505b60208210811415615294576152936153a3565b5b50919050565b6152a38261547d565b810181811067ffffffffffffffff821117156152c2576152c1615430565b5b80604052505050565b60006152d68261521c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561530957615308615345565b5b600182019050919050565b600061531f8261521c565b915061532a8361521c565b92508261533a57615339615374565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f7420616c6c6f776c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615b4d816151a0565b8114615b5857600080fd5b50565b615b64816151b2565b8114615b6f57600080fd5b50565b615b7b816151c4565b8114615b8657600080fd5b50565b615b92816151d0565b8114615b9d57600080fd5b50565b615ba98161521c565b8114615bb457600080fd5b5056fea264697066735822122046c5ae76b059380476da73b2ffde4f0aa7b759d27ae82566288761335afdd5b464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dcb77cfa5aaa44c7b71dace94a79271c435f1b73000000000000000000000000b933017e0f0ba4fc6104a3757439594fd954308e00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000001053494e43453330303047454e4553495300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000353334700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558484146646a51345a58704e7a6a46775400000000000000000000000000000000000000000000000000000000000000000000000000000000000042697066733a2f2f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558484146646a51345a58704e7a6a4677542f5f68696464656e2e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558484146646a51345a58704e7a6a4677542f5f636f6e74726163745552492e6a736f6e000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _beneficiary (address): 0xDcB77CFA5Aaa44C7B71daCE94a79271c435F1b73
Arg [1] : _gownsForGood (address): 0xB933017E0F0Ba4fc6104A3757439594fD954308E
Arg [2] : _name (string): SINCE3000GENESIS
Arg [3] : _symbol (string): S3G
Arg [4] : _initBaseURI (string): ipfs://QmfBhNNAZ4nU2mLMK3oCgwLE2ziveXHAFdjQ4ZXpNzjFwT
Arg [5] : _initNotRevealedUri (string): ipfs://QmfBhNNAZ4nU2mLMK3oCgwLE2ziveXHAFdjQ4ZXpNzjFwT/_hidden.json
Arg [6] : _contractUri (string): https://gateway.pinata.cloud/ipfs/QmfBhNNAZ4nU2mLMK3oCgwLE2ziveXHAFdjQ4ZXpNzjFwT/_contractURI.json
-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 000000000000000000000000dcb77cfa5aaa44c7b71dace94a79271c435f1b73
Arg [1] : 000000000000000000000000b933017e0f0ba4fc6104a3757439594fd954308e
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [8] : 53494e43453330303047454e4553495300000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [10] : 5333470000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [12] : 697066733a2f2f516d6642684e4e415a346e55326d4c4d4b336f4367774c4532
Arg [13] : 7a69766558484146646a51345a58704e7a6a4677540000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [15] : 697066733a2f2f516d6642684e4e415a346e55326d4c4d4b336f4367774c4532
Arg [16] : 7a69766558484146646a51345a58704e7a6a4677542f5f68696464656e2e6a73
Arg [17] : 6f6e000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000062
Arg [19] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [20] : 732f516d6642684e4e415a346e55326d4c4d4b336f4367774c45327a69766558
Arg [21] : 484146646a51345a58704e7a6a4677542f5f636f6e74726163745552492e6a73
Arg [22] : 6f6e000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50043:5511:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55099:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54764:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52651:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30191:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31750:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50212:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31273:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52265:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50275:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54845:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44447:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50636:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50529:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53840:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50347:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32640:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18796:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;44115:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55316:235;;;:::i;:::-;;33050:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52896:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54080:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44637:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50457:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54288:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54948:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50426:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29885:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50490:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50144:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29615:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:94;;;;;;;;;;;;;:::i;:::-;;54166:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30360:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51271:988;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32043:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53769:65;;;;;;;;;;;;;:::i;:::-;;33306:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50384:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50245:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50170:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53250:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54392:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53968:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50311:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54508:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32409:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54638:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4840:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55099:210;55202:4;55237:26;55222:41;;;:11;:41;;;;:81;;;;55267:36;55291:11;55267:23;:36::i;:::-;55222:81;55215:88;;55099:210;;;:::o;54764:73::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54825:6:::1;54816;;:15;;;;;;;;;;;;;;;;;;54764:73:::0;:::o;52651:239::-;52710:4;52728:6;52737:1;52728:10;;52723:143;52744:20;:27;;;;52740:1;:31;52723:143;;;52818:5;52791:32;;:20;52812:1;52791:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;52787:72;;;52845:4;52838:11;;;;;52787:72;52773:3;;;;;:::i;:::-;;;;52723:143;;;;52879:5;52872:12;;52651:239;;;;:::o;30191:100::-;30245:13;30278:5;30271:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30191:100;:::o;31750:221::-;31826:7;31854:16;31862:7;31854;:16::i;:::-;31846:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31939:15;:24;31955:7;31939:24;;;;;;;;;;;;;;;;;;;;;31932:31;;31750:221;;;:::o;50212:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31273:411::-;31354:13;31370:23;31385:7;31370:14;:23::i;:::-;31354:39;;31418:5;31412:11;;:2;:11;;;;31404:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31512:5;31496:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31521:37;31538:5;31545:12;:10;:12::i;:::-;31521:16;:37::i;:::-;31496:62;31474:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31655:21;31664:2;31668:7;31655:8;:21::i;:::-;31343:341;31273:411;;:::o;52265:378::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52328:14:::1;52345:13;:11;:13::i;:::-;52328:30;;52398:9;;52383:11;52374:6;:20;;;;:::i;:::-;:33;;52366:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52447:9;52459:1;52447:13;;52442:196;52467:11;52462:1;:16;52442:196;;52494:20;:32;52515:10;52494:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;52537:35;52547:12;;;;;;;;;;;52570:1;52561:6;:10;;;;:::i;:::-;52537:9;:35::i;:::-;52581:49;52607:1;52598:6;:10;;;;:::i;:::-;52610:12;;;;;;;;;;;52625:4;52581:16;:49::i;:::-;52480:3;;;;;:::i;:::-;;;;52442:196;;;;52320:323;52265:378:::0;:::o;50275:31::-;;;;:::o;54845:95::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54928:6:::1;54910:15;;:24;;;;;;;;;;;;;;;;;;54845:95:::0;:::o;44447:113::-;44508:7;44535:10;:17;;;;44528:24;;44447:113;:::o;50636:55::-;;;;;;;;;;;;;;;;;:::o;50529:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53840:118::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53939:12:::1;53918:11;;:34;;;;;;;;;;;;;;;;;;53840:118:::0;:::o;50347:32::-;;;;:::o;32640:339::-;32835:41;32854:12;:10;:12::i;:::-;32868:7;32835:18;:41::i;:::-;32827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32943:28;32953:4;32959:2;32963:7;32943:9;:28::i;:::-;32640:339;;;:::o;18796:494::-;18940:7;18949;18974:26;19003:17;:27;19021:8;19003:27;;;;;;;;;;;18974:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19075:1;19047:30;;:7;:16;;;:30;;;19043:92;;;19104:19;19094:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19043:92;19147:21;19212:17;:15;:17::i;:::-;19171:58;;19185:7;:23;;;19172:36;;:10;:36;;;;:::i;:::-;19171:58;;;;:::i;:::-;19147:82;;19250:7;:16;;;19268:13;19242:40;;;;;;18796:494;;;;;:::o;44115:256::-;44212:7;44248:23;44265:5;44248:16;:23::i;:::-;44240:5;:31;44232:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44337:12;:19;44350:5;44337:19;;;;;;;;;;;;;;;:26;44357:5;44337:26;;;;;;;;;;;;44330:33;;44115:256;;;;:::o;55316:235::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55369:7:::1;55390:11;;;;;;;;;;;55382:25;;55415:21;55382:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55368:73;;;55456:2;55448:11;;;::::0;::::1;;55361:190;55316:235::o:0;33050:185::-;33188:39;33205:4;33211:2;33215:7;33188:39;;;;;;;;;;;;:16;:39::i;:::-;33050:185;;;:::o;52896:348::-;52971:16;52999:23;53025:17;53035:6;53025:9;:17::i;:::-;52999:43;;53049:25;53091:15;53077:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53049:58;;53119:9;53114:103;53134:15;53130:1;:19;53114:103;;;53179:30;53199:6;53207:1;53179:19;:30::i;:::-;53165:8;53174:1;53165:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;53151:3;;;;;:::i;:::-;;;;53114:103;;;;53230:8;53223:15;;;;52896:348;;;:::o;54080:80::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54146:8:::1;54139:4;:15;;;;54080:80:::0;:::o;44637:233::-;44712:7;44748:30;:28;:30::i;:::-;44740:5;:38;44732:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44845:10;44856:5;44845:17;;;;;;;;:::i;:::-;;;;;;;;;;44838:24;;44637:233;;;:::o;50457:28::-;;;;;;;;;;;;;:::o;54288:98::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54369:11:::1;54359:7;:21;;;;;;;;;;;;:::i;:::-;;54288:98:::0;:::o;54948:144::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55030:20:::1;;55023:27;;;;:::i;:::-;55080:6;;55057:20;:29;;;;;;;:::i;:::-;;54948:144:::0;;:::o;50426:26::-;;;;;;;;;;;;;:::o;29885:239::-;29957:7;29977:13;29993:7;:16;30001:7;29993:16;;;;;;;;;;;;;;;;;;;;;29977:32;;30045:1;30028:19;;:5;:19;;;;30020:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30111:5;30104:12;;;29885:239;;;:::o;50490:34::-;;;;;;;;;;;;;:::o;50144:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29615:208::-;29687:7;29732:1;29715:19;;:5;:19;;;;29707:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29799:9;:16;29809:5;29799:16;;;;;;;;;;;;;;;;29792:23;;29615:208;;;:::o;4591:94::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:21:::1;4674:1;4656:9;:21::i;:::-;4591:94::o:0;54166:116::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54259:17:::1;54243:13;:33;;;;54166:116:::0;:::o;3940:87::-;3986:7;4013:6;;;;;;;;;;;4006:13;;3940:87;:::o;30360:104::-;30416:13;30449:7;30442:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30360:104;:::o;51271:988::-;51337:6;;;;;;;;;;;51336:7;51328:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;51377:14;51394:13;:11;:13::i;:::-;51377:30;;51436:1;51422:11;:15;51414:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51499:13;;51484:11;:28;;51476:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;51592:9;;51577:11;51568:6;:20;;;;:::i;:::-;:33;;51560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51655:7;:5;:7::i;:::-;51641:21;;:10;:21;;;51637:416;;51697:4;51678:23;;:15;;;;;;;;;;;:23;;;51675:298;;;51726:25;51740:10;51726:13;:25::i;:::-;51718:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51794:24;51821:20;:32;51842:10;51821:32;;;;;;;;;;;;;;;;51794:59;;51910:18;;51895:11;51876:16;:30;;;;:::i;:::-;:52;;51868:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;51703:270;51675:298;52011:11;52004:4;;:18;;;;:::i;:::-;51991:9;:31;;51983:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51637:416;52067:9;52079:1;52067:13;;52062:192;52087:11;52082:1;:16;52062:192;;52114:20;:32;52135:10;52114:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;52157:33;52167:10;52188:1;52179:6;:10;;;;:::i;:::-;52157:9;:33::i;:::-;52199:47;52225:1;52216:6;:10;;;;:::i;:::-;52228:11;;;;;;;;;;;52241:4;52199:16;:47::i;:::-;52100:3;;;;;:::i;:::-;;;;52062:192;;;;51321:938;51271:988;:::o;32043:295::-;32158:12;:10;:12::i;:::-;32146:24;;:8;:24;;;;32138:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32258:8;32213:18;:32;32232:12;:10;:12::i;:::-;32213:32;;;;;;;;;;;;;;;:42;32246:8;32213:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32311:8;32282:48;;32297:12;:10;:12::i;:::-;32282:48;;;32321:8;32282:48;;;;;;:::i;:::-;;;;;;;;32043:295;;:::o;53769:65::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53824:4:::1;53813:8;;:15;;;;;;;;;;;;;;;;;;53769:65::o:0;33306:328::-;33481:41;33500:12;:10;:12::i;:::-;33514:7;33481:18;:41::i;:::-;33473:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33587:39;33601:4;33607:2;33611:7;33620:5;33587:13;:39::i;:::-;33306:328;;;;:::o;50384:37::-;;;;:::o;50245:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50170:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53250:497::-;53348:13;53389:16;53397:7;53389;:16::i;:::-;53373:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;53498:5;53486:17;;:8;;;;;;;;;;;:17;;;53483:62;;;53523:14;53516:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53483:62;53553:28;53584:10;:8;:10::i;:::-;53553:41;;53639:1;53614:14;53608:28;:32;:133;;;;;;;;;;;;;;;;;53676:14;53692:18;:7;:16;:18::i;:::-;53712:13;53659:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53608:133;53601:140;;;53250:497;;;;:::o;54392:110::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54484:12:::1;54470:11;:26;;;;;;;;;;;;:::i;:::-;;54392:110:::0;:::o;53968:104::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54060:6:::1;54039:18;:27;;;;53968:104:::0;:::o;50311:31::-;;;;:::o;54508:122::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54607:17:::1;54591:13;:33;;;;;;;;;;;;:::i;:::-;;54508:122:::0;:::o;32409:164::-;32506:4;32530:18;:25;32549:5;32530:25;;;;;;;;;;;;;;;:35;32556:8;32530:35;;;;;;;;;;;;;;;;;;;;;;;;;32523:42;;32409:164;;;;:::o;54638:120::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54737:15:::1;54720:14;:32;;;;;;;;;;;;:::i;:::-;;54638:120:::0;:::o;4840:192::-;4171:12;:10;:12::i;:::-;4160:23;;:7;:5;:7::i;:::-;:23;;;4152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4949:1:::1;4929:22;;:8;:22;;;;4921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5005:19;5015:8;5005:9;:19::i;:::-;4840:192:::0;:::o;18526:215::-;18628:4;18667:26;18652:41;;;:11;:41;;;;:81;;;;18697:36;18721:11;18697:23;:36::i;:::-;18652:81;18645:88;;18526:215;;;:::o;2728:98::-;2781:7;2808:10;2801:17;;2728:98;:::o;35144:127::-;35209:4;35261:1;35233:30;;:7;:16;35241:7;35233:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35226:37;;35144:127;;;:::o;39126:174::-;39228:2;39201:15;:24;39217:7;39201:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39284:7;39280:2;39246:46;;39255:23;39270:7;39255:14;:23::i;:::-;39246:46;;;;;;;;;;;;39126:174;;:::o;36128:110::-;36204:26;36214:2;36218:7;36204:26;;;;;;;;;;;;:9;:26::i;:::-;36128:110;;:::o;20767:390::-;20935:17;:15;:17::i;:::-;20919:33;;:12;:33;;;;20911:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;21038:1;21018:22;;:8;:22;;;;21010:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21114:35;;;;;;;;21126:8;21114:35;;;;;;21136:12;21114:35;;;;;21085:17;:26;21103:7;21085:26;;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20767:390;;;:::o;35438:348::-;35531:4;35556:16;35564:7;35556;:16::i;:::-;35548:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35632:13;35648:23;35663:7;35648:14;:23::i;:::-;35632:39;;35701:5;35690:16;;:7;:16;;;:51;;;;35734:7;35710:31;;:20;35722:7;35710:11;:20::i;:::-;:31;;;35690:51;:87;;;;35745:32;35762:5;35769:7;35745:16;:32::i;:::-;35690:87;35682:96;;;35438:348;;;;:::o;38430:578::-;38589:4;38562:31;;:23;38577:7;38562:14;:23::i;:::-;:31;;;38554:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38672:1;38658:16;;:2;:16;;;;38650:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38728:39;38749:4;38755:2;38759:7;38728:20;:39::i;:::-;38832:29;38849:1;38853:7;38832:8;:29::i;:::-;38893:1;38874:9;:15;38884:4;38874:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38922:1;38905:9;:13;38915:2;38905:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38953:2;38934:7;:16;38942:7;38934:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38992:7;38988:2;38973:27;;38982:4;38973:27;;;;;;;;;;;;38430:578;;;:::o;19572:97::-;19630:6;19656:5;19649:12;;19572:97;:::o;5040:173::-;5096:16;5115:6;;;;;;;;;;;5096:25;;5141:8;5132:6;;:17;;;;;;;;;;;;;;;;;;5196:8;5165:40;;5186:8;5165:40;;;;;;;;;;;;5085:128;5040:173;:::o;34516:315::-;34673:28;34683:4;34689:2;34693:7;34673:9;:28::i;:::-;34720:48;34743:4;34749:2;34753:7;34762:5;34720:22;:48::i;:::-;34712:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34516:315;;;;:::o;51160:102::-;51220:13;51249:7;51242:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51160:102;:::o;344:723::-;400:13;630:1;621:5;:10;617:53;;;648:10;;;;;;;;;;;;;;;;;;;;;617:53;680:12;695:5;680:20;;711:14;736:78;751:1;743:4;:9;736:78;;769:8;;;;;:::i;:::-;;;;800:2;792:10;;;;;:::i;:::-;;;736:78;;;824:19;856:6;846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:39;;874:154;890:1;881:5;:10;874:154;;918:1;908:11;;;;;:::i;:::-;;;985:2;977:5;:10;;;;:::i;:::-;964:2;:24;;;;:::i;:::-;951:39;;934:6;941;934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1014:2;1005:11;;;;;:::i;:::-;;;874:154;;;1052:6;1038:21;;;;;344:723;;;;:::o;43807:224::-;43909:4;43948:35;43933:50;;;:11;:50;;;;:90;;;;43987:36;44011:11;43987:23;:36::i;:::-;43933:90;43926:97;;43807:224;;;:::o;36465:321::-;36595:18;36601:2;36605:7;36595:5;:18::i;:::-;36646:54;36677:1;36681:2;36685:7;36694:5;36646:22;:54::i;:::-;36624:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36465:321;;;:::o;45483:589::-;45627:45;45654:4;45660:2;45664:7;45627:26;:45::i;:::-;45705:1;45689:18;;:4;:18;;;45685:187;;;45724:40;45756:7;45724:31;:40::i;:::-;45685:187;;;45794:2;45786:10;;:4;:10;;;45782:90;;45813:47;45846:4;45852:7;45813:32;:47::i;:::-;45782:90;45685:187;45900:1;45886:16;;:2;:16;;;45882:183;;;45919:45;45956:7;45919:36;:45::i;:::-;45882:183;;;45992:4;45986:10;;:2;:10;;;45982:83;;46013:40;46041:2;46045:7;46013:27;:40::i;:::-;45982:83;45882:183;45483:589;;;:::o;39865:799::-;40020:4;40041:15;:2;:13;;;:15::i;:::-;40037:620;;;40093:2;40077:36;;;40114:12;:10;:12::i;:::-;40128:4;40134:7;40143:5;40077:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40073:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40336:1;40319:6;:13;:18;40315:272;;;40362:60;;;;;;;;;;:::i;:::-;;;;;;;;40315:272;40537:6;40531:13;40522:6;40518:2;40514:15;40507:38;40073:529;40210:41;;;40200:51;;;:6;:51;;;;40193:58;;;;;40037:620;40641:4;40634:11;;39865:799;;;;;;;:::o;29246:305::-;29348:4;29400:25;29385:40;;;:11;:40;;;;:105;;;;29457:33;29442:48;;;:11;:48;;;;29385:105;:158;;;;29507:36;29531:11;29507:23;:36::i;:::-;29385:158;29365:178;;29246:305;;;:::o;37122:382::-;37216:1;37202:16;;:2;:16;;;;37194:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37275:16;37283:7;37275;:16::i;:::-;37274:17;37266:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37337:45;37366:1;37370:2;37374:7;37337:20;:45::i;:::-;37412:1;37395:9;:13;37405:2;37395:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37443:2;37424:7;:16;37432:7;37424:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37488:7;37484:2;37463:33;;37480:1;37463:33;;;;;;;;;;;;37122:382;;:::o;41236:126::-;;;;:::o;46795:164::-;46899:10;:17;;;;46872:15;:24;46888:7;46872:24;;;;;;;;;;;:44;;;;46927:10;46943:7;46927:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46795:164;:::o;47586:988::-;47852:22;47902:1;47877:22;47894:4;47877:16;:22::i;:::-;:26;;;;:::i;:::-;47852:51;;47914:18;47935:17;:26;47953:7;47935:26;;;;;;;;;;;;47914:47;;48082:14;48068:10;:28;48064:328;;48113:19;48135:12;:18;48148:4;48135:18;;;;;;;;;;;;;;;:34;48154:14;48135:34;;;;;;;;;;;;48113:56;;48219:11;48186:12;:18;48199:4;48186:18;;;;;;;;;;;;;;;:30;48205:10;48186:30;;;;;;;;;;;:44;;;;48336:10;48303:17;:30;48321:11;48303:30;;;;;;;;;;;:43;;;;48098:294;48064:328;48488:17;:26;48506:7;48488:26;;;;;;;;;;;48481:33;;;48532:12;:18;48545:4;48532:18;;;;;;;;;;;;;;;:34;48551:14;48532:34;;;;;;;;;;;48525:41;;;47667:907;;47586:988;;:::o;48869:1079::-;49122:22;49167:1;49147:10;:17;;;;:21;;;;:::i;:::-;49122:46;;49179:18;49200:15;:24;49216:7;49200:24;;;;;;;;;;;;49179:45;;49551:19;49573:10;49584:14;49573:26;;;;;;;;:::i;:::-;;;;;;;;;;49551:48;;49637:11;49612:10;49623;49612:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49748:10;49717:15;:28;49733:11;49717:28;;;;;;;;;;;:41;;;;49889:15;:24;49905:7;49889:24;;;;;;;;;;;49882:31;;;49924:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48940:1008;;;48869:1079;:::o;46373:221::-;46458:14;46475:20;46492:2;46475:16;:20::i;:::-;46458:37;;46533:7;46506:12;:16;46519:2;46506:16;;;;;;;;;;;;;;;:24;46523:6;46506:24;;;;;;;;;;;:34;;;;46580:6;46551:17;:26;46569:7;46551:26;;;;;;;;;;;:35;;;;46447:147;46373:221;;:::o;5986:387::-;6046:4;6254:12;6321:7;6309:20;6301:28;;6364:1;6357:4;:8;6350:15;;;5986:387;;;:::o;16976:157::-;17061:4;17100:25;17085:40;;;:11;:40;;;;17078:47;;16976:157;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;986:155;;;;:::o;1164:568::-;1237:8;1247:6;1297:3;1290:4;1282:6;1278:17;1274:27;1264:122;;1305:79;;:::i;:::-;1264:122;1418:6;1405:20;1395:30;;1448:18;1440:6;1437:30;1434:117;;;1470:79;;:::i;:::-;1434:117;1584:4;1576:6;1572:17;1560:29;;1638:3;1630:4;1622:6;1618:17;1608:8;1604:32;1601:41;1598:128;;;1645:79;;:::i;:::-;1598:128;1164:568;;;;;:::o;1738:133::-;1781:5;1819:6;1806:20;1797:29;;1835:30;1859:5;1835:30;:::i;:::-;1738:133;;;;:::o;1877:137::-;1922:5;1960:6;1947:20;1938:29;;1976:32;2002:5;1976:32;:::i;:::-;1877:137;;;;:::o;2020:141::-;2076:5;2107:6;2101:13;2092:22;;2123:32;2149:5;2123:32;:::i;:::-;2020:141;;;;:::o;2180:338::-;2235:5;2284:3;2277:4;2269:6;2265:17;2261:27;2251:122;;2292:79;;:::i;:::-;2251:122;2409:6;2396:20;2434:78;2508:3;2500:6;2493:4;2485:6;2481:17;2434:78;:::i;:::-;2425:87;;2241:277;2180:338;;;;:::o;2538:340::-;2594:5;2643:3;2636:4;2628:6;2624:17;2620:27;2610:122;;2651:79;;:::i;:::-;2610:122;2768:6;2755:20;2793:79;2868:3;2860:6;2853:4;2845:6;2841:17;2793:79;:::i;:::-;2784:88;;2600:278;2538:340;;;;:::o;2884:139::-;2930:5;2968:6;2955:20;2946:29;;2984:33;3011:5;2984:33;:::i;:::-;2884:139;;;;:::o;3029:329::-;3088:6;3137:2;3125:9;3116:7;3112:23;3108:32;3105:119;;;3143:79;;:::i;:::-;3105:119;3263:1;3288:53;3333:7;3324:6;3313:9;3309:22;3288:53;:::i;:::-;3278:63;;3234:117;3029:329;;;;:::o;3364:345::-;3431:6;3480:2;3468:9;3459:7;3455:23;3451:32;3448:119;;;3486:79;;:::i;:::-;3448:119;3606:1;3631:61;3684:7;3675:6;3664:9;3660:22;3631:61;:::i;:::-;3621:71;;3577:125;3364:345;;;;:::o;3715:474::-;3783:6;3791;3840:2;3828:9;3819:7;3815:23;3811:32;3808:119;;;3846:79;;:::i;:::-;3808:119;3966:1;3991:53;4036:7;4027:6;4016:9;4012:22;3991:53;:::i;:::-;3981:63;;3937:117;4093:2;4119:53;4164:7;4155:6;4144:9;4140:22;4119:53;:::i;:::-;4109:63;;4064:118;3715:474;;;;;:::o;4195:619::-;4272:6;4280;4288;4337:2;4325:9;4316:7;4312:23;4308:32;4305:119;;;4343:79;;:::i;:::-;4305:119;4463:1;4488:53;4533:7;4524:6;4513:9;4509:22;4488:53;:::i;:::-;4478:63;;4434:117;4590:2;4616:53;4661:7;4652:6;4641:9;4637:22;4616:53;:::i;:::-;4606:63;;4561:118;4718:2;4744:53;4789:7;4780:6;4769:9;4765:22;4744:53;:::i;:::-;4734:63;;4689:118;4195:619;;;;;:::o;4820:943::-;4915:6;4923;4931;4939;4988:3;4976:9;4967:7;4963:23;4959:33;4956:120;;;4995:79;;:::i;:::-;4956:120;5115:1;5140:53;5185:7;5176:6;5165:9;5161:22;5140:53;:::i;:::-;5130:63;;5086:117;5242:2;5268:53;5313:7;5304:6;5293:9;5289:22;5268:53;:::i;:::-;5258:63;;5213:118;5370:2;5396:53;5441:7;5432:6;5421:9;5417:22;5396:53;:::i;:::-;5386:63;;5341:118;5526:2;5515:9;5511:18;5498:32;5557:18;5549:6;5546:30;5543:117;;;5579:79;;:::i;:::-;5543:117;5684:62;5738:7;5729:6;5718:9;5714:22;5684:62;:::i;:::-;5674:72;;5469:287;4820:943;;;;;;;:::o;5769:468::-;5834:6;5842;5891:2;5879:9;5870:7;5866:23;5862:32;5859:119;;;5897:79;;:::i;:::-;5859:119;6017:1;6042:53;6087:7;6078:6;6067:9;6063:22;6042:53;:::i;:::-;6032:63;;5988:117;6144:2;6170:50;6212:7;6203:6;6192:9;6188:22;6170:50;:::i;:::-;6160:60;;6115:115;5769:468;;;;;:::o;6243:474::-;6311:6;6319;6368:2;6356:9;6347:7;6343:23;6339:32;6336:119;;;6374:79;;:::i;:::-;6336:119;6494:1;6519:53;6564:7;6555:6;6544:9;6540:22;6519:53;:::i;:::-;6509:63;;6465:117;6621:2;6647:53;6692:7;6683:6;6672:9;6668:22;6647:53;:::i;:::-;6637:63;;6592:118;6243:474;;;;;:::o;6723:559::-;6809:6;6817;6866:2;6854:9;6845:7;6841:23;6837:32;6834:119;;;6872:79;;:::i;:::-;6834:119;7020:1;7009:9;7005:17;6992:31;7050:18;7042:6;7039:30;7036:117;;;7072:79;;:::i;:::-;7036:117;7185:80;7257:7;7248:6;7237:9;7233:22;7185:80;:::i;:::-;7167:98;;;;6963:312;6723:559;;;;;:::o;7288:323::-;7344:6;7393:2;7381:9;7372:7;7368:23;7364:32;7361:119;;;7399:79;;:::i;:::-;7361:119;7519:1;7544:50;7586:7;7577:6;7566:9;7562:22;7544:50;:::i;:::-;7534:60;;7490:114;7288:323;;;;:::o;7617:327::-;7675:6;7724:2;7712:9;7703:7;7699:23;7695:32;7692:119;;;7730:79;;:::i;:::-;7692:119;7850:1;7875:52;7919:7;7910:6;7899:9;7895:22;7875:52;:::i;:::-;7865:62;;7821:116;7617:327;;;;:::o;7950:349::-;8019:6;8068:2;8056:9;8047:7;8043:23;8039:32;8036:119;;;8074:79;;:::i;:::-;8036:119;8194:1;8219:63;8274:7;8265:6;8254:9;8250:22;8219:63;:::i;:::-;8209:73;;8165:127;7950:349;;;;:::o;8305:509::-;8374:6;8423:2;8411:9;8402:7;8398:23;8394:32;8391:119;;;8429:79;;:::i;:::-;8391:119;8577:1;8566:9;8562:17;8549:31;8607:18;8599:6;8596:30;8593:117;;;8629:79;;:::i;:::-;8593:117;8734:63;8789:7;8780:6;8769:9;8765:22;8734:63;:::i;:::-;8724:73;;8520:287;8305:509;;;;:::o;8820:329::-;8879:6;8928:2;8916:9;8907:7;8903:23;8899:32;8896:119;;;8934:79;;:::i;:::-;8896:119;9054:1;9079:53;9124:7;9115:6;9104:9;9100:22;9079:53;:::i;:::-;9069:63;;9025:117;8820:329;;;;:::o;9155:474::-;9223:6;9231;9280:2;9268:9;9259:7;9255:23;9251:32;9248:119;;;9286:79;;:::i;:::-;9248:119;9406:1;9431:53;9476:7;9467:6;9456:9;9452:22;9431:53;:::i;:::-;9421:63;;9377:117;9533:2;9559:53;9604:7;9595:6;9584:9;9580:22;9559:53;:::i;:::-;9549:63;;9504:118;9155:474;;;;;:::o;9635:179::-;9704:10;9725:46;9767:3;9759:6;9725:46;:::i;:::-;9803:4;9798:3;9794:14;9780:28;;9635:179;;;;:::o;9820:118::-;9907:24;9925:5;9907:24;:::i;:::-;9902:3;9895:37;9820:118;;:::o;9974:732::-;10093:3;10122:54;10170:5;10122:54;:::i;:::-;10192:86;10271:6;10266:3;10192:86;:::i;:::-;10185:93;;10302:56;10352:5;10302:56;:::i;:::-;10381:7;10412:1;10397:284;10422:6;10419:1;10416:13;10397:284;;;10498:6;10492:13;10525:63;10584:3;10569:13;10525:63;:::i;:::-;10518:70;;10611:60;10664:6;10611:60;:::i;:::-;10601:70;;10457:224;10444:1;10441;10437:9;10432:14;;10397:284;;;10401:14;10697:3;10690:10;;10098:608;;;9974:732;;;;:::o;10712:109::-;10793:21;10808:5;10793:21;:::i;:::-;10788:3;10781:34;10712:109;;:::o;10827:360::-;10913:3;10941:38;10973:5;10941:38;:::i;:::-;10995:70;11058:6;11053:3;10995:70;:::i;:::-;10988:77;;11074:52;11119:6;11114:3;11107:4;11100:5;11096:16;11074:52;:::i;:::-;11151:29;11173:6;11151:29;:::i;:::-;11146:3;11142:39;11135:46;;10917:270;10827:360;;;;:::o;11193:364::-;11281:3;11309:39;11342:5;11309:39;:::i;:::-;11364:71;11428:6;11423:3;11364:71;:::i;:::-;11357:78;;11444:52;11489:6;11484:3;11477:4;11470:5;11466:16;11444:52;:::i;:::-;11521:29;11543:6;11521:29;:::i;:::-;11516:3;11512:39;11505:46;;11285:272;11193:364;;;;:::o;11563:377::-;11669:3;11697:39;11730:5;11697:39;:::i;:::-;11752:89;11834:6;11829:3;11752:89;:::i;:::-;11745:96;;11850:52;11895:6;11890:3;11883:4;11876:5;11872:16;11850:52;:::i;:::-;11927:6;11922:3;11918:16;11911:23;;11673:267;11563:377;;;;:::o;11970:845::-;12073:3;12110:5;12104:12;12139:36;12165:9;12139:36;:::i;:::-;12191:89;12273:6;12268:3;12191:89;:::i;:::-;12184:96;;12311:1;12300:9;12296:17;12327:1;12322:137;;;;12473:1;12468:341;;;;12289:520;;12322:137;12406:4;12402:9;12391;12387:25;12382:3;12375:38;12442:6;12437:3;12433:16;12426:23;;12322:137;;12468:341;12535:38;12567:5;12535:38;:::i;:::-;12595:1;12609:154;12623:6;12620:1;12617:13;12609:154;;;12697:7;12691:14;12687:1;12682:3;12678:11;12671:35;12747:1;12738:7;12734:15;12723:26;;12645:4;12642:1;12638:12;12633:17;;12609:154;;;12792:6;12787:3;12783:16;12776:23;;12475:334;;12289:520;;12077:738;;11970:845;;;;:::o;12821:366::-;12963:3;12984:67;13048:2;13043:3;12984:67;:::i;:::-;12977:74;;13060:93;13149:3;13060:93;:::i;:::-;13178:2;13173:3;13169:12;13162:19;;12821:366;;;:::o;13193:::-;13335:3;13356:67;13420:2;13415:3;13356:67;:::i;:::-;13349:74;;13432:93;13521:3;13432:93;:::i;:::-;13550:2;13545:3;13541:12;13534:19;;13193:366;;;:::o;13565:::-;13707:3;13728:67;13792:2;13787:3;13728:67;:::i;:::-;13721:74;;13804:93;13893:3;13804:93;:::i;:::-;13922:2;13917:3;13913:12;13906:19;;13565:366;;;:::o;13937:::-;14079:3;14100:67;14164:2;14159:3;14100:67;:::i;:::-;14093:74;;14176:93;14265:3;14176:93;:::i;:::-;14294:2;14289:3;14285:12;14278:19;;13937:366;;;:::o;14309:::-;14451:3;14472:67;14536:2;14531:3;14472:67;:::i;:::-;14465:74;;14548:93;14637:3;14548:93;:::i;:::-;14666:2;14661:3;14657:12;14650:19;;14309:366;;;:::o;14681:::-;14823:3;14844:67;14908:2;14903:3;14844:67;:::i;:::-;14837:74;;14920:93;15009:3;14920:93;:::i;:::-;15038:2;15033:3;15029:12;15022:19;;14681:366;;;:::o;15053:::-;15195:3;15216:67;15280:2;15275:3;15216:67;:::i;:::-;15209:74;;15292:93;15381:3;15292:93;:::i;:::-;15410:2;15405:3;15401:12;15394:19;;15053:366;;;:::o;15425:::-;15567:3;15588:67;15652:2;15647:3;15588:67;:::i;:::-;15581:74;;15664:93;15753:3;15664:93;:::i;:::-;15782:2;15777:3;15773:12;15766:19;;15425:366;;;:::o;15797:::-;15939:3;15960:67;16024:2;16019:3;15960:67;:::i;:::-;15953:74;;16036:93;16125:3;16036:93;:::i;:::-;16154:2;16149:3;16145:12;16138:19;;15797:366;;;:::o;16169:::-;16311:3;16332:67;16396:2;16391:3;16332:67;:::i;:::-;16325:74;;16408:93;16497:3;16408:93;:::i;:::-;16526:2;16521:3;16517:12;16510:19;;16169:366;;;:::o;16541:::-;16683:3;16704:67;16768:2;16763:3;16704:67;:::i;:::-;16697:74;;16780:93;16869:3;16780:93;:::i;:::-;16898:2;16893:3;16889:12;16882:19;;16541:366;;;:::o;16913:::-;17055:3;17076:67;17140:2;17135:3;17076:67;:::i;:::-;17069:74;;17152:93;17241:3;17152:93;:::i;:::-;17270:2;17265:3;17261:12;17254:19;;16913:366;;;:::o;17285:::-;17427:3;17448:67;17512:2;17507:3;17448:67;:::i;:::-;17441:74;;17524:93;17613:3;17524:93;:::i;:::-;17642:2;17637:3;17633:12;17626:19;;17285:366;;;:::o;17657:::-;17799:3;17820:67;17884:2;17879:3;17820:67;:::i;:::-;17813:74;;17896:93;17985:3;17896:93;:::i;:::-;18014:2;18009:3;18005:12;17998:19;;17657:366;;;:::o;18029:::-;18171:3;18192:67;18256:2;18251:3;18192:67;:::i;:::-;18185:74;;18268:93;18357:3;18268:93;:::i;:::-;18386:2;18381:3;18377:12;18370:19;;18029:366;;;:::o;18401:::-;18543:3;18564:67;18628:2;18623:3;18564:67;:::i;:::-;18557:74;;18640:93;18729:3;18640:93;:::i;:::-;18758:2;18753:3;18749:12;18742:19;;18401:366;;;:::o;18773:::-;18915:3;18936:67;19000:2;18995:3;18936:67;:::i;:::-;18929:74;;19012:93;19101:3;19012:93;:::i;:::-;19130:2;19125:3;19121:12;19114:19;;18773:366;;;:::o;19145:::-;19287:3;19308:67;19372:2;19367:3;19308:67;:::i;:::-;19301:74;;19384:93;19473:3;19384:93;:::i;:::-;19502:2;19497:3;19493:12;19486:19;;19145:366;;;:::o;19517:::-;19659:3;19680:67;19744:2;19739:3;19680:67;:::i;:::-;19673:74;;19756:93;19845:3;19756:93;:::i;:::-;19874:2;19869:3;19865:12;19858:19;;19517:366;;;:::o;19889:::-;20031:3;20052:67;20116:2;20111:3;20052:67;:::i;:::-;20045:74;;20128:93;20217:3;20128:93;:::i;:::-;20246:2;20241:3;20237:12;20230:19;;19889:366;;;:::o;20261:398::-;20420:3;20441:83;20522:1;20517:3;20441:83;:::i;:::-;20434:90;;20533:93;20622:3;20533:93;:::i;:::-;20651:1;20646:3;20642:11;20635:18;;20261:398;;;:::o;20665:366::-;20807:3;20828:67;20892:2;20887:3;20828:67;:::i;:::-;20821:74;;20904:93;20993:3;20904:93;:::i;:::-;21022:2;21017:3;21013:12;21006:19;;20665:366;;;:::o;21037:::-;21179:3;21200:67;21264:2;21259:3;21200:67;:::i;:::-;21193:74;;21276:93;21365:3;21276:93;:::i;:::-;21394:2;21389:3;21385:12;21378:19;;21037:366;;;:::o;21409:::-;21551:3;21572:67;21636:2;21631:3;21572:67;:::i;:::-;21565:74;;21648:93;21737:3;21648:93;:::i;:::-;21766:2;21761:3;21757:12;21750:19;;21409:366;;;:::o;21781:::-;21923:3;21944:67;22008:2;22003:3;21944:67;:::i;:::-;21937:74;;22020:93;22109:3;22020:93;:::i;:::-;22138:2;22133:3;22129:12;22122:19;;21781:366;;;:::o;22153:::-;22295:3;22316:67;22380:2;22375:3;22316:67;:::i;:::-;22309:74;;22392:93;22481:3;22392:93;:::i;:::-;22510:2;22505:3;22501:12;22494:19;;22153:366;;;:::o;22525:::-;22667:3;22688:67;22752:2;22747:3;22688:67;:::i;:::-;22681:74;;22764:93;22853:3;22764:93;:::i;:::-;22882:2;22877:3;22873:12;22866:19;;22525:366;;;:::o;22897:::-;23039:3;23060:67;23124:2;23119:3;23060:67;:::i;:::-;23053:74;;23136:93;23225:3;23136:93;:::i;:::-;23254:2;23249:3;23245:12;23238:19;;22897:366;;;:::o;23269:108::-;23346:24;23364:5;23346:24;:::i;:::-;23341:3;23334:37;23269:108;;:::o;23383:118::-;23470:24;23488:5;23470:24;:::i;:::-;23465:3;23458:37;23383:118;;:::o;23507:589::-;23732:3;23754:95;23845:3;23836:6;23754:95;:::i;:::-;23747:102;;23866:95;23957:3;23948:6;23866:95;:::i;:::-;23859:102;;23978:92;24066:3;24057:6;23978:92;:::i;:::-;23971:99;;24087:3;24080:10;;23507:589;;;;;;:::o;24102:379::-;24286:3;24308:147;24451:3;24308:147;:::i;:::-;24301:154;;24472:3;24465:10;;24102:379;;;:::o;24487:222::-;24580:4;24618:2;24607:9;24603:18;24595:26;;24631:71;24699:1;24688:9;24684:17;24675:6;24631:71;:::i;:::-;24487:222;;;;:::o;24715:640::-;24910:4;24948:3;24937:9;24933:19;24925:27;;24962:71;25030:1;25019:9;25015:17;25006:6;24962:71;:::i;:::-;25043:72;25111:2;25100:9;25096:18;25087:6;25043:72;:::i;:::-;25125;25193:2;25182:9;25178:18;25169:6;25125:72;:::i;:::-;25244:9;25238:4;25234:20;25229:2;25218:9;25214:18;25207:48;25272:76;25343:4;25334:6;25272:76;:::i;:::-;25264:84;;24715:640;;;;;;;:::o;25361:332::-;25482:4;25520:2;25509:9;25505:18;25497:26;;25533:71;25601:1;25590:9;25586:17;25577:6;25533:71;:::i;:::-;25614:72;25682:2;25671:9;25667:18;25658:6;25614:72;:::i;:::-;25361:332;;;;;:::o;25699:373::-;25842:4;25880:2;25869:9;25865:18;25857:26;;25929:9;25923:4;25919:20;25915:1;25904:9;25900:17;25893:47;25957:108;26060:4;26051:6;25957:108;:::i;:::-;25949:116;;25699:373;;;;:::o;26078:210::-;26165:4;26203:2;26192:9;26188:18;26180:26;;26216:65;26278:1;26267:9;26263:17;26254:6;26216:65;:::i;:::-;26078:210;;;;:::o;26294:313::-;26407:4;26445:2;26434:9;26430:18;26422:26;;26494:9;26488:4;26484:20;26480:1;26469:9;26465:17;26458:47;26522:78;26595:4;26586:6;26522:78;:::i;:::-;26514:86;;26294:313;;;;:::o;26613:419::-;26779:4;26817:2;26806:9;26802:18;26794:26;;26866:9;26860:4;26856:20;26852:1;26841:9;26837:17;26830:47;26894:131;27020:4;26894:131;:::i;:::-;26886:139;;26613:419;;;:::o;27038:::-;27204:4;27242:2;27231:9;27227:18;27219:26;;27291:9;27285:4;27281:20;27277:1;27266:9;27262:17;27255:47;27319:131;27445:4;27319:131;:::i;:::-;27311:139;;27038:419;;;:::o;27463:::-;27629:4;27667:2;27656:9;27652:18;27644:26;;27716:9;27710:4;27706:20;27702:1;27691:9;27687:17;27680:47;27744:131;27870:4;27744:131;:::i;:::-;27736:139;;27463:419;;;:::o;27888:::-;28054:4;28092:2;28081:9;28077:18;28069:26;;28141:9;28135:4;28131:20;28127:1;28116:9;28112:17;28105:47;28169:131;28295:4;28169:131;:::i;:::-;28161:139;;27888:419;;;:::o;28313:::-;28479:4;28517:2;28506:9;28502:18;28494:26;;28566:9;28560:4;28556:20;28552:1;28541:9;28537:17;28530:47;28594:131;28720:4;28594:131;:::i;:::-;28586:139;;28313:419;;;:::o;28738:::-;28904:4;28942:2;28931:9;28927:18;28919:26;;28991:9;28985:4;28981:20;28977:1;28966:9;28962:17;28955:47;29019:131;29145:4;29019:131;:::i;:::-;29011:139;;28738:419;;;:::o;29163:::-;29329:4;29367:2;29356:9;29352:18;29344:26;;29416:9;29410:4;29406:20;29402:1;29391:9;29387:17;29380:47;29444:131;29570:4;29444:131;:::i;:::-;29436:139;;29163:419;;;:::o;29588:::-;29754:4;29792:2;29781:9;29777:18;29769:26;;29841:9;29835:4;29831:20;29827:1;29816:9;29812:17;29805:47;29869:131;29995:4;29869:131;:::i;:::-;29861:139;;29588:419;;;:::o;30013:::-;30179:4;30217:2;30206:9;30202:18;30194:26;;30266:9;30260:4;30256:20;30252:1;30241:9;30237:17;30230:47;30294:131;30420:4;30294:131;:::i;:::-;30286:139;;30013:419;;;:::o;30438:::-;30604:4;30642:2;30631:9;30627:18;30619:26;;30691:9;30685:4;30681:20;30677:1;30666:9;30662:17;30655:47;30719:131;30845:4;30719:131;:::i;:::-;30711:139;;30438:419;;;:::o;30863:::-;31029:4;31067:2;31056:9;31052:18;31044:26;;31116:9;31110:4;31106:20;31102:1;31091:9;31087:17;31080:47;31144:131;31270:4;31144:131;:::i;:::-;31136:139;;30863:419;;;:::o;31288:::-;31454:4;31492:2;31481:9;31477:18;31469:26;;31541:9;31535:4;31531:20;31527:1;31516:9;31512:17;31505:47;31569:131;31695:4;31569:131;:::i;:::-;31561:139;;31288:419;;;:::o;31713:::-;31879:4;31917:2;31906:9;31902:18;31894:26;;31966:9;31960:4;31956:20;31952:1;31941:9;31937:17;31930:47;31994:131;32120:4;31994:131;:::i;:::-;31986:139;;31713:419;;;:::o;32138:::-;32304:4;32342:2;32331:9;32327:18;32319:26;;32391:9;32385:4;32381:20;32377:1;32366:9;32362:17;32355:47;32419:131;32545:4;32419:131;:::i;:::-;32411:139;;32138:419;;;:::o;32563:::-;32729:4;32767:2;32756:9;32752:18;32744:26;;32816:9;32810:4;32806:20;32802:1;32791:9;32787:17;32780:47;32844:131;32970:4;32844:131;:::i;:::-;32836:139;;32563:419;;;:::o;32988:::-;33154:4;33192:2;33181:9;33177:18;33169:26;;33241:9;33235:4;33231:20;33227:1;33216:9;33212:17;33205:47;33269:131;33395:4;33269:131;:::i;:::-;33261:139;;32988:419;;;:::o;33413:::-;33579:4;33617:2;33606:9;33602:18;33594:26;;33666:9;33660:4;33656:20;33652:1;33641:9;33637:17;33630:47;33694:131;33820:4;33694:131;:::i;:::-;33686:139;;33413:419;;;:::o;33838:::-;34004:4;34042:2;34031:9;34027:18;34019:26;;34091:9;34085:4;34081:20;34077:1;34066:9;34062:17;34055:47;34119:131;34245:4;34119:131;:::i;:::-;34111:139;;33838:419;;;:::o;34263:::-;34429:4;34467:2;34456:9;34452:18;34444:26;;34516:9;34510:4;34506:20;34502:1;34491:9;34487:17;34480:47;34544:131;34670:4;34544:131;:::i;:::-;34536:139;;34263:419;;;:::o;34688:::-;34854:4;34892:2;34881:9;34877:18;34869:26;;34941:9;34935:4;34931:20;34927:1;34916:9;34912:17;34905:47;34969:131;35095:4;34969:131;:::i;:::-;34961:139;;34688:419;;;:::o;35113:::-;35279:4;35317:2;35306:9;35302:18;35294:26;;35366:9;35360:4;35356:20;35352:1;35341:9;35337:17;35330:47;35394:131;35520:4;35394:131;:::i;:::-;35386:139;;35113:419;;;:::o;35538:::-;35704:4;35742:2;35731:9;35727:18;35719:26;;35791:9;35785:4;35781:20;35777:1;35766:9;35762:17;35755:47;35819:131;35945:4;35819:131;:::i;:::-;35811:139;;35538:419;;;:::o;35963:::-;36129:4;36167:2;36156:9;36152:18;36144:26;;36216:9;36210:4;36206:20;36202:1;36191:9;36187:17;36180:47;36244:131;36370:4;36244:131;:::i;:::-;36236:139;;35963:419;;;:::o;36388:::-;36554:4;36592:2;36581:9;36577:18;36569:26;;36641:9;36635:4;36631:20;36627:1;36616:9;36612:17;36605:47;36669:131;36795:4;36669:131;:::i;:::-;36661:139;;36388:419;;;:::o;36813:::-;36979:4;37017:2;37006:9;37002:18;36994:26;;37066:9;37060:4;37056:20;37052:1;37041:9;37037:17;37030:47;37094:131;37220:4;37094:131;:::i;:::-;37086:139;;36813:419;;;:::o;37238:::-;37404:4;37442:2;37431:9;37427:18;37419:26;;37491:9;37485:4;37481:20;37477:1;37466:9;37462:17;37455:47;37519:131;37645:4;37519:131;:::i;:::-;37511:139;;37238:419;;;:::o;37663:::-;37829:4;37867:2;37856:9;37852:18;37844:26;;37916:9;37910:4;37906:20;37902:1;37891:9;37887:17;37880:47;37944:131;38070:4;37944:131;:::i;:::-;37936:139;;37663:419;;;:::o;38088:222::-;38181:4;38219:2;38208:9;38204:18;38196:26;;38232:71;38300:1;38289:9;38285:17;38276:6;38232:71;:::i;:::-;38088:222;;;;:::o;38316:129::-;38350:6;38377:20;;:::i;:::-;38367:30;;38406:33;38434:4;38426:6;38406:33;:::i;:::-;38316:129;;;:::o;38451:75::-;38484:6;38517:2;38511:9;38501:19;;38451:75;:::o;38532:307::-;38593:4;38683:18;38675:6;38672:30;38669:56;;;38705:18;;:::i;:::-;38669:56;38743:29;38765:6;38743:29;:::i;:::-;38735:37;;38827:4;38821;38817:15;38809:23;;38532:307;;;:::o;38845:308::-;38907:4;38997:18;38989:6;38986:30;38983:56;;;39019:18;;:::i;:::-;38983:56;39057:29;39079:6;39057:29;:::i;:::-;39049:37;;39141:4;39135;39131:15;39123:23;;38845:308;;;:::o;39159:132::-;39226:4;39249:3;39241:11;;39279:4;39274:3;39270:14;39262:22;;39159:132;;;:::o;39297:141::-;39346:4;39369:3;39361:11;;39392:3;39389:1;39382:14;39426:4;39423:1;39413:18;39405:26;;39297:141;;;:::o;39444:114::-;39511:6;39545:5;39539:12;39529:22;;39444:114;;;:::o;39564:98::-;39615:6;39649:5;39643:12;39633:22;;39564:98;;;:::o;39668:99::-;39720:6;39754:5;39748:12;39738:22;;39668:99;;;:::o;39773:113::-;39843:4;39875;39870:3;39866:14;39858:22;;39773:113;;;:::o;39892:184::-;39991:11;40025:6;40020:3;40013:19;40065:4;40060:3;40056:14;40041:29;;39892:184;;;;:::o;40082:168::-;40165:11;40199:6;40194:3;40187:19;40239:4;40234:3;40230:14;40215:29;;40082:168;;;;:::o;40256:147::-;40357:11;40394:3;40379:18;;40256:147;;;;:::o;40409:169::-;40493:11;40527:6;40522:3;40515:19;40567:4;40562:3;40558:14;40543:29;;40409:169;;;;:::o;40584:148::-;40686:11;40723:3;40708:18;;40584:148;;;;:::o;40738:305::-;40778:3;40797:20;40815:1;40797:20;:::i;:::-;40792:25;;40831:20;40849:1;40831:20;:::i;:::-;40826:25;;40985:1;40917:66;40913:74;40910:1;40907:81;40904:107;;;40991:18;;:::i;:::-;40904:107;41035:1;41032;41028:9;41021:16;;40738:305;;;;:::o;41049:185::-;41089:1;41106:20;41124:1;41106:20;:::i;:::-;41101:25;;41140:20;41158:1;41140:20;:::i;:::-;41135:25;;41179:1;41169:35;;41184:18;;:::i;:::-;41169:35;41226:1;41223;41219:9;41214:14;;41049:185;;;;:::o;41240:348::-;41280:7;41303:20;41321:1;41303:20;:::i;:::-;41298:25;;41337:20;41355:1;41337:20;:::i;:::-;41332:25;;41525:1;41457:66;41453:74;41450:1;41447:81;41442:1;41435:9;41428:17;41424:105;41421:131;;;41532:18;;:::i;:::-;41421:131;41580:1;41577;41573:9;41562:20;;41240:348;;;;:::o;41594:191::-;41634:4;41654:20;41672:1;41654:20;:::i;:::-;41649:25;;41688:20;41706:1;41688:20;:::i;:::-;41683:25;;41727:1;41724;41721:8;41718:34;;;41732:18;;:::i;:::-;41718:34;41777:1;41774;41770:9;41762:17;;41594:191;;;;:::o;41791:96::-;41828:7;41857:24;41875:5;41857:24;:::i;:::-;41846:35;;41791:96;;;:::o;41893:104::-;41938:7;41967:24;41985:5;41967:24;:::i;:::-;41956:35;;41893:104;;;:::o;42003:90::-;42037:7;42080:5;42073:13;42066:21;42055:32;;42003:90;;;:::o;42099:149::-;42135:7;42175:66;42168:5;42164:78;42153:89;;42099:149;;;:::o;42254:126::-;42291:7;42331:42;42324:5;42320:54;42309:65;;42254:126;;;:::o;42386:77::-;42423:7;42452:5;42441:16;;42386:77;;;:::o;42469:154::-;42553:6;42548:3;42543;42530:30;42615:1;42606:6;42601:3;42597:16;42590:27;42469:154;;;:::o;42629:307::-;42697:1;42707:113;42721:6;42718:1;42715:13;42707:113;;;42806:1;42801:3;42797:11;42791:18;42787:1;42782:3;42778:11;42771:39;42743:2;42740:1;42736:10;42731:15;;42707:113;;;42838:6;42835:1;42832:13;42829:101;;;42918:1;42909:6;42904:3;42900:16;42893:27;42829:101;42678:258;42629:307;;;:::o;42942:320::-;42986:6;43023:1;43017:4;43013:12;43003:22;;43070:1;43064:4;43060:12;43091:18;43081:81;;43147:4;43139:6;43135:17;43125:27;;43081:81;43209:2;43201:6;43198:14;43178:18;43175:38;43172:84;;;43228:18;;:::i;:::-;43172:84;42993:269;42942:320;;;:::o;43268:281::-;43351:27;43373:4;43351:27;:::i;:::-;43343:6;43339:40;43481:6;43469:10;43466:22;43445:18;43433:10;43430:34;43427:62;43424:88;;;43492:18;;:::i;:::-;43424:88;43532:10;43528:2;43521:22;43311:238;43268:281;;:::o;43555:233::-;43594:3;43617:24;43635:5;43617:24;:::i;:::-;43608:33;;43663:66;43656:5;43653:77;43650:103;;;43733:18;;:::i;:::-;43650:103;43780:1;43773:5;43769:13;43762:20;;43555:233;;;:::o;43794:176::-;43826:1;43843:20;43861:1;43843:20;:::i;:::-;43838:25;;43877:20;43895:1;43877:20;:::i;:::-;43872:25;;43916:1;43906:35;;43921:18;;:::i;:::-;43906:35;43962:1;43959;43955:9;43950:14;;43794:176;;;;:::o;43976:180::-;44024:77;44021:1;44014:88;44121:4;44118:1;44111:15;44145:4;44142:1;44135:15;44162:180;44210:77;44207:1;44200:88;44307:4;44304:1;44297:15;44331:4;44328:1;44321:15;44348:180;44396:77;44393:1;44386:88;44493:4;44490:1;44483:15;44517:4;44514:1;44507:15;44534:180;44582:77;44579:1;44572:88;44679:4;44676:1;44669:15;44703:4;44700:1;44693:15;44720:180;44768:77;44765:1;44758:88;44865:4;44862:1;44855:15;44889:4;44886:1;44879:15;44906:180;44954:77;44951:1;44944:88;45051:4;45048:1;45041:15;45075:4;45072:1;45065:15;45092:117;45201:1;45198;45191:12;45215:117;45324:1;45321;45314:12;45338:117;45447:1;45444;45437:12;45461:117;45570:1;45567;45560:12;45584:117;45693:1;45690;45683:12;45707:117;45816:1;45813;45806:12;45830:102;45871:6;45922:2;45918:7;45913:2;45906:5;45902:14;45898:28;45888:38;;45830:102;;;:::o;45938:230::-;46078:34;46074:1;46066:6;46062:14;46055:58;46147:13;46142:2;46134:6;46130:15;46123:38;45938:230;:::o;46174:237::-;46314:34;46310:1;46302:6;46298:14;46291:58;46383:20;46378:2;46370:6;46366:15;46359:45;46174:237;:::o;46417:225::-;46557:34;46553:1;46545:6;46541:14;46534:58;46626:8;46621:2;46613:6;46609:15;46602:33;46417:225;:::o;46648:178::-;46788:30;46784:1;46776:6;46772:14;46765:54;46648:178;:::o;46832:::-;46972:30;46968:1;46960:6;46956:14;46949:54;46832:178;:::o;47016:223::-;47156:34;47152:1;47144:6;47140:14;47133:58;47225:6;47220:2;47212:6;47208:15;47201:31;47016:223;:::o;47245:175::-;47385:27;47381:1;47373:6;47369:14;47362:51;47245:175;:::o;47426:231::-;47566:34;47562:1;47554:6;47550:14;47543:58;47635:14;47630:2;47622:6;47618:15;47611:39;47426:231;:::o;47663:243::-;47803:34;47799:1;47791:6;47787:14;47780:58;47872:26;47867:2;47859:6;47855:15;47848:51;47663:243;:::o;47912:229::-;48052:34;48048:1;48040:6;48036:14;48029:58;48121:12;48116:2;48108:6;48104:15;48097:37;47912:229;:::o;48147:228::-;48287:34;48283:1;48275:6;48271:14;48264:58;48356:11;48351:2;48343:6;48339:15;48332:36;48147:228;:::o;48381:172::-;48521:24;48517:1;48509:6;48505:14;48498:48;48381:172;:::o;48559:223::-;48699:34;48695:1;48687:6;48683:14;48676:58;48768:6;48763:2;48755:6;48751:15;48744:31;48559:223;:::o;48788:182::-;48928:34;48924:1;48916:6;48912:14;48905:58;48788:182;:::o;48976:231::-;49116:34;49112:1;49104:6;49100:14;49093:58;49185:14;49180:2;49172:6;49168:15;49161:39;48976:231;:::o;49213:182::-;49353:34;49349:1;49341:6;49337:14;49330:58;49213:182;:::o;49401:172::-;49541:24;49537:1;49529:6;49525:14;49518:48;49401:172;:::o;49579:228::-;49719:34;49715:1;49707:6;49703:14;49696:58;49788:11;49783:2;49775:6;49771:15;49764:36;49579:228;:::o;49813:234::-;49953:34;49949:1;49941:6;49937:14;49930:58;50022:17;50017:2;50009:6;50005:15;49998:42;49813:234;:::o;50053:220::-;50193:34;50189:1;50181:6;50177:14;50170:58;50262:3;50257:2;50249:6;50245:15;50238:28;50053:220;:::o;50279:114::-;;:::o;50399:168::-;50539:20;50535:1;50527:6;50523:14;50516:44;50399:168;:::o;50573:236::-;50713:34;50709:1;50701:6;50697:14;50690:58;50782:19;50777:2;50769:6;50765:15;50758:44;50573:236;:::o;50815:177::-;50955:29;50951:1;50943:6;50939:14;50932:53;50815:177;:::o;50998:231::-;51138:34;51134:1;51126:6;51122:14;51115:58;51207:14;51202:2;51194:6;51190:15;51183:39;50998:231;:::o;51235:229::-;51375:34;51371:1;51363:6;51359:14;51352:58;51444:12;51439:2;51431:6;51427:15;51420:37;51235:229;:::o;51470:173::-;51610:25;51606:1;51598:6;51594:14;51587:49;51470:173;:::o;51649:177::-;51789:29;51785:1;51777:6;51773:14;51766:53;51649:177;:::o;51832:122::-;51905:24;51923:5;51905:24;:::i;:::-;51898:5;51895:35;51885:63;;51944:1;51941;51934:12;51885:63;51832:122;:::o;51960:138::-;52041:32;52067:5;52041:32;:::i;:::-;52034:5;52031:43;52021:71;;52088:1;52085;52078:12;52021:71;51960:138;:::o;52104:116::-;52174:21;52189:5;52174:21;:::i;:::-;52167:5;52164:32;52154:60;;52210:1;52207;52200:12;52154:60;52104:116;:::o;52226:120::-;52298:23;52315:5;52298:23;:::i;:::-;52291:5;52288:34;52278:62;;52336:1;52333;52326:12;52278:62;52226:120;:::o;52352:122::-;52425:24;52443:5;52425:24;:::i;:::-;52418:5;52415:35;52405:63;;52464:1;52461;52454:12;52405:63;52352:122;:::o
Swarm Source
ipfs://46c5ae76b059380476da73b2ffde4f0aa7b759d27ae82566288761335afdd5b4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.