ERC-721
Overview
Max Total Supply
0 MICE
Holders
492
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MICELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MICE
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-17 */ // 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: contracts/prepay.sol pragma solidity 0.8.17; contract prepay is Ownable { uint256 public currentToken = 0; //confirm number of marketing NFT prior to deploy uint256 public prepayCost = .08 ether; uint256 public prepayLimit = 1500; uint256 public prepay_txnLimit = 10; uint256 public i = 0; bool public prepayActive = false; // determines whether presale is active mapping (address => uint256) public prepaid; mapping (uint256 => address) public prepayer; // @dev user pays for specified num of tokens, address and qty are indexed for later use by minting contract function prepayment(uint256 numTokens) external payable { require (prepayActive, "round inactive"); require (msg.value >= prepayCost*numTokens, "Incorrect value sent"); require (numTokens + currentToken <= prepayLimit, "No more left"); require (numTokens <= prepay_txnLimit); if (prepaid[msg.sender] == 0) { i++; prepayer[i] = msg.sender; } prepaid[msg.sender] += numTokens; currentToken += numTokens; } // @dev checks how many NFTs an address has prepaid for function prepaidQTY(address addr) external view returns (uint256) { return prepaid[addr]; } // @dev check what address is in a specific prepay slot function prepayerID(uint256 ID) external view returns (address) { return prepayer[ID]; } // @dev flips the state for presale function flipPrepay() external onlyOwner { prepayActive = !prepayActive; } // @dev changes cost of the prepayment per token function changePrepayCost(uint256 _prepayCost) external onlyOwner { prepayCost = _prepayCost; } } // 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/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/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: contracts/MICE_mint.sol //SPDX-License-Identifier: MIT pragma solidity 0.8.17; contract MICE is ERC721, Ownable, prepay { using Counters for Counters.Counter; Counters.Counter public _tokenIds; string public ipfsHash = "ipfs://QmbcB8n4WSwhTeMi7MPRpAmBCgPAGVAjbHsAYK8HKGQEzo/Erc721_Data_"; string public unrevealed = "ipfs://QmZYMwjGjZ7HFWUgwFJHxMXgDAPcMnKLyeD5H2abZEAHoZ/Erc721_Data_0.json"; address artist = 0xdb049066EE25AF0Cb07feC30358F63F8B7674905; address dev = 0x1C1e33246E29DdEdd720533996292502A457C7c3; address MW = 0x044D11A418B84e12ECF8f6184Cf06e8641e18d65; address BD = 0x7E7834576eDd58e92c57C63e41bfdAc12AaAaf9f; address PW = 0x2EDCcF4F5c3Fa61457aE9c84F736fDD6AA386322; address SL = 0x7f206725A73264EBf717965a1ae4ff111AbbBC14; address arsenal = 0x1a30791385F41F9AC738329b77Cfc103A35d0cc7; uint256 public MICEcost = .08 ether; //**** BE SURE TO UPDATE THIS uint256 public MICEpresaleCost = .08 ether; //**** BE SURE TO UPDATE THIS uint256 public maxNFT = 10000; //**** BE SURE TO UPDATE THIS uint256 public currentLimit = 2250; //**** BE SURE TO UPDATE THIS uint256 public txnLimit = 10; //**** BE SURE TO UPDATE THIS uint256 public artistPay = 50; uint256 public devPay = 100; uint256 public MWPay = 540; uint256 public BDPay = 200; uint256 public PWPay = 40; uint256 public SLPay = 50; uint256 public arsenalPay = 20; bool public presaleActive = false; // determines whether presale is active bool public saleActive = false; // determines whether sale is active bool public creditCardSaleActive = false; // determines whether creditCard is active bool public revealed = false; address crossmintAddress = 0xdAb1a1854214684acE522439684a145E62505233; constructor() ERC721("MICE NFT", "MICE") { } // @dev allows for minting at presale price function presale(uint256 numTokens) external payable { require (presaleActive, "round inactive"); require (msg.value >= MICEpresaleCost*numTokens, "Incorrect value sent"); require (numTokens + _tokenIds.current() <= maxNFT, "No more left"); require (numTokens + _tokenIds.current() <= currentLimit, "No more left"); require (numTokens <= txnLimit, "too many per txn"); uint256 i = 0; while (i < numTokens) { _tokenIds.increment(); _safeMint(msg.sender, _tokenIds.current()); i ++; } } // @dev public minting round function sale(uint256 numTokens) external payable { require (saleActive, "round inactive"); require (msg.value >= MICEcost*numTokens, "Incorrect value sent"); require (numTokens + _tokenIds.current() <= maxNFT, "No more left"); require (numTokens + _tokenIds.current() <= currentLimit, "No more left"); require (numTokens <= txnLimit, "too many per txn"); uint256 i = 0; while (i < numTokens) { _tokenIds.increment(); _safeMint(msg.sender, _tokenIds.current()); i ++; } } // @dev crossmint application able to utilize cc payment mechanism function crossmint(address _to) public payable { require (creditCardSaleActive, "round inactive"); require (MICEcost == msg.value, "Incorrect value sent"); require (1 + _tokenIds.current() <= maxNFT, "No more left"); require (1 + _tokenIds.current() <= currentLimit, "No more left"); require (msg.sender == crossmintAddress, "This function is for Crossmint only."); _tokenIds.increment(); _safeMint(_to, _tokenIds.current()); } // @dev allows for minting by the team for marketing purposes function marketingMint(uint256 numTokens, address destination) public onlyOwner { require (numTokens + _tokenIds.current() <= maxNFT, "No more left"); require (numTokens + _tokenIds.current() <= currentLimit, "No more left"); uint256 i = 0; while (i < numTokens) { _tokenIds.increment(); _safeMint(destination, _tokenIds.current()); i ++; } } // @dev flips the state for presale function flipPresale() external onlyOwner { presaleActive = !presaleActive; } // @dev flips the state for sale function flipSale() external onlyOwner { saleActive = !saleActive; } // @dev flips the state for creditCardSale function flipCreditCardSale() external onlyOwner { creditCardSaleActive = !creditCardSaleActive; } function _baseURI() internal view virtual override returns (string memory) { return ipfsHash; } function revealer() external onlyOwner { revealed = true; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); string memory result = !revealed ? unrevealed : string.concat(baseURI, Strings.toString(tokenId), ".json"); return result; } function changeMICEcost(uint256 _cost) external onlyOwner { MICEcost = _cost; } function changeMICEpresaleCost(uint256 _presaleCost) external onlyOwner { MICEpresaleCost = _presaleCost; } function changeTXNlimit(uint256 _txnLimit) external onlyOwner { txnLimit = _txnLimit; } function currentMintLimit(uint256 _currentLimit) external onlyOwner { currentLimit = _currentLimit; } function setCrossmintAddress(address _crossmintAddress) external onlyOwner { crossmintAddress = _crossmintAddress; } function withdraw() external onlyOwner returns (bool) { uint256 total = address(this).balance; uint256 balanceArtist = (total / 1000) * artistPay; uint256 balanceDev = (total / 1000) * devPay; uint256 balanceMW = (total / 1000) * MWPay; uint256 balanceBD = (total / 1000) * BDPay; uint256 balancePW = (total / 1000) * PWPay; uint256 balanceSL = (total / 1000) * SLPay; uint256 balanceArsenal = (total / 1000) * arsenalPay; payable(artist).transfer(balanceArtist); payable(dev).transfer(balanceDev); payable(MW).transfer(balanceMW); payable(BD).transfer(balanceBD); payable(PW).transfer(balancePW); payable(SL).transfer(balanceSL); payable(arsenal).transfer(balanceArsenal); return true; } function payout(uint256 start, uint256 stop) external onlyOwner { while (start <= stop) { address addy = prepayer[start]; uint256 x = prepaid[addy]; marketingMint(x, addy); prepaid[addy] = 0; start++; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":[],"name":"BDPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MICEcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MICEpresaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MWPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PWPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SLPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenIds","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arsenalPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"artistPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"changeMICEcost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleCost","type":"uint256"}],"name":"changeMICEpresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_prepayCost","type":"uint256"}],"name":"changePrepayCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txnLimit","type":"uint256"}],"name":"changeTXNlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creditCardSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"crossmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currentLimit","type":"uint256"}],"name":"currentMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipCreditCardSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPrepay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"i","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ipfsHash","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"numTokens","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"marketingMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"prepaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"prepaidQTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepayActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepayCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepayLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepay_txnLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prepayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ID","type":"uint256"}],"name":"prepayerID","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"prepayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealer","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":"uint256","name":"numTokens","type":"uint256"}],"name":"sale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_crossmintAddress","type":"address"}],"name":"setCrossmintAddress","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txnLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unrevealed","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060075567011c37937e0800006008556105dc600955600a80556000600b556000600c60006101000a81548160ff02191690831515021790555060405180608001604052806042815260200162005285604291396010908162000069919062000804565b506040518060800160405280604881526020016200523d604891396011908162000094919062000804565b5073db049066ee25af0cb07fec30358f63f8b7674905601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731c1e33246e29ddedd720533996292502a457c7c3601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073044d11a418b84e12ecf8f6184cf06e8641e18d65601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737e7834576edd58e92c57c63e41bfdac12aaaaf9f601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732edccf4f5c3fa61457ae9c84f736fdd6aa386322601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737f206725a73264ebf717965a1ae4ff111abbbc14601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a30791385f41f9ac738329b77cfc103a35d0cc7601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067011c37937e08000060195567011c37937e080000601a55612710601b556108ca601c55600a601d556032601e556064601f5561021c60205560c86021556028602255603260235560146024556000602560006101000a81548160ff0219169083151502179055506000602560016101000a81548160ff0219169083151502179055506000602560026101000a81548160ff0219169083151502179055506000602560036101000a81548160ff02191690831515021790555073dab1a1854214684ace522439684a145e62505233602560046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200040357600080fd5b506040518060400160405280600881526020017f4d494345204e46540000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d49434500000000000000000000000000000000000000000000000000000000815250816000908162000481919062000804565b50806001908162000493919062000804565b505050620004b6620004aa620004bc60201b60201c565b620004c460201b60201c565b620008eb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200060c57607f821691505b602082108103620006225762000621620005c4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200068c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200064d565b6200069886836200064d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006e5620006df620006d984620006b0565b620006ba565b620006b0565b9050919050565b6000819050919050565b6200070183620006c4565b620007196200071082620006ec565b8484546200065a565b825550505050565b600090565b6200073062000721565b6200073d818484620006f6565b505050565b5b8181101562000765576200075960008262000726565b60018101905062000743565b5050565b601f821115620007b4576200077e8162000628565b62000789846200063d565b8101602085101562000799578190505b620007b1620007a8856200063d565b83018262000742565b50505b505050565b600082821c905092915050565b6000620007d960001984600802620007b9565b1980831691505092915050565b6000620007f48383620007c6565b9150826002028217905092915050565b6200080f826200058a565b67ffffffffffffffff8111156200082b576200082a62000595565b5b620008378254620005f3565b6200084482828562000769565b600060209050601f8311600181146200087c576000841562000867578287015190505b620008738582620007e6565b865550620008e3565b601f1984166200088c8662000628565b60005b82811015620008b6578489015182556001820191506020850194506020810190506200088f565b86831015620008d65784890151620008d2601f891682620007c6565b8355505b6001600288020188555050505b505050505050565b61494280620008fb6000396000f3fe6080604052600436106103b75760003560e01c8063715018a6116101f2578063aa46a4001161010d578063e5aa3d58116100a0578063f2fde38b1161006f578063f2fde38b14610da3578063f81ec69b14610dcc578063fb2487b314610df5578063fc09bd5b14610e1e576103b7565b8063e5aa3d5814610cf4578063e6ab143414610d1f578063e985e9c514610d3b578063eabd0ce114610d78576103b7565b8063c01b7bf2116100dc578063c01b7bf214610c36578063c623674f14610c61578063c87b56dd14610c8c578063e456b01c14610cc9576103b7565b8063aa46a40014610b8e578063ab15621814610bb9578063b6f1538814610be2578063b88d4fde14610c0d576103b7565b806395d89b4111610185578063a22cb46511610154578063a22cb46514610ad2578063a3a2067514610afb578063a5751a7614610b26578063a7270c5314610b63576103b7565b806395d89b4114610a395780639603270214610a645780639975562414610a805780639faac89e14610aa9576103b7565b80638e241d89116101c15780638e241d891461098a578063908a41bc146109b557806391257df4146109f257806391afca5514610a1d576103b7565b8063715018a6146109065780637ba5e6211461091d578063836c081d146109345780638da5cb5b1461095f576103b7565b80633feb6a6f116102e257806353135ca0116102755780635c7ded1c116102445780635c7ded1c146108365780636352211e1461086157806368428a1b1461089e57806370a08231146108c9576103b7565b806353135ca01461078e5780635aa6cf97146107b95780635b2d21fe146107e25780635b749cb01461080b576103b7565b80634b1e8566116102b15780634b1e8566146106e25780634d8901501461070d5780634e314604146107385780635183022714610763576103b7565b80633feb6a6f1461063857806342842e0e14610663578063431748e31461068c5780634ad34e08146106b7576103b7565b8063126e5cfb1161035a57806323b872dd1161032957806323b872dd1461057c57806334c35bfe146105a55780633ccfd60b146105e25780633f8267811461060d576103b7565b8063126e5cfb146104f5578063152fb3501461050c57806320b55a2d146105495780632215ffd214610560576103b7565b806305b883001161039657806305b883001461043b57806306fdde0314610464578063081812fc1461048f578063095ea7b3146104cc576103b7565b8062acf348146103bc57806301d4730a146103d357806301ffc9a7146103fe575b600080fd5b3480156103c857600080fd5b506103d1610e35565b005b3480156103df57600080fd5b506103e8610e69565b6040516103f59190613644565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906136cb565b610e6f565b6040516104329190613713565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906137b8565b610f51565b005b34801561047057600080fd5b5061047961104b565b6040516104869190613888565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b191906138aa565b6110dd565b6040516104c391906138e6565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613901565b611123565b005b34801561050157600080fd5b5061050a61123a565b005b34801561051857600080fd5b50610533600480360381019061052e9190613941565b61126e565b6040516105409190613644565b60405180910390f35b34801561055557600080fd5b5061055e6112b7565b005b61057a600480360381019061057591906138aa565b6112dc565b005b34801561058857600080fd5b506105a3600480360381019061059e919061396e565b611502565b005b3480156105b157600080fd5b506105cc60048036038101906105c791906138aa565b611562565b6040516105d991906138e6565b60405180910390f35b3480156105ee57600080fd5b506105f7611595565b6040516106049190613713565b60405180910390f35b34801561061957600080fd5b5061062261196b565b60405161062f9190613644565b60405180910390f35b34801561064457600080fd5b5061064d611971565b60405161065a9190613644565b60405180910390f35b34801561066f57600080fd5b5061068a6004803603810190610685919061396e565b611977565b005b34801561069857600080fd5b506106a1611997565b6040516106ae9190613644565b60405180910390f35b3480156106c357600080fd5b506106cc61199d565b6040516106d99190613644565b60405180910390f35b3480156106ee57600080fd5b506106f76119a3565b6040516107049190613888565b60405180910390f35b34801561071957600080fd5b50610722611a31565b60405161072f9190613713565b60405180910390f35b34801561074457600080fd5b5061074d611a44565b60405161075a9190613644565b60405180910390f35b34801561076f57600080fd5b50610778611a4a565b6040516107859190613713565b60405180910390f35b34801561079a57600080fd5b506107a3611a5d565b6040516107b09190613713565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906139c1565b611a70565b005b3480156107ee57600080fd5b50610809600480360381019061080491906138aa565b611b64565b005b34801561081757600080fd5b50610820611b76565b60405161082d9190613713565b60405180910390f35b34801561084257600080fd5b5061084b611b89565b6040516108589190613644565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906138aa565b611b8f565b60405161089591906138e6565b60405180910390f35b3480156108aa57600080fd5b506108b3611c40565b6040516108c09190613713565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb9190613941565b611c53565b6040516108fd9190613644565b60405180910390f35b34801561091257600080fd5b5061091b611d0a565b005b34801561092957600080fd5b50610932611d1e565b005b34801561094057600080fd5b50610949611d52565b6040516109569190613644565b60405180910390f35b34801561096b57600080fd5b50610974611d58565b60405161098191906138e6565b60405180910390f35b34801561099657600080fd5b5061099f611d82565b6040516109ac9190613644565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d791906138aa565b611d88565b6040516109e991906138e6565b60405180910390f35b3480156109fe57600080fd5b50610a07611dc5565b604051610a149190613644565b60405180910390f35b610a376004803603810190610a329190613941565b611dcb565b005b348015610a4557600080fd5b50610a4e611fc2565b604051610a5b9190613888565b60405180910390f35b610a7e6004803603810190610a7991906138aa565b612054565b005b348015610a8c57600080fd5b50610aa76004803603810190610aa29190613941565b612229565b005b348015610ab557600080fd5b50610ad06004803603810190610acb91906138aa565b612275565b005b348015610ade57600080fd5b50610af96004803603810190610af49190613a2d565b612287565b005b348015610b0757600080fd5b50610b1061229d565b604051610b1d9190613644565b60405180910390f35b348015610b3257600080fd5b50610b4d6004803603810190610b489190613941565b6122a3565b604051610b5a9190613644565b60405180910390f35b348015610b6f57600080fd5b50610b786122bb565b604051610b859190613644565b60405180910390f35b348015610b9a57600080fd5b50610ba36122c1565b604051610bb09190613644565b60405180910390f35b348015610bc557600080fd5b50610be06004803603810190610bdb91906138aa565b6122cd565b005b348015610bee57600080fd5b50610bf76122df565b604051610c049190613644565b60405180910390f35b348015610c1957600080fd5b50610c346004803603810190610c2f9190613ba2565b6122e5565b005b348015610c4257600080fd5b50610c4b612347565b604051610c589190613644565b60405180910390f35b348015610c6d57600080fd5b50610c7661234d565b604051610c839190613888565b60405180910390f35b348015610c9857600080fd5b50610cb36004803603810190610cae91906138aa565b6123db565b604051610cc09190613888565b60405180910390f35b348015610cd557600080fd5b50610cde6124d0565b604051610ceb9190613644565b60405180910390f35b348015610d0057600080fd5b50610d096124d6565b604051610d169190613644565b60405180910390f35b610d396004803603810190610d3491906138aa565b6124dc565b005b348015610d4757600080fd5b50610d626004803603810190610d5d9190613c25565b6126b1565b604051610d6f9190613713565b60405180910390f35b348015610d8457600080fd5b50610d8d612745565b604051610d9a9190613644565b60405180910390f35b348015610daf57600080fd5b50610dca6004803603810190610dc59190613941565b61274b565b005b348015610dd857600080fd5b50610df36004803603810190610dee91906138aa565b6127ce565b005b348015610e0157600080fd5b50610e1c6004803603810190610e1791906138aa565b6127e0565b005b348015610e2a57600080fd5b50610e336127f2565b005b610e3d612826565b602560009054906101000a900460ff1615602560006101000a81548160ff021916908315150217905550565b601e5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f3a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f4a5750610f49826128a4565b5b9050919050565b610f59612826565b601b54610f66600f61290e565b83610f719190613c94565b1115610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990613d14565b60405180910390fd5b601c54610fbf600f61290e565b83610fca9190613c94565b111561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613d14565b60405180910390fd5b60005b8281101561104657611020600f61291c565b6110338261102e600f61290e565b612932565b808061103e90613d34565b91505061100e565b505050565b60606000805461105a90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461108690613dab565b80156110d35780601f106110a8576101008083540402835291602001916110d3565b820191906000526020600020905b8154815290600101906020018083116110b657829003601f168201915b5050505050905090565b60006110e882612950565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061112e82611b8f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613e4e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111bd61299b565b73ffffffffffffffffffffffffffffffffffffffff1614806111ec57506111eb816111e661299b565b6126b1565b5b61122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613ee0565b60405180910390fd5b61123583836129a3565b505050565b611242612826565b602560029054906101000a900460ff1615602560026101000a81548160ff021916908315150217905550565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bf612826565b6001602560036101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1661132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290613f4c565b60405180910390fd5b806008546113399190613f6c565b34101561137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613ffa565b60405180910390fd5b6009546007548261138c9190613c94565b11156113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613d14565b60405180910390fd5b600a548111156113dc57600080fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361149057600b600081548092919061143690613d34565b919050555033600e6000600b54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114df9190613c94565b9250508190555080600760008282546114f89190613c94565b9250508190555050565b61151361150d61299b565b82612a5c565b611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499061408c565b60405180910390fd5b61155d838383612af1565b505050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061159f612826565b60004790506000601e546103e8836115b791906140db565b6115c19190613f6c565b90506000601f546103e8846115d691906140db565b6115e09190613f6c565b905060006020546103e8856115f591906140db565b6115ff9190613f6c565b905060006021546103e88661161491906140db565b61161e9190613f6c565b905060006022546103e88761163391906140db565b61163d9190613f6c565b905060006023546103e88861165291906140db565b61165c9190613f6c565b905060006024546103e88961167191906140db565b61167b9190613f6c565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f193505050501580156116e5573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f1935050505015801561174e573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156117b7573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611820573d6000803e3d6000fd5b50601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611889573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156118f2573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561195b573d6000803e3d6000fd5b5060019850505050505050505090565b60225481565b601d5481565b611992838383604051806020016040528060008152506122e5565b505050565b60245481565b60235481565b601180546119b090613dab565b80601f01602080910402602001604051908101604052809291908181526020018280546119dc90613dab565b8015611a295780601f106119fe57610100808354040283529160200191611a29565b820191906000526020600020905b815481529060010190602001808311611a0c57829003601f168201915b505050505081565b602560029054906101000a900460ff1681565b600a5481565b602560039054906101000a900460ff1681565b602560009054906101000a900460ff1681565b611a78612826565b5b808211611b60576000600e600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b068183610f51565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380611b5690613d34565b9450505050611a79565b5050565b611b6c612826565b80601d8190555050565b600c60009054906101000a900460ff1681565b601f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614158565b60405180910390fd5b80915050919050565b602560019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba906141ea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d12612826565b611d1c6000612d57565b565b611d26612826565b602560019054906101000a900460ff1615602560016101000a81548160ff021916908315150217905550565b60075481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b6000600e600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60195481565b602560029054906101000a900460ff16611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613f4c565b60405180910390fd5b3460195414611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590613ffa565b60405180910390fd5b601b54611e6b600f61290e565b6001611e779190613c94565b1115611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613d14565b60405180910390fd5b601c54611ec5600f61290e565b6001611ed19190613c94565b1115611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990613d14565b60405180910390fd5b602560049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f999061427c565b60405180910390fd5b611fac600f61291c565b611fbf81611fba600f61290e565b612932565b50565b606060018054611fd190613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffd90613dab565b801561204a5780601f1061201f5761010080835404028352916020019161204a565b820191906000526020600020905b81548152906001019060200180831161202d57829003601f168201915b5050505050905090565b602560019054906101000a900460ff166120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90613f4c565b60405180910390fd5b806019546120b19190613f6c565b3410156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90613ffa565b60405180910390fd5b601b54612100600f61290e565b8261210b9190613c94565b111561214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613d14565b60405180910390fd5b601c54612159600f61290e565b826121649190613c94565b11156121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90613d14565b60405180910390fd5b601d548111156121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e1906142e8565b60405180910390fd5b60005b81811015612225576121ff600f61291c565b6122123361220d600f61290e565b612932565b808061221d90613d34565b9150506121ed565b5050565b612231612826565b80602560046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61227d612826565b80601a8190555050565b61229961229261299b565b8383612e1d565b5050565b601a5481565b600d6020528060005260406000206000915090505481565b60215481565b600f8060000154905081565b6122d5612826565b8060088190555050565b60085481565b6122f66122f061299b565b83612a5c565b612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061408c565b60405180910390fd5b61234184848484612f89565b50505050565b60205481565b6010805461235a90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461238690613dab565b80156123d35780601f106123a8576101008083540402835291602001916123d3565b820191906000526020600020905b8154815290600101906020018083116123b657829003601f168201915b505050505081565b60606123e682612950565b60006123f0612fe5565b90506000602560039054906101000a900460ff1615612438578161241385613077565b60405160200161242492919061436a565b6040516020818303038152906040526124c4565b6011805461244590613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461247190613dab565b80156124be5780601f10612493576101008083540402835291602001916124be565b820191906000526020600020905b8154815290600101906020018083116124a157829003601f168201915b50505050505b90508092505050919050565b601b5481565b600b5481565b602560009054906101000a900460ff1661252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290613f4c565b60405180910390fd5b80601a546125399190613f6c565b34101561257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290613ffa565b60405180910390fd5b601b54612588600f61290e565b826125939190613c94565b11156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90613d14565b60405180910390fd5b601c546125e1600f61290e565b826125ec9190613c94565b111561262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490613d14565b60405180910390fd5b601d54811115612672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612669906142e8565b60405180910390fd5b60005b818110156126ad57612687600f61291c565b61269a33612695600f61290e565b612932565b80806126a590613d34565b915050612675565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601c5481565b612753612826565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b99061440f565b60405180910390fd5b6127cb81612d57565b50565b6127d6612826565b8060198190555050565b6127e8612826565b80601c8190555050565b6127fa612826565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b61282e61299b565b73ffffffffffffffffffffffffffffffffffffffff1661284c611d58565b73ffffffffffffffffffffffffffffffffffffffff16146128a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128999061447b565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61294c8282604051806020016040528060008152506131d7565b5050565b61295981613232565b612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f90614158565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a1683611b8f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612a6883611b8f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612aaa5750612aa981856126b1565b5b80612ae857508373ffffffffffffffffffffffffffffffffffffffff16612ad0846110dd565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b1182611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e9061450d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd9061459f565b60405180910390fd5b612be183838361329e565b612bec6000826129a3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3c91906145bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c939190613c94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d528383836132a3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e829061463f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f7c9190613713565b60405180910390a3505050565b612f94848484612af1565b612fa0848484846132a8565b612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906146d1565b60405180910390fd5b50505050565b606060108054612ff490613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461302090613dab565b801561306d5780601f106130425761010080835404028352916020019161306d565b820191906000526020600020905b81548152906001019060200180831161305057829003601f168201915b5050505050905090565b6060600082036130be576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d2565b600082905060005b600082146130f05780806130d990613d34565b915050600a826130e991906140db565b91506130c6565b60008167ffffffffffffffff81111561310c5761310b613a77565b5b6040519080825280601f01601f19166020018201604052801561313e5781602001600182028036833780820191505090505b5090505b600085146131cb5760018261315791906145bf565b9150600a8561316691906146f1565b60306131729190613c94565b60f81b81838151811061318857613187614722565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131c491906140db565b9450613142565b8093505050505b919050565b6131e1838361342f565b6131ee60008484846132a8565b61322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613224906146d1565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006132c98473ffffffffffffffffffffffffffffffffffffffff16613608565b15613422578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f261299b565b8786866040518563ffffffff1660e01b815260040161331494939291906147a6565b6020604051808303816000875af192505050801561335057506040513d601f19601f8201168201806040525081019061334d9190614807565b60015b6133d2573d8060008114613380576040519150601f19603f3d011682016040523d82523d6000602084013e613385565b606091505b5060008151036133ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c1906146d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613427565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361349e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349590614880565b60405180910390fd5b6134a781613232565b156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134de906148ec565b60405180910390fd5b6134f36000838361329e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135439190613c94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613604600083836132a3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b61363e8161362b565b82525050565b60006020820190506136596000830184613635565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136a881613673565b81146136b357600080fd5b50565b6000813590506136c58161369f565b92915050565b6000602082840312156136e1576136e0613669565b5b60006136ef848285016136b6565b91505092915050565b60008115159050919050565b61370d816136f8565b82525050565b60006020820190506137286000830184613704565b92915050565b6137378161362b565b811461374257600080fd5b50565b6000813590506137548161372e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137858261375a565b9050919050565b6137958161377a565b81146137a057600080fd5b50565b6000813590506137b28161378c565b92915050565b600080604083850312156137cf576137ce613669565b5b60006137dd85828601613745565b92505060206137ee858286016137a3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613832578082015181840152602081019050613817565b60008484015250505050565b6000601f19601f8301169050919050565b600061385a826137f8565b6138648185613803565b9350613874818560208601613814565b61387d8161383e565b840191505092915050565b600060208201905081810360008301526138a2818461384f565b905092915050565b6000602082840312156138c0576138bf613669565b5b60006138ce84828501613745565b91505092915050565b6138e08161377a565b82525050565b60006020820190506138fb60008301846138d7565b92915050565b6000806040838503121561391857613917613669565b5b6000613926858286016137a3565b925050602061393785828601613745565b9150509250929050565b60006020828403121561395757613956613669565b5b6000613965848285016137a3565b91505092915050565b60008060006060848603121561398757613986613669565b5b6000613995868287016137a3565b93505060206139a6868287016137a3565b92505060406139b786828701613745565b9150509250925092565b600080604083850312156139d8576139d7613669565b5b60006139e685828601613745565b92505060206139f785828601613745565b9150509250929050565b613a0a816136f8565b8114613a1557600080fd5b50565b600081359050613a2781613a01565b92915050565b60008060408385031215613a4457613a43613669565b5b6000613a52858286016137a3565b9250506020613a6385828601613a18565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613aaf8261383e565b810181811067ffffffffffffffff82111715613ace57613acd613a77565b5b80604052505050565b6000613ae161365f565b9050613aed8282613aa6565b919050565b600067ffffffffffffffff821115613b0d57613b0c613a77565b5b613b168261383e565b9050602081019050919050565b82818337600083830152505050565b6000613b45613b4084613af2565b613ad7565b905082815260208101848484011115613b6157613b60613a72565b5b613b6c848285613b23565b509392505050565b600082601f830112613b8957613b88613a6d565b5b8135613b99848260208601613b32565b91505092915050565b60008060008060808587031215613bbc57613bbb613669565b5b6000613bca878288016137a3565b9450506020613bdb878288016137a3565b9350506040613bec87828801613745565b925050606085013567ffffffffffffffff811115613c0d57613c0c61366e565b5b613c1987828801613b74565b91505092959194509250565b60008060408385031215613c3c57613c3b613669565b5b6000613c4a858286016137a3565b9250506020613c5b858286016137a3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c9f8261362b565b9150613caa8361362b565b9250828201905080821115613cc257613cc1613c65565b5b92915050565b7f4e6f206d6f7265206c6566740000000000000000000000000000000000000000600082015250565b6000613cfe600c83613803565b9150613d0982613cc8565b602082019050919050565b60006020820190508181036000830152613d2d81613cf1565b9050919050565b6000613d3f8261362b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d7157613d70613c65565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dc357607f821691505b602082108103613dd657613dd5613d7c565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e38602183613803565b9150613e4382613ddc565b604082019050919050565b60006020820190508181036000830152613e6781613e2b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613eca603e83613803565b9150613ed582613e6e565b604082019050919050565b60006020820190508181036000830152613ef981613ebd565b9050919050565b7f726f756e6420696e616374697665000000000000000000000000000000000000600082015250565b6000613f36600e83613803565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b6000613f778261362b565b9150613f828361362b565b9250828202613f908161362b565b91508282048414831517613fa757613fa6613c65565b5b5092915050565b7f496e636f72726563742076616c75652073656e74000000000000000000000000600082015250565b6000613fe4601483613803565b9150613fef82613fae565b602082019050919050565b6000602082019050818103600083015261401381613fd7565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614076602e83613803565b91506140818261401a565b604082019050919050565b600060208201905081810360008301526140a581614069565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140e68261362b565b91506140f18361362b565b925082614101576141006140ac565b5b828204905092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614142601883613803565b915061414d8261410c565b602082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006141d4602983613803565b91506141df82614178565b604082019050919050565b60006020820190508181036000830152614203816141c7565b9050919050565b7f546869732066756e6374696f6e20697320666f722043726f73736d696e74206f60008201527f6e6c792e00000000000000000000000000000000000000000000000000000000602082015250565b6000614266602483613803565b91506142718261420a565b604082019050919050565b6000602082019050818103600083015261429581614259565b9050919050565b7f746f6f206d616e79207065722074786e00000000000000000000000000000000600082015250565b60006142d2601083613803565b91506142dd8261429c565b602082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b600081905092915050565b600061431e826137f8565b6143288185614308565b9350614338818560208601613814565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b60006143768285614313565b91506143828284614313565b915061438d82614344565b6005820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143f9602683613803565b91506144048261439d565b604082019050919050565b60006020820190508181036000830152614428816143ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614465602083613803565b91506144708261442f565b602082019050919050565b6000602082019050818103600083015261449481614458565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006144f7602583613803565b91506145028261449b565b604082019050919050565b60006020820190508181036000830152614526816144ea565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614589602483613803565b91506145948261452d565b604082019050919050565b600060208201905081810360008301526145b88161457c565b9050919050565b60006145ca8261362b565b91506145d58361362b565b92508282039050818111156145ed576145ec613c65565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614629601983613803565b9150614634826145f3565b602082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146bb603283613803565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b60006146fc8261362b565b91506147078361362b565b925082614717576147166140ac565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061477882614751565b614782818561475c565b9350614792818560208601613814565b61479b8161383e565b840191505092915050565b60006080820190506147bb60008301876138d7565b6147c860208301866138d7565b6147d56040830185613635565b81810360608301526147e7818461476d565b905095945050505050565b6000815190506148018161369f565b92915050565b60006020828403121561481d5761481c613669565b5b600061482b848285016147f2565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061486a602083613803565b915061487582614834565b602082019050919050565b600060208201905081810360008301526148998161485d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006148d6601c83613803565b91506148e1826148a0565b602082019050919050565b60006020820190508181036000830152614905816148c9565b905091905056fea26469706673582212205012200878dac3768fafe8798d573b0c98f05d7f271e5da372eb41d43113656164736f6c63430008110033697066733a2f2f516d5a594d776a476a5a37484657556777464a48784d5867444150634d6e4b4c79654435483261625a4541486f5a2f4572633732315f446174615f302e6a736f6e697066733a2f2f516d626342386e345753776854654d69374d505270416d42436750414756416a62487341594b38484b4751457a6f2f4572633732315f446174615f
Deployed Bytecode
0x6080604052600436106103b75760003560e01c8063715018a6116101f2578063aa46a4001161010d578063e5aa3d58116100a0578063f2fde38b1161006f578063f2fde38b14610da3578063f81ec69b14610dcc578063fb2487b314610df5578063fc09bd5b14610e1e576103b7565b8063e5aa3d5814610cf4578063e6ab143414610d1f578063e985e9c514610d3b578063eabd0ce114610d78576103b7565b8063c01b7bf2116100dc578063c01b7bf214610c36578063c623674f14610c61578063c87b56dd14610c8c578063e456b01c14610cc9576103b7565b8063aa46a40014610b8e578063ab15621814610bb9578063b6f1538814610be2578063b88d4fde14610c0d576103b7565b806395d89b4111610185578063a22cb46511610154578063a22cb46514610ad2578063a3a2067514610afb578063a5751a7614610b26578063a7270c5314610b63576103b7565b806395d89b4114610a395780639603270214610a645780639975562414610a805780639faac89e14610aa9576103b7565b80638e241d89116101c15780638e241d891461098a578063908a41bc146109b557806391257df4146109f257806391afca5514610a1d576103b7565b8063715018a6146109065780637ba5e6211461091d578063836c081d146109345780638da5cb5b1461095f576103b7565b80633feb6a6f116102e257806353135ca0116102755780635c7ded1c116102445780635c7ded1c146108365780636352211e1461086157806368428a1b1461089e57806370a08231146108c9576103b7565b806353135ca01461078e5780635aa6cf97146107b95780635b2d21fe146107e25780635b749cb01461080b576103b7565b80634b1e8566116102b15780634b1e8566146106e25780634d8901501461070d5780634e314604146107385780635183022714610763576103b7565b80633feb6a6f1461063857806342842e0e14610663578063431748e31461068c5780634ad34e08146106b7576103b7565b8063126e5cfb1161035a57806323b872dd1161032957806323b872dd1461057c57806334c35bfe146105a55780633ccfd60b146105e25780633f8267811461060d576103b7565b8063126e5cfb146104f5578063152fb3501461050c57806320b55a2d146105495780632215ffd214610560576103b7565b806305b883001161039657806305b883001461043b57806306fdde0314610464578063081812fc1461048f578063095ea7b3146104cc576103b7565b8062acf348146103bc57806301d4730a146103d357806301ffc9a7146103fe575b600080fd5b3480156103c857600080fd5b506103d1610e35565b005b3480156103df57600080fd5b506103e8610e69565b6040516103f59190613644565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906136cb565b610e6f565b6040516104329190613713565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d91906137b8565b610f51565b005b34801561047057600080fd5b5061047961104b565b6040516104869190613888565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b191906138aa565b6110dd565b6040516104c391906138e6565b60405180910390f35b3480156104d857600080fd5b506104f360048036038101906104ee9190613901565b611123565b005b34801561050157600080fd5b5061050a61123a565b005b34801561051857600080fd5b50610533600480360381019061052e9190613941565b61126e565b6040516105409190613644565b60405180910390f35b34801561055557600080fd5b5061055e6112b7565b005b61057a600480360381019061057591906138aa565b6112dc565b005b34801561058857600080fd5b506105a3600480360381019061059e919061396e565b611502565b005b3480156105b157600080fd5b506105cc60048036038101906105c791906138aa565b611562565b6040516105d991906138e6565b60405180910390f35b3480156105ee57600080fd5b506105f7611595565b6040516106049190613713565b60405180910390f35b34801561061957600080fd5b5061062261196b565b60405161062f9190613644565b60405180910390f35b34801561064457600080fd5b5061064d611971565b60405161065a9190613644565b60405180910390f35b34801561066f57600080fd5b5061068a6004803603810190610685919061396e565b611977565b005b34801561069857600080fd5b506106a1611997565b6040516106ae9190613644565b60405180910390f35b3480156106c357600080fd5b506106cc61199d565b6040516106d99190613644565b60405180910390f35b3480156106ee57600080fd5b506106f76119a3565b6040516107049190613888565b60405180910390f35b34801561071957600080fd5b50610722611a31565b60405161072f9190613713565b60405180910390f35b34801561074457600080fd5b5061074d611a44565b60405161075a9190613644565b60405180910390f35b34801561076f57600080fd5b50610778611a4a565b6040516107859190613713565b60405180910390f35b34801561079a57600080fd5b506107a3611a5d565b6040516107b09190613713565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906139c1565b611a70565b005b3480156107ee57600080fd5b50610809600480360381019061080491906138aa565b611b64565b005b34801561081757600080fd5b50610820611b76565b60405161082d9190613713565b60405180910390f35b34801561084257600080fd5b5061084b611b89565b6040516108589190613644565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906138aa565b611b8f565b60405161089591906138e6565b60405180910390f35b3480156108aa57600080fd5b506108b3611c40565b6040516108c09190613713565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb9190613941565b611c53565b6040516108fd9190613644565b60405180910390f35b34801561091257600080fd5b5061091b611d0a565b005b34801561092957600080fd5b50610932611d1e565b005b34801561094057600080fd5b50610949611d52565b6040516109569190613644565b60405180910390f35b34801561096b57600080fd5b50610974611d58565b60405161098191906138e6565b60405180910390f35b34801561099657600080fd5b5061099f611d82565b6040516109ac9190613644565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d791906138aa565b611d88565b6040516109e991906138e6565b60405180910390f35b3480156109fe57600080fd5b50610a07611dc5565b604051610a149190613644565b60405180910390f35b610a376004803603810190610a329190613941565b611dcb565b005b348015610a4557600080fd5b50610a4e611fc2565b604051610a5b9190613888565b60405180910390f35b610a7e6004803603810190610a7991906138aa565b612054565b005b348015610a8c57600080fd5b50610aa76004803603810190610aa29190613941565b612229565b005b348015610ab557600080fd5b50610ad06004803603810190610acb91906138aa565b612275565b005b348015610ade57600080fd5b50610af96004803603810190610af49190613a2d565b612287565b005b348015610b0757600080fd5b50610b1061229d565b604051610b1d9190613644565b60405180910390f35b348015610b3257600080fd5b50610b4d6004803603810190610b489190613941565b6122a3565b604051610b5a9190613644565b60405180910390f35b348015610b6f57600080fd5b50610b786122bb565b604051610b859190613644565b60405180910390f35b348015610b9a57600080fd5b50610ba36122c1565b604051610bb09190613644565b60405180910390f35b348015610bc557600080fd5b50610be06004803603810190610bdb91906138aa565b6122cd565b005b348015610bee57600080fd5b50610bf76122df565b604051610c049190613644565b60405180910390f35b348015610c1957600080fd5b50610c346004803603810190610c2f9190613ba2565b6122e5565b005b348015610c4257600080fd5b50610c4b612347565b604051610c589190613644565b60405180910390f35b348015610c6d57600080fd5b50610c7661234d565b604051610c839190613888565b60405180910390f35b348015610c9857600080fd5b50610cb36004803603810190610cae91906138aa565b6123db565b604051610cc09190613888565b60405180910390f35b348015610cd557600080fd5b50610cde6124d0565b604051610ceb9190613644565b60405180910390f35b348015610d0057600080fd5b50610d096124d6565b604051610d169190613644565b60405180910390f35b610d396004803603810190610d3491906138aa565b6124dc565b005b348015610d4757600080fd5b50610d626004803603810190610d5d9190613c25565b6126b1565b604051610d6f9190613713565b60405180910390f35b348015610d8457600080fd5b50610d8d612745565b604051610d9a9190613644565b60405180910390f35b348015610daf57600080fd5b50610dca6004803603810190610dc59190613941565b61274b565b005b348015610dd857600080fd5b50610df36004803603810190610dee91906138aa565b6127ce565b005b348015610e0157600080fd5b50610e1c6004803603810190610e1791906138aa565b6127e0565b005b348015610e2a57600080fd5b50610e336127f2565b005b610e3d612826565b602560009054906101000a900460ff1615602560006101000a81548160ff021916908315150217905550565b601e5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f3a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f4a5750610f49826128a4565b5b9050919050565b610f59612826565b601b54610f66600f61290e565b83610f719190613c94565b1115610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990613d14565b60405180910390fd5b601c54610fbf600f61290e565b83610fca9190613c94565b111561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290613d14565b60405180910390fd5b60005b8281101561104657611020600f61291c565b6110338261102e600f61290e565b612932565b808061103e90613d34565b91505061100e565b505050565b60606000805461105a90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461108690613dab565b80156110d35780601f106110a8576101008083540402835291602001916110d3565b820191906000526020600020905b8154815290600101906020018083116110b657829003601f168201915b5050505050905090565b60006110e882612950565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061112e82611b8f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613e4e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111bd61299b565b73ffffffffffffffffffffffffffffffffffffffff1614806111ec57506111eb816111e661299b565b6126b1565b5b61122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613ee0565b60405180910390fd5b61123583836129a3565b505050565b611242612826565b602560029054906101000a900460ff1615602560026101000a81548160ff021916908315150217905550565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bf612826565b6001602560036101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1661132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290613f4c565b60405180910390fd5b806008546113399190613f6c565b34101561137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613ffa565b60405180910390fd5b6009546007548261138c9190613c94565b11156113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613d14565b60405180910390fd5b600a548111156113dc57600080fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361149057600b600081548092919061143690613d34565b919050555033600e6000600b54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114df9190613c94565b9250508190555080600760008282546114f89190613c94565b9250508190555050565b61151361150d61299b565b82612a5c565b611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499061408c565b60405180910390fd5b61155d838383612af1565b505050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061159f612826565b60004790506000601e546103e8836115b791906140db565b6115c19190613f6c565b90506000601f546103e8846115d691906140db565b6115e09190613f6c565b905060006020546103e8856115f591906140db565b6115ff9190613f6c565b905060006021546103e88661161491906140db565b61161e9190613f6c565b905060006022546103e88761163391906140db565b61163d9190613f6c565b905060006023546103e88861165291906140db565b61165c9190613f6c565b905060006024546103e88961167191906140db565b61167b9190613f6c565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f193505050501580156116e5573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f1935050505015801561174e573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156117b7573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015611820573d6000803e3d6000fd5b50601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611889573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156118f2573d6000803e3d6000fd5b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561195b573d6000803e3d6000fd5b5060019850505050505050505090565b60225481565b601d5481565b611992838383604051806020016040528060008152506122e5565b505050565b60245481565b60235481565b601180546119b090613dab565b80601f01602080910402602001604051908101604052809291908181526020018280546119dc90613dab565b8015611a295780601f106119fe57610100808354040283529160200191611a29565b820191906000526020600020905b815481529060010190602001808311611a0c57829003601f168201915b505050505081565b602560029054906101000a900460ff1681565b600a5481565b602560039054906101000a900460ff1681565b602560009054906101000a900460ff1681565b611a78612826565b5b808211611b60576000600e600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b068183610f51565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508380611b5690613d34565b9450505050611a79565b5050565b611b6c612826565b80601d8190555050565b600c60009054906101000a900460ff1681565b601f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90614158565b60405180910390fd5b80915050919050565b602560019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba906141ea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d12612826565b611d1c6000612d57565b565b611d26612826565b602560019054906101000a900460ff1615602560016101000a81548160ff021916908315150217905550565b60075481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b6000600e600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60195481565b602560029054906101000a900460ff16611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613f4c565b60405180910390fd5b3460195414611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590613ffa565b60405180910390fd5b601b54611e6b600f61290e565b6001611e779190613c94565b1115611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613d14565b60405180910390fd5b601c54611ec5600f61290e565b6001611ed19190613c94565b1115611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0990613d14565b60405180910390fd5b602560049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f999061427c565b60405180910390fd5b611fac600f61291c565b611fbf81611fba600f61290e565b612932565b50565b606060018054611fd190613dab565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffd90613dab565b801561204a5780601f1061201f5761010080835404028352916020019161204a565b820191906000526020600020905b81548152906001019060200180831161202d57829003601f168201915b5050505050905090565b602560019054906101000a900460ff166120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90613f4c565b60405180910390fd5b806019546120b19190613f6c565b3410156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90613ffa565b60405180910390fd5b601b54612100600f61290e565b8261210b9190613c94565b111561214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613d14565b60405180910390fd5b601c54612159600f61290e565b826121649190613c94565b11156121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c90613d14565b60405180910390fd5b601d548111156121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e1906142e8565b60405180910390fd5b60005b81811015612225576121ff600f61291c565b6122123361220d600f61290e565b612932565b808061221d90613d34565b9150506121ed565b5050565b612231612826565b80602560046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61227d612826565b80601a8190555050565b61229961229261299b565b8383612e1d565b5050565b601a5481565b600d6020528060005260406000206000915090505481565b60215481565b600f8060000154905081565b6122d5612826565b8060088190555050565b60085481565b6122f66122f061299b565b83612a5c565b612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061408c565b60405180910390fd5b61234184848484612f89565b50505050565b60205481565b6010805461235a90613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461238690613dab565b80156123d35780601f106123a8576101008083540402835291602001916123d3565b820191906000526020600020905b8154815290600101906020018083116123b657829003601f168201915b505050505081565b60606123e682612950565b60006123f0612fe5565b90506000602560039054906101000a900460ff1615612438578161241385613077565b60405160200161242492919061436a565b6040516020818303038152906040526124c4565b6011805461244590613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461247190613dab565b80156124be5780601f10612493576101008083540402835291602001916124be565b820191906000526020600020905b8154815290600101906020018083116124a157829003601f168201915b50505050505b90508092505050919050565b601b5481565b600b5481565b602560009054906101000a900460ff1661252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290613f4c565b60405180910390fd5b80601a546125399190613f6c565b34101561257b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257290613ffa565b60405180910390fd5b601b54612588600f61290e565b826125939190613c94565b11156125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90613d14565b60405180910390fd5b601c546125e1600f61290e565b826125ec9190613c94565b111561262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490613d14565b60405180910390fd5b601d54811115612672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612669906142e8565b60405180910390fd5b60005b818110156126ad57612687600f61291c565b61269a33612695600f61290e565b612932565b80806126a590613d34565b915050612675565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601c5481565b612753612826565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b99061440f565b60405180910390fd5b6127cb81612d57565b50565b6127d6612826565b8060198190555050565b6127e8612826565b80601c8190555050565b6127fa612826565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b61282e61299b565b73ffffffffffffffffffffffffffffffffffffffff1661284c611d58565b73ffffffffffffffffffffffffffffffffffffffff16146128a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128999061447b565b60405180910390fd5b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b61294c8282604051806020016040528060008152506131d7565b5050565b61295981613232565b612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f90614158565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612a1683611b8f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612a6883611b8f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612aaa5750612aa981856126b1565b5b80612ae857508373ffffffffffffffffffffffffffffffffffffffff16612ad0846110dd565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b1182611b8f565b73ffffffffffffffffffffffffffffffffffffffff1614612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e9061450d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd9061459f565b60405180910390fd5b612be183838361329e565b612bec6000826129a3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3c91906145bf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c939190613c94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d528383836132a3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e829061463f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f7c9190613713565b60405180910390a3505050565b612f94848484612af1565b612fa0848484846132a8565b612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906146d1565b60405180910390fd5b50505050565b606060108054612ff490613dab565b80601f016020809104026020016040519081016040528092919081815260200182805461302090613dab565b801561306d5780601f106130425761010080835404028352916020019161306d565b820191906000526020600020905b81548152906001019060200180831161305057829003601f168201915b5050505050905090565b6060600082036130be576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d2565b600082905060005b600082146130f05780806130d990613d34565b915050600a826130e991906140db565b91506130c6565b60008167ffffffffffffffff81111561310c5761310b613a77565b5b6040519080825280601f01601f19166020018201604052801561313e5781602001600182028036833780820191505090505b5090505b600085146131cb5760018261315791906145bf565b9150600a8561316691906146f1565b60306131729190613c94565b60f81b81838151811061318857613187614722565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131c491906140db565b9450613142565b8093505050505b919050565b6131e1838361342f565b6131ee60008484846132a8565b61322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613224906146d1565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006132c98473ffffffffffffffffffffffffffffffffffffffff16613608565b15613422578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132f261299b565b8786866040518563ffffffff1660e01b815260040161331494939291906147a6565b6020604051808303816000875af192505050801561335057506040513d601f19601f8201168201806040525081019061334d9190614807565b60015b6133d2573d8060008114613380576040519150601f19603f3d011682016040523d82523d6000602084013e613385565b606091505b5060008151036133ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c1906146d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613427565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361349e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349590614880565b60405180910390fd5b6134a781613232565b156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134de906148ec565b60405180910390fd5b6134f36000838361329e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135439190613c94565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613604600083836132a3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000819050919050565b61363e8161362b565b82525050565b60006020820190506136596000830184613635565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6136a881613673565b81146136b357600080fd5b50565b6000813590506136c58161369f565b92915050565b6000602082840312156136e1576136e0613669565b5b60006136ef848285016136b6565b91505092915050565b60008115159050919050565b61370d816136f8565b82525050565b60006020820190506137286000830184613704565b92915050565b6137378161362b565b811461374257600080fd5b50565b6000813590506137548161372e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137858261375a565b9050919050565b6137958161377a565b81146137a057600080fd5b50565b6000813590506137b28161378c565b92915050565b600080604083850312156137cf576137ce613669565b5b60006137dd85828601613745565b92505060206137ee858286016137a3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613832578082015181840152602081019050613817565b60008484015250505050565b6000601f19601f8301169050919050565b600061385a826137f8565b6138648185613803565b9350613874818560208601613814565b61387d8161383e565b840191505092915050565b600060208201905081810360008301526138a2818461384f565b905092915050565b6000602082840312156138c0576138bf613669565b5b60006138ce84828501613745565b91505092915050565b6138e08161377a565b82525050565b60006020820190506138fb60008301846138d7565b92915050565b6000806040838503121561391857613917613669565b5b6000613926858286016137a3565b925050602061393785828601613745565b9150509250929050565b60006020828403121561395757613956613669565b5b6000613965848285016137a3565b91505092915050565b60008060006060848603121561398757613986613669565b5b6000613995868287016137a3565b93505060206139a6868287016137a3565b92505060406139b786828701613745565b9150509250925092565b600080604083850312156139d8576139d7613669565b5b60006139e685828601613745565b92505060206139f785828601613745565b9150509250929050565b613a0a816136f8565b8114613a1557600080fd5b50565b600081359050613a2781613a01565b92915050565b60008060408385031215613a4457613a43613669565b5b6000613a52858286016137a3565b9250506020613a6385828601613a18565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613aaf8261383e565b810181811067ffffffffffffffff82111715613ace57613acd613a77565b5b80604052505050565b6000613ae161365f565b9050613aed8282613aa6565b919050565b600067ffffffffffffffff821115613b0d57613b0c613a77565b5b613b168261383e565b9050602081019050919050565b82818337600083830152505050565b6000613b45613b4084613af2565b613ad7565b905082815260208101848484011115613b6157613b60613a72565b5b613b6c848285613b23565b509392505050565b600082601f830112613b8957613b88613a6d565b5b8135613b99848260208601613b32565b91505092915050565b60008060008060808587031215613bbc57613bbb613669565b5b6000613bca878288016137a3565b9450506020613bdb878288016137a3565b9350506040613bec87828801613745565b925050606085013567ffffffffffffffff811115613c0d57613c0c61366e565b5b613c1987828801613b74565b91505092959194509250565b60008060408385031215613c3c57613c3b613669565b5b6000613c4a858286016137a3565b9250506020613c5b858286016137a3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c9f8261362b565b9150613caa8361362b565b9250828201905080821115613cc257613cc1613c65565b5b92915050565b7f4e6f206d6f7265206c6566740000000000000000000000000000000000000000600082015250565b6000613cfe600c83613803565b9150613d0982613cc8565b602082019050919050565b60006020820190508181036000830152613d2d81613cf1565b9050919050565b6000613d3f8261362b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d7157613d70613c65565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dc357607f821691505b602082108103613dd657613dd5613d7c565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e38602183613803565b9150613e4382613ddc565b604082019050919050565b60006020820190508181036000830152613e6781613e2b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613eca603e83613803565b9150613ed582613e6e565b604082019050919050565b60006020820190508181036000830152613ef981613ebd565b9050919050565b7f726f756e6420696e616374697665000000000000000000000000000000000000600082015250565b6000613f36600e83613803565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b6000613f778261362b565b9150613f828361362b565b9250828202613f908161362b565b91508282048414831517613fa757613fa6613c65565b5b5092915050565b7f496e636f72726563742076616c75652073656e74000000000000000000000000600082015250565b6000613fe4601483613803565b9150613fef82613fae565b602082019050919050565b6000602082019050818103600083015261401381613fd7565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614076602e83613803565b91506140818261401a565b604082019050919050565b600060208201905081810360008301526140a581614069565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140e68261362b565b91506140f18361362b565b925082614101576141006140ac565b5b828204905092915050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000614142601883613803565b915061414d8261410c565b602082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006141d4602983613803565b91506141df82614178565b604082019050919050565b60006020820190508181036000830152614203816141c7565b9050919050565b7f546869732066756e6374696f6e20697320666f722043726f73736d696e74206f60008201527f6e6c792e00000000000000000000000000000000000000000000000000000000602082015250565b6000614266602483613803565b91506142718261420a565b604082019050919050565b6000602082019050818103600083015261429581614259565b9050919050565b7f746f6f206d616e79207065722074786e00000000000000000000000000000000600082015250565b60006142d2601083613803565b91506142dd8261429c565b602082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b600081905092915050565b600061431e826137f8565b6143288185614308565b9350614338818560208601613814565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b60006143768285614313565b91506143828284614313565b915061438d82614344565b6005820191508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143f9602683613803565b91506144048261439d565b604082019050919050565b60006020820190508181036000830152614428816143ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614465602083613803565b91506144708261442f565b602082019050919050565b6000602082019050818103600083015261449481614458565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006144f7602583613803565b91506145028261449b565b604082019050919050565b60006020820190508181036000830152614526816144ea565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614589602483613803565b91506145948261452d565b604082019050919050565b600060208201905081810360008301526145b88161457c565b9050919050565b60006145ca8261362b565b91506145d58361362b565b92508282039050818111156145ed576145ec613c65565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614629601983613803565b9150614634826145f3565b602082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146bb603283613803565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b60006146fc8261362b565b91506147078361362b565b925082614717576147166140ac565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061477882614751565b614782818561475c565b9350614792818560208601613814565b61479b8161383e565b840191505092915050565b60006080820190506147bb60008301876138d7565b6147c860208301866138d7565b6147d56040830185613635565b81810360608301526147e7818461476d565b905095945050505050565b6000815190506148018161369f565b92915050565b60006020828403121561481d5761481c613669565b5b600061482b848285016147f2565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061486a602083613803565b915061487582614834565b602082019050919050565b600060208201905081810360008301526148998161485d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006148d6601c83613803565b91506148e1826148a0565b602082019050919050565b60006020820190508181036000830152614905816148c9565b905091905056fea26469706673582212205012200878dac3768fafe8798d573b0c98f05d7f271e5da372eb41d43113656164736f6c63430008110033
Deployed Bytecode Sourcemap
41276:6850:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45474:91;;;;;;;;;;;;;:::i;:::-;;42422:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26526:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44998:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27453:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28966:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28483:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45741:112;;;;;;;;;;;;;:::i;:::-;;7298:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45978:73;;;;;;;;;;;;;:::i;:::-;;6727:506;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29666:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6564:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46983:837;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42558:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42355:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30073:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42622:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42590:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41510:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42819:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6362:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42909:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42665:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47828:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46613:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6433:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42458:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27164:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42745:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26895:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;45607:82;;;;;;;;;;;;;:::i;:::-;;6190:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6322:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7468:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42067:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44427:495;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27622:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43764:587;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46845:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46484:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29209:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42139:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6514:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42525:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41366:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7759:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6278:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30329:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42492:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41410:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46059:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42218:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6404:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43126:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29435:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42284:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46383:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46722:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7615:88;;;;;;;;;;;;;:::i;:::-;;45474:91;4511:13;:11;:13::i;:::-;45544::::1;;;;;;;;;;;45543:14;45527:13;;:30;;;;;;;;;;;;;;;;;;45474:91::o:0;42422:29::-;;;;:::o;26526:305::-;26628:4;26680:25;26665:40;;;:11;:40;;;;:105;;;;26737:33;26722:48;;;:11;:48;;;;26665:105;:158;;;;26787:36;26811:11;26787:23;:36::i;:::-;26665:158;26645:178;;26526:305;;;:::o;44998:431::-;4511:13;:11;:13::i;:::-;45133:6:::1;;45110:19;:9;:17;:19::i;:::-;45098:9;:31;;;;:::i;:::-;:41;;45089:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45211:12;;45188:19;:9;:17;:19::i;:::-;45176:9;:31;;;;:::i;:::-;:47;;45167:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45251:9;45275:147;45286:9;45282:1;:13;45275:147;;;45312:21;:9;:19;:21::i;:::-;45348:43;45358:11;45371:19;:9;:17;:19::i;:::-;45348:9;:43::i;:::-;45406:4;;;;;:::i;:::-;;;;45275:147;;;45078:351;44998:431:::0;;:::o;27453:100::-;27507:13;27540:5;27533:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27453:100;:::o;28966:171::-;29042:7;29062:23;29077:7;29062:14;:23::i;:::-;29105:15;:24;29121:7;29105:24;;;;;;;;;;;;;;;;;;;;;29098:31;;28966:171;;;:::o;28483:417::-;28564:13;28580:23;28595:7;28580:14;:23::i;:::-;28564:39;;28628:5;28622:11;;:2;:11;;;28614:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28722:5;28706:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28731:37;28748:5;28755:12;:10;:12::i;:::-;28731:16;:37::i;:::-;28706:62;28684:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28871:21;28880:2;28884:7;28871:8;:21::i;:::-;28553:347;28483:417;;:::o;45741:112::-;4511:13;:11;:13::i;:::-;45825:20:::1;;;;;;;;;;;45824:21;45801:20;;:44;;;;;;;;;;;;;;;;;;45741:112::o:0;7298:105::-;7355:7;7382;:13;7390:4;7382:13;;;;;;;;;;;;;;;;7375:20;;7298:105;;;:::o;45978:73::-;4511:13;:11;:13::i;:::-;46039:4:::1;46028:8;;:15;;;;;;;;;;;;;;;;;;45978:73::o:0;6727:506::-;6803:12;;;;;;;;;;;6794:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;6878:9;6867:10;;:20;;;;:::i;:::-;6854:9;:33;;6845:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6960:11;;6944:12;;6932:9;:24;;;;:::i;:::-;:39;;6923:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7021:15;;7008:9;:28;;6999:38;;;;;;7075:1;7052:7;:19;7060:10;7052:19;;;;;;;;;;;;;;;;:24;7048:99;;7093:1;;:3;;;;;;;;;:::i;:::-;;;;;;7125:10;7111:8;:11;7120:1;;7111:11;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;7048:99;7180:9;7157:7;:19;7165:10;7157:19;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;7216:9;7200:12;;:25;;;;;;;:::i;:::-;;;;;;;;6727:506;:::o;29666:336::-;29861:41;29880:12;:10;:12::i;:::-;29894:7;29861:18;:41::i;:::-;29853:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29966:28;29976:4;29982:2;29986:7;29966:9;:28::i;:::-;29666:336;;;:::o;6564:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;46983:837::-;47031:4;4511:13;:11;:13::i;:::-;47048::::1;47064:21;47048:37;;47096:21;47137:9;;47129:4;47121:5;:12;;;;:::i;:::-;47120:26;;;;:::i;:::-;47096:50;;47157:18;47195:6;;47187:4;47179:5;:12;;;;:::i;:::-;47178:23;;;;:::i;:::-;47157:44;;47212:17;47249:5;;47241:4;47233:5;:12;;;;:::i;:::-;47232:22;;;;:::i;:::-;47212:42;;47265:17;47302:5;;47294:4;47286:5;:12;;;;:::i;:::-;47285:22;;;;:::i;:::-;47265:42;;47318:17;47355:5;;47347:4;47339:5;:12;;;;:::i;:::-;47338:22;;;;:::i;:::-;47318:42;;47371:17;47408:5;;47400:4;47392:5;:12;;;;:::i;:::-;47391:22;;;;:::i;:::-;47371:42;;47424:22;47466:10;;47458:4;47450:5;:12;;;;:::i;:::-;47449:27;;;;:::i;:::-;47424:52;;47495:6;;;;;;;;;;;47487:24;;:39;47512:13;47487:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47545:3;;;;;;;;;;;47537:21;;:33;47559:10;47537:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47589:2;;;;;;;;;;;47581:20;;:31;47602:9;47581:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47631:2;;;;;;;;;;;47623:20;;:31;47644:9;47623:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47673:2;;;;;;;;;;;47665:20;;:31;47686:9;47665:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47715:2;;;;;;;;;;;47707:20;;:31;47728:9;47707:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47757:7;;;;;;;;;;;47749:25;;:41;47775:14;47749:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47808:4;47801:11;;;;;;;;;;46983:837:::0;:::o;42558:25::-;;;;:::o;42355:28::-;;;;:::o;30073:185::-;30211:39;30228:4;30234:2;30238:7;30211:39;;;;;;;;;;;;:16;:39::i;:::-;30073:185;;;:::o;42622:30::-;;;;:::o;42590:25::-;;;;:::o;41510:101::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42819:40::-;;;;;;;;;;;;;:::o;6362:35::-;;;;:::o;42909:28::-;;;;;;;;;;;;;:::o;42665:33::-;;;;;;;;;;;;;:::o;47828:292::-;4511:13;:11;:13::i;:::-;47903:210:::1;47919:4;47910:5;:13;47903:210;;47940:12;47955:8;:15;47964:5;47955:15;;;;;;;;;;;;;;;;;;;;;47940:30;;47985:9;47997:7;:13;48005:4;47997:13;;;;;;;;;;;;;;;;47985:25;;48025:22;48039:1;48042:4;48025:13;:22::i;:::-;48078:1;48062:7;:13;48070:4;48062:13;;;;;;;;;;;;;;;:17;;;;48094:7;;;;;:::i;:::-;;;;47925:188;;47903:210;;;47828:292:::0;;:::o;46613:101::-;4511:13;:11;:13::i;:::-;46697:9:::1;46686:8;:20;;;;46613:101:::0;:::o;6433:32::-;;;;;;;;;;;;;:::o;42458:27::-;;;;:::o;27164:222::-;27236:7;27256:13;27272:7;:16;27280:7;27272:16;;;;;;;;;;;;;;;;;;;;;27256:32;;27324:1;27307:19;;:5;:19;;;27299:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27373:5;27366:12;;;27164:222;;;:::o;42745:30::-;;;;;;;;;;;;;:::o;26895:207::-;26967:7;27012:1;26995:19;;:5;:19;;;26987:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27078:9;:16;27088:5;27078:16;;;;;;;;;;;;;;;;27071:23;;26895:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;45607:82::-;4511:13;:11;:13::i;:::-;45671:10:::1;;;;;;;;;;;45670:11;45657:10;;:24;;;;;;;;;;;;;;;;;;45607:82::o:0;6190:31::-;;;;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;6322:33::-;;;;:::o;7468:102::-;7523:7;7550:8;:12;7559:2;7550:12;;;;;;;;;;;;;;;;;;;;;7543:19;;7468:102;;;:::o;42067:35::-;;;;:::o;44427:495::-;44494:20;;;;;;;;;;;44485:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44565:9;44553:8;;:21;44544:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44646:6;;44623:19;:9;:17;:19::i;:::-;44619:1;:23;;;;:::i;:::-;:33;;44610:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44716:12;;44693:19;:9;:17;:19::i;:::-;44689:1;:23;;;;:::i;:::-;:39;;44680:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44779:16;;;;;;;;;;;44765:30;;:10;:30;;;44756:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;44847:21;:9;:19;:21::i;:::-;44879:35;44889:3;44894:19;:9;:17;:19::i;:::-;44879:9;:35::i;:::-;44427:495;:::o;27622:104::-;27678:13;27711:7;27704:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27622:104;:::o;43764:587::-;43834:10;;;;;;;;;;;43825:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43905:9;43896:8;;:18;;;;:::i;:::-;43883:9;:31;;43874:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43994:6;;43971:19;:9;:17;:19::i;:::-;43959:9;:31;;;;:::i;:::-;:41;;43950:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44072:12;;44049:19;:9;:17;:19::i;:::-;44037:9;:31;;;;:::i;:::-;:47;;44028:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44134:8;;44121:9;:21;;44112:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44174:9;44198:146;44209:9;44205:1;:13;44198:146;;;44235:21;:9;:19;:21::i;:::-;44271:42;44281:10;44293:19;:9;:17;:19::i;:::-;44271:9;:42::i;:::-;44328:4;;;;;:::i;:::-;;;;44198:146;;;43814:537;43764:587;:::o;46845:130::-;4511:13;:11;:13::i;:::-;46950:17:::1;46931:16;;:36;;;;;;;;;;;;;;;;;;46845:130:::0;:::o;46484:121::-;4511:13;:11;:13::i;:::-;46585:12:::1;46567:15;:30;;;;46484:121:::0;:::o;29209:155::-;29304:52;29323:12;:10;:12::i;:::-;29337:8;29347;29304:18;:52::i;:::-;29209:155;;:::o;42139:42::-;;;;:::o;6514:43::-;;;;;;;;;;;;;;;;;:::o;42525:26::-;;;;:::o;41366:33::-;;;;;;;;;:::o;7759:109::-;4511:13;:11;:13::i;:::-;7849:11:::1;7836:10;:24;;;;7759:109:::0;:::o;6278:37::-;;;;:::o;30329:323::-;30503:41;30522:12;:10;:12::i;:::-;30536:7;30503:18;:41::i;:::-;30495:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30606:38;30620:4;30626:2;30630:7;30639:4;30606:13;:38::i;:::-;30329:323;;;;:::o;42492:26::-;;;;:::o;41410:93::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46059:316::-;46132:13;46158:23;46173:7;46158:14;:23::i;:::-;46192:21;46216:10;:8;:10::i;:::-;46192:34;;46237:20;46261:8;;;;;;;;;;;46260:9;:83;;46299:7;46308:25;46325:7;46308:16;:25::i;:::-;46285:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46260:83;;;46272:10;46260:83;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46237:106;;46361:6;46354:13;;;;46059:316;;;:::o;42218:29::-;;;;:::o;6404:20::-;;;;:::o;43126:600::-;43199:13;;;;;;;;;;;43190:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;43280:9;43264:15;;:25;;;;:::i;:::-;43251:9;:38;;43242:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:6;;43346:19;:9;:17;:19::i;:::-;43334:9;:31;;;;:::i;:::-;:41;;43325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43447:12;;43424:19;:9;:17;:19::i;:::-;43412:9;:31;;;;:::i;:::-;:47;;43403:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43509:8;;43496:9;:21;;43487:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;43549:9;43573:146;43584:9;43580:1;:13;43573:146;;;43610:21;:9;:19;:21::i;:::-;43646:42;43656:10;43668:19;:9;:17;:19::i;:::-;43646:9;:42::i;:::-;43703:4;;;;;:::i;:::-;;;;43573:146;;;43179:547;43126:600;:::o;29435:164::-;29532:4;29556:18;:25;29575:5;29556:25;;;;;;;;;;;;;;;:35;29582:8;29556:35;;;;;;;;;;;;;;;;;;;;;;;;;29549:42;;29435:164;;;;:::o;42284:34::-;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;::::0;5612:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;46383:93::-;4511:13;:11;:13::i;:::-;46463:5:::1;46452:8;:16;;;;46383:93:::0;:::o;46722:115::-;4511:13;:11;:13::i;:::-;46816::::1;46801:12;:28;;;;46722:115:::0;:::o;7615:88::-;4511:13;:11;:13::i;:::-;7683:12:::1;;;;;;;;;;;7682:13;7667:12;;:28;;;;;;;;;;;;;;;;;;7615:88::o:0;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;19268:157::-;19353:4;19392:25;19377:40;;;:11;:40;;;;19370:47;;19268:157;;;:::o;40580:114::-;40645:7;40672;:14;;;40665:21;;40580:114;;;:::o;40702:127::-;40809:1;40791:7;:14;;;:19;;;;;;;;;;;40702:127;:::o;33059:110::-;33135:26;33145:2;33149:7;33135:26;;;;;;;;;;;;:9;:26::i;:::-;33059:110;;:::o;36941:135::-;37023:16;37031:7;37023;:16::i;:::-;37015:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36941:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;36220:174::-;36322:2;36295:15;:24;36311:7;36295:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36378:7;36374:2;36340:46;;36349:23;36364:7;36349:14;:23::i;:::-;36340:46;;;;;;;;;;;;36220:174;;:::o;32453:264::-;32546:4;32563:13;32579:23;32594:7;32579:14;:23::i;:::-;32563:39;;32632:5;32621:16;;:7;:16;;;:52;;;;32641:32;32658:5;32665:7;32641:16;:32::i;:::-;32621:52;:87;;;;32701:7;32677:31;;:20;32689:7;32677:11;:20::i;:::-;:31;;;32621:87;32613:96;;;32453:264;;;;:::o;35476:625::-;35635:4;35608:31;;:23;35623:7;35608:14;:23::i;:::-;:31;;;35600:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35714:1;35700:16;;:2;:16;;;35692:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35770:39;35791:4;35797:2;35801:7;35770:20;:39::i;:::-;35874:29;35891:1;35895:7;35874:8;:29::i;:::-;35935:1;35916:9;:15;35926:4;35916:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35964:1;35947:9;:13;35957:2;35947:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35995:2;35976:7;:16;35984:7;35976:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36034:7;36030:2;36015:27;;36024:4;36015:27;;;;;;;;;;;;36055:38;36075:4;36081:2;36085:7;36055:19;:38::i;:::-;35476: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;36537:315::-;36692:8;36683:17;;:5;:17;;;36675:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36779:8;36741:18;:25;36760:5;36741:25;;;;;;;;;;;;;;;:35;36767:8;36741:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36825:8;36803:41;;36818:5;36803:41;;;36835:8;36803:41;;;;;;:::i;:::-;;;;;;;;36537:315;;;:::o;31533:313::-;31689:28;31699:4;31705:2;31709:7;31689:9;:28::i;:::-;31736:47;31759:4;31765:2;31769:7;31778:4;31736:22;:47::i;:::-;31728:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31533:313;;;;:::o;45861:109::-;45921:13;45954:8;45947:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45861:109;:::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;33396:319::-;33525:18;33531:2;33535:7;33525:5;:18::i;:::-;33576:53;33607:1;33611:2;33615:7;33624:4;33576:22;:53::i;:::-;33554:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:319;;;:::o;32159:127::-;32224:4;32276:1;32248:30;;:7;:16;32256:7;32248:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32241:37;;32159:127;;;:::o;39065:126::-;;;;:::o;39576:125::-;;;;:::o;37640:853::-;37794:4;37815:15;:2;:13;;;:15::i;:::-;37811:675;;;37867:2;37851:36;;;37888:12;:10;:12::i;:::-;37902:4;37908:7;37917:4;37851:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37847:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38109:1;38092:6;:13;:18;38088:328;;38135:60;;;;;;;;;;:::i;:::-;;;;;;;;38088:328;38366:6;38360:13;38351:6;38347:2;38343:15;38336:38;37847:584;37983:41;;;37973:51;;;:6;:51;;;;37966:58;;;;;37811:675;38470:4;38463:11;;37640:853;;;;;;;:::o;34051:439::-;34145:1;34131:16;;:2;:16;;;34123:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:16;34212:7;34204;:16::i;:::-;34203:17;34195:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34266:45;34295:1;34299:2;34303:7;34266:20;:45::i;:::-;34341:1;34324:9;:13;34334:2;34324:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34372:2;34353:7;:16;34361:7;34353:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34417:7;34413:2;34392:33;;34409:1;34392:33;;;;;;;;;;;;34438:44;34466:1;34470:2;34474:7;34438:19;:44::i;:::-;34051:439;;:::o;9112:326::-;9172:4;9429:1;9407:7;:19;;;:23;9400:30;;9112:326;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:122::-;2026:24;2044:5;2026:24;:::i;:::-;2019:5;2016:35;2006:63;;2065:1;2062;2055:12;2006:63;1953:122;:::o;2081:139::-;2127:5;2165:6;2152:20;2143:29;;2181:33;2208:5;2181:33;:::i;:::-;2081:139;;;;:::o;2226:126::-;2263:7;2303:42;2296:5;2292:54;2281:65;;2226:126;;;:::o;2358:96::-;2395:7;2424:24;2442:5;2424:24;:::i;:::-;2413:35;;2358:96;;;:::o;2460:122::-;2533:24;2551:5;2533:24;:::i;:::-;2526:5;2523:35;2513:63;;2572:1;2569;2562:12;2513:63;2460:122;:::o;2588:139::-;2634:5;2672:6;2659:20;2650:29;;2688:33;2715:5;2688:33;:::i;:::-;2588:139;;;;:::o;2733:474::-;2801:6;2809;2858:2;2846:9;2837:7;2833:23;2829:32;2826:119;;;2864:79;;:::i;:::-;2826:119;2984:1;3009:53;3054:7;3045:6;3034:9;3030:22;3009:53;:::i;:::-;2999:63;;2955:117;3111:2;3137:53;3182:7;3173:6;3162:9;3158:22;3137:53;:::i;:::-;3127:63;;3082:118;2733:474;;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:474::-;5310:6;5318;5367:2;5355:9;5346:7;5342:23;5338:32;5335:119;;;5373:79;;:::i;:::-;5335:119;5493:1;5518:53;5563:7;5554:6;5543:9;5539:22;5518:53;:::i;:::-;5508:63;;5464:117;5620:2;5646:53;5691:7;5682:6;5671:9;5667:22;5646:53;:::i;:::-;5636:63;;5591:118;5242:474;;;;;:::o;5722:329::-;5781:6;5830:2;5818:9;5809:7;5805:23;5801:32;5798:119;;;5836:79;;:::i;:::-;5798:119;5956:1;5981:53;6026:7;6017:6;6006:9;6002:22;5981:53;:::i;:::-;5971:63;;5927:117;5722:329;;;;:::o;6057:619::-;6134:6;6142;6150;6199:2;6187:9;6178:7;6174:23;6170:32;6167:119;;;6205:79;;:::i;:::-;6167:119;6325:1;6350:53;6395:7;6386:6;6375:9;6371:22;6350:53;:::i;:::-;6340:63;;6296:117;6452:2;6478:53;6523:7;6514:6;6503:9;6499:22;6478:53;:::i;:::-;6468:63;;6423:118;6580:2;6606:53;6651:7;6642:6;6631:9;6627:22;6606:53;:::i;:::-;6596:63;;6551:118;6057:619;;;;;:::o;6682:474::-;6750:6;6758;6807:2;6795:9;6786:7;6782:23;6778:32;6775:119;;;6813:79;;:::i;:::-;6775:119;6933:1;6958:53;7003:7;6994:6;6983:9;6979:22;6958:53;:::i;:::-;6948:63;;6904:117;7060:2;7086:53;7131:7;7122:6;7111:9;7107:22;7086:53;:::i;:::-;7076:63;;7031:118;6682:474;;;;;:::o;7162:116::-;7232:21;7247:5;7232:21;:::i;:::-;7225:5;7222:32;7212:60;;7268:1;7265;7258:12;7212:60;7162:116;:::o;7284:133::-;7327:5;7365:6;7352:20;7343:29;;7381:30;7405:5;7381:30;:::i;:::-;7284:133;;;;:::o;7423:468::-;7488:6;7496;7545:2;7533:9;7524:7;7520:23;7516:32;7513:119;;;7551:79;;:::i;:::-;7513:119;7671:1;7696:53;7741:7;7732:6;7721:9;7717:22;7696:53;:::i;:::-;7686:63;;7642:117;7798:2;7824:50;7866:7;7857:6;7846:9;7842:22;7824:50;:::i;:::-;7814:60;;7769:115;7423:468;;;;;:::o;7897:117::-;8006:1;8003;7996:12;8020:117;8129:1;8126;8119:12;8143:180;8191:77;8188:1;8181:88;8288:4;8285:1;8278:15;8312:4;8309:1;8302:15;8329:281;8412:27;8434:4;8412:27;:::i;:::-;8404:6;8400:40;8542:6;8530:10;8527:22;8506:18;8494:10;8491:34;8488:62;8485:88;;;8553:18;;:::i;:::-;8485:88;8593:10;8589:2;8582:22;8372:238;8329:281;;:::o;8616:129::-;8650:6;8677:20;;:::i;:::-;8667:30;;8706:33;8734:4;8726:6;8706:33;:::i;:::-;8616:129;;;:::o;8751:307::-;8812:4;8902:18;8894:6;8891:30;8888:56;;;8924:18;;:::i;:::-;8888:56;8962:29;8984:6;8962:29;:::i;:::-;8954:37;;9046:4;9040;9036:15;9028:23;;8751:307;;;:::o;9064:146::-;9161:6;9156:3;9151;9138:30;9202:1;9193:6;9188:3;9184:16;9177:27;9064:146;;;:::o;9216:423::-;9293:5;9318:65;9334:48;9375:6;9334:48;:::i;:::-;9318:65;:::i;:::-;9309:74;;9406:6;9399:5;9392:21;9444:4;9437:5;9433:16;9482:3;9473:6;9468:3;9464:16;9461:25;9458:112;;;9489:79;;:::i;:::-;9458:112;9579:54;9626:6;9621:3;9616;9579:54;:::i;:::-;9299:340;9216:423;;;;;:::o;9658:338::-;9713:5;9762:3;9755:4;9747:6;9743:17;9739:27;9729:122;;9770:79;;:::i;:::-;9729:122;9887:6;9874:20;9912:78;9986:3;9978:6;9971:4;9963:6;9959:17;9912:78;:::i;:::-;9903:87;;9719:277;9658:338;;;;:::o;10002:943::-;10097:6;10105;10113;10121;10170:3;10158:9;10149:7;10145:23;10141:33;10138:120;;;10177:79;;:::i;:::-;10138:120;10297:1;10322:53;10367:7;10358:6;10347:9;10343:22;10322:53;:::i;:::-;10312:63;;10268:117;10424:2;10450:53;10495:7;10486:6;10475:9;10471:22;10450:53;:::i;:::-;10440:63;;10395:118;10552:2;10578:53;10623:7;10614:6;10603:9;10599:22;10578:53;:::i;:::-;10568:63;;10523:118;10708:2;10697:9;10693:18;10680:32;10739:18;10731:6;10728:30;10725:117;;;10761:79;;:::i;:::-;10725:117;10866:62;10920:7;10911:6;10900:9;10896:22;10866:62;:::i;:::-;10856:72;;10651:287;10002:943;;;;;;;:::o;10951:474::-;11019:6;11027;11076:2;11064:9;11055:7;11051:23;11047:32;11044:119;;;11082:79;;:::i;:::-;11044:119;11202:1;11227:53;11272:7;11263:6;11252:9;11248:22;11227:53;:::i;:::-;11217:63;;11173:117;11329:2;11355:53;11400:7;11391:6;11380:9;11376:22;11355:53;:::i;:::-;11345:63;;11300:118;10951:474;;;;;:::o;11431:180::-;11479:77;11476:1;11469:88;11576:4;11573:1;11566:15;11600:4;11597:1;11590:15;11617:191;11657:3;11676:20;11694:1;11676:20;:::i;:::-;11671:25;;11710:20;11728:1;11710:20;:::i;:::-;11705:25;;11753:1;11750;11746:9;11739:16;;11774:3;11771:1;11768:10;11765:36;;;11781:18;;:::i;:::-;11765:36;11617:191;;;;:::o;11814:162::-;11954:14;11950:1;11942:6;11938:14;11931:38;11814:162;:::o;11982:366::-;12124:3;12145:67;12209:2;12204:3;12145:67;:::i;:::-;12138:74;;12221:93;12310:3;12221:93;:::i;:::-;12339:2;12334:3;12330:12;12323:19;;11982:366;;;:::o;12354:419::-;12520:4;12558:2;12547:9;12543:18;12535:26;;12607:9;12601:4;12597:20;12593:1;12582:9;12578:17;12571:47;12635:131;12761:4;12635:131;:::i;:::-;12627:139;;12354:419;;;:::o;12779:233::-;12818:3;12841:24;12859:5;12841:24;:::i;:::-;12832:33;;12887:66;12880:5;12877:77;12874:103;;12957:18;;:::i;:::-;12874:103;13004:1;12997:5;12993:13;12986:20;;12779:233;;;:::o;13018:180::-;13066:77;13063:1;13056:88;13163:4;13160:1;13153:15;13187:4;13184:1;13177:15;13204:320;13248:6;13285:1;13279:4;13275:12;13265:22;;13332:1;13326:4;13322:12;13353:18;13343:81;;13409:4;13401:6;13397:17;13387:27;;13343:81;13471:2;13463:6;13460:14;13440:18;13437:38;13434:84;;13490:18;;:::i;:::-;13434:84;13255:269;13204:320;;;:::o;13530:220::-;13670:34;13666:1;13658:6;13654:14;13647:58;13739:3;13734:2;13726:6;13722:15;13715:28;13530:220;:::o;13756:366::-;13898:3;13919:67;13983:2;13978:3;13919:67;:::i;:::-;13912:74;;13995:93;14084:3;13995:93;:::i;:::-;14113:2;14108:3;14104:12;14097:19;;13756:366;;;:::o;14128:419::-;14294:4;14332:2;14321:9;14317:18;14309:26;;14381:9;14375:4;14371:20;14367:1;14356:9;14352:17;14345:47;14409:131;14535:4;14409:131;:::i;:::-;14401:139;;14128:419;;;:::o;14553:249::-;14693:34;14689:1;14681:6;14677:14;14670:58;14762:32;14757:2;14749:6;14745:15;14738:57;14553:249;:::o;14808:366::-;14950:3;14971:67;15035:2;15030:3;14971:67;:::i;:::-;14964:74;;15047:93;15136:3;15047:93;:::i;:::-;15165:2;15160:3;15156:12;15149:19;;14808:366;;;:::o;15180:419::-;15346:4;15384:2;15373:9;15369:18;15361:26;;15433:9;15427:4;15423:20;15419:1;15408:9;15404:17;15397:47;15461:131;15587:4;15461:131;:::i;:::-;15453:139;;15180:419;;;:::o;15605:164::-;15745:16;15741:1;15733:6;15729:14;15722:40;15605:164;:::o;15775:366::-;15917:3;15938:67;16002:2;15997:3;15938:67;:::i;:::-;15931:74;;16014:93;16103:3;16014:93;:::i;:::-;16132:2;16127:3;16123:12;16116:19;;15775:366;;;:::o;16147:419::-;16313:4;16351:2;16340:9;16336:18;16328:26;;16400:9;16394:4;16390:20;16386:1;16375:9;16371:17;16364:47;16428:131;16554:4;16428:131;:::i;:::-;16420:139;;16147:419;;;:::o;16572:410::-;16612:7;16635:20;16653:1;16635:20;:::i;:::-;16630:25;;16669:20;16687:1;16669:20;:::i;:::-;16664:25;;16724:1;16721;16717:9;16746:30;16764:11;16746:30;:::i;:::-;16735:41;;16925:1;16916:7;16912:15;16909:1;16906:22;16886:1;16879:9;16859:83;16836:139;;16955:18;;:::i;:::-;16836:139;16620:362;16572:410;;;;:::o;16988:170::-;17128:22;17124:1;17116:6;17112:14;17105:46;16988:170;:::o;17164:366::-;17306:3;17327:67;17391:2;17386:3;17327:67;:::i;:::-;17320:74;;17403:93;17492:3;17403:93;:::i;:::-;17521:2;17516:3;17512:12;17505:19;;17164:366;;;:::o;17536:419::-;17702:4;17740:2;17729:9;17725:18;17717:26;;17789:9;17783:4;17779:20;17775:1;17764:9;17760:17;17753:47;17817:131;17943:4;17817:131;:::i;:::-;17809:139;;17536:419;;;:::o;17961:233::-;18101:34;18097:1;18089:6;18085:14;18078:58;18170:16;18165:2;18157:6;18153:15;18146:41;17961:233;:::o;18200:366::-;18342:3;18363:67;18427:2;18422:3;18363:67;:::i;:::-;18356:74;;18439:93;18528:3;18439:93;:::i;:::-;18557:2;18552:3;18548:12;18541:19;;18200:366;;;:::o;18572:419::-;18738:4;18776:2;18765:9;18761:18;18753:26;;18825:9;18819:4;18815:20;18811:1;18800:9;18796:17;18789:47;18853:131;18979:4;18853:131;:::i;:::-;18845:139;;18572:419;;;:::o;18997:180::-;19045:77;19042:1;19035:88;19142:4;19139:1;19132:15;19166:4;19163:1;19156:15;19183:185;19223:1;19240:20;19258:1;19240:20;:::i;:::-;19235:25;;19274:20;19292:1;19274:20;:::i;:::-;19269:25;;19313:1;19303:35;;19318:18;;:::i;:::-;19303:35;19360:1;19357;19353:9;19348:14;;19183:185;;;;:::o;19374:174::-;19514:26;19510:1;19502:6;19498:14;19491:50;19374:174;:::o;19554:366::-;19696:3;19717:67;19781:2;19776:3;19717:67;:::i;:::-;19710:74;;19793:93;19882:3;19793:93;:::i;:::-;19911:2;19906:3;19902:12;19895:19;;19554:366;;;:::o;19926:419::-;20092:4;20130:2;20119:9;20115:18;20107:26;;20179:9;20173:4;20169:20;20165:1;20154:9;20150:17;20143:47;20207:131;20333:4;20207:131;:::i;:::-;20199:139;;19926:419;;;:::o;20351:228::-;20491:34;20487:1;20479:6;20475:14;20468:58;20560:11;20555:2;20547:6;20543:15;20536:36;20351:228;:::o;20585:366::-;20727:3;20748:67;20812:2;20807:3;20748:67;:::i;:::-;20741:74;;20824:93;20913:3;20824:93;:::i;:::-;20942:2;20937:3;20933:12;20926:19;;20585:366;;;:::o;20957:419::-;21123:4;21161:2;21150:9;21146:18;21138:26;;21210:9;21204:4;21200:20;21196:1;21185:9;21181:17;21174:47;21238:131;21364:4;21238:131;:::i;:::-;21230:139;;20957:419;;;:::o;21382:223::-;21522:34;21518:1;21510:6;21506:14;21499:58;21591:6;21586:2;21578:6;21574:15;21567:31;21382:223;:::o;21611:366::-;21753:3;21774:67;21838:2;21833:3;21774:67;:::i;:::-;21767:74;;21850:93;21939:3;21850:93;:::i;:::-;21968:2;21963:3;21959:12;21952:19;;21611:366;;;:::o;21983:419::-;22149:4;22187:2;22176:9;22172:18;22164:26;;22236:9;22230:4;22226:20;22222:1;22211:9;22207:17;22200:47;22264:131;22390:4;22264:131;:::i;:::-;22256:139;;21983:419;;;:::o;22408:166::-;22548:18;22544:1;22536:6;22532:14;22525:42;22408:166;:::o;22580:366::-;22722:3;22743:67;22807:2;22802:3;22743:67;:::i;:::-;22736:74;;22819:93;22908:3;22819:93;:::i;:::-;22937:2;22932:3;22928:12;22921:19;;22580:366;;;:::o;22952:419::-;23118:4;23156:2;23145:9;23141:18;23133:26;;23205:9;23199:4;23195:20;23191:1;23180:9;23176:17;23169:47;23233:131;23359:4;23233:131;:::i;:::-;23225:139;;22952:419;;;:::o;23377:148::-;23479:11;23516:3;23501:18;;23377:148;;;;:::o;23531:390::-;23637:3;23665:39;23698:5;23665:39;:::i;:::-;23720:89;23802:6;23797:3;23720:89;:::i;:::-;23713:96;;23818:65;23876:6;23871:3;23864:4;23857:5;23853:16;23818:65;:::i;:::-;23908:6;23903:3;23899:16;23892:23;;23641:280;23531:390;;;;:::o;23927:182::-;24095:7;24090:3;24083:20;23927:182;:::o;24115:699::-;24385:3;24407:95;24498:3;24489:6;24407:95;:::i;:::-;24400:102;;24519:95;24610:3;24601:6;24519:95;:::i;:::-;24512:102;;24624:137;24757:3;24624:137;:::i;:::-;24786:1;24781:3;24777:11;24770:18;;24805:3;24798:10;;24115:699;;;;;:::o;24820:225::-;24960:34;24956:1;24948:6;24944:14;24937:58;25029:8;25024:2;25016:6;25012:15;25005:33;24820:225;:::o;25051:366::-;25193:3;25214:67;25278:2;25273:3;25214:67;:::i;:::-;25207:74;;25290:93;25379:3;25290:93;:::i;:::-;25408:2;25403:3;25399:12;25392:19;;25051:366;;;:::o;25423:419::-;25589:4;25627:2;25616:9;25612:18;25604:26;;25676:9;25670:4;25666:20;25662:1;25651:9;25647:17;25640:47;25704:131;25830:4;25704:131;:::i;:::-;25696:139;;25423:419;;;:::o;25848:182::-;25988:34;25984:1;25976:6;25972:14;25965:58;25848:182;:::o;26036:366::-;26178:3;26199:67;26263:2;26258:3;26199:67;:::i;:::-;26192:74;;26275:93;26364:3;26275:93;:::i;:::-;26393:2;26388:3;26384:12;26377:19;;26036:366;;;:::o;26408:419::-;26574:4;26612:2;26601:9;26597:18;26589:26;;26661:9;26655:4;26651:20;26647:1;26636:9;26632:17;26625:47;26689:131;26815:4;26689:131;:::i;:::-;26681:139;;26408:419;;;:::o;26833:224::-;26973:34;26969:1;26961:6;26957:14;26950:58;27042:7;27037:2;27029:6;27025:15;27018:32;26833:224;:::o;27063:366::-;27205:3;27226:67;27290:2;27285:3;27226:67;:::i;:::-;27219:74;;27302:93;27391:3;27302:93;:::i;:::-;27420:2;27415:3;27411:12;27404:19;;27063:366;;;:::o;27435:419::-;27601:4;27639:2;27628:9;27624:18;27616:26;;27688:9;27682:4;27678:20;27674:1;27663:9;27659:17;27652:47;27716:131;27842:4;27716:131;:::i;:::-;27708:139;;27435:419;;;:::o;27860:223::-;28000:34;27996:1;27988:6;27984:14;27977:58;28069:6;28064:2;28056:6;28052:15;28045:31;27860:223;:::o;28089:366::-;28231:3;28252:67;28316:2;28311:3;28252:67;:::i;:::-;28245:74;;28328:93;28417:3;28328:93;:::i;:::-;28446:2;28441:3;28437:12;28430:19;;28089:366;;;:::o;28461:419::-;28627:4;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28461:419;;;:::o;28886:194::-;28926:4;28946:20;28964:1;28946:20;:::i;:::-;28941:25;;28980:20;28998:1;28980:20;:::i;:::-;28975:25;;29024:1;29021;29017:9;29009:17;;29048:1;29042:4;29039:11;29036:37;;;29053:18;;:::i;:::-;29036:37;28886:194;;;;:::o;29086:175::-;29226:27;29222:1;29214:6;29210:14;29203:51;29086:175;:::o;29267:366::-;29409:3;29430:67;29494:2;29489:3;29430:67;:::i;:::-;29423:74;;29506:93;29595:3;29506:93;:::i;:::-;29624:2;29619:3;29615:12;29608:19;;29267:366;;;:::o;29639:419::-;29805:4;29843:2;29832:9;29828:18;29820:26;;29892:9;29886:4;29882:20;29878:1;29867:9;29863:17;29856:47;29920:131;30046:4;29920:131;:::i;:::-;29912:139;;29639:419;;;:::o;30064:237::-;30204:34;30200:1;30192:6;30188:14;30181:58;30273:20;30268:2;30260:6;30256:15;30249:45;30064:237;:::o;30307:366::-;30449:3;30470:67;30534:2;30529:3;30470:67;:::i;:::-;30463:74;;30546:93;30635:3;30546:93;:::i;:::-;30664:2;30659:3;30655:12;30648:19;;30307:366;;;:::o;30679:419::-;30845:4;30883:2;30872:9;30868:18;30860:26;;30932:9;30926:4;30922:20;30918:1;30907:9;30903:17;30896:47;30960:131;31086:4;30960:131;:::i;:::-;30952:139;;30679:419;;;:::o;31104:176::-;31136:1;31153:20;31171:1;31153:20;:::i;:::-;31148:25;;31187:20;31205:1;31187:20;:::i;:::-;31182:25;;31226:1;31216:35;;31231:18;;:::i;:::-;31216:35;31272:1;31269;31265:9;31260:14;;31104:176;;;;:::o;31286:180::-;31334:77;31331:1;31324:88;31431:4;31428:1;31421:15;31455:4;31452:1;31445:15;31472:98;31523:6;31557:5;31551:12;31541:22;;31472:98;;;:::o;31576:168::-;31659:11;31693:6;31688:3;31681:19;31733:4;31728:3;31724:14;31709:29;;31576:168;;;;:::o;31750:373::-;31836:3;31864:38;31896:5;31864:38;:::i;:::-;31918:70;31981:6;31976:3;31918:70;:::i;:::-;31911:77;;31997:65;32055:6;32050:3;32043:4;32036:5;32032:16;31997:65;:::i;:::-;32087:29;32109:6;32087:29;:::i;:::-;32082:3;32078:39;32071:46;;31840:283;31750:373;;;;:::o;32129:640::-;32324:4;32362:3;32351:9;32347:19;32339:27;;32376:71;32444:1;32433:9;32429:17;32420:6;32376:71;:::i;:::-;32457:72;32525:2;32514:9;32510:18;32501:6;32457:72;:::i;:::-;32539;32607:2;32596:9;32592:18;32583:6;32539:72;:::i;:::-;32658:9;32652:4;32648:20;32643:2;32632:9;32628:18;32621:48;32686:76;32757:4;32748:6;32686:76;:::i;:::-;32678:84;;32129:640;;;;;;;:::o;32775:141::-;32831:5;32862:6;32856:13;32847:22;;32878:32;32904:5;32878:32;:::i;:::-;32775:141;;;;:::o;32922:349::-;32991:6;33040:2;33028:9;33019:7;33015:23;33011:32;33008:119;;;33046:79;;:::i;:::-;33008:119;33166:1;33191:63;33246:7;33237:6;33226:9;33222:22;33191:63;:::i;:::-;33181:73;;33137:127;32922:349;;;;:::o;33277:182::-;33417:34;33413:1;33405:6;33401:14;33394:58;33277:182;:::o;33465:366::-;33607:3;33628:67;33692:2;33687:3;33628:67;:::i;:::-;33621:74;;33704:93;33793:3;33704:93;:::i;:::-;33822:2;33817:3;33813:12;33806:19;;33465:366;;;:::o;33837:419::-;34003:4;34041:2;34030:9;34026:18;34018:26;;34090:9;34084:4;34080:20;34076:1;34065:9;34061:17;34054:47;34118:131;34244:4;34118:131;:::i;:::-;34110:139;;33837:419;;;:::o;34262:178::-;34402:30;34398:1;34390:6;34386:14;34379:54;34262:178;:::o;34446:366::-;34588:3;34609:67;34673:2;34668:3;34609:67;:::i;:::-;34602:74;;34685:93;34774:3;34685:93;:::i;:::-;34803:2;34798:3;34794:12;34787:19;;34446:366;;;:::o;34818:419::-;34984:4;35022:2;35011:9;35007:18;34999:26;;35071:9;35065:4;35061:20;35057:1;35046:9;35042:17;35035:47;35099:131;35225:4;35099:131;:::i;:::-;35091:139;;34818:419;;;:::o
Swarm Source
ipfs://5012200878dac3768fafe8798d573b0c98f05d7f271e5da372eb41d431136561
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.