More Info
Private Name Tags
ContractCreator:
TokenTracker
Sponsored
Latest 25 from a total of 847 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Approve | 78143551 | 3 days ago | IN | 0 FTM | 0.00150108 | ||||
Set Approval For... | 77935113 | 6 days ago | IN | 0 FTM | 0.0057392 | ||||
Set Approval For... | 77691622 | 9 days ago | IN | 0 FTM | 0.00533605 | ||||
Approve | 77017981 | 19 days ago | IN | 0 FTM | 0.00232707 | ||||
Approve | 77017968 | 19 days ago | IN | 0 FTM | 0.00237912 | ||||
Approve | 76477586 | 28 days ago | IN | 0 FTM | 0.00415143 | ||||
Approve | 76350959 | 31 days ago | IN | 0 FTM | 0.0050537 | ||||
Set Approval For... | 76344027 | 31 days ago | IN | 0 FTM | 0.00451472 | ||||
Set Approval For... | 76275659 | 32 days ago | IN | 0 FTM | 0.00097479 | ||||
Set Approval For... | 76275650 | 32 days ago | IN | 0 FTM | 0.00097479 | ||||
Set Approval For... | 75114258 | 52 days ago | IN | 0 FTM | 0.00137348 | ||||
Transfer From | 74756133 | 63 days ago | IN | 0 FTM | 0.01341285 | ||||
Approve | 74101477 | 76 days ago | IN | 0 FTM | 0.00258835 | ||||
Set Approval For... | 72682901 | 101 days ago | IN | 0 FTM | 0.00063065 | ||||
Set Approval For... | 72308137 | 109 days ago | IN | 0 FTM | 0.00496805 | ||||
Set Approval For... | 72143949 | 112 days ago | IN | 0 FTM | 0.01477866 | ||||
Approve | 71826705 | 115 days ago | IN | 0 FTM | 0.00176843 | ||||
Approve | 71826695 | 115 days ago | IN | 0 FTM | 0.0017678 | ||||
Approve | 71826672 | 115 days ago | IN | 0 FTM | 0.00178971 | ||||
Set Approval For... | 70885705 | 129 days ago | IN | 0 FTM | 0.00225643 | ||||
Set Approval For... | 70792176 | 131 days ago | IN | 0 FTM | 0.00076229 | ||||
Set Approval For... | 70792168 | 131 days ago | IN | 0 FTM | 0.00076229 | ||||
Set Approval For... | 70773695 | 131 days ago | IN | 0 FTM | 0.00061504 | ||||
Set Approval For... | 70351495 | 140 days ago | IN | 0 FTM | 0.0015571 | ||||
Set Approval For... | 70084056 | 147 days ago | IN | 0 FTM | 0.0064441 |
Loading...
Loading
Contract Name:
Anonymons
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-08-20 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (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`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @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 // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (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/MAINNETTST2.sol pragma solidity >=0.7.0 <0.9.0; contract Anonymons is ERC721Enumerable, Ownable { using Strings for uint256; struct UserData { uint256 minted; } string baseURI; string public baseExtension = ".json"; uint256 public cost = 45 ether; uint256 public maxSupply = 888; uint256 public maxPerTx = 20; uint256 public maxPerWallet = 222; // Max amount of tokenIDs allowed to be minted by single wallet uint256 public nftPerAddressLimit = 100; // NFT per whitelist spot uint256 private _scopeIndex = 0; // Clamping cache for random TokenID generation in the anti-sniping algo uint256 private immutable _scopeCap; // Size of initial randomized number pool & max generated value (zero indexed) uint256 private _preMinted = 100; // Numbers of tokens that need to be preminted bool public paused = true; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(uint256 => uint256) _swappedIDs; // TokenID cache for random TokenID generation in the anti-sniping algo mapping(address => UserData) private userData; // Mapping to save how many tokens each address mints constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); _scopeCap = maxSupply - _preMinted; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _genClampedNonce() internal virtual returns (uint256) { uint256 scope = _scopeCap - _scopeIndex; uint256 swap; uint256 result; uint256 i = randomNumber() % scope; //Setup the value to swap in for the selected number if (_swappedIDs[scope - 1] == 0) { swap = scope - 1; } else { swap = _swappedIDs[scope - 1]; } //Select a random number, swap it out with an unselected one then shorten the selection range by 1 if (_swappedIDs[i] == 0) { result = i; _swappedIDs[i] = swap; } else { result = _swappedIDs[i]; _swappedIDs[i] = swap; } _scopeIndex++; return result + _preMinted; } function randomNumber() internal view returns (uint256) { return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxPerTx); require(supply + _mintAmount <= maxSupply); require(userData[msg.sender].minted + _mintAmount <= maxPerWallet, "You are trying to mint more NFTs than allowed for your wallet."); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "User is NOT whitelisted."); uint256 ownerTokenCount = balanceOf(msg.sender); require(ownerTokenCount < nftPerAddressLimit, "Max NFT for whitelist exceeded."); } require(msg.value >= cost * _mintAmount, "Insufficient funds."); } for (uint256 i = 1; i <= _mintAmount; i++) { uint tokenId = _genClampedNonce() + 1; _safeMint(msg.sender, tokenId); userData[msg.sender].minted += 1; } } function isWhitelisted(address _user) public view returns (bool) { for(uint256 i = 0; i < whitelistedAddresses.length; i++) { if(whitelistedAddresses[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" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setMaxPerTx(uint256 value) public onlyOwner { maxPerTx = value; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function preMint(uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0); require(_mintAmount <= _preMinted); require(supply + _mintAmount <= maxSupply); for (uint256 i = 1; i <= _mintAmount ; i++) { _safeMint(msg.sender, supply + i); } } function setMaxPerWallet(uint256 value) public onlyOwner { maxPerWallet = value; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_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":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000325565b50680270801d946c940000600d55610378600e556014600f5560de6010556064601155600060125560646013556001601460006101000a81548160ff0219169083151502179055506001601460016101000a81548160ff021916908315150217905550348015620000c157600080fd5b5060405162004eb338038062004eb38339818101604052810190620000e7919062000453565b828281600090805190602001906200010192919062000325565b5080600190805190602001906200011a92919062000325565b5050506200013d620001316200017060201b60201c565b6200017860201b60201c565b6200014e816200023e60201b60201c565b601354600e54620001609190620005c5565b6080818152505050505062000787565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024e6200026a60201b60201c565b80600b90805190602001906200026692919062000325565b5050565b6200027a6200017060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a0620002fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f09062000533565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003339062000640565b90600052602060002090601f016020900481019282620003575760008555620003a3565b82601f106200037257805160ff1916838001178555620003a3565b82800160010185558215620003a3579182015b82811115620003a257825182559160200191906001019062000385565b5b509050620003b29190620003b6565b5090565b5b80821115620003d1576000816000905550600101620003b7565b5090565b6000620003ec620003e6846200057e565b62000555565b9050828152602081018484840111156200040b576200040a6200073e565b5b620004188482856200060a565b509392505050565b600082601f83011262000438576200043762000739565b5b81516200044a848260208601620003d5565b91505092915050565b6000806000606084860312156200046f576200046e62000748565b5b600084015167ffffffffffffffff81111562000490576200048f62000743565b5b6200049e8682870162000420565b935050602084015167ffffffffffffffff811115620004c257620004c162000743565b5b620004d08682870162000420565b925050604084015167ffffffffffffffff811115620004f457620004f362000743565b5b620005028682870162000420565b9150509250925092565b60006200051b602083620005b4565b915062000528826200075e565b602082019050919050565b600060208201905081810360008301526200054e816200050c565b9050919050565b60006200056162000574565b90506200056f828262000676565b919050565b6000604051905090565b600067ffffffffffffffff8211156200059c576200059b6200070a565b5b620005a7826200074d565b9050602081019050919050565b600082825260208201905092915050565b6000620005d28262000600565b9150620005df8362000600565b925082821015620005f557620005f4620006ac565b5b828203905092915050565b6000819050919050565b60005b838110156200062a5780820151818401526020810190506200060d565b838111156200063a576000848401525b50505050565b600060028204905060018216806200065957607f821691505b6020821081141562000670576200066f620006db565b5b50919050565b62000681826200074d565b810181811067ffffffffffffffff82111715620006a357620006a26200070a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b608051614710620007a36000396000611f9e01526147106000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063ba7d2c76116100b6578063da3ef23f1161007a578063da3ef23f14610886578063e268e4d3146108af578063e985e9c5146108d8578063edec5f2714610915578063f2fde38b1461093e578063f968adbe1461096757610246565b8063ba7d2c761461079f578063c6682862146107ca578063c6f6f216146107f5578063c87b56dd1461081e578063d5abeb011461085b57610246565b80639c70b512116100fd5780639c70b512146106c9578063a0712d68146106f4578063a22cb46514610710578063b88d4fde14610739578063ba4e5c491461076257610246565b806370a08231146105f6578063715018a6146106335780638ad433ac1461064a5780638da5cb5b1461067357806395d89b411461069e57610246565b80633c952764116101c7578063453c23101161018b578063453c2310146104fd5780634f6ccce71461052857806355f804b3146105655780635c975abb1461058e5780636352211e146105b957610246565b80633c9527641461043b5780633ccfd60b1461046457806342842e0e1461046e578063438b63001461049757806344a0d68a146104d457610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806323b872dd146103985780632f745c59146103c15780633af32abf146103fe57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906132f4565b610992565b60405161027f9190613989565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906132c7565b610a0c565b005b3480156102bd57600080fd5b506102c6610a31565b6040516102d391906139a4565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613397565b610ac3565b6040516103109190613900565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061323a565b610b09565b005b34801561034e57600080fd5b50610357610c21565b6040516103649190613c46565b60405180910390f35b34801561037957600080fd5b50610382610c27565b60405161038f9190613c46565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613124565b610c34565b005b3480156103cd57600080fd5b506103e860048036038101906103e3919061323a565b610c94565b6040516103f59190613c46565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906130b7565b610d39565b6040516104329190613989565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906132c7565b610de8565b005b61046c610e0d565b005b34801561047a57600080fd5b5061049560048036038101906104909190613124565b610e8e565b005b3480156104a357600080fd5b506104be60048036038101906104b991906130b7565b610eae565b6040516104cb9190613967565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613397565b610f5c565b005b34801561050957600080fd5b50610512610f6e565b60405161051f9190613c46565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613397565b610f74565b60405161055c9190613c46565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061334e565b610fe5565b005b34801561059a57600080fd5b506105a3611007565b6040516105b09190613989565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613397565b61101a565b6040516105ed9190613900565b60405180910390f35b34801561060257600080fd5b5061061d600480360381019061061891906130b7565b6110cc565b60405161062a9190613c46565b60405180910390f35b34801561063f57600080fd5b50610648611184565b005b34801561065657600080fd5b50610671600480360381019061066c9190613397565b611198565b005b34801561067f57600080fd5b5061068861121d565b6040516106959190613900565b60405180910390f35b3480156106aa57600080fd5b506106b3611247565b6040516106c091906139a4565b60405180910390f35b3480156106d557600080fd5b506106de6112d9565b6040516106eb9190613989565b60405180910390f35b61070e60048036038101906107099190613397565b6112ec565b005b34801561071c57600080fd5b50610737600480360381019061073291906131fa565b6115bf565b005b34801561074557600080fd5b50610760600480360381019061075b9190613177565b6115d5565b005b34801561076e57600080fd5b5061078960048036038101906107849190613397565b611637565b6040516107969190613900565b60405180910390f35b3480156107ab57600080fd5b506107b4611676565b6040516107c19190613c46565b60405180910390f35b3480156107d657600080fd5b506107df61167c565b6040516107ec91906139a4565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613397565b61170a565b005b34801561082a57600080fd5b5061084560048036038101906108409190613397565b61171c565b60405161085291906139a4565b60405180910390f35b34801561086757600080fd5b506108706117c6565b60405161087d9190613c46565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061334e565b6117cc565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190613397565b6117ee565b005b3480156108e457600080fd5b506108ff60048036038101906108fa91906130e4565b611800565b60405161090c9190613989565b60405180910390f35b34801561092157600080fd5b5061093c6004803603810190610937919061327a565b611894565b005b34801561094a57600080fd5b50610965600480360381019061096091906130b7565b6118c0565b005b34801561097357600080fd5b5061097c611944565b6040516109899190613c46565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a048261194a565b5b9050919050565b610a14611a2c565b80601460006101000a81548160ff02191690831515021790555050565b606060008054610a4090613f4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90613f4f565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ace82611aaa565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b148261101a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613bc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba4611af5565b73ffffffffffffffffffffffffffffffffffffffff161480610bd35750610bd281610bcd611af5565b611800565b5b610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613b26565b60405180910390fd5b610c1c8383611afd565b505050565b600d5481565b6000600880549050905090565b610c45610c3f611af5565b82611bb6565b610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613c06565b60405180910390fd5b610c8f838383611c4b565b505050565b6000610c9f836110cc565b8210610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906139c6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601580549050811015610ddd578273ffffffffffffffffffffffffffffffffffffffff1660158281548110610d7957610d786140f2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dca576001915050610de3565b8080610dd590613fb2565b915050610d41565b50600090505b919050565b610df0611a2c565b80601460016101000a81548160ff02191690831515021790555050565b610e15611a2c565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3b906138bf565b60006040518083038185875af1925050503d8060008114610e78576040519150601f19603f3d011682016040523d82523d6000602084013e610e7d565b606091505b5050905080610e8b57600080fd5b50565b610ea9838383604051806020016040528060008152506115d5565b505050565b60606000610ebb836110cc565b905060008167ffffffffffffffff811115610ed957610ed8614121565b5b604051908082528060200260200182016040528015610f075781602001602082028036833780820191505090505b50905060005b82811015610f5157610f1f8582610c94565b828281518110610f3257610f316140f2565b5b6020026020010181815250508080610f4990613fb2565b915050610f0d565b508092505050919050565b610f64611a2c565b80600d8190555050565b60105481565b6000610f7e610c27565b8210610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690613be6565b60405180910390fd5b60088281548110610fd357610fd26140f2565b5b90600052602060002001549050919050565b610fed611a2c565b80600b9080519060200190611003929190612db4565b5050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613ba6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490613b06565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118c611a2c565b6111966000611eb2565b565b6111a0611a2c565b60006111aa610c27565b9050600082116111b957600080fd5b6013548211156111c857600080fd5b600e5482826111d79190613d84565b11156111e257600080fd5b6000600190505b828111611218576112053382846112009190613d84565b611f78565b808061121090613fb2565b9150506111e9565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461125690613f4f565b80601f016020809104026020016040519081016040528092919081815260200182805461128290613f4f565b80156112cf5780601f106112a4576101008083540402835291602001916112cf565b820191906000526020600020905b8154815290600101906020018083116112b257829003601f168201915b5050505050905090565b601460019054906101000a900460ff1681565b60006112f6610c27565b9050601460009054906101000a900460ff161561131257600080fd5b6000821161131f57600080fd5b600f5482111561132e57600080fd5b600e54828261133d9190613d84565b111561134857600080fd5b60105482601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113999190613d84565b11156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190613ae6565b60405180910390fd5b6113e261121d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151c5760011515601460019054906101000a900460ff16151514156114cb5761143933610d39565b611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90613a86565b60405180910390fd5b6000611483336110cc565b905060115481106114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090613a66565b60405180910390fd5b505b81600d546114d99190613e0b565b34101561151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290613c26565b60405180910390fd5b5b6000600190505b8281116115ba5760006001611536611f96565b6115409190613d84565b905061154c3382611f78565b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461159f9190613d84565b925050819055505080806115b290613fb2565b915050611523565b505050565b6115d16115ca611af5565b83836120dc565b5050565b6115e66115e0611af5565b83611bb6565b611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90613c06565b60405180910390fd5b61163184848484612249565b50505050565b6015818154811061164757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461168990613f4f565b80601f01602080910402602001604051908101604052809291908181526020018280546116b590613f4f565b80156117025780601f106116d757610100808354040283529160200191611702565b820191906000526020600020905b8154815290600101906020018083116116e557829003601f168201915b505050505081565b611712611a2c565b80600f8190555050565b6060611727826122a5565b611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90613b86565b60405180910390fd5b6000611770612311565b9050600081511161179057604051806020016040528060008152506117be565b8061179a846123a3565b600c6040516020016117ae9392919061388e565b6040516020818303038152906040525b915050919050565b600e5481565b6117d4611a2c565b80600c90805190602001906117ea929190612db4565b5050565b6117f6611a2c565b8060108190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61189c611a2c565b601560006118aa9190612e3a565b8181601591906118bb929190612e5b565b505050565b6118c8611a2c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613a06565b60405180910390fd5b61194181611eb2565b50565b600f5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a1557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a255750611a2482612504565b5b9050919050565b611a34611af5565b73ffffffffffffffffffffffffffffffffffffffff16611a5261121d565b73ffffffffffffffffffffffffffffffffffffffff1614611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613b66565b60405180910390fd5b565b611ab3816122a5565b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990613ba6565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b708361101a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611bc28361101a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c045750611c038185611800565b5b80611c4257508373ffffffffffffffffffffffffffffffffffffffff16611c2a84610ac3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c6b8261101a565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613a26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890613aa6565b60405180910390fd5b611d3c83838361256e565b611d47600082611afd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d979190613e65565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dee9190613d84565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ead838383612682565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f92828260405180602001604052806000815250612687565b5050565b6000806012547f0000000000000000000000000000000000000000000000000000000000000000611fc79190613e65565b9050600080600083611fd76126e2565b611fe19190614005565b9050600060166000600187611ff69190613e65565b815260200190815260200160002054141561201f576001846120189190613e65565b9250612042565b601660006001866120309190613e65565b81526020019081526020016000205492505b60006016600083815260200190815260200160002054141561207e578091508260166000838152602001908152602001600020819055506120ad565b601660008281526020019081526020016000205491508260166000838152602001908152602001600020819055505b601260008154809291906120c090613fb2565b9190505550601354826120d39190613d84565b94505050505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290613ac6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161223c9190613989565b60405180910390a3505050565b612254848484611c4b565b61226084848484612715565b61229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612296906139e6565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461232090613f4f565b80601f016020809104026020016040519081016040528092919081815260200182805461234c90613f4f565b80156123995780601f1061236e57610100808354040283529160200191612399565b820191906000526020600020905b81548152906001019060200180831161237c57829003601f168201915b5050505050905090565b606060008214156123eb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124ff565b600082905060005b6000821461241d57808061240690613fb2565b915050600a826124169190613dda565b91506123f3565b60008167ffffffffffffffff81111561243957612438614121565b5b6040519080825280601f01601f19166020018201604052801561246b5781602001600182028036833780820191505090505b5090505b600085146124f8576001826124849190613e65565b9150600a856124939190614005565b603061249f9190613d84565b60f81b8183815181106124b5576124b46140f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f19190613dda565b945061246f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125798383836128ac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125bc576125b7816128b1565b6125fb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125fa576125f983826128fa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263e5761263981612a67565b61267d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461267c5761267b8282612b38565b5b5b505050565b505050565b6126918383612bb7565b61269e6000848484612715565b6126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d4906139e6565b60405180910390fd5b505050565b600044426040516020016126f79291906138d4565b6040516020818303038152906040528051906020012060001c905090565b60006127368473ffffffffffffffffffffffffffffffffffffffff16612d91565b1561289f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275f611af5565b8786866040518563ffffffff1660e01b8152600401612781949392919061391b565b602060405180830381600087803b15801561279b57600080fd5b505af19250505080156127cc57506040513d601f19601f820116820180604052508101906127c99190613321565b60015b61284f573d80600081146127fc576040519150601f19603f3d011682016040523d82523d6000602084013e612801565b606091505b50600081511415612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e906139e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612907846110cc565b6129119190613e65565b90506000600760008481526020019081526020016000205490508181146129f6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a7b9190613e65565b9050600060096000848152602001908152602001600020549050600060088381548110612aab57612aaa6140f2565b5b906000526020600020015490508060088381548110612acd57612acc6140f2565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b1c57612b1b6140c3565b5b6001900381819060005260206000200160009055905550505050565b6000612b43836110cc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e90613b46565b60405180910390fd5b612c30816122a5565b15612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6790613a46565b60405180910390fd5b612c7c6000838361256e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccc9190613d84565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d8d60008383612682565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612dc090613f4f565b90600052602060002090601f016020900481019282612de25760008555612e29565b82601f10612dfb57805160ff1916838001178555612e29565b82800160010185558215612e29579182015b82811115612e28578251825591602001919060010190612e0d565b5b509050612e369190612efb565b5090565b5080546000825590600052602060002090810190612e589190612efb565b50565b828054828255906000526020600020908101928215612eea579160200282015b82811115612ee957823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612e7b565b5b509050612ef79190612efb565b5090565b5b80821115612f14576000816000905550600101612efc565b5090565b6000612f2b612f2684613c86565b613c61565b905082815260208101848484011115612f4757612f4661415f565b5b612f52848285613f0d565b509392505050565b6000612f6d612f6884613cb7565b613c61565b905082815260208101848484011115612f8957612f8861415f565b5b612f94848285613f0d565b509392505050565b600081359050612fab8161467e565b92915050565b60008083601f840112612fc757612fc6614155565b5b8235905067ffffffffffffffff811115612fe457612fe3614150565b5b60208301915083602082028301111561300057612fff61415a565b5b9250929050565b60008135905061301681614695565b92915050565b60008135905061302b816146ac565b92915050565b600081519050613040816146ac565b92915050565b600082601f83011261305b5761305a614155565b5b813561306b848260208601612f18565b91505092915050565b600082601f83011261308957613088614155565b5b8135613099848260208601612f5a565b91505092915050565b6000813590506130b1816146c3565b92915050565b6000602082840312156130cd576130cc614169565b5b60006130db84828501612f9c565b91505092915050565b600080604083850312156130fb576130fa614169565b5b600061310985828601612f9c565b925050602061311a85828601612f9c565b9150509250929050565b60008060006060848603121561313d5761313c614169565b5b600061314b86828701612f9c565b935050602061315c86828701612f9c565b925050604061316d868287016130a2565b9150509250925092565b6000806000806080858703121561319157613190614169565b5b600061319f87828801612f9c565b94505060206131b087828801612f9c565b93505060406131c1878288016130a2565b925050606085013567ffffffffffffffff8111156131e2576131e1614164565b5b6131ee87828801613046565b91505092959194509250565b6000806040838503121561321157613210614169565b5b600061321f85828601612f9c565b925050602061323085828601613007565b9150509250929050565b6000806040838503121561325157613250614169565b5b600061325f85828601612f9c565b9250506020613270858286016130a2565b9150509250929050565b6000806020838503121561329157613290614169565b5b600083013567ffffffffffffffff8111156132af576132ae614164565b5b6132bb85828601612fb1565b92509250509250929050565b6000602082840312156132dd576132dc614169565b5b60006132eb84828501613007565b91505092915050565b60006020828403121561330a57613309614169565b5b60006133188482850161301c565b91505092915050565b60006020828403121561333757613336614169565b5b600061334584828501613031565b91505092915050565b60006020828403121561336457613363614169565b5b600082013567ffffffffffffffff81111561338257613381614164565b5b61338e84828501613074565b91505092915050565b6000602082840312156133ad576133ac614169565b5b60006133bb848285016130a2565b91505092915050565b60006133d08383613859565b60208301905092915050565b6133e581613e99565b82525050565b60006133f682613d0d565b6134008185613d3b565b935061340b83613ce8565b8060005b8381101561343c57815161342388826133c4565b975061342e83613d2e565b92505060018101905061340f565b5085935050505092915050565b61345281613eab565b82525050565b600061346382613d18565b61346d8185613d4c565b935061347d818560208601613f1c565b6134868161416e565b840191505092915050565b600061349c82613d23565b6134a68185613d68565b93506134b6818560208601613f1c565b6134bf8161416e565b840191505092915050565b60006134d582613d23565b6134df8185613d79565b93506134ef818560208601613f1c565b80840191505092915050565b6000815461350881613f4f565b6135128186613d79565b9450600182166000811461352d576001811461353e57613571565b60ff19831686528186019350613571565b61354785613cf8565b60005b838110156135695781548189015260018201915060208101905061354a565b838801955050505b50505092915050565b6000613587602b83613d68565b91506135928261417f565b604082019050919050565b60006135aa603283613d68565b91506135b5826141ce565b604082019050919050565b60006135cd602683613d68565b91506135d88261421d565b604082019050919050565b60006135f0602583613d68565b91506135fb8261426c565b604082019050919050565b6000613613601c83613d68565b915061361e826142bb565b602082019050919050565b6000613636601f83613d68565b9150613641826142e4565b602082019050919050565b6000613659601883613d68565b91506136648261430d565b602082019050919050565b600061367c602483613d68565b915061368782614336565b604082019050919050565b600061369f601983613d68565b91506136aa82614385565b602082019050919050565b60006136c2603e83613d68565b91506136cd826143ae565b604082019050919050565b60006136e5602983613d68565b91506136f0826143fd565b604082019050919050565b6000613708603e83613d68565b91506137138261444c565b604082019050919050565b600061372b602083613d68565b91506137368261449b565b602082019050919050565b600061374e602083613d68565b9150613759826144c4565b602082019050919050565b6000613771602f83613d68565b915061377c826144ed565b604082019050919050565b6000613794601883613d68565b915061379f8261453c565b602082019050919050565b60006137b7602183613d68565b91506137c282614565565b604082019050919050565b60006137da600083613d5d565b91506137e5826145b4565b600082019050919050565b60006137fd602c83613d68565b9150613808826145b7565b604082019050919050565b6000613820602e83613d68565b915061382b82614606565b604082019050919050565b6000613843601383613d68565b915061384e82614655565b602082019050919050565b61386281613f03565b82525050565b61387181613f03565b82525050565b61388861388382613f03565b613ffb565b82525050565b600061389a82866134ca565b91506138a682856134ca565b91506138b282846134fb565b9150819050949350505050565b60006138ca826137cd565b9150819050919050565b60006138e08285613877565b6020820191506138f08284613877565b6020820191508190509392505050565b600060208201905061391560008301846133dc565b92915050565b600060808201905061393060008301876133dc565b61393d60208301866133dc565b61394a6040830185613868565b818103606083015261395c8184613458565b905095945050505050565b6000602082019050818103600083015261398181846133eb565b905092915050565b600060208201905061399e6000830184613449565b92915050565b600060208201905081810360008301526139be8184613491565b905092915050565b600060208201905081810360008301526139df8161357a565b9050919050565b600060208201905081810360008301526139ff8161359d565b9050919050565b60006020820190508181036000830152613a1f816135c0565b9050919050565b60006020820190508181036000830152613a3f816135e3565b9050919050565b60006020820190508181036000830152613a5f81613606565b9050919050565b60006020820190508181036000830152613a7f81613629565b9050919050565b60006020820190508181036000830152613a9f8161364c565b9050919050565b60006020820190508181036000830152613abf8161366f565b9050919050565b60006020820190508181036000830152613adf81613692565b9050919050565b60006020820190508181036000830152613aff816136b5565b9050919050565b60006020820190508181036000830152613b1f816136d8565b9050919050565b60006020820190508181036000830152613b3f816136fb565b9050919050565b60006020820190508181036000830152613b5f8161371e565b9050919050565b60006020820190508181036000830152613b7f81613741565b9050919050565b60006020820190508181036000830152613b9f81613764565b9050919050565b60006020820190508181036000830152613bbf81613787565b9050919050565b60006020820190508181036000830152613bdf816137aa565b9050919050565b60006020820190508181036000830152613bff816137f0565b9050919050565b60006020820190508181036000830152613c1f81613813565b9050919050565b60006020820190508181036000830152613c3f81613836565b9050919050565b6000602082019050613c5b6000830184613868565b92915050565b6000613c6b613c7c565b9050613c778282613f81565b919050565b6000604051905090565b600067ffffffffffffffff821115613ca157613ca0614121565b5b613caa8261416e565b9050602081019050919050565b600067ffffffffffffffff821115613cd257613cd1614121565b5b613cdb8261416e565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d8f82613f03565b9150613d9a83613f03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dcf57613dce614036565b5b828201905092915050565b6000613de582613f03565b9150613df083613f03565b925082613e0057613dff614065565b5b828204905092915050565b6000613e1682613f03565b9150613e2183613f03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5a57613e59614036565b5b828202905092915050565b6000613e7082613f03565b9150613e7b83613f03565b925082821015613e8e57613e8d614036565b5b828203905092915050565b6000613ea482613ee3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f3a578082015181840152602081019050613f1f565b83811115613f49576000848401525b50505050565b60006002820490506001821680613f6757607f821691505b60208210811415613f7b57613f7a614094565b5b50919050565b613f8a8261416e565b810181811067ffffffffffffffff82111715613fa957613fa8614121565b5b80604052505050565b6000613fbd82613f03565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ff057613fef614036565b5b600182019050919050565b6000819050919050565b600061401082613f03565b915061401b83613f03565b92508261402b5761402a614065565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178204e465420666f722077686974656c6973742065786365656465642e00600082015250565b7f55736572206973204e4f542077686974656c69737465642e0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752061726520747279696e6720746f206d696e74206d6f7265204e46547360008201527f207468616e20616c6c6f77656420666f7220796f75722077616c6c65742e0000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b61468781613e99565b811461469257600080fd5b50565b61469e81613eab565b81146146a957600080fd5b50565b6146b581613eb7565b81146146c057600080fd5b50565b6146cc81613f03565b81146146d757600080fd5b5056fea264697066735822122078992e85e50fc835531bf4458f1e34e0022ae24b350a425d0c7a1612a1fb374464736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009416e6f6e796d6f6e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003414e4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d654c33634e4d386a646671454e515648446977784c334b5a716e6931375a644d5170414d4e554138635264682f00000000000000000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c806370a0823111610139578063ba7d2c76116100b6578063da3ef23f1161007a578063da3ef23f14610886578063e268e4d3146108af578063e985e9c5146108d8578063edec5f2714610915578063f2fde38b1461093e578063f968adbe1461096757610246565b8063ba7d2c761461079f578063c6682862146107ca578063c6f6f216146107f5578063c87b56dd1461081e578063d5abeb011461085b57610246565b80639c70b512116100fd5780639c70b512146106c9578063a0712d68146106f4578063a22cb46514610710578063b88d4fde14610739578063ba4e5c491461076257610246565b806370a08231146105f6578063715018a6146106335780638ad433ac1461064a5780638da5cb5b1461067357806395d89b411461069e57610246565b80633c952764116101c7578063453c23101161018b578063453c2310146104fd5780634f6ccce71461052857806355f804b3146105655780635c975abb1461058e5780636352211e146105b957610246565b80633c9527641461043b5780633ccfd60b1461046457806342842e0e1461046e578063438b63001461049757806344a0d68a146104d457610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806323b872dd146103985780632f745c59146103c15780633af32abf146103fe57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906132f4565b610992565b60405161027f9190613989565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906132c7565b610a0c565b005b3480156102bd57600080fd5b506102c6610a31565b6040516102d391906139a4565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190613397565b610ac3565b6040516103109190613900565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061323a565b610b09565b005b34801561034e57600080fd5b50610357610c21565b6040516103649190613c46565b60405180910390f35b34801561037957600080fd5b50610382610c27565b60405161038f9190613c46565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190613124565b610c34565b005b3480156103cd57600080fd5b506103e860048036038101906103e3919061323a565b610c94565b6040516103f59190613c46565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906130b7565b610d39565b6040516104329190613989565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906132c7565b610de8565b005b61046c610e0d565b005b34801561047a57600080fd5b5061049560048036038101906104909190613124565b610e8e565b005b3480156104a357600080fd5b506104be60048036038101906104b991906130b7565b610eae565b6040516104cb9190613967565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613397565b610f5c565b005b34801561050957600080fd5b50610512610f6e565b60405161051f9190613c46565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613397565b610f74565b60405161055c9190613c46565b60405180910390f35b34801561057157600080fd5b5061058c6004803603810190610587919061334e565b610fe5565b005b34801561059a57600080fd5b506105a3611007565b6040516105b09190613989565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613397565b61101a565b6040516105ed9190613900565b60405180910390f35b34801561060257600080fd5b5061061d600480360381019061061891906130b7565b6110cc565b60405161062a9190613c46565b60405180910390f35b34801561063f57600080fd5b50610648611184565b005b34801561065657600080fd5b50610671600480360381019061066c9190613397565b611198565b005b34801561067f57600080fd5b5061068861121d565b6040516106959190613900565b60405180910390f35b3480156106aa57600080fd5b506106b3611247565b6040516106c091906139a4565b60405180910390f35b3480156106d557600080fd5b506106de6112d9565b6040516106eb9190613989565b60405180910390f35b61070e60048036038101906107099190613397565b6112ec565b005b34801561071c57600080fd5b50610737600480360381019061073291906131fa565b6115bf565b005b34801561074557600080fd5b50610760600480360381019061075b9190613177565b6115d5565b005b34801561076e57600080fd5b5061078960048036038101906107849190613397565b611637565b6040516107969190613900565b60405180910390f35b3480156107ab57600080fd5b506107b4611676565b6040516107c19190613c46565b60405180910390f35b3480156107d657600080fd5b506107df61167c565b6040516107ec91906139a4565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613397565b61170a565b005b34801561082a57600080fd5b5061084560048036038101906108409190613397565b61171c565b60405161085291906139a4565b60405180910390f35b34801561086757600080fd5b506108706117c6565b60405161087d9190613c46565b60405180910390f35b34801561089257600080fd5b506108ad60048036038101906108a8919061334e565b6117cc565b005b3480156108bb57600080fd5b506108d660048036038101906108d19190613397565b6117ee565b005b3480156108e457600080fd5b506108ff60048036038101906108fa91906130e4565b611800565b60405161090c9190613989565b60405180910390f35b34801561092157600080fd5b5061093c6004803603810190610937919061327a565b611894565b005b34801561094a57600080fd5b50610965600480360381019061096091906130b7565b6118c0565b005b34801561097357600080fd5b5061097c611944565b6040516109899190613c46565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a048261194a565b5b9050919050565b610a14611a2c565b80601460006101000a81548160ff02191690831515021790555050565b606060008054610a4090613f4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90613f4f565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ace82611aaa565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b148261101a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90613bc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba4611af5565b73ffffffffffffffffffffffffffffffffffffffff161480610bd35750610bd281610bcd611af5565b611800565b5b610c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0990613b26565b60405180910390fd5b610c1c8383611afd565b505050565b600d5481565b6000600880549050905090565b610c45610c3f611af5565b82611bb6565b610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613c06565b60405180910390fd5b610c8f838383611c4b565b505050565b6000610c9f836110cc565b8210610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd7906139c6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601580549050811015610ddd578273ffffffffffffffffffffffffffffffffffffffff1660158281548110610d7957610d786140f2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610dca576001915050610de3565b8080610dd590613fb2565b915050610d41565b50600090505b919050565b610df0611a2c565b80601460016101000a81548160ff02191690831515021790555050565b610e15611a2c565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3b906138bf565b60006040518083038185875af1925050503d8060008114610e78576040519150601f19603f3d011682016040523d82523d6000602084013e610e7d565b606091505b5050905080610e8b57600080fd5b50565b610ea9838383604051806020016040528060008152506115d5565b505050565b60606000610ebb836110cc565b905060008167ffffffffffffffff811115610ed957610ed8614121565b5b604051908082528060200260200182016040528015610f075781602001602082028036833780820191505090505b50905060005b82811015610f5157610f1f8582610c94565b828281518110610f3257610f316140f2565b5b6020026020010181815250508080610f4990613fb2565b915050610f0d565b508092505050919050565b610f64611a2c565b80600d8190555050565b60105481565b6000610f7e610c27565b8210610fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb690613be6565b60405180910390fd5b60088281548110610fd357610fd26140f2565b5b90600052602060002001549050919050565b610fed611a2c565b80600b9080519060200190611003929190612db4565b5050565b601460009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90613ba6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490613b06565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118c611a2c565b6111966000611eb2565b565b6111a0611a2c565b60006111aa610c27565b9050600082116111b957600080fd5b6013548211156111c857600080fd5b600e5482826111d79190613d84565b11156111e257600080fd5b6000600190505b828111611218576112053382846112009190613d84565b611f78565b808061121090613fb2565b9150506111e9565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461125690613f4f565b80601f016020809104026020016040519081016040528092919081815260200182805461128290613f4f565b80156112cf5780601f106112a4576101008083540402835291602001916112cf565b820191906000526020600020905b8154815290600101906020018083116112b257829003601f168201915b5050505050905090565b601460019054906101000a900460ff1681565b60006112f6610c27565b9050601460009054906101000a900460ff161561131257600080fd5b6000821161131f57600080fd5b600f5482111561132e57600080fd5b600e54828261133d9190613d84565b111561134857600080fd5b60105482601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113999190613d84565b11156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190613ae6565b60405180910390fd5b6113e261121d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151c5760011515601460019054906101000a900460ff16151514156114cb5761143933610d39565b611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90613a86565b60405180910390fd5b6000611483336110cc565b905060115481106114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090613a66565b60405180910390fd5b505b81600d546114d99190613e0b565b34101561151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290613c26565b60405180910390fd5b5b6000600190505b8281116115ba5760006001611536611f96565b6115409190613d84565b905061154c3382611f78565b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461159f9190613d84565b925050819055505080806115b290613fb2565b915050611523565b505050565b6115d16115ca611af5565b83836120dc565b5050565b6115e66115e0611af5565b83611bb6565b611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90613c06565b60405180910390fd5b61163184848484612249565b50505050565b6015818154811061164757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461168990613f4f565b80601f01602080910402602001604051908101604052809291908181526020018280546116b590613f4f565b80156117025780601f106116d757610100808354040283529160200191611702565b820191906000526020600020905b8154815290600101906020018083116116e557829003601f168201915b505050505081565b611712611a2c565b80600f8190555050565b6060611727826122a5565b611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d90613b86565b60405180910390fd5b6000611770612311565b9050600081511161179057604051806020016040528060008152506117be565b8061179a846123a3565b600c6040516020016117ae9392919061388e565b6040516020818303038152906040525b915050919050565b600e5481565b6117d4611a2c565b80600c90805190602001906117ea929190612db4565b5050565b6117f6611a2c565b8060108190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61189c611a2c565b601560006118aa9190612e3a565b8181601591906118bb929190612e5b565b505050565b6118c8611a2c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90613a06565b60405180910390fd5b61194181611eb2565b50565b600f5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a1557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a255750611a2482612504565b5b9050919050565b611a34611af5565b73ffffffffffffffffffffffffffffffffffffffff16611a5261121d565b73ffffffffffffffffffffffffffffffffffffffff1614611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613b66565b60405180910390fd5b565b611ab3816122a5565b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990613ba6565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b708361101a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611bc28361101a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c045750611c038185611800565b5b80611c4257508373ffffffffffffffffffffffffffffffffffffffff16611c2a84610ac3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c6b8261101a565b73ffffffffffffffffffffffffffffffffffffffff1614611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613a26565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2890613aa6565b60405180910390fd5b611d3c83838361256e565b611d47600082611afd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d979190613e65565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dee9190613d84565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ead838383612682565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f92828260405180602001604052806000815250612687565b5050565b6000806012547f0000000000000000000000000000000000000000000000000000000000000314611fc79190613e65565b9050600080600083611fd76126e2565b611fe19190614005565b9050600060166000600187611ff69190613e65565b815260200190815260200160002054141561201f576001846120189190613e65565b9250612042565b601660006001866120309190613e65565b81526020019081526020016000205492505b60006016600083815260200190815260200160002054141561207e578091508260166000838152602001908152602001600020819055506120ad565b601660008281526020019081526020016000205491508260166000838152602001908152602001600020819055505b601260008154809291906120c090613fb2565b9190505550601354826120d39190613d84565b94505050505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214290613ac6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161223c9190613989565b60405180910390a3505050565b612254848484611c4b565b61226084848484612715565b61229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612296906139e6565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461232090613f4f565b80601f016020809104026020016040519081016040528092919081815260200182805461234c90613f4f565b80156123995780601f1061236e57610100808354040283529160200191612399565b820191906000526020600020905b81548152906001019060200180831161237c57829003601f168201915b5050505050905090565b606060008214156123eb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124ff565b600082905060005b6000821461241d57808061240690613fb2565b915050600a826124169190613dda565b91506123f3565b60008167ffffffffffffffff81111561243957612438614121565b5b6040519080825280601f01601f19166020018201604052801561246b5781602001600182028036833780820191505090505b5090505b600085146124f8576001826124849190613e65565b9150600a856124939190614005565b603061249f9190613d84565b60f81b8183815181106124b5576124b46140f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f19190613dda565b945061246f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125798383836128ac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125bc576125b7816128b1565b6125fb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125fa576125f983826128fa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263e5761263981612a67565b61267d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461267c5761267b8282612b38565b5b5b505050565b505050565b6126918383612bb7565b61269e6000848484612715565b6126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d4906139e6565b60405180910390fd5b505050565b600044426040516020016126f79291906138d4565b6040516020818303038152906040528051906020012060001c905090565b60006127368473ffffffffffffffffffffffffffffffffffffffff16612d91565b1561289f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275f611af5565b8786866040518563ffffffff1660e01b8152600401612781949392919061391b565b602060405180830381600087803b15801561279b57600080fd5b505af19250505080156127cc57506040513d601f19601f820116820180604052508101906127c99190613321565b60015b61284f573d80600081146127fc576040519150601f19603f3d011682016040523d82523d6000602084013e612801565b606091505b50600081511415612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e906139e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612907846110cc565b6129119190613e65565b90506000600760008481526020019081526020016000205490508181146129f6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a7b9190613e65565b9050600060096000848152602001908152602001600020549050600060088381548110612aab57612aaa6140f2565b5b906000526020600020015490508060088381548110612acd57612acc6140f2565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b1c57612b1b6140c3565b5b6001900381819060005260206000200160009055905550505050565b6000612b43836110cc565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e90613b46565b60405180910390fd5b612c30816122a5565b15612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6790613a46565b60405180910390fd5b612c7c6000838361256e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ccc9190613d84565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d8d60008383612682565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612dc090613f4f565b90600052602060002090601f016020900481019282612de25760008555612e29565b82601f10612dfb57805160ff1916838001178555612e29565b82800160010185558215612e29579182015b82811115612e28578251825591602001919060010190612e0d565b5b509050612e369190612efb565b5090565b5080546000825590600052602060002090810190612e589190612efb565b50565b828054828255906000526020600020908101928215612eea579160200282015b82811115612ee957823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612e7b565b5b509050612ef79190612efb565b5090565b5b80821115612f14576000816000905550600101612efc565b5090565b6000612f2b612f2684613c86565b613c61565b905082815260208101848484011115612f4757612f4661415f565b5b612f52848285613f0d565b509392505050565b6000612f6d612f6884613cb7565b613c61565b905082815260208101848484011115612f8957612f8861415f565b5b612f94848285613f0d565b509392505050565b600081359050612fab8161467e565b92915050565b60008083601f840112612fc757612fc6614155565b5b8235905067ffffffffffffffff811115612fe457612fe3614150565b5b60208301915083602082028301111561300057612fff61415a565b5b9250929050565b60008135905061301681614695565b92915050565b60008135905061302b816146ac565b92915050565b600081519050613040816146ac565b92915050565b600082601f83011261305b5761305a614155565b5b813561306b848260208601612f18565b91505092915050565b600082601f83011261308957613088614155565b5b8135613099848260208601612f5a565b91505092915050565b6000813590506130b1816146c3565b92915050565b6000602082840312156130cd576130cc614169565b5b60006130db84828501612f9c565b91505092915050565b600080604083850312156130fb576130fa614169565b5b600061310985828601612f9c565b925050602061311a85828601612f9c565b9150509250929050565b60008060006060848603121561313d5761313c614169565b5b600061314b86828701612f9c565b935050602061315c86828701612f9c565b925050604061316d868287016130a2565b9150509250925092565b6000806000806080858703121561319157613190614169565b5b600061319f87828801612f9c565b94505060206131b087828801612f9c565b93505060406131c1878288016130a2565b925050606085013567ffffffffffffffff8111156131e2576131e1614164565b5b6131ee87828801613046565b91505092959194509250565b6000806040838503121561321157613210614169565b5b600061321f85828601612f9c565b925050602061323085828601613007565b9150509250929050565b6000806040838503121561325157613250614169565b5b600061325f85828601612f9c565b9250506020613270858286016130a2565b9150509250929050565b6000806020838503121561329157613290614169565b5b600083013567ffffffffffffffff8111156132af576132ae614164565b5b6132bb85828601612fb1565b92509250509250929050565b6000602082840312156132dd576132dc614169565b5b60006132eb84828501613007565b91505092915050565b60006020828403121561330a57613309614169565b5b60006133188482850161301c565b91505092915050565b60006020828403121561333757613336614169565b5b600061334584828501613031565b91505092915050565b60006020828403121561336457613363614169565b5b600082013567ffffffffffffffff81111561338257613381614164565b5b61338e84828501613074565b91505092915050565b6000602082840312156133ad576133ac614169565b5b60006133bb848285016130a2565b91505092915050565b60006133d08383613859565b60208301905092915050565b6133e581613e99565b82525050565b60006133f682613d0d565b6134008185613d3b565b935061340b83613ce8565b8060005b8381101561343c57815161342388826133c4565b975061342e83613d2e565b92505060018101905061340f565b5085935050505092915050565b61345281613eab565b82525050565b600061346382613d18565b61346d8185613d4c565b935061347d818560208601613f1c565b6134868161416e565b840191505092915050565b600061349c82613d23565b6134a68185613d68565b93506134b6818560208601613f1c565b6134bf8161416e565b840191505092915050565b60006134d582613d23565b6134df8185613d79565b93506134ef818560208601613f1c565b80840191505092915050565b6000815461350881613f4f565b6135128186613d79565b9450600182166000811461352d576001811461353e57613571565b60ff19831686528186019350613571565b61354785613cf8565b60005b838110156135695781548189015260018201915060208101905061354a565b838801955050505b50505092915050565b6000613587602b83613d68565b91506135928261417f565b604082019050919050565b60006135aa603283613d68565b91506135b5826141ce565b604082019050919050565b60006135cd602683613d68565b91506135d88261421d565b604082019050919050565b60006135f0602583613d68565b91506135fb8261426c565b604082019050919050565b6000613613601c83613d68565b915061361e826142bb565b602082019050919050565b6000613636601f83613d68565b9150613641826142e4565b602082019050919050565b6000613659601883613d68565b91506136648261430d565b602082019050919050565b600061367c602483613d68565b915061368782614336565b604082019050919050565b600061369f601983613d68565b91506136aa82614385565b602082019050919050565b60006136c2603e83613d68565b91506136cd826143ae565b604082019050919050565b60006136e5602983613d68565b91506136f0826143fd565b604082019050919050565b6000613708603e83613d68565b91506137138261444c565b604082019050919050565b600061372b602083613d68565b91506137368261449b565b602082019050919050565b600061374e602083613d68565b9150613759826144c4565b602082019050919050565b6000613771602f83613d68565b915061377c826144ed565b604082019050919050565b6000613794601883613d68565b915061379f8261453c565b602082019050919050565b60006137b7602183613d68565b91506137c282614565565b604082019050919050565b60006137da600083613d5d565b91506137e5826145b4565b600082019050919050565b60006137fd602c83613d68565b9150613808826145b7565b604082019050919050565b6000613820602e83613d68565b915061382b82614606565b604082019050919050565b6000613843601383613d68565b915061384e82614655565b602082019050919050565b61386281613f03565b82525050565b61387181613f03565b82525050565b61388861388382613f03565b613ffb565b82525050565b600061389a82866134ca565b91506138a682856134ca565b91506138b282846134fb565b9150819050949350505050565b60006138ca826137cd565b9150819050919050565b60006138e08285613877565b6020820191506138f08284613877565b6020820191508190509392505050565b600060208201905061391560008301846133dc565b92915050565b600060808201905061393060008301876133dc565b61393d60208301866133dc565b61394a6040830185613868565b818103606083015261395c8184613458565b905095945050505050565b6000602082019050818103600083015261398181846133eb565b905092915050565b600060208201905061399e6000830184613449565b92915050565b600060208201905081810360008301526139be8184613491565b905092915050565b600060208201905081810360008301526139df8161357a565b9050919050565b600060208201905081810360008301526139ff8161359d565b9050919050565b60006020820190508181036000830152613a1f816135c0565b9050919050565b60006020820190508181036000830152613a3f816135e3565b9050919050565b60006020820190508181036000830152613a5f81613606565b9050919050565b60006020820190508181036000830152613a7f81613629565b9050919050565b60006020820190508181036000830152613a9f8161364c565b9050919050565b60006020820190508181036000830152613abf8161366f565b9050919050565b60006020820190508181036000830152613adf81613692565b9050919050565b60006020820190508181036000830152613aff816136b5565b9050919050565b60006020820190508181036000830152613b1f816136d8565b9050919050565b60006020820190508181036000830152613b3f816136fb565b9050919050565b60006020820190508181036000830152613b5f8161371e565b9050919050565b60006020820190508181036000830152613b7f81613741565b9050919050565b60006020820190508181036000830152613b9f81613764565b9050919050565b60006020820190508181036000830152613bbf81613787565b9050919050565b60006020820190508181036000830152613bdf816137aa565b9050919050565b60006020820190508181036000830152613bff816137f0565b9050919050565b60006020820190508181036000830152613c1f81613813565b9050919050565b60006020820190508181036000830152613c3f81613836565b9050919050565b6000602082019050613c5b6000830184613868565b92915050565b6000613c6b613c7c565b9050613c778282613f81565b919050565b6000604051905090565b600067ffffffffffffffff821115613ca157613ca0614121565b5b613caa8261416e565b9050602081019050919050565b600067ffffffffffffffff821115613cd257613cd1614121565b5b613cdb8261416e565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d8f82613f03565b9150613d9a83613f03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613dcf57613dce614036565b5b828201905092915050565b6000613de582613f03565b9150613df083613f03565b925082613e0057613dff614065565b5b828204905092915050565b6000613e1682613f03565b9150613e2183613f03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e5a57613e59614036565b5b828202905092915050565b6000613e7082613f03565b9150613e7b83613f03565b925082821015613e8e57613e8d614036565b5b828203905092915050565b6000613ea482613ee3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f3a578082015181840152602081019050613f1f565b83811115613f49576000848401525b50505050565b60006002820490506001821680613f6757607f821691505b60208210811415613f7b57613f7a614094565b5b50919050565b613f8a8261416e565b810181811067ffffffffffffffff82111715613fa957613fa8614121565b5b80604052505050565b6000613fbd82613f03565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ff057613fef614036565b5b600182019050919050565b6000819050919050565b600061401082613f03565b915061401b83613f03565b92508261402b5761402a614065565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178204e465420666f722077686974656c6973742065786365656465642e00600082015250565b7f55736572206973204e4f542077686974656c69737465642e0000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f596f752061726520747279696e6720746f206d696e74206d6f7265204e46547360008201527f207468616e20616c6c6f77656420666f7220796f75722077616c6c65742e0000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b61468781613e99565b811461469257600080fd5b50565b61469e81613eab565b81146146a957600080fd5b50565b6146b581613eb7565b81146146c057600080fd5b50565b6146cc81613f03565b81146146d757600080fd5b5056fea264697066735822122078992e85e50fc835531bf4458f1e34e0022ae24b350a425d0c7a1612a1fb374464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009416e6f6e796d6f6e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003414e4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d654c33634e4d386a646671454e515648446977784c334b5a716e6931375a644d5170414d4e554138635264682f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Anonymons
Arg [1] : _symbol (string): ANM
Arg [2] : _initBaseURI (string): ipfs://QmeL3cNM8jdfqENQVHDiwxL3KZqni17ZdMQpAMNUA8cRdh/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 416e6f6e796d6f6e730000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 414e4d0000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d654c33634e4d386a646671454e515648446977784c334b
Arg [9] : 5a716e6931375a644d5170414d4e554138635264682f00000000000000000000
Deployed Bytecode Sourcemap
46239:5786:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40010:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51107:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46434:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40650:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40318:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49630;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51186:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51864:158;;;:::i;:::-;;29364:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49892:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50699:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46537:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50875:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47076:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;51441:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26913:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47106:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48659:963;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47145:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46651:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46392:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50785:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50246:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46469:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50979:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51768:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28726:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51287:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46504:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40010:224;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;51107:73::-;4511:13;:11;:13::i;:::-;51168:6:::1;51159;;:15;;;;;;;;;;;;;;;;;;51107:73:::0;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;46434:30::-;;;;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;28957:336::-;29152:41;29171:12;:10;:12::i;:::-;29185:7;29152:18;:41::i;:::-;29144:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;:::-;28957:336;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;49630:::-;49689:4;49708:9;49720:1;49708:13;;49704:156;49727:20;:27;;;;49723:1;:31;49704:156;;;49804:5;49777:32;;:20;49798:1;49777:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;49774:77;;;49833:4;49826:11;;;;;49774:77;49756:3;;;;;:::i;:::-;;;;49704:156;;;;49875:5;49868:12;;49630:256;;;;:::o;51186:95::-;4511:13;:11;:13::i;:::-;51269:6:::1;51251:15;;:24;;;;;;;;;;;;;;;;;;51186:95:::0;:::o;51864:158::-;4511:13;:11;:13::i;:::-;51917:12:::1;51943:10;51935:24;;51967:21;51935:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51916:77;;;52008:7;52000:16;;;::::0;::::1;;51909:113;51864:158::o:0;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;49892:348::-;49967:16;49995:23;50021:17;50031:6;50021:9;:17::i;:::-;49995:43;;50045:25;50087:15;50073:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50045:58;;50115:9;50110:103;50130:15;50126:1;:19;50110:103;;;50175:30;50195:6;50203:1;50175:19;:30::i;:::-;50161:8;50170:1;50161:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;50147:3;;;;;:::i;:::-;;;;50110:103;;;;50226:8;50219:15;;;;49892:348;;;:::o;50699:80::-;4511:13;:11;:13::i;:::-;50765:8:::1;50758:4;:15;;;;50699:80:::0;:::o;46537:33::-;;;;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;;41041:24;;40840:233;;;:::o;50875:98::-;4511:13;:11;:13::i;:::-;50956:11:::1;50946:7;:21;;;;;;;;;;;;:::i;:::-;;50875:98:::0;:::o;47076:25::-;;;;;;;;;;;;;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;51441:321::-;4511:13;:11;:13::i;:::-;51503:14:::1;51520:13;:11;:13::i;:::-;51503:30;;51562:1;51548:11;:15;51540:24;;;::::0;::::1;;51594:10;;51579:11;:25;;51571:34;;;::::0;::::1;;51644:9;;51629:11;51620:6;:20;;;;:::i;:::-;:33;;51612:42;;;::::0;::::1;;51668:9;51680:1;51668:13;;51663:94;51688:11;51683:1;:16;51663:94;;51716:33;51726:10;51747:1;51738:6;:10;;;;:::i;:::-;51716:9;:33::i;:::-;51702:3;;;;;:::i;:::-;;;;51663:94;;;;51496:266;51441:321:::0;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;47106:34::-;;;;;;;;;;;;;:::o;48659:963::-;48716:14;48733:13;:11;:13::i;:::-;48716:30;;48762:6;;;;;;;;;;;48761:7;48753:16;;;;;;48798:1;48784:11;:15;48776:24;;;;;;48830:8;;48815:11;:23;;48807:32;;;;;;48878:9;;48863:11;48854:6;:20;;;;:::i;:::-;:33;;48846:42;;;;;;48948:12;;48933:11;48903:8;:20;48912:10;48903:20;;;;;;;;;;;;;;;:27;;;:41;;;;:::i;:::-;:57;;48895:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;49055:7;:5;:7::i;:::-;49041:21;;:10;:21;;;49037:395;;49097:4;49078:23;;:15;;;;;;;;;;;:23;;;49075:274;;;49126:25;49140:10;49126:13;:25::i;:::-;49118:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49195:23;49221:21;49231:10;49221:9;:21::i;:::-;49195:47;;49283:18;;49265:15;:36;49257:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;49103:246;49075:274;49389:11;49382:4;;:18;;;;:::i;:::-;49369:9;:31;;49361:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49037:395;49445:9;49457:1;49445:13;;49440:177;49465:11;49460:1;:16;49440:177;;49492:12;49528:1;49507:18;:16;:18::i;:::-;:22;;;;:::i;:::-;49492:37;;49538:30;49548:10;49560:7;49538:9;:30::i;:::-;49608:1;49577:8;:20;49586:10;49577:20;;;;;;;;;;;;;;;:27;;;:32;;;;;;;:::i;:::-;;;;;;;;49483:134;49478:3;;;;;:::i;:::-;;;;49440:177;;;;48709:913;48659:963;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;29620:323::-;29794:41;29813:12;:10;:12::i;:::-;29827:7;29794:18;:41::i;:::-;29786:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;47145:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46651:39::-;;;;:::o;46392:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50785:82::-;4511:13;:11;:13::i;:::-;50856:5:::1;50845:8;:16;;;;50785:82:::0;:::o;50246:431::-;50344:13;50385:16;50393:7;50385;:16::i;:::-;50369:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;50483:28;50514:10;:8;:10::i;:::-;50483:41;;50569:1;50544:14;50538:28;:32;:133;;;;;;;;;;;;;;;;;50606:14;50622:18;:7;:16;:18::i;:::-;50642:13;50589:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50538:133;50531:140;;;50246:431;;;:::o;46469:30::-;;;;:::o;50979:122::-;4511:13;:11;:13::i;:::-;51078:17:::1;51062:13;:33;;;;;;;;;;;;:::i;:::-;;50979:122:::0;:::o;51768:90::-;4511:13;:11;:13::i;:::-;51847:5:::1;51832:12;:20;;;;51768:90:::0;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;51287:144::-;4511:13;:11;:13::i;:::-;51369:20:::1;;51362:27;;;;:::i;:::-;51419:6;;51396:20;:29;;;;;;;:::i;:::-;;51287:144:::0;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;46504:28::-;;;;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;47751:733::-;47805:7;47821:13;47849:11;;47837:9;:23;;;;:::i;:::-;47821:39;;47867:12;47886:14;47907:9;47936:5;47919:14;:12;:14::i;:::-;:22;;;;:::i;:::-;47907:34;;48038:1;48012:11;:22;48032:1;48024:5;:9;;;;:::i;:::-;48012:22;;;;;;;;;;;;:27;48008:122;;;48067:1;48059:5;:9;;;;:::i;:::-;48052:16;;48008:122;;;48100:11;:22;48120:1;48112:5;:9;;;;:::i;:::-;48100:22;;;;;;;;;;;;48093:29;;48008:122;48266:1;48248:11;:14;48260:1;48248:14;;;;;;;;;;;;:19;48244:178;;;48291:1;48282:10;;48322:4;48305:11;:14;48317:1;48305:14;;;;;;;;;;;:21;;;;48244:178;;;48364:11;:14;48376:1;48364:14;;;;;;;;;;;;48355:23;;48408:4;48391:11;:14;48403:1;48391:14;;;;;;;;;;;:21;;;;48244:178;48430:11;;:13;;;;;;;;;:::i;:::-;;;;;;48468:10;;48459:6;:19;;;;:::i;:::-;48452:26;;;;;;47751:733;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;47641:102::-;47701:13;47730:7;47723:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47641:102;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;38867:125::-;;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;48490:149::-;48537:7;48597:16;48615:15;48580:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48570:62;;;;;;48562:71;;48555:78;;48490:149;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;38356:126::-;;;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44301:294;44267:328;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43870:907;;43789:988;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;:::i;:::-;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42650:147;42576:221;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::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;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10978:845::-;11081:3;11118:5;11112:12;11147:36;11173:9;11147:36;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11319:1;11308:9;11304:17;11335:1;11330:137;;;;11481:1;11476:341;;;;11297:520;;11330:137;11414:4;11410:9;11399;11395:25;11390:3;11383:38;11450:6;11445:3;11441:16;11434:23;;11330:137;;11476:341;11543:38;11575:5;11543:38;:::i;:::-;11603:1;11617:154;11631:6;11628:1;11625:13;11617:154;;;11705:7;11699:14;11695:1;11690:3;11686:11;11679:35;11755:1;11746:7;11742:15;11731:26;;11653:4;11650:1;11646:12;11641:17;;11617:154;;;11800:6;11795:3;11791:16;11784:23;;11483:334;;11297:520;;11085:738;;10978:845;;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:398::-;18312:3;18333:83;18414:1;18409:3;18333:83;:::i;:::-;18326:90;;18425:93;18514:3;18425:93;:::i;:::-;18543:1;18538:3;18534:11;18527:18;;18153:398;;;:::o;18557:366::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:::-;19071:3;19092:67;19156:2;19151:3;19092:67;:::i;:::-;19085:74;;19168:93;19257:3;19168:93;:::i;:::-;19286:2;19281:3;19277:12;19270:19;;18929:366;;;:::o;19301:::-;19443:3;19464:67;19528:2;19523:3;19464:67;:::i;:::-;19457:74;;19540:93;19629:3;19540:93;:::i;:::-;19658:2;19653:3;19649:12;19642:19;;19301:366;;;:::o;19673:108::-;19750:24;19768:5;19750:24;:::i;:::-;19745:3;19738:37;19673:108;;:::o;19787:118::-;19874:24;19892:5;19874:24;:::i;:::-;19869:3;19862:37;19787:118;;:::o;19911:157::-;20016:45;20036:24;20054:5;20036:24;:::i;:::-;20016:45;:::i;:::-;20011:3;20004:58;19911:157;;:::o;20074:589::-;20299:3;20321:95;20412:3;20403:6;20321:95;:::i;:::-;20314:102;;20433:95;20524:3;20515:6;20433:95;:::i;:::-;20426:102;;20545:92;20633:3;20624:6;20545:92;:::i;:::-;20538:99;;20654:3;20647:10;;20074:589;;;;;;:::o;20669:379::-;20853:3;20875:147;21018:3;20875:147;:::i;:::-;20868:154;;21039:3;21032:10;;20669:379;;;:::o;21054:397::-;21194:3;21209:75;21280:3;21271:6;21209:75;:::i;:::-;21309:2;21304:3;21300:12;21293:19;;21322:75;21393:3;21384:6;21322:75;:::i;:::-;21422:2;21417:3;21413:12;21406:19;;21442:3;21435:10;;21054:397;;;;;:::o;21457:222::-;21550:4;21588:2;21577:9;21573:18;21565:26;;21601:71;21669:1;21658:9;21654:17;21645:6;21601:71;:::i;:::-;21457:222;;;;:::o;21685:640::-;21880:4;21918:3;21907:9;21903:19;21895:27;;21932:71;22000:1;21989:9;21985:17;21976:6;21932:71;:::i;:::-;22013:72;22081:2;22070:9;22066:18;22057:6;22013:72;:::i;:::-;22095;22163:2;22152:9;22148:18;22139:6;22095:72;:::i;:::-;22214:9;22208:4;22204:20;22199:2;22188:9;22184:18;22177:48;22242:76;22313:4;22304:6;22242:76;:::i;:::-;22234:84;;21685:640;;;;;;;:::o;22331:373::-;22474:4;22512:2;22501:9;22497:18;22489:26;;22561:9;22555:4;22551:20;22547:1;22536:9;22532:17;22525:47;22589:108;22692:4;22683:6;22589:108;:::i;:::-;22581:116;;22331:373;;;;:::o;22710:210::-;22797:4;22835:2;22824:9;22820:18;22812:26;;22848:65;22910:1;22899:9;22895:17;22886:6;22848:65;:::i;:::-;22710:210;;;;:::o;22926:313::-;23039:4;23077:2;23066:9;23062:18;23054:26;;23126:9;23120:4;23116:20;23112:1;23101:9;23097:17;23090:47;23154:78;23227:4;23218:6;23154:78;:::i;:::-;23146:86;;22926:313;;;;:::o;23245:419::-;23411:4;23449:2;23438:9;23434:18;23426:26;;23498:9;23492:4;23488:20;23484:1;23473:9;23469:17;23462:47;23526:131;23652:4;23526:131;:::i;:::-;23518:139;;23245:419;;;:::o;23670:::-;23836:4;23874:2;23863:9;23859:18;23851:26;;23923:9;23917:4;23913:20;23909:1;23898:9;23894:17;23887:47;23951:131;24077:4;23951:131;:::i;:::-;23943:139;;23670:419;;;:::o;24095:::-;24261:4;24299:2;24288:9;24284:18;24276:26;;24348:9;24342:4;24338:20;24334:1;24323:9;24319:17;24312:47;24376:131;24502:4;24376:131;:::i;:::-;24368:139;;24095:419;;;:::o;24520:::-;24686:4;24724:2;24713:9;24709:18;24701:26;;24773:9;24767:4;24763:20;24759:1;24748:9;24744:17;24737:47;24801:131;24927:4;24801:131;:::i;:::-;24793:139;;24520:419;;;:::o;24945:::-;25111:4;25149:2;25138:9;25134:18;25126:26;;25198:9;25192:4;25188:20;25184:1;25173:9;25169:17;25162:47;25226:131;25352:4;25226:131;:::i;:::-;25218:139;;24945:419;;;:::o;25370:::-;25536:4;25574:2;25563:9;25559:18;25551:26;;25623:9;25617:4;25613:20;25609:1;25598:9;25594:17;25587:47;25651:131;25777:4;25651:131;:::i;:::-;25643:139;;25370:419;;;:::o;25795:::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26048:9;26042:4;26038:20;26034:1;26023:9;26019:17;26012:47;26076:131;26202:4;26076:131;:::i;:::-;26068:139;;25795:419;;;:::o;26220:::-;26386:4;26424:2;26413:9;26409:18;26401:26;;26473:9;26467:4;26463:20;26459:1;26448:9;26444:17;26437:47;26501:131;26627:4;26501:131;:::i;:::-;26493:139;;26220:419;;;:::o;26645:::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26898:9;26892:4;26888:20;26884:1;26873:9;26869:17;26862:47;26926:131;27052:4;26926:131;:::i;:::-;26918:139;;26645:419;;;:::o;27070:::-;27236:4;27274:2;27263:9;27259:18;27251:26;;27323:9;27317:4;27313:20;27309:1;27298:9;27294:17;27287:47;27351:131;27477:4;27351:131;:::i;:::-;27343:139;;27070:419;;;:::o;27495:::-;27661:4;27699:2;27688:9;27684:18;27676:26;;27748:9;27742:4;27738:20;27734:1;27723:9;27719:17;27712:47;27776:131;27902:4;27776:131;:::i;:::-;27768:139;;27495:419;;;:::o;27920:::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:::-;28511:4;28549:2;28538:9;28534:18;28526:26;;28598:9;28592:4;28588:20;28584:1;28573:9;28569:17;28562:47;28626:131;28752:4;28626:131;:::i;:::-;28618:139;;28345:419;;;:::o;28770:::-;28936:4;28974:2;28963:9;28959:18;28951:26;;29023:9;29017:4;29013:20;29009:1;28998:9;28994:17;28987:47;29051:131;29177:4;29051:131;:::i;:::-;29043:139;;28770:419;;;:::o;29195:::-;29361:4;29399:2;29388:9;29384:18;29376:26;;29448:9;29442:4;29438:20;29434:1;29423:9;29419:17;29412:47;29476:131;29602:4;29476:131;:::i;:::-;29468:139;;29195:419;;;:::o;29620:::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:::-;30211:4;30249:2;30238:9;30234:18;30226:26;;30298:9;30292:4;30288:20;30284:1;30273:9;30269:17;30262:47;30326:131;30452:4;30326:131;:::i;:::-;30318:139;;30045:419;;;:::o;30470:::-;30636:4;30674:2;30663:9;30659:18;30651:26;;30723:9;30717:4;30713:20;30709:1;30698:9;30694:17;30687:47;30751:131;30877:4;30751:131;:::i;:::-;30743:139;;30470:419;;;:::o;30895:::-;31061:4;31099:2;31088:9;31084:18;31076:26;;31148:9;31142:4;31138:20;31134:1;31123:9;31119:17;31112:47;31176:131;31302:4;31176:131;:::i;:::-;31168:139;;30895:419;;;:::o;31320:::-;31486:4;31524:2;31513:9;31509:18;31501:26;;31573:9;31567:4;31563:20;31559:1;31548:9;31544:17;31537:47;31601:131;31727:4;31601:131;:::i;:::-;31593:139;;31320:419;;;:::o;31745:222::-;31838:4;31876:2;31865:9;31861:18;31853:26;;31889:71;31957:1;31946:9;31942:17;31933:6;31889:71;:::i;:::-;31745:222;;;;:::o;31973:129::-;32007:6;32034:20;;:::i;:::-;32024:30;;32063:33;32091:4;32083:6;32063:33;:::i;:::-;31973:129;;;:::o;32108:75::-;32141:6;32174:2;32168:9;32158:19;;32108:75;:::o;32189:307::-;32250:4;32340:18;32332:6;32329:30;32326:56;;;32362:18;;:::i;:::-;32326:56;32400:29;32422:6;32400:29;:::i;:::-;32392:37;;32484:4;32478;32474:15;32466:23;;32189:307;;;:::o;32502:308::-;32564:4;32654:18;32646:6;32643:30;32640:56;;;32676:18;;:::i;:::-;32640:56;32714:29;32736:6;32714:29;:::i;:::-;32706:37;;32798:4;32792;32788:15;32780:23;;32502:308;;;:::o;32816:132::-;32883:4;32906:3;32898:11;;32936:4;32931:3;32927:14;32919:22;;32816:132;;;:::o;32954:141::-;33003:4;33026:3;33018:11;;33049:3;33046:1;33039:14;33083:4;33080:1;33070:18;33062:26;;32954:141;;;:::o;33101:114::-;33168:6;33202:5;33196:12;33186:22;;33101:114;;;:::o;33221:98::-;33272:6;33306:5;33300:12;33290:22;;33221:98;;;:::o;33325:99::-;33377:6;33411:5;33405:12;33395:22;;33325:99;;;:::o;33430:113::-;33500:4;33532;33527:3;33523:14;33515:22;;33430:113;;;:::o;33549:184::-;33648:11;33682:6;33677:3;33670:19;33722:4;33717:3;33713:14;33698:29;;33549:184;;;;:::o;33739:168::-;33822:11;33856:6;33851:3;33844:19;33896:4;33891:3;33887:14;33872:29;;33739:168;;;;:::o;33913:147::-;34014:11;34051:3;34036:18;;33913:147;;;;:::o;34066:169::-;34150:11;34184:6;34179:3;34172:19;34224:4;34219:3;34215:14;34200:29;;34066:169;;;;:::o;34241:148::-;34343:11;34380:3;34365:18;;34241:148;;;;:::o;34395:305::-;34435:3;34454:20;34472:1;34454:20;:::i;:::-;34449:25;;34488:20;34506:1;34488:20;:::i;:::-;34483:25;;34642:1;34574:66;34570:74;34567:1;34564:81;34561:107;;;34648:18;;:::i;:::-;34561:107;34692:1;34689;34685:9;34678:16;;34395:305;;;;:::o;34706:185::-;34746:1;34763:20;34781:1;34763:20;:::i;:::-;34758:25;;34797:20;34815:1;34797:20;:::i;:::-;34792:25;;34836:1;34826:35;;34841:18;;:::i;:::-;34826:35;34883:1;34880;34876:9;34871:14;;34706:185;;;;:::o;34897:348::-;34937:7;34960:20;34978:1;34960:20;:::i;:::-;34955:25;;34994:20;35012:1;34994:20;:::i;:::-;34989:25;;35182:1;35114:66;35110:74;35107:1;35104:81;35099:1;35092:9;35085:17;35081:105;35078:131;;;35189:18;;:::i;:::-;35078:131;35237:1;35234;35230:9;35219:20;;34897:348;;;;:::o;35251:191::-;35291:4;35311:20;35329:1;35311:20;:::i;:::-;35306:25;;35345:20;35363:1;35345:20;:::i;:::-;35340:25;;35384:1;35381;35378:8;35375:34;;;35389:18;;:::i;:::-;35375:34;35434:1;35431;35427:9;35419:17;;35251:191;;;;:::o;35448:96::-;35485:7;35514:24;35532:5;35514:24;:::i;:::-;35503:35;;35448:96;;;:::o;35550:90::-;35584:7;35627:5;35620:13;35613:21;35602:32;;35550:90;;;:::o;35646:149::-;35682:7;35722:66;35715:5;35711:78;35700:89;;35646:149;;;:::o;35801:126::-;35838:7;35878:42;35871:5;35867:54;35856:65;;35801:126;;;:::o;35933:77::-;35970:7;35999:5;35988:16;;35933:77;;;:::o;36016:154::-;36100:6;36095:3;36090;36077:30;36162:1;36153:6;36148:3;36144:16;36137:27;36016:154;;;:::o;36176:307::-;36244:1;36254:113;36268:6;36265:1;36262:13;36254:113;;;36353:1;36348:3;36344:11;36338:18;36334:1;36329:3;36325:11;36318:39;36290:2;36287:1;36283:10;36278:15;;36254:113;;;36385:6;36382:1;36379:13;36376:101;;;36465:1;36456:6;36451:3;36447:16;36440:27;36376:101;36225:258;36176:307;;;:::o;36489:320::-;36533:6;36570:1;36564:4;36560:12;36550:22;;36617:1;36611:4;36607:12;36638:18;36628:81;;36694:4;36686:6;36682:17;36672:27;;36628:81;36756:2;36748:6;36745:14;36725:18;36722:38;36719:84;;;36775:18;;:::i;:::-;36719:84;36540:269;36489:320;;;:::o;36815:281::-;36898:27;36920:4;36898:27;:::i;:::-;36890:6;36886:40;37028:6;37016:10;37013:22;36992:18;36980:10;36977:34;36974:62;36971:88;;;37039:18;;:::i;:::-;36971:88;37079:10;37075:2;37068:22;36858:238;36815:281;;:::o;37102:233::-;37141:3;37164:24;37182:5;37164:24;:::i;:::-;37155:33;;37210:66;37203:5;37200:77;37197:103;;;37280:18;;:::i;:::-;37197:103;37327:1;37320:5;37316:13;37309:20;;37102:233;;;:::o;37341:79::-;37380:7;37409:5;37398:16;;37341:79;;;:::o;37426:176::-;37458:1;37475:20;37493:1;37475:20;:::i;:::-;37470:25;;37509:20;37527:1;37509:20;:::i;:::-;37504:25;;37548:1;37538:35;;37553:18;;:::i;:::-;37538:35;37594:1;37591;37587:9;37582:14;;37426:176;;;;:::o;37608:180::-;37656:77;37653:1;37646:88;37753:4;37750:1;37743:15;37777:4;37774:1;37767:15;37794:180;37842:77;37839:1;37832:88;37939:4;37936:1;37929:15;37963:4;37960:1;37953:15;37980:180;38028:77;38025:1;38018:88;38125:4;38122:1;38115:15;38149:4;38146:1;38139:15;38166:180;38214:77;38211:1;38204:88;38311:4;38308:1;38301:15;38335:4;38332:1;38325:15;38352:180;38400:77;38397:1;38390:88;38497:4;38494:1;38487:15;38521:4;38518:1;38511:15;38538:180;38586:77;38583:1;38576:88;38683:4;38680:1;38673:15;38707:4;38704:1;38697:15;38724:117;38833:1;38830;38823:12;38847:117;38956:1;38953;38946:12;38970:117;39079:1;39076;39069:12;39093:117;39202:1;39199;39192:12;39216:117;39325:1;39322;39315:12;39339:117;39448:1;39445;39438:12;39462:102;39503:6;39554:2;39550:7;39545:2;39538:5;39534:14;39530:28;39520:38;;39462:102;;;:::o;39570:230::-;39710:34;39706:1;39698:6;39694:14;39687:58;39779:13;39774:2;39766:6;39762:15;39755:38;39570:230;:::o;39806:237::-;39946:34;39942:1;39934:6;39930:14;39923:58;40015:20;40010:2;40002:6;39998:15;39991:45;39806:237;:::o;40049:225::-;40189:34;40185:1;40177:6;40173:14;40166:58;40258:8;40253:2;40245:6;40241:15;40234:33;40049:225;:::o;40280:224::-;40420:34;40416:1;40408:6;40404:14;40397:58;40489:7;40484:2;40476:6;40472:15;40465:32;40280:224;:::o;40510:178::-;40650:30;40646:1;40638:6;40634:14;40627:54;40510:178;:::o;40694:181::-;40834:33;40830:1;40822:6;40818:14;40811:57;40694:181;:::o;40881:174::-;41021:26;41017:1;41009:6;41005:14;40998:50;40881:174;:::o;41061:223::-;41201:34;41197:1;41189:6;41185:14;41178:58;41270:6;41265:2;41257:6;41253:15;41246:31;41061:223;:::o;41290:175::-;41430:27;41426:1;41418:6;41414:14;41407:51;41290:175;:::o;41471:249::-;41611:34;41607:1;41599:6;41595:14;41588:58;41680:32;41675:2;41667:6;41663:15;41656:57;41471:249;:::o;41726:228::-;41866:34;41862:1;41854:6;41850:14;41843:58;41935:11;41930:2;41922:6;41918:15;41911:36;41726:228;:::o;41960:249::-;42100:34;42096:1;42088:6;42084:14;42077:58;42169:32;42164:2;42156:6;42152:15;42145:57;41960:249;:::o;42215:182::-;42355:34;42351:1;42343:6;42339:14;42332:58;42215:182;:::o;42403:::-;42543:34;42539:1;42531:6;42527:14;42520:58;42403:182;:::o;42591:234::-;42731:34;42727:1;42719:6;42715:14;42708:58;42800:17;42795:2;42787:6;42783:15;42776:42;42591:234;:::o;42831:174::-;42971:26;42967:1;42959:6;42955:14;42948:50;42831:174;:::o;43011:220::-;43151:34;43147:1;43139:6;43135:14;43128:58;43220:3;43215:2;43207:6;43203:15;43196:28;43011:220;:::o;43237:114::-;;:::o;43357:231::-;43497:34;43493:1;43485:6;43481:14;43474:58;43566:14;43561:2;43553:6;43549:15;43542:39;43357:231;:::o;43594:233::-;43734:34;43730:1;43722:6;43718:14;43711:58;43803:16;43798:2;43790:6;43786:15;43779:41;43594:233;:::o;43833:169::-;43973:21;43969:1;43961:6;43957:14;43950:45;43833:169;:::o;44008:122::-;44081:24;44099:5;44081:24;:::i;:::-;44074:5;44071:35;44061:63;;44120:1;44117;44110:12;44061:63;44008:122;:::o;44136:116::-;44206:21;44221:5;44206:21;:::i;:::-;44199:5;44196:32;44186:60;;44242:1;44239;44232:12;44186:60;44136:116;:::o;44258:120::-;44330:23;44347:5;44330:23;:::i;:::-;44323:5;44320:34;44310:62;;44368:1;44365;44358:12;44310:62;44258:120;:::o;44384:122::-;44457:24;44475:5;44457:24;:::i;:::-;44450:5;44447:35;44437:63;;44496:1;44493;44486:12;44437:63;44384:122;:::o
Swarm Source
ipfs://78992e85e50fc835531bf4458f1e34e0022ae24b350a425d0c7a1612a1fb3744
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.