ERC-721
Overview
Max Total Supply
743 SOFTEE
Holders
175
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SOFTEELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SOFTEE
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-26 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // 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 v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/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: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/ywy.sol //Developer : FazelPejmanfar , Twitter :@Pejmanfarfazel pragma solidity >=0.7.0 <0.9.0; contract SOFTEE is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.03 ether; uint256 public wlcost = 0.03 ether; uint256 public maxSupply = 7777; uint256 public WlSupply = 7777; uint256 public MaxperWallet = 20; uint256 public MaxperWalletWl = 20; bool public paused = false; bool public revealed = false; bytes32 public merkleRoot; constructor() ERC721A("SOFTEES", "SOFTEE") { setBaseURI("ipfs://QmVqwW8WYxiVGY5dbYVnPQpLFKcdrpFiq4CtF8EykzQj7V/"); setNotRevealedURI("ipfs://QmPmhUJhgBerjJNnxz2J6Xf6x5JWRnjtqxNTp4arqr7Cxz/hide.json"); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } // public function mint(uint256 tokens) public payable nonReentrant { require(!paused, "SOFTEE: oops contract is paused"); uint256 supply = totalSupply(); require(tokens > 0, "SOFTEE: need to mint at least 1 NFT"); require(tokens <= MaxperWallet, "SOFTEE: max mint amount per tx exceeded"); require(supply + tokens <= maxSupply, "SOFTEE: We Soldout"); require(_numberMinted(_msgSender()) + tokens <= MaxperWallet, "SOFTEE: Max NFT Per Wallet exceeded"); require(msg.value >= cost * tokens, "SOFTEE: insufficient funds"); _safeMint(_msgSender(), tokens); } /// @dev presale mint for whitelisted function presalemint(uint256 tokens, bytes32[] calldata merkleProof) public payable nonReentrant { require(!paused, "SOFTEE: oops contract is paused"); require(MerkleProof.verify(merkleProof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "SOFTEE: You are not Whitelisted"); uint256 supply = totalSupply(); require(_numberMinted(_msgSender()) + tokens <= MaxperWalletWl, "SOFTEE: Max NFT Per Wallet exceeded"); require(tokens > 0, "SOFTEE: need to mint at least 1 NFT"); require(tokens <= MaxperWalletWl, "SOFTEE: max mint per Tx exceeded"); require(supply + tokens <= WlSupply, "SOFTEE: Whitelist MaxSupply exceeded"); require(msg.value >= wlcost * tokens, "SOFTEE: insufficient funds"); _safeMint(_msgSender(), tokens); } /// @dev use it for giveaway and mint for yourself function gift(uint256 _mintAmount, address destination) public onlyOwner nonReentrant { require(_mintAmount > 0, "need to mint at least 1 NFT"); uint256 supply = totalSupply(); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); _safeMint(destination, _mintAmount); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721AMetadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } //only owner function reveal(bool _state) public onlyOwner { revealed = _state; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function setMaxPerWallet(uint256 _limit) public onlyOwner { MaxperWallet = _limit; } function setWlMaxPerWallet(uint256 _limit) public onlyOwner { MaxperWalletWl = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setWlCost(uint256 _newWlCost) public onlyOwner { wlcost = _newWlCost; } function setMaxsupply(uint256 _newsupply) public onlyOwner { maxSupply = _newsupply; } function setwlsupply(uint256 _newsupply) public onlyOwner { WlSupply = _newsupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner nonReentrant { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"MaxperWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxperWalletWl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WlSupply","outputs":[{"internalType":"uint256","name":"","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"presalemint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newsupply","type":"uint256"}],"name":"setMaxsupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWlCost","type":"uint256"}],"name":"setWlCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWlMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newsupply","type":"uint256"}],"name":"setwlsupply","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200005192919062000451565b50666a94d74f430000600d55666a94d74f430000600e55611e61600f55611e61601055601460115560146012556000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff021916908315150217905550348015620000c157600080fd5b506040518060400160405280600781526020017f534f4654454553000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f534f46544545000000000000000000000000000000000000000000000000000081525081600290805190602001906200014692919062000451565b5080600390805190602001906200015f92919062000451565b5062000170620001fa60201b60201c565b6000819055505050620001986200018c6200020360201b60201c565b6200020b60201b60201c565b6001600981905550620001ca6040518060600160405280603681526020016200535b60369139620002d160201b60201c565b620001f46040518060600160405280603f81526020016200531c603f91396200037c60201b60201c565b620005e9565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002e16200020360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003076200042760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003579062000528565b60405180910390fd5b80600a90805190602001906200037892919062000451565b5050565b6200038c6200020360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003b26200042760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200040b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004029062000528565b60405180910390fd5b80600c90805190602001906200042392919062000451565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200045f906200055b565b90600052602060002090601f016020900481019282620004835760008555620004cf565b82601f106200049e57805160ff1916838001178555620004cf565b82800160010185558215620004cf579182015b82811115620004ce578251825591602001919060010190620004b1565b5b509050620004de9190620004e2565b5090565b5b80821115620004fd576000816000905550600101620004e3565b5090565b6000620005106020836200054a565b91506200051d82620005c0565b602082019050919050565b60006020820190508181036000830152620005438162000501565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200057457607f821691505b602082108114156200058b576200058a62000591565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614d2380620005f96000396000f3fe60806040526004361061027c5760003560e01c80636c2d3c4f1161014f578063bd7a1998116100c1578063dc33e6811161007a578063dc33e68114610922578063e268e4d31461095f578063e985e9c514610988578063f12f6d5d146109c5578063f2c4ce1e146109ee578063f2fde38b14610a175761027c565b8063bd7a199814610812578063bde0608a1461083d578063c668286214610866578063c87b56dd14610891578063d5abeb01146108ce578063da3ef23f146108f95761027c565b80638da5cb5b116101135780638da5cb5b14610725578063940cd05b1461075057806395d89b4114610779578063a0712d68146107a4578063a22cb465146107c0578063b88d4fde146107e95761027c565b80636c2d3c4f1461065457806370a082311461067f578063715018a6146106bc5780637cb64759146106d357806383a076be146106fc5761027c565b806318160ddd116101f3578063458c4f9e116101ac578063458c4f9e14610544578063518302271461056d57806355f804b3146105985780635c975abb146105c15780636352211e146105ec5780636c0360eb146106295761027c565b806318160ddd1461046957806323b872dd146104945780632eb4a7ab146104bd5780633ccfd60b146104e857806342842e0e146104f257806344a0d68a1461051b5761027c565b8063081812fc11610245578063081812fc14610359578063081c8c4414610396578063095ea7b3146103c15780630bddb613146103ea57806313faede614610415578063149835a0146104405761027c565b806277ec051461028157806301ffc9a7146102ac57806302329a29146102e9578063036e4cb51461031257806306fdde031461032e575b600080fd5b34801561028d57600080fd5b50610296610a40565b6040516102a3919061442a565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190613c15565b610a46565b6040516102e091906141f2565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613bbb565b610b28565b005b61032c60048036038101906103279190613d25565b610bc1565b005b34801561033a57600080fd5b50610343610ec4565b6040516103509190614228565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613cb8565b610f56565b60405161038d919061418b565b60405180910390f35b3480156103a257600080fd5b506103ab610fd2565b6040516103b89190614228565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190613b7b565b611060565b005b3480156103f657600080fd5b506103ff61116b565b60405161040c919061442a565b60405180910390f35b34801561042157600080fd5b5061042a611171565b604051610437919061442a565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613cb8565b611177565b005b34801561047557600080fd5b5061047e6111fd565b60405161048b919061442a565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190613a65565b611214565b005b3480156104c957600080fd5b506104d2611224565b6040516104df919061420d565b60405180910390f35b6104f061122a565b005b3480156104fe57600080fd5b5061051960048036038101906105149190613a65565b611375565b005b34801561052757600080fd5b50610542600480360381019061053d9190613cb8565b611395565b005b34801561055057600080fd5b5061056b60048036038101906105669190613cb8565b61141b565b005b34801561057957600080fd5b506105826114a1565b60405161058f91906141f2565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613c6f565b6114b4565b005b3480156105cd57600080fd5b506105d661154a565b6040516105e391906141f2565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613cb8565b61155d565b604051610620919061418b565b60405180910390f35b34801561063557600080fd5b5061063e611573565b60405161064b9190614228565b60405180910390f35b34801561066057600080fd5b50610669611601565b604051610676919061442a565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a191906139f8565b611607565b6040516106b3919061442a565b60405180910390f35b3480156106c857600080fd5b506106d16116d7565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613be8565b61175f565b005b34801561070857600080fd5b50610723600480360381019061071e9190613ce5565b6117e5565b005b34801561073157600080fd5b5061073a611965565b604051610747919061418b565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613bbb565b61198f565b005b34801561078557600080fd5b5061078e611a28565b60405161079b9190614228565b60405180910390f35b6107be60048036038101906107b99190613cb8565b611aba565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190613b3b565b611d08565b005b3480156107f557600080fd5b50610810600480360381019061080b9190613ab8565b611e80565b005b34801561081e57600080fd5b50610827611efc565b604051610834919061442a565b60405180910390f35b34801561084957600080fd5b50610864600480360381019061085f9190613cb8565b611f02565b005b34801561087257600080fd5b5061087b611f88565b6040516108889190614228565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613cb8565b612016565b6040516108c59190614228565b60405180910390f35b3480156108da57600080fd5b506108e361216f565b6040516108f0919061442a565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190613c6f565b612175565b005b34801561092e57600080fd5b50610949600480360381019061094491906139f8565b61220b565b604051610956919061442a565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613cb8565b61221d565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613a25565b6122a3565b6040516109bc91906141f2565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190613cb8565b612337565b005b3480156109fa57600080fd5b50610a156004803603810190610a109190613c6f565b6123bd565b005b348015610a2357600080fd5b50610a3e6004803603810190610a3991906139f8565b612453565b005b60125481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b215750610b208261254b565b5b9050919050565b610b306125b5565b73ffffffffffffffffffffffffffffffffffffffff16610b4e611965565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061436a565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b60026009541415610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906143ea565b60405180910390fd5b6002600981905550601360009054906101000a900460ff1615610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c569061438a565b60405180910390fd5b610cd3828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060145433604051602001610cb8919061412a565b604051602081830303815290604052805190602001206125bd565b610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d099061426a565b60405180910390fd5b6000610d1c6111fd565b905060125484610d32610d2d6125b5565b6125d4565b610d3c919061452f565b1115610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d74906143ca565b60405180910390fd5b60008411610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db79061432a565b60405180910390fd5b601254841115610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc9061430a565b60405180910390fd5b6010548482610e14919061452f565b1115610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c906142aa565b60405180910390fd5b83600e54610e6391906145b6565b341015610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c906143aa565b60405180910390fd5b610eb6610eb06125b5565b8561263e565b506001600981905550505050565b606060028054610ed390614704565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90614704565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b6000610f618261265c565b610f97576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610fdf90614704565b80601f016020809104026020016040519081016040528092919081815260200182805461100b90614704565b80156110585780601f1061102d57610100808354040283529160200191611058565b820191906000526020600020905b81548152906001019060200180831161103b57829003601f168201915b505050505081565b600061106b8261155d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d3576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110f26125b5565b73ffffffffffffffffffffffffffffffffffffffff161415801561112457506111228161111d6125b5565b6122a3565b155b1561115b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111668383836126aa565b505050565b60105481565b600d5481565b61117f6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661119d611965565b73ffffffffffffffffffffffffffffffffffffffff16146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea9061436a565b60405180910390fd5b80600f8190555050565b600061120761275c565b6001546000540303905090565b61121f838383612765565b505050565b60145481565b6112326125b5565b73ffffffffffffffffffffffffffffffffffffffff16611250611965565b73ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061436a565b60405180910390fd5b600260095414156112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906143ea565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161131a90614176565b60006040518083038185875af1925050503d8060008114611357576040519150601f19603f3d011682016040523d82523d6000602084013e61135c565b606091505b505090508061136a57600080fd5b506001600981905550565b61139083838360405180602001604052806000815250611e80565b505050565b61139d6125b5565b73ffffffffffffffffffffffffffffffffffffffff166113bb611965565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061436a565b60405180910390fd5b80600d8190555050565b6114236125b5565b73ffffffffffffffffffffffffffffffffffffffff16611441611965565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e9061436a565b60405180910390fd5b8060108190555050565b601360019054906101000a900460ff1681565b6114bc6125b5565b73ffffffffffffffffffffffffffffffffffffffff166114da611965565b73ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061436a565b60405180910390fd5b80600a908051906020019061154692919061375e565b5050565b601360009054906101000a900460ff1681565b600061156882612c1b565b600001519050919050565b600a805461158090614704565b80601f01602080910402602001604051908101604052809291908181526020018280546115ac90614704565b80156115f95780601f106115ce576101008083540402835291602001916115f9565b820191906000526020600020905b8154815290600101906020018083116115dc57829003601f168201915b505050505081565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6116df6125b5565b73ffffffffffffffffffffffffffffffffffffffff166116fd611965565b73ffffffffffffffffffffffffffffffffffffffff1614611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a9061436a565b60405180910390fd5b61175d6000612eaa565b565b6117676125b5565b73ffffffffffffffffffffffffffffffffffffffff16611785611965565b73ffffffffffffffffffffffffffffffffffffffff16146117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d29061436a565b60405180910390fd5b8060148190555050565b6117ed6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661180b611965565b73ffffffffffffffffffffffffffffffffffffffff1614611861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118589061436a565b60405180910390fd5b600260095414156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e906143ea565b60405180910390fd5b6002600981905550600082116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e99061440a565b60405180910390fd5b60006118fc6111fd565b9050600f54838261190d919061452f565b111561194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061434a565b60405180910390fd5b611958828461263e565b5060016009819055505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119976125b5565b73ffffffffffffffffffffffffffffffffffffffff166119b5611965565b73ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a029061436a565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b606060038054611a3790614704565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6390614704565b8015611ab05780601f10611a8557610100808354040283529160200191611ab0565b820191906000526020600020905b815481529060010190602001808311611a9357829003601f168201915b5050505050905090565b60026009541415611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af7906143ea565b60405180910390fd5b6002600981905550601360009054906101000a900460ff1615611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f9061438a565b60405180910390fd5b6000611b626111fd565b905060008211611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e9061432a565b60405180910390fd5b601154821115611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906142ca565b60405180910390fd5b600f548282611bfb919061452f565b1115611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906142ea565b60405180910390fd5b60115482611c50611c4b6125b5565b6125d4565b611c5a919061452f565b1115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906143ca565b60405180910390fd5b81600d54611ca991906145b6565b341015611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce2906143aa565b60405180910390fd5b611cfc611cf66125b5565b8361263e565b50600160098190555050565b611d106125b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d75576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611d826125b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e2f6125b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e7491906141f2565b60405180910390a35050565b611e8b848484612765565b611eaa8373ffffffffffffffffffffffffffffffffffffffff16612f70565b8015611ebf5750611ebd84848484612f93565b155b15611ef6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60115481565b611f0a6125b5565b73ffffffffffffffffffffffffffffffffffffffff16611f28611965565b73ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f759061436a565b60405180910390fd5b8060128190555050565b600b8054611f9590614704565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc190614704565b801561200e5780601f10611fe35761010080835404028352916020019161200e565b820191906000526020600020905b815481529060010190602001808311611ff157829003601f168201915b505050505081565b60606120218261265c565b612060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120579061424a565b60405180910390fd5b60001515601360019054906101000a900460ff161515141561210e57600c805461208990614704565b80601f01602080910402602001604051908101604052809291908181526020018280546120b590614704565b80156121025780601f106120d757610100808354040283529160200191612102565b820191906000526020600020905b8154815290600101906020018083116120e557829003601f168201915b5050505050905061216a565b60006121186130f3565b905060008151116121385760405180602001604052806000815250612166565b8061214284613185565b600b60405160200161215693929190614145565b6040516020818303038152906040525b9150505b919050565b600f5481565b61217d6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661219b611965565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e89061436a565b60405180910390fd5b80600b908051906020019061220792919061375e565b5050565b6000612216826125d4565b9050919050565b6122256125b5565b73ffffffffffffffffffffffffffffffffffffffff16612243611965565b73ffffffffffffffffffffffffffffffffffffffff1614612299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122909061436a565b60405180910390fd5b8060118190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61233f6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661235d611965565b73ffffffffffffffffffffffffffffffffffffffff16146123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa9061436a565b60405180910390fd5b80600e8190555050565b6123c56125b5565b73ffffffffffffffffffffffffffffffffffffffff166123e3611965565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124309061436a565b60405180910390fd5b80600c908051906020019061244f92919061375e565b5050565b61245b6125b5565b73ffffffffffffffffffffffffffffffffffffffff16612479611965565b73ffffffffffffffffffffffffffffffffffffffff16146124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c69061436a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061428a565b60405180910390fd5b61254881612eaa565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000826125ca85846132e6565b1490509392505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61265882826040518060200160405280600081525061335b565b5050565b60008161266761275c565b11158015612676575060005482105b80156126a3575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061277082612c1b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127db576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166127fc6125b5565b73ffffffffffffffffffffffffffffffffffffffff16148061282b575061282a856128256125b5565b6122a3565b5b8061287057506128396125b5565b73ffffffffffffffffffffffffffffffffffffffff1661285884610f56565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128a9576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612910576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61291d858585600161336d565b612929600084876126aa565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ba9576000548214612ba857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c148585856001613373565b5050505050565b612c236137e4565b600082905080612c3161275c565b11158015612c40575060005481105b15612e73576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e7157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d55578092505050612ea5565b5b600115612e7057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6b578092505050612ea5565b612d56565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fb96125b5565b8786866040518563ffffffff1660e01b8152600401612fdb94939291906141a6565b602060405180830381600087803b158015612ff557600080fd5b505af192505050801561302657506040513d601f19601f820116820180604052508101906130239190613c42565b60015b6130a0573d8060008114613056576040519150601f19603f3d011682016040523d82523d6000602084013e61305b565b606091505b50600081511415613098576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461310290614704565b80601f016020809104026020016040519081016040528092919081815260200182805461312e90614704565b801561317b5780601f106131505761010080835404028352916020019161317b565b820191906000526020600020905b81548152906001019060200180831161315e57829003601f168201915b5050505050905090565b606060008214156131cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132e1565b600082905060005b600082146131ff5780806131e890614767565b915050600a826131f89190614585565b91506131d5565b60008167ffffffffffffffff81111561321b5761321a6148c1565b5b6040519080825280601f01601f19166020018201604052801561324d5781602001600182028036833780820191505090505b5090505b600085146132da576001826132669190614610565b9150600a8561327591906147d4565b6030613281919061452f565b60f81b81838151811061329757613296614892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132d39190614585565b9450613251565b8093505050505b919050565b60008082905060005b845181101561335057600085828151811061330d5761330c614892565b5b6020026020010151905080831161332f576133288382613379565b925061333c565b6133398184613379565b92505b50808061334890614767565b9150506132ef565b508091505092915050565b6133688383836001613390565b505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156133fd576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613438576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613445600086838761336d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561360f575061360e8773ffffffffffffffffffffffffffffffffffffffff16612f70565b5b156136d5575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136846000888480600101955088612f93565b6136ba576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156136155782600054146136d057600080fd5b613741565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156136d6575b8160008190555050506137576000868387613373565b5050505050565b82805461376a90614704565b90600052602060002090601f01602090048101928261378c57600085556137d3565b82601f106137a557805160ff19168380011785556137d3565b828001600101855582156137d3579182015b828111156137d25782518255916020019190600101906137b7565b5b5090506137e09190613827565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613840576000816000905550600101613828565b5090565b60006138576138528461446a565b614445565b905082815260208101848484011115613873576138726148ff565b5b61387e8482856146c2565b509392505050565b60006138996138948461449b565b614445565b9050828152602081018484840111156138b5576138b46148ff565b5b6138c08482856146c2565b509392505050565b6000813590506138d781614c7a565b92915050565b60008083601f8401126138f3576138f26148f5565b5b8235905067ffffffffffffffff8111156139105761390f6148f0565b5b60208301915083602082028301111561392c5761392b6148fa565b5b9250929050565b60008135905061394281614c91565b92915050565b60008135905061395781614ca8565b92915050565b60008135905061396c81614cbf565b92915050565b60008151905061398181614cbf565b92915050565b600082601f83011261399c5761399b6148f5565b5b81356139ac848260208601613844565b91505092915050565b600082601f8301126139ca576139c96148f5565b5b81356139da848260208601613886565b91505092915050565b6000813590506139f281614cd6565b92915050565b600060208284031215613a0e57613a0d614909565b5b6000613a1c848285016138c8565b91505092915050565b60008060408385031215613a3c57613a3b614909565b5b6000613a4a858286016138c8565b9250506020613a5b858286016138c8565b9150509250929050565b600080600060608486031215613a7e57613a7d614909565b5b6000613a8c868287016138c8565b9350506020613a9d868287016138c8565b9250506040613aae868287016139e3565b9150509250925092565b60008060008060808587031215613ad257613ad1614909565b5b6000613ae0878288016138c8565b9450506020613af1878288016138c8565b9350506040613b02878288016139e3565b925050606085013567ffffffffffffffff811115613b2357613b22614904565b5b613b2f87828801613987565b91505092959194509250565b60008060408385031215613b5257613b51614909565b5b6000613b60858286016138c8565b9250506020613b7185828601613933565b9150509250929050565b60008060408385031215613b9257613b91614909565b5b6000613ba0858286016138c8565b9250506020613bb1858286016139e3565b9150509250929050565b600060208284031215613bd157613bd0614909565b5b6000613bdf84828501613933565b91505092915050565b600060208284031215613bfe57613bfd614909565b5b6000613c0c84828501613948565b91505092915050565b600060208284031215613c2b57613c2a614909565b5b6000613c398482850161395d565b91505092915050565b600060208284031215613c5857613c57614909565b5b6000613c6684828501613972565b91505092915050565b600060208284031215613c8557613c84614909565b5b600082013567ffffffffffffffff811115613ca357613ca2614904565b5b613caf848285016139b5565b91505092915050565b600060208284031215613cce57613ccd614909565b5b6000613cdc848285016139e3565b91505092915050565b60008060408385031215613cfc57613cfb614909565b5b6000613d0a858286016139e3565b9250506020613d1b858286016138c8565b9150509250929050565b600080600060408486031215613d3e57613d3d614909565b5b6000613d4c868287016139e3565b935050602084013567ffffffffffffffff811115613d6d57613d6c614904565b5b613d79868287016138dd565b92509250509250925092565b613d8e81614644565b82525050565b613da5613da082614644565b6147b0565b82525050565b613db481614656565b82525050565b613dc381614662565b82525050565b6000613dd4826144e1565b613dde81856144f7565b9350613dee8185602086016146d1565b613df78161490e565b840191505092915050565b6000613e0d826144ec565b613e178185614513565b9350613e278185602086016146d1565b613e308161490e565b840191505092915050565b6000613e46826144ec565b613e508185614524565b9350613e608185602086016146d1565b80840191505092915050565b60008154613e7981614704565b613e838186614524565b94506001821660008114613e9e5760018114613eaf57613ee2565b60ff19831686528186019350613ee2565b613eb8856144cc565b60005b83811015613eda57815481890152600182019150602081019050613ebb565b838801955050505b50505092915050565b6000613ef8603083614513565b9150613f038261492c565b604082019050919050565b6000613f1b601f83614513565b9150613f268261497b565b602082019050919050565b6000613f3e602683614513565b9150613f49826149a4565b604082019050919050565b6000613f61602483614513565b9150613f6c826149f3565b604082019050919050565b6000613f84602783614513565b9150613f8f82614a42565b604082019050919050565b6000613fa7601283614513565b9150613fb282614a91565b602082019050919050565b6000613fca602083614513565b9150613fd582614aba565b602082019050919050565b6000613fed602383614513565b9150613ff882614ae3565b604082019050919050565b6000614010601683614513565b915061401b82614b32565b602082019050919050565b6000614033602083614513565b915061403e82614b5b565b602082019050919050565b6000614056601f83614513565b915061406182614b84565b602082019050919050565b6000614079601a83614513565b915061408482614bad565b602082019050919050565b600061409c600083614508565b91506140a782614bd6565b600082019050919050565b60006140bf602383614513565b91506140ca82614bd9565b604082019050919050565b60006140e2601f83614513565b91506140ed82614c28565b602082019050919050565b6000614105601b83614513565b915061411082614c51565b602082019050919050565b614124816146b8565b82525050565b60006141368284613d94565b60148201915081905092915050565b60006141518286613e3b565b915061415d8285613e3b565b91506141698284613e6c565b9150819050949350505050565b60006141818261408f565b9150819050919050565b60006020820190506141a06000830184613d85565b92915050565b60006080820190506141bb6000830187613d85565b6141c86020830186613d85565b6141d5604083018561411b565b81810360608301526141e78184613dc9565b905095945050505050565b60006020820190506142076000830184613dab565b92915050565b60006020820190506142226000830184613dba565b92915050565b600060208201905081810360008301526142428184613e02565b905092915050565b6000602082019050818103600083015261426381613eeb565b9050919050565b6000602082019050818103600083015261428381613f0e565b9050919050565b600060208201905081810360008301526142a381613f31565b9050919050565b600060208201905081810360008301526142c381613f54565b9050919050565b600060208201905081810360008301526142e381613f77565b9050919050565b6000602082019050818103600083015261430381613f9a565b9050919050565b6000602082019050818103600083015261432381613fbd565b9050919050565b6000602082019050818103600083015261434381613fe0565b9050919050565b6000602082019050818103600083015261436381614003565b9050919050565b6000602082019050818103600083015261438381614026565b9050919050565b600060208201905081810360008301526143a381614049565b9050919050565b600060208201905081810360008301526143c38161406c565b9050919050565b600060208201905081810360008301526143e3816140b2565b9050919050565b60006020820190508181036000830152614403816140d5565b9050919050565b60006020820190508181036000830152614423816140f8565b9050919050565b600060208201905061443f600083018461411b565b92915050565b600061444f614460565b905061445b8282614736565b919050565b6000604051905090565b600067ffffffffffffffff821115614485576144846148c1565b5b61448e8261490e565b9050602081019050919050565b600067ffffffffffffffff8211156144b6576144b56148c1565b5b6144bf8261490e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061453a826146b8565b9150614545836146b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561457a57614579614805565b5b828201905092915050565b6000614590826146b8565b915061459b836146b8565b9250826145ab576145aa614834565b5b828204905092915050565b60006145c1826146b8565b91506145cc836146b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561460557614604614805565b5b828202905092915050565b600061461b826146b8565b9150614626836146b8565b92508282101561463957614638614805565b5b828203905092915050565b600061464f82614698565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146ef5780820151818401526020810190506146d4565b838111156146fe576000848401525b50505050565b6000600282049050600182168061471c57607f821691505b602082108114156147305761472f614863565b5b50919050565b61473f8261490e565b810181811067ffffffffffffffff8211171561475e5761475d6148c1565b5b80604052505050565b6000614772826146b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147a5576147a4614805565b5b600182019050919050565b60006147bb826147c2565b9050919050565b60006147cd8261491f565b9050919050565b60006147df826146b8565b91506147ea836146b8565b9250826147fa576147f9614834565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f534f465445453a20596f7520617265206e6f742057686974656c697374656400600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f534f465445453a2057686974656c697374204d6178537570706c79206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f534f465445453a206d6178206d696e7420616d6f756e7420706572207478206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b7f534f465445453a20576520536f6c646f75740000000000000000000000000000600082015250565b7f534f465445453a206d6178206d696e7420706572205478206578636565646564600082015250565b7f534f465445453a206e65656420746f206d696e74206174206c6561737420312060008201527f4e46540000000000000000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f534f465445453a206f6f707320636f6e74726163742069732070617573656400600082015250565b7f534f465445453a20696e73756666696369656e742066756e6473000000000000600082015250565b50565b7f534f465445453a204d6178204e4654205065722057616c6c657420657863656560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614c8381614644565b8114614c8e57600080fd5b50565b614c9a81614656565b8114614ca557600080fd5b50565b614cb181614662565b8114614cbc57600080fd5b50565b614cc88161466c565b8114614cd357600080fd5b50565b614cdf816146b8565b8114614cea57600080fd5b5056fea26469706673582212205ed136e85a71b6585b87b0f0bbe1cbea6d9ab116d6787d797bf58f38fbe90af564736f6c63430008070033697066733a2f2f516d506d68554a68674265726a4a4e6e787a324a3658663678354a57526e6a7471784e547034617271723743787a2f686964652e6a736f6e697066733a2f2f516d56717757385759786956475935646259566e5051704c464b63647270466971344374463845796b7a516a37562f
Deployed Bytecode
0x60806040526004361061027c5760003560e01c80636c2d3c4f1161014f578063bd7a1998116100c1578063dc33e6811161007a578063dc33e68114610922578063e268e4d31461095f578063e985e9c514610988578063f12f6d5d146109c5578063f2c4ce1e146109ee578063f2fde38b14610a175761027c565b8063bd7a199814610812578063bde0608a1461083d578063c668286214610866578063c87b56dd14610891578063d5abeb01146108ce578063da3ef23f146108f95761027c565b80638da5cb5b116101135780638da5cb5b14610725578063940cd05b1461075057806395d89b4114610779578063a0712d68146107a4578063a22cb465146107c0578063b88d4fde146107e95761027c565b80636c2d3c4f1461065457806370a082311461067f578063715018a6146106bc5780637cb64759146106d357806383a076be146106fc5761027c565b806318160ddd116101f3578063458c4f9e116101ac578063458c4f9e14610544578063518302271461056d57806355f804b3146105985780635c975abb146105c15780636352211e146105ec5780636c0360eb146106295761027c565b806318160ddd1461046957806323b872dd146104945780632eb4a7ab146104bd5780633ccfd60b146104e857806342842e0e146104f257806344a0d68a1461051b5761027c565b8063081812fc11610245578063081812fc14610359578063081c8c4414610396578063095ea7b3146103c15780630bddb613146103ea57806313faede614610415578063149835a0146104405761027c565b806277ec051461028157806301ffc9a7146102ac57806302329a29146102e9578063036e4cb51461031257806306fdde031461032e575b600080fd5b34801561028d57600080fd5b50610296610a40565b6040516102a3919061442a565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190613c15565b610a46565b6040516102e091906141f2565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613bbb565b610b28565b005b61032c60048036038101906103279190613d25565b610bc1565b005b34801561033a57600080fd5b50610343610ec4565b6040516103509190614228565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190613cb8565b610f56565b60405161038d919061418b565b60405180910390f35b3480156103a257600080fd5b506103ab610fd2565b6040516103b89190614228565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e39190613b7b565b611060565b005b3480156103f657600080fd5b506103ff61116b565b60405161040c919061442a565b60405180910390f35b34801561042157600080fd5b5061042a611171565b604051610437919061442a565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613cb8565b611177565b005b34801561047557600080fd5b5061047e6111fd565b60405161048b919061442a565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190613a65565b611214565b005b3480156104c957600080fd5b506104d2611224565b6040516104df919061420d565b60405180910390f35b6104f061122a565b005b3480156104fe57600080fd5b5061051960048036038101906105149190613a65565b611375565b005b34801561052757600080fd5b50610542600480360381019061053d9190613cb8565b611395565b005b34801561055057600080fd5b5061056b60048036038101906105669190613cb8565b61141b565b005b34801561057957600080fd5b506105826114a1565b60405161058f91906141f2565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613c6f565b6114b4565b005b3480156105cd57600080fd5b506105d661154a565b6040516105e391906141f2565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e9190613cb8565b61155d565b604051610620919061418b565b60405180910390f35b34801561063557600080fd5b5061063e611573565b60405161064b9190614228565b60405180910390f35b34801561066057600080fd5b50610669611601565b604051610676919061442a565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a191906139f8565b611607565b6040516106b3919061442a565b60405180910390f35b3480156106c857600080fd5b506106d16116d7565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613be8565b61175f565b005b34801561070857600080fd5b50610723600480360381019061071e9190613ce5565b6117e5565b005b34801561073157600080fd5b5061073a611965565b604051610747919061418b565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613bbb565b61198f565b005b34801561078557600080fd5b5061078e611a28565b60405161079b9190614228565b60405180910390f35b6107be60048036038101906107b99190613cb8565b611aba565b005b3480156107cc57600080fd5b506107e760048036038101906107e29190613b3b565b611d08565b005b3480156107f557600080fd5b50610810600480360381019061080b9190613ab8565b611e80565b005b34801561081e57600080fd5b50610827611efc565b604051610834919061442a565b60405180910390f35b34801561084957600080fd5b50610864600480360381019061085f9190613cb8565b611f02565b005b34801561087257600080fd5b5061087b611f88565b6040516108889190614228565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613cb8565b612016565b6040516108c59190614228565b60405180910390f35b3480156108da57600080fd5b506108e361216f565b6040516108f0919061442a565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190613c6f565b612175565b005b34801561092e57600080fd5b50610949600480360381019061094491906139f8565b61220b565b604051610956919061442a565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190613cb8565b61221d565b005b34801561099457600080fd5b506109af60048036038101906109aa9190613a25565b6122a3565b6040516109bc91906141f2565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190613cb8565b612337565b005b3480156109fa57600080fd5b50610a156004803603810190610a109190613c6f565b6123bd565b005b348015610a2357600080fd5b50610a3e6004803603810190610a3991906139f8565b612453565b005b60125481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b215750610b208261254b565b5b9050919050565b610b306125b5565b73ffffffffffffffffffffffffffffffffffffffff16610b4e611965565b73ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061436a565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b60026009541415610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906143ea565b60405180910390fd5b6002600981905550601360009054906101000a900460ff1615610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c569061438a565b60405180910390fd5b610cd3828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060145433604051602001610cb8919061412a565b604051602081830303815290604052805190602001206125bd565b610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d099061426a565b60405180910390fd5b6000610d1c6111fd565b905060125484610d32610d2d6125b5565b6125d4565b610d3c919061452f565b1115610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d74906143ca565b60405180910390fd5b60008411610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db79061432a565b60405180910390fd5b601254841115610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc9061430a565b60405180910390fd5b6010548482610e14919061452f565b1115610e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4c906142aa565b60405180910390fd5b83600e54610e6391906145b6565b341015610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c906143aa565b60405180910390fd5b610eb6610eb06125b5565b8561263e565b506001600981905550505050565b606060028054610ed390614704565b80601f0160208091040260200160405190810160405280929190818152602001828054610eff90614704565b8015610f4c5780601f10610f2157610100808354040283529160200191610f4c565b820191906000526020600020905b815481529060010190602001808311610f2f57829003601f168201915b5050505050905090565b6000610f618261265c565b610f97576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c8054610fdf90614704565b80601f016020809104026020016040519081016040528092919081815260200182805461100b90614704565b80156110585780601f1061102d57610100808354040283529160200191611058565b820191906000526020600020905b81548152906001019060200180831161103b57829003601f168201915b505050505081565b600061106b8261155d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110d3576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110f26125b5565b73ffffffffffffffffffffffffffffffffffffffff161415801561112457506111228161111d6125b5565b6122a3565b155b1561115b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111668383836126aa565b505050565b60105481565b600d5481565b61117f6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661119d611965565b73ffffffffffffffffffffffffffffffffffffffff16146111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea9061436a565b60405180910390fd5b80600f8190555050565b600061120761275c565b6001546000540303905090565b61121f838383612765565b505050565b60145481565b6112326125b5565b73ffffffffffffffffffffffffffffffffffffffff16611250611965565b73ffffffffffffffffffffffffffffffffffffffff16146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d9061436a565b60405180910390fd5b600260095414156112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906143ea565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161131a90614176565b60006040518083038185875af1925050503d8060008114611357576040519150601f19603f3d011682016040523d82523d6000602084013e61135c565b606091505b505090508061136a57600080fd5b506001600981905550565b61139083838360405180602001604052806000815250611e80565b505050565b61139d6125b5565b73ffffffffffffffffffffffffffffffffffffffff166113bb611965565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061436a565b60405180910390fd5b80600d8190555050565b6114236125b5565b73ffffffffffffffffffffffffffffffffffffffff16611441611965565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e9061436a565b60405180910390fd5b8060108190555050565b601360019054906101000a900460ff1681565b6114bc6125b5565b73ffffffffffffffffffffffffffffffffffffffff166114da611965565b73ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061436a565b60405180910390fd5b80600a908051906020019061154692919061375e565b5050565b601360009054906101000a900460ff1681565b600061156882612c1b565b600001519050919050565b600a805461158090614704565b80601f01602080910402602001604051908101604052809291908181526020018280546115ac90614704565b80156115f95780601f106115ce576101008083540402835291602001916115f9565b820191906000526020600020905b8154815290600101906020018083116115dc57829003601f168201915b505050505081565b600e5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6116df6125b5565b73ffffffffffffffffffffffffffffffffffffffff166116fd611965565b73ffffffffffffffffffffffffffffffffffffffff1614611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a9061436a565b60405180910390fd5b61175d6000612eaa565b565b6117676125b5565b73ffffffffffffffffffffffffffffffffffffffff16611785611965565b73ffffffffffffffffffffffffffffffffffffffff16146117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d29061436a565b60405180910390fd5b8060148190555050565b6117ed6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661180b611965565b73ffffffffffffffffffffffffffffffffffffffff1614611861576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118589061436a565b60405180910390fd5b600260095414156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e906143ea565b60405180910390fd5b6002600981905550600082116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e99061440a565b60405180910390fd5b60006118fc6111fd565b9050600f54838261190d919061452f565b111561194e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119459061434a565b60405180910390fd5b611958828461263e565b5060016009819055505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119976125b5565b73ffffffffffffffffffffffffffffffffffffffff166119b5611965565b73ffffffffffffffffffffffffffffffffffffffff1614611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a029061436a565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b606060038054611a3790614704565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6390614704565b8015611ab05780601f10611a8557610100808354040283529160200191611ab0565b820191906000526020600020905b815481529060010190602001808311611a9357829003601f168201915b5050505050905090565b60026009541415611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af7906143ea565b60405180910390fd5b6002600981905550601360009054906101000a900460ff1615611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f9061438a565b60405180910390fd5b6000611b626111fd565b905060008211611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e9061432a565b60405180910390fd5b601154821115611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be3906142ca565b60405180910390fd5b600f548282611bfb919061452f565b1115611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c33906142ea565b60405180910390fd5b60115482611c50611c4b6125b5565b6125d4565b611c5a919061452f565b1115611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c92906143ca565b60405180910390fd5b81600d54611ca991906145b6565b341015611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce2906143aa565b60405180910390fd5b611cfc611cf66125b5565b8361263e565b50600160098190555050565b611d106125b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d75576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611d826125b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e2f6125b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e7491906141f2565b60405180910390a35050565b611e8b848484612765565b611eaa8373ffffffffffffffffffffffffffffffffffffffff16612f70565b8015611ebf5750611ebd84848484612f93565b155b15611ef6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60115481565b611f0a6125b5565b73ffffffffffffffffffffffffffffffffffffffff16611f28611965565b73ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f759061436a565b60405180910390fd5b8060128190555050565b600b8054611f9590614704565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc190614704565b801561200e5780601f10611fe35761010080835404028352916020019161200e565b820191906000526020600020905b815481529060010190602001808311611ff157829003601f168201915b505050505081565b60606120218261265c565b612060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120579061424a565b60405180910390fd5b60001515601360019054906101000a900460ff161515141561210e57600c805461208990614704565b80601f01602080910402602001604051908101604052809291908181526020018280546120b590614704565b80156121025780601f106120d757610100808354040283529160200191612102565b820191906000526020600020905b8154815290600101906020018083116120e557829003601f168201915b5050505050905061216a565b60006121186130f3565b905060008151116121385760405180602001604052806000815250612166565b8061214284613185565b600b60405160200161215693929190614145565b6040516020818303038152906040525b9150505b919050565b600f5481565b61217d6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661219b611965565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e89061436a565b60405180910390fd5b80600b908051906020019061220792919061375e565b5050565b6000612216826125d4565b9050919050565b6122256125b5565b73ffffffffffffffffffffffffffffffffffffffff16612243611965565b73ffffffffffffffffffffffffffffffffffffffff1614612299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122909061436a565b60405180910390fd5b8060118190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61233f6125b5565b73ffffffffffffffffffffffffffffffffffffffff1661235d611965565b73ffffffffffffffffffffffffffffffffffffffff16146123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa9061436a565b60405180910390fd5b80600e8190555050565b6123c56125b5565b73ffffffffffffffffffffffffffffffffffffffff166123e3611965565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124309061436a565b60405180910390fd5b80600c908051906020019061244f92919061375e565b5050565b61245b6125b5565b73ffffffffffffffffffffffffffffffffffffffff16612479611965565b73ffffffffffffffffffffffffffffffffffffffff16146124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c69061436a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061428a565b60405180910390fd5b61254881612eaa565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000826125ca85846132e6565b1490509392505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61265882826040518060200160405280600081525061335b565b5050565b60008161266761275c565b11158015612676575060005482105b80156126a3575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061277082612c1b565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127db576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166127fc6125b5565b73ffffffffffffffffffffffffffffffffffffffff16148061282b575061282a856128256125b5565b6122a3565b5b8061287057506128396125b5565b73ffffffffffffffffffffffffffffffffffffffff1661285884610f56565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128a9576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612910576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61291d858585600161336d565b612929600084876126aa565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ba9576000548214612ba857878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c148585856001613373565b5050505050565b612c236137e4565b600082905080612c3161275c565b11158015612c40575060005481105b15612e73576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e7157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d55578092505050612ea5565b5b600115612e7057818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6b578092505050612ea5565b612d56565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fb96125b5565b8786866040518563ffffffff1660e01b8152600401612fdb94939291906141a6565b602060405180830381600087803b158015612ff557600080fd5b505af192505050801561302657506040513d601f19601f820116820180604052508101906130239190613c42565b60015b6130a0573d8060008114613056576040519150601f19603f3d011682016040523d82523d6000602084013e61305b565b606091505b50600081511415613098576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461310290614704565b80601f016020809104026020016040519081016040528092919081815260200182805461312e90614704565b801561317b5780601f106131505761010080835404028352916020019161317b565b820191906000526020600020905b81548152906001019060200180831161315e57829003601f168201915b5050505050905090565b606060008214156131cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132e1565b600082905060005b600082146131ff5780806131e890614767565b915050600a826131f89190614585565b91506131d5565b60008167ffffffffffffffff81111561321b5761321a6148c1565b5b6040519080825280601f01601f19166020018201604052801561324d5781602001600182028036833780820191505090505b5090505b600085146132da576001826132669190614610565b9150600a8561327591906147d4565b6030613281919061452f565b60f81b81838151811061329757613296614892565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132d39190614585565b9450613251565b8093505050505b919050565b60008082905060005b845181101561335057600085828151811061330d5761330c614892565b5b6020026020010151905080831161332f576133288382613379565b925061333c565b6133398184613379565b92505b50808061334890614767565b9150506132ef565b508091505092915050565b6133688383836001613390565b505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156133fd576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613438576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613445600086838761336d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561360f575061360e8773ffffffffffffffffffffffffffffffffffffffff16612f70565b5b156136d5575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136846000888480600101955088612f93565b6136ba576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156136155782600054146136d057600080fd5b613741565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156136d6575b8160008190555050506137576000868387613373565b5050505050565b82805461376a90614704565b90600052602060002090601f01602090048101928261378c57600085556137d3565b82601f106137a557805160ff19168380011785556137d3565b828001600101855582156137d3579182015b828111156137d25782518255916020019190600101906137b7565b5b5090506137e09190613827565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613840576000816000905550600101613828565b5090565b60006138576138528461446a565b614445565b905082815260208101848484011115613873576138726148ff565b5b61387e8482856146c2565b509392505050565b60006138996138948461449b565b614445565b9050828152602081018484840111156138b5576138b46148ff565b5b6138c08482856146c2565b509392505050565b6000813590506138d781614c7a565b92915050565b60008083601f8401126138f3576138f26148f5565b5b8235905067ffffffffffffffff8111156139105761390f6148f0565b5b60208301915083602082028301111561392c5761392b6148fa565b5b9250929050565b60008135905061394281614c91565b92915050565b60008135905061395781614ca8565b92915050565b60008135905061396c81614cbf565b92915050565b60008151905061398181614cbf565b92915050565b600082601f83011261399c5761399b6148f5565b5b81356139ac848260208601613844565b91505092915050565b600082601f8301126139ca576139c96148f5565b5b81356139da848260208601613886565b91505092915050565b6000813590506139f281614cd6565b92915050565b600060208284031215613a0e57613a0d614909565b5b6000613a1c848285016138c8565b91505092915050565b60008060408385031215613a3c57613a3b614909565b5b6000613a4a858286016138c8565b9250506020613a5b858286016138c8565b9150509250929050565b600080600060608486031215613a7e57613a7d614909565b5b6000613a8c868287016138c8565b9350506020613a9d868287016138c8565b9250506040613aae868287016139e3565b9150509250925092565b60008060008060808587031215613ad257613ad1614909565b5b6000613ae0878288016138c8565b9450506020613af1878288016138c8565b9350506040613b02878288016139e3565b925050606085013567ffffffffffffffff811115613b2357613b22614904565b5b613b2f87828801613987565b91505092959194509250565b60008060408385031215613b5257613b51614909565b5b6000613b60858286016138c8565b9250506020613b7185828601613933565b9150509250929050565b60008060408385031215613b9257613b91614909565b5b6000613ba0858286016138c8565b9250506020613bb1858286016139e3565b9150509250929050565b600060208284031215613bd157613bd0614909565b5b6000613bdf84828501613933565b91505092915050565b600060208284031215613bfe57613bfd614909565b5b6000613c0c84828501613948565b91505092915050565b600060208284031215613c2b57613c2a614909565b5b6000613c398482850161395d565b91505092915050565b600060208284031215613c5857613c57614909565b5b6000613c6684828501613972565b91505092915050565b600060208284031215613c8557613c84614909565b5b600082013567ffffffffffffffff811115613ca357613ca2614904565b5b613caf848285016139b5565b91505092915050565b600060208284031215613cce57613ccd614909565b5b6000613cdc848285016139e3565b91505092915050565b60008060408385031215613cfc57613cfb614909565b5b6000613d0a858286016139e3565b9250506020613d1b858286016138c8565b9150509250929050565b600080600060408486031215613d3e57613d3d614909565b5b6000613d4c868287016139e3565b935050602084013567ffffffffffffffff811115613d6d57613d6c614904565b5b613d79868287016138dd565b92509250509250925092565b613d8e81614644565b82525050565b613da5613da082614644565b6147b0565b82525050565b613db481614656565b82525050565b613dc381614662565b82525050565b6000613dd4826144e1565b613dde81856144f7565b9350613dee8185602086016146d1565b613df78161490e565b840191505092915050565b6000613e0d826144ec565b613e178185614513565b9350613e278185602086016146d1565b613e308161490e565b840191505092915050565b6000613e46826144ec565b613e508185614524565b9350613e608185602086016146d1565b80840191505092915050565b60008154613e7981614704565b613e838186614524565b94506001821660008114613e9e5760018114613eaf57613ee2565b60ff19831686528186019350613ee2565b613eb8856144cc565b60005b83811015613eda57815481890152600182019150602081019050613ebb565b838801955050505b50505092915050565b6000613ef8603083614513565b9150613f038261492c565b604082019050919050565b6000613f1b601f83614513565b9150613f268261497b565b602082019050919050565b6000613f3e602683614513565b9150613f49826149a4565b604082019050919050565b6000613f61602483614513565b9150613f6c826149f3565b604082019050919050565b6000613f84602783614513565b9150613f8f82614a42565b604082019050919050565b6000613fa7601283614513565b9150613fb282614a91565b602082019050919050565b6000613fca602083614513565b9150613fd582614aba565b602082019050919050565b6000613fed602383614513565b9150613ff882614ae3565b604082019050919050565b6000614010601683614513565b915061401b82614b32565b602082019050919050565b6000614033602083614513565b915061403e82614b5b565b602082019050919050565b6000614056601f83614513565b915061406182614b84565b602082019050919050565b6000614079601a83614513565b915061408482614bad565b602082019050919050565b600061409c600083614508565b91506140a782614bd6565b600082019050919050565b60006140bf602383614513565b91506140ca82614bd9565b604082019050919050565b60006140e2601f83614513565b91506140ed82614c28565b602082019050919050565b6000614105601b83614513565b915061411082614c51565b602082019050919050565b614124816146b8565b82525050565b60006141368284613d94565b60148201915081905092915050565b60006141518286613e3b565b915061415d8285613e3b565b91506141698284613e6c565b9150819050949350505050565b60006141818261408f565b9150819050919050565b60006020820190506141a06000830184613d85565b92915050565b60006080820190506141bb6000830187613d85565b6141c86020830186613d85565b6141d5604083018561411b565b81810360608301526141e78184613dc9565b905095945050505050565b60006020820190506142076000830184613dab565b92915050565b60006020820190506142226000830184613dba565b92915050565b600060208201905081810360008301526142428184613e02565b905092915050565b6000602082019050818103600083015261426381613eeb565b9050919050565b6000602082019050818103600083015261428381613f0e565b9050919050565b600060208201905081810360008301526142a381613f31565b9050919050565b600060208201905081810360008301526142c381613f54565b9050919050565b600060208201905081810360008301526142e381613f77565b9050919050565b6000602082019050818103600083015261430381613f9a565b9050919050565b6000602082019050818103600083015261432381613fbd565b9050919050565b6000602082019050818103600083015261434381613fe0565b9050919050565b6000602082019050818103600083015261436381614003565b9050919050565b6000602082019050818103600083015261438381614026565b9050919050565b600060208201905081810360008301526143a381614049565b9050919050565b600060208201905081810360008301526143c38161406c565b9050919050565b600060208201905081810360008301526143e3816140b2565b9050919050565b60006020820190508181036000830152614403816140d5565b9050919050565b60006020820190508181036000830152614423816140f8565b9050919050565b600060208201905061443f600083018461411b565b92915050565b600061444f614460565b905061445b8282614736565b919050565b6000604051905090565b600067ffffffffffffffff821115614485576144846148c1565b5b61448e8261490e565b9050602081019050919050565b600067ffffffffffffffff8211156144b6576144b56148c1565b5b6144bf8261490e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061453a826146b8565b9150614545836146b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561457a57614579614805565b5b828201905092915050565b6000614590826146b8565b915061459b836146b8565b9250826145ab576145aa614834565b5b828204905092915050565b60006145c1826146b8565b91506145cc836146b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561460557614604614805565b5b828202905092915050565b600061461b826146b8565b9150614626836146b8565b92508282101561463957614638614805565b5b828203905092915050565b600061464f82614698565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146ef5780820151818401526020810190506146d4565b838111156146fe576000848401525b50505050565b6000600282049050600182168061471c57607f821691505b602082108114156147305761472f614863565b5b50919050565b61473f8261490e565b810181811067ffffffffffffffff8211171561475e5761475d6148c1565b5b80604052505050565b6000614772826146b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147a5576147a4614805565b5b600182019050919050565b60006147bb826147c2565b9050919050565b60006147cd8261491f565b9050919050565b60006147df826146b8565b91506147ea836146b8565b9250826147fa576147f9614834565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f534f465445453a20596f7520617265206e6f742057686974656c697374656400600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f534f465445453a2057686974656c697374204d6178537570706c79206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f534f465445453a206d6178206d696e7420616d6f756e7420706572207478206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b7f534f465445453a20576520536f6c646f75740000000000000000000000000000600082015250565b7f534f465445453a206d6178206d696e7420706572205478206578636565646564600082015250565b7f534f465445453a206e65656420746f206d696e74206174206c6561737420312060008201527f4e46540000000000000000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f534f465445453a206f6f707320636f6e74726163742069732070617573656400600082015250565b7f534f465445453a20696e73756666696369656e742066756e6473000000000000600082015250565b50565b7f534f465445453a204d6178204e4654205065722057616c6c657420657863656560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614c8381614644565b8114614c8e57600080fd5b50565b614c9a81614656565b8114614ca557600080fd5b50565b614cb181614662565b8114614cbc57600080fd5b50565b614cc88161466c565b8114614cd357600080fd5b50565b614cdf816146b8565b8114614cea57600080fd5b5056fea26469706673582212205ed136e85a71b6585b87b0f0bbe1cbea6d9ab116d6787d797bf58f38fbe90af564736f6c63430008070033
Deployed Bytecode Sourcemap
50057:4843:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50432:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32157:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54646:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51676:788;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35270:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36773:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50215:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36336:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50360:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50248:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54086:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31406:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37638:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50535:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54726:171;;;:::i;:::-;;37879:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53902:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54188:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50502:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54286:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50471:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35078:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50147:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50285:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32526:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9915:103;;;;;;;;;;;;;:::i;:::-;;53584:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52533:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9264:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53500:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35439:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51033:598;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37049:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38135:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50395:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53798:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50173:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52865:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50324:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54390:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53371:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53698:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37407:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53990:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54520:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10173:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50432:34;;;;:::o;32157:305::-;32259:4;32311:25;32296:40;;;:11;:40;;;;:105;;;;32368:33;32353:48;;;:11;:48;;;;32296:105;:158;;;;32418:36;32442:11;32418:23;:36::i;:::-;32296:158;32276:178;;32157:305;;;:::o;54646:73::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54707:6:::1;54698;;:15;;;;;;;;;;;;;;;;;;54646:73:::0;:::o;51676:788::-;4238:1;4836:7;;:19;;4828:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:1;4969:7;:18;;;;51789:6:::1;;;;;;;;;;;51788:7;51780:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;51846:84;51865:11;;51846:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51878:10;;51917;51900:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;51890:39;;;;;;51846:18;:84::i;:::-;51838:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;51973:14;51990:13;:11;:13::i;:::-;51973:30;;52058:14;;52048:6;52018:27;52032:12;:10;:12::i;:::-;52018:13;:27::i;:::-;:36;;;;:::i;:::-;:54;;52010:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;52136:1;52127:6;:10;52119:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;52202:14;;52192:6;:24;;52184:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52287:8;;52277:6;52268;:15;;;;:::i;:::-;:27;;52260:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;52373:6;52364;;:15;;;;:::i;:::-;52351:9;:28;;52343:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52421:31;52431:12;:10;:12::i;:::-;52445:6;52421:9;:31::i;:::-;51773:691;4194:1:::0;5148:7;:22;;;;51676:788;;;:::o;35270:100::-;35324:13;35357:5;35350:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35270:100;:::o;36773:204::-;36841:7;36866:16;36874:7;36866;:16::i;:::-;36861:64;;36891:34;;;;;;;;;;;;;;36861:64;36945:15;:24;36961:7;36945:24;;;;;;;;;;;;;;;;;;;;;36938:31;;36773:204;;;:::o;50215:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36336:371::-;36409:13;36425:24;36441:7;36425:15;:24::i;:::-;36409:40;;36470:5;36464:11;;:2;:11;;;36460:48;;;36484:24;;;;;;;;;;;;;;36460:48;36541:5;36525:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;36551:37;36568:5;36575:12;:10;:12::i;:::-;36551:16;:37::i;:::-;36550:38;36525:63;36521:138;;;36612:35;;;;;;;;;;;;;;36521:138;36671:28;36680:2;36684:7;36693:5;36671:8;:28::i;:::-;36398:309;36336:371;;:::o;50360:30::-;;;;:::o;50248:32::-;;;;:::o;54086:94::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54164:10:::1;54152:9;:22;;;;54086:94:::0;:::o;31406:303::-;31450:7;31675:15;:13;:15::i;:::-;31660:12;;31644:13;;:28;:46;31637:53;;31406:303;:::o;37638:170::-;37772:28;37782:4;37788:2;37792:7;37772:9;:28::i;:::-;37638:170;;;:::o;50535:25::-;;;;:::o;54726:171::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:1:::1;4836:7;;:19;;4828:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:1;4969:7;:18;;;;54792:12:::2;54818:10;54810:24;;54842:21;54810:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54791:77;;;54883:7;54875:16;;;::::0;::::2;;54784:113;4194:1:::1;5148:7;:22;;;;54726:171::o:0;37879:185::-;38017:39;38034:4;38040:2;38044:7;38017:39;;;;;;;;;;;;:16;:39::i;:::-;37879:185;;;:::o;53902:80::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53968:8:::1;53961:4;:15;;;;53902:80:::0;:::o;54188:92::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54264:10:::1;54253:8;:21;;;;54188:92:::0;:::o;50502:28::-;;;;;;;;;;;;;:::o;54286:98::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54367:11:::1;54357:7;:21;;;;;;;;;;;;:::i;:::-;;54286:98:::0;:::o;50471:26::-;;;;;;;;;;;;;:::o;35078:125::-;35142:7;35169:21;35182:7;35169:12;:21::i;:::-;:26;;;35162:33;;35078:125;;;:::o;50147:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50285:34::-;;;;:::o;32526:206::-;32590:7;32631:1;32614:19;;:5;:19;;;32610:60;;;32642:28;;;;;;;;;;;;;;32610:60;32696:12;:19;32709:5;32696:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;32688:36;;32681:43;;32526:206;;;:::o;9915:103::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9980:30:::1;10007:1;9980:18;:30::i;:::-;9915:103::o:0;53584:106::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53671:11:::1;53658:10;:24;;;;53584:106:::0;:::o;52533:318::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:1:::1;4836:7;;:19;;4828:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:1;4969:7;:18;;;;52648:1:::2;52634:11;:15;52626:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52688:14;52705:13;:11;:13::i;:::-;52688:30;;52757:9;;52742:11;52733:6;:20;;;;:::i;:::-;:33;;52725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52804:35;52814:11;52827;52804:9;:35::i;:::-;52619:232;4194:1:::1;5148:7;:22;;;;52533:318:::0;;:::o;9264:87::-;9310:7;9337:6;;;;;;;;;;;9330:13;;9264:87;:::o;53500:78::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53566:6:::1;53555:8;;:17;;;;;;;;;;;;;;;;;;53500:78:::0;:::o;35439:104::-;35495:13;35528:7;35521:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35439:104;:::o;51033:598::-;4238:1;4836:7;;:19;;4828:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4238:1;4969:7;:18;;;;51107:6:::1;;;;;;;;;;;51106:7;51098:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;51156:14;51173:13;:11;:13::i;:::-;51156:30;;51210:1;51201:6;:10;51193:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51276:12;;51266:6;:22;;51258:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51366:9;;51356:6;51347;:15;;;;:::i;:::-;:28;;51339:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51453:12;;51443:6;51413:27;51427:12;:10;:12::i;:::-;51413:13;:27::i;:::-;:36;;;;:::i;:::-;:52;;51405:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;51540:6;51533:4;;:13;;;;:::i;:::-;51520:9;:26;;51512:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;51588:31;51598:12;:10;:12::i;:::-;51612:6;51588:9;:31::i;:::-;51091:540;4194:1:::0;5148:7;:22;;;;51033:598;:::o;37049:287::-;37160:12;:10;:12::i;:::-;37148:24;;:8;:24;;;37144:54;;;37181:17;;;;;;;;;;;;;;37144:54;37256:8;37211:18;:32;37230:12;:10;:12::i;:::-;37211:32;;;;;;;;;;;;;;;:42;37244:8;37211:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;37309:8;37280:48;;37295:12;:10;:12::i;:::-;37280:48;;;37319:8;37280:48;;;;;;:::i;:::-;;;;;;;;37049:287;;:::o;38135:369::-;38302:28;38312:4;38318:2;38322:7;38302:9;:28::i;:::-;38345:15;:2;:13;;;:15::i;:::-;:76;;;;;38365:56;38396:4;38402:2;38406:7;38415:5;38365:30;:56::i;:::-;38364:57;38345:76;38341:156;;;38445:40;;;;;;;;;;;;;;38341:156;38135:369;;;;:::o;50395:32::-;;;;:::o;53798:96::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53882:6:::1;53865:14;:23;;;;53798:96:::0;:::o;50173:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52865:498::-;52963:13;53004:16;53012:7;53004;:16::i;:::-;52988:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;53114:5;53102:17;;:8;;;;;;;;;;;:17;;;53099:62;;;53139:14;53132:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53099:62;53169:28;53200:10;:8;:10::i;:::-;53169:41;;53255:1;53230:14;53224:28;:32;:133;;;;;;;;;;;;;;;;;53292:14;53308:18;:7;:16;:18::i;:::-;53328:13;53275:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53224:133;53217:140;;;52865:498;;;;:::o;50324:31::-;;;;:::o;54390:122::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54489:17:::1;54473:13;:33;;;;;;;;;;;;:::i;:::-;;54390:122:::0;:::o;53371:107::-;53429:7;53452:20;53466:5;53452:13;:20::i;:::-;53445:27;;53371:107;;;:::o;53698:92::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53778:6:::1;53763:12;:21;;;;53698:92:::0;:::o;37407:164::-;37504:4;37528:18;:25;37547:5;37528:25;;;;;;;;;;;;;;;:35;37554:8;37528:35;;;;;;;;;;;;;;;;;;;;;;;;;37521:42;;37407:164;;;;:::o;53990:88::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54062:10:::1;54053:6;:19;;;;53990:88:::0;:::o;54520:120::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54619:15:::1;54602:14;:32;;;;;;;;;;;;:::i;:::-;;54520:120:::0;:::o;10173:201::-;9495:12;:10;:12::i;:::-;9484:23;;:7;:5;:7::i;:::-;:23;;;9476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10282:1:::1;10262:22;;:8;:22;;;;10254:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10338:28;10357:8;10338:18;:28::i;:::-;10173:201:::0;:::o;22048:157::-;22133:4;22172:25;22157:40;;;:11;:40;;;;22150:47;;22048:157;;;:::o;7988:98::-;8041:7;8068:10;8061:17;;7988:98;:::o;960:190::-;1085:4;1138;1109:25;1122:5;1129:4;1109:12;:25::i;:::-;:33;1102:40;;960:190;;;;;:::o;32814:137::-;32875:7;32910:12;:19;32923:5;32910:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;32902:41;;32895:48;;32814:137;;;:::o;38954:104::-;39023:27;39033:2;39037:8;39023:27;;;;;;;;;;;;:9;:27::i;:::-;38954:104;;:::o;38759:187::-;38816:4;38859:7;38840:15;:13;:15::i;:::-;:26;;:53;;;;;38880:13;;38870:7;:23;38840:53;:98;;;;;38911:11;:20;38923:7;38911:20;;;;;;;;;;;:27;;;;;;;;;;;;38910:28;38840:98;38833:105;;38759:187;;;:::o;46929:196::-;47071:2;47044:15;:24;47060:7;47044:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47109:7;47105:2;47089:28;;47098:5;47089:28;;;;;;;;;;;;46929:196;;;:::o;50913:101::-;50978:7;51005:1;50998:8;;50913:101;:::o;41872:2130::-;41987:35;42025:21;42038:7;42025:12;:21::i;:::-;41987:59;;42085:4;42063:26;;:13;:18;;;:26;;;42059:67;;42098:28;;;;;;;;;;;;;;42059:67;42139:22;42181:4;42165:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42202:36;42219:4;42225:12;:10;:12::i;:::-;42202:16;:36::i;:::-;42165:73;:126;;;;42279:12;:10;:12::i;:::-;42255:36;;:20;42267:7;42255:11;:20::i;:::-;:36;;;42165:126;42139:153;;42310:17;42305:66;;42336:35;;;;;;;;;;;;;;42305:66;42400:1;42386:16;;:2;:16;;;42382:52;;;42411:23;;;;;;;;;;;;;;42382:52;42447:43;42469:4;42475:2;42479:7;42488:1;42447:21;:43::i;:::-;42555:35;42572:1;42576:7;42585:4;42555:8;:35::i;:::-;42916:1;42886:12;:18;42899:4;42886:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42960:1;42932:12;:16;42945:2;42932:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42978:31;43012:11;:20;43024:7;43012:20;;;;;;;;;;;42978:54;;43063:2;43047:8;:13;;;:18;;;;;;;;;;;;;;;;;;43113:15;43080:8;:23;;;:49;;;;;;;;;;;;;;;;;;43381:19;43413:1;43403:7;:11;43381:33;;43429:31;43463:11;:24;43475:11;43463:24;;;;;;;;;;;43429:58;;43531:1;43506:27;;:8;:13;;;;;;;;;;;;:27;;;43502:384;;;43716:13;;43701:11;:28;43697:174;;43770:4;43754:8;:13;;;:20;;;;;;;;;;;;;;;;;;43823:13;:28;;;43797:8;:23;;;:54;;;;;;;;;;;;;;;;;;43697:174;43502:384;42861:1036;;;43933:7;43929:2;43914:27;;43923:4;43914:27;;;;;;;;;;;;43952:42;43973:4;43979:2;43983:7;43992:1;43952:20;:42::i;:::-;41976:2026;;41872:2130;;;:::o;33907:1109::-;33969:21;;:::i;:::-;34003:12;34018:7;34003:22;;34086:4;34067:15;:13;:15::i;:::-;:23;;:47;;;;;34101:13;;34094:4;:20;34067:47;34063:886;;;34135:31;34169:11;:17;34181:4;34169:17;;;;;;;;;;;34135:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34210:9;:16;;;34205:729;;34281:1;34255:28;;:9;:14;;;:28;;;34251:101;;34319:9;34312:16;;;;;;34251:101;34654:261;34661:4;34654:261;;;34694:6;;;;;;;;34739:11;:17;34751:4;34739:17;;;;;;;;;;;34727:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34813:1;34787:28;;:9;:14;;;:28;;;34783:109;;34855:9;34848:16;;;;;;34783:109;34654:261;;;34205:729;34116:833;34063:886;34977:31;;;;;;;;;;;;;;33907:1109;;;;:::o;10534:191::-;10608:16;10627:6;;;;;;;;;;;10608:25;;10653:8;10644:6;;:17;;;;;;;;;;;;;;;;;;10708:8;10677:40;;10698:8;10677:40;;;;;;;;;;;;10597:128;10534:191;:::o;11965:326::-;12025:4;12282:1;12260:7;:19;;;:23;12253:30;;11965:326;;;:::o;47617:667::-;47780:4;47817:2;47801:36;;;47838:12;:10;:12::i;:::-;47852:4;47858:7;47867:5;47801:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47797:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48052:1;48035:6;:13;:18;48031:235;;;48081:40;;;;;;;;;;;;;;48031:235;48224:6;48218:13;48209:6;48205:2;48201:15;48194:38;47797:480;47930:45;;;47920:55;;;:6;:55;;;;47913:62;;;47617:667;;;;;;:::o;50803:102::-;50863:13;50892:7;50885:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50803:102;:::o;5550:723::-;5606:13;5836:1;5827:5;:10;5823:53;;;5854:10;;;;;;;;;;;;;;;;;;;;;5823:53;5886:12;5901:5;5886:20;;5917:14;5942:78;5957:1;5949:4;:9;5942:78;;5975:8;;;;;:::i;:::-;;;;6006:2;5998:10;;;;;:::i;:::-;;;5942:78;;;6030:19;6062:6;6052:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6030:39;;6080:154;6096:1;6087:5;:10;6080:154;;6124:1;6114:11;;;;;:::i;:::-;;;6191:2;6183:5;:10;;;;:::i;:::-;6170:2;:24;;;;:::i;:::-;6157:39;;6140:6;6147;6140:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6220:2;6211:11;;;;;:::i;:::-;;;6080:154;;;6258:6;6244:21;;;;;5550:723;;;;:::o;1512:675::-;1595:7;1615:20;1638:4;1615:27;;1658:9;1653:497;1677:5;:12;1673:1;:16;1653:497;;;1711:20;1734:5;1740:1;1734:8;;;;;;;;:::i;:::-;;;;;;;;1711:31;;1777:12;1761;:28;1757:382;;1904:42;1919:12;1933;1904:14;:42::i;:::-;1889:57;;1757:382;;;2081:42;2096:12;2110;2081:14;:42::i;:::-;2066:57;;1757:382;1696:454;1691:3;;;;;:::i;:::-;;;;1653:497;;;;2167:12;2160:19;;;1512:675;;;;:::o;39421:163::-;39544:32;39550:2;39554:8;39564:5;39571:4;39544:5;:32::i;:::-;39421:163;;;:::o;48932:159::-;;;;;:::o;49750:158::-;;;;;:::o;2195:224::-;2263:13;2326:1;2320:4;2313:15;2355:1;2349:4;2342:15;2396:4;2390;2380:21;2371:30;;2195:224;;;;:::o;39843:1775::-;39982:20;40005:13;;39982:36;;40047:1;40033:16;;:2;:16;;;40029:48;;;40058:19;;;;;;;;;;;;;;40029:48;40104:1;40092:8;:13;40088:44;;;40114:18;;;;;;;;;;;;;;40088:44;40145:61;40175:1;40179:2;40183:12;40197:8;40145:21;:61::i;:::-;40518:8;40483:12;:16;40496:2;40483:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40582:8;40542:12;:16;40555:2;40542:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40641:2;40608:11;:25;40620:12;40608:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;40708:15;40658:11;:25;40670:12;40658:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;40741:20;40764:12;40741:35;;40791:11;40820:8;40805:12;:23;40791:37;;40849:4;:23;;;;;40857:15;:2;:13;;;:15::i;:::-;40849:23;40845:641;;;40893:314;40949:12;40945:2;40924:38;;40941:1;40924:38;;;;;;;;;;;;40990:69;41029:1;41033:2;41037:14;;;;;;41053:5;40990:30;:69::i;:::-;40985:174;;41095:40;;;;;;;;;;;;;;40985:174;41202:3;41186:12;:19;;40893:314;;41288:12;41271:13;;:29;41267:43;;41302:8;;;41267:43;40845:641;;;41351:120;41407:14;;;;;;41403:2;41382:40;;41399:1;41382:40;;;;;;;;;;;;41466:3;41450:12;:19;;41351:120;;40845:641;41516:12;41500:13;:28;;;;40458:1082;;41550:60;41579:1;41583:2;41587:12;41601:8;41550:20;:60::i;:::-;39971:1647;39843:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:323::-;6412:6;6461:2;6449:9;6440:7;6436:23;6432:32;6429:119;;;6467:79;;:::i;:::-;6429:119;6587:1;6612:50;6654:7;6645:6;6634:9;6630:22;6612:50;:::i;:::-;6602:60;;6558:114;6356:323;;;;:::o;6685:329::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:53;6989:7;6980:6;6969:9;6965:22;6944:53;:::i;:::-;6934:63;;6890:117;6685:329;;;;:::o;7020:327::-;7078:6;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:52;7322:7;7313:6;7302:9;7298:22;7278:52;:::i;:::-;7268:62;;7224:116;7020:327;;;;:::o;7353:349::-;7422:6;7471:2;7459:9;7450:7;7446:23;7442:32;7439:119;;;7477:79;;:::i;:::-;7439:119;7597:1;7622:63;7677:7;7668:6;7657:9;7653:22;7622:63;:::i;:::-;7612:73;;7568:127;7353:349;;;;:::o;7708:509::-;7777:6;7826:2;7814:9;7805:7;7801:23;7797:32;7794:119;;;7832:79;;:::i;:::-;7794:119;7980:1;7969:9;7965:17;7952:31;8010:18;8002:6;7999:30;7996:117;;;8032:79;;:::i;:::-;7996:117;8137:63;8192:7;8183:6;8172:9;8168:22;8137:63;:::i;:::-;8127:73;;7923:287;7708:509;;;;:::o;8223:329::-;8282:6;8331:2;8319:9;8310:7;8306:23;8302:32;8299:119;;;8337:79;;:::i;:::-;8299:119;8457:1;8482:53;8527:7;8518:6;8507:9;8503:22;8482:53;:::i;:::-;8472:63;;8428:117;8223:329;;;;:::o;8558:474::-;8626:6;8634;8683:2;8671:9;8662:7;8658:23;8654:32;8651:119;;;8689:79;;:::i;:::-;8651:119;8809:1;8834:53;8879:7;8870:6;8859:9;8855:22;8834:53;:::i;:::-;8824:63;;8780:117;8936:2;8962:53;9007:7;8998:6;8987:9;8983:22;8962:53;:::i;:::-;8952:63;;8907:118;8558:474;;;;;:::o;9038:704::-;9133:6;9141;9149;9198:2;9186:9;9177:7;9173:23;9169:32;9166:119;;;9204:79;;:::i;:::-;9166:119;9324:1;9349:53;9394:7;9385:6;9374:9;9370:22;9349:53;:::i;:::-;9339:63;;9295:117;9479:2;9468:9;9464:18;9451:32;9510:18;9502:6;9499:30;9496:117;;;9532:79;;:::i;:::-;9496:117;9645:80;9717:7;9708:6;9697:9;9693:22;9645:80;:::i;:::-;9627:98;;;;9422:313;9038:704;;;;;:::o;9748:118::-;9835:24;9853:5;9835:24;:::i;:::-;9830:3;9823:37;9748:118;;:::o;9872:157::-;9977:45;9997:24;10015:5;9997:24;:::i;:::-;9977:45;:::i;:::-;9972:3;9965:58;9872:157;;:::o;10035:109::-;10116:21;10131:5;10116:21;:::i;:::-;10111:3;10104:34;10035:109;;:::o;10150:118::-;10237:24;10255:5;10237:24;:::i;:::-;10232:3;10225:37;10150:118;;:::o;10274:360::-;10360:3;10388:38;10420:5;10388:38;:::i;:::-;10442:70;10505:6;10500:3;10442:70;:::i;:::-;10435:77;;10521:52;10566:6;10561:3;10554:4;10547:5;10543:16;10521:52;:::i;:::-;10598:29;10620:6;10598:29;:::i;:::-;10593:3;10589:39;10582:46;;10364:270;10274:360;;;;:::o;10640:364::-;10728:3;10756:39;10789:5;10756:39;:::i;:::-;10811:71;10875:6;10870:3;10811:71;:::i;:::-;10804:78;;10891:52;10936:6;10931:3;10924:4;10917:5;10913:16;10891:52;:::i;:::-;10968:29;10990:6;10968:29;:::i;:::-;10963:3;10959:39;10952:46;;10732:272;10640:364;;;;:::o;11010:377::-;11116:3;11144:39;11177:5;11144:39;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11297:52;11342:6;11337:3;11330:4;11323:5;11319:16;11297:52;:::i;:::-;11374:6;11369:3;11365:16;11358:23;;11120:267;11010:377;;;;:::o;11417:845::-;11520:3;11557:5;11551:12;11586:36;11612:9;11586:36;:::i;:::-;11638:89;11720:6;11715:3;11638:89;:::i;:::-;11631:96;;11758:1;11747:9;11743:17;11774:1;11769:137;;;;11920:1;11915:341;;;;11736:520;;11769:137;11853:4;11849:9;11838;11834:25;11829:3;11822:38;11889:6;11884:3;11880:16;11873:23;;11769:137;;11915:341;11982:38;12014:5;11982:38;:::i;:::-;12042:1;12056:154;12070:6;12067:1;12064:13;12056:154;;;12144:7;12138:14;12134:1;12129:3;12125:11;12118:35;12194:1;12185:7;12181:15;12170:26;;12092:4;12089:1;12085:12;12080:17;;12056:154;;;12239:6;12234:3;12230:16;12223:23;;11922:334;;11736:520;;11524:738;;11417:845;;;;:::o;12268:366::-;12410:3;12431:67;12495:2;12490:3;12431:67;:::i;:::-;12424:74;;12507:93;12596:3;12507:93;:::i;:::-;12625:2;12620:3;12616:12;12609:19;;12268:366;;;:::o;12640:::-;12782:3;12803:67;12867:2;12862:3;12803:67;:::i;:::-;12796:74;;12879:93;12968:3;12879:93;:::i;:::-;12997:2;12992:3;12988:12;12981:19;;12640:366;;;:::o;13012:::-;13154:3;13175:67;13239:2;13234:3;13175:67;:::i;:::-;13168:74;;13251:93;13340:3;13251:93;:::i;:::-;13369:2;13364:3;13360:12;13353:19;;13012:366;;;:::o;13384:::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:::-;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:::-;14270:3;14291:67;14355:2;14350:3;14291:67;:::i;:::-;14284:74;;14367:93;14456:3;14367:93;:::i;:::-;14485:2;14480:3;14476:12;14469:19;;14128:366;;;:::o;14500:::-;14642:3;14663:67;14727:2;14722:3;14663:67;:::i;:::-;14656:74;;14739:93;14828:3;14739:93;:::i;:::-;14857:2;14852:3;14848:12;14841:19;;14500:366;;;:::o;14872:::-;15014:3;15035:67;15099:2;15094:3;15035:67;:::i;:::-;15028:74;;15111:93;15200:3;15111:93;:::i;:::-;15229:2;15224:3;15220:12;15213:19;;14872:366;;;:::o;15244:::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:::-;15758:3;15779:67;15843:2;15838:3;15779:67;:::i;:::-;15772:74;;15855:93;15944:3;15855:93;:::i;:::-;15973:2;15968:3;15964:12;15957:19;;15616:366;;;:::o;15988:::-;16130:3;16151:67;16215:2;16210:3;16151:67;:::i;:::-;16144:74;;16227:93;16316:3;16227:93;:::i;:::-;16345:2;16340:3;16336:12;16329:19;;15988:366;;;:::o;16360:::-;16502:3;16523:67;16587:2;16582:3;16523:67;:::i;:::-;16516:74;;16599:93;16688:3;16599:93;:::i;:::-;16717:2;16712:3;16708:12;16701:19;;16360:366;;;:::o;16732:398::-;16891:3;16912:83;16993:1;16988:3;16912:83;:::i;:::-;16905:90;;17004:93;17093:3;17004:93;:::i;:::-;17122:1;17117:3;17113:11;17106:18;;16732:398;;;:::o;17136:366::-;17278:3;17299:67;17363:2;17358:3;17299:67;:::i;:::-;17292:74;;17375:93;17464:3;17375:93;:::i;:::-;17493:2;17488:3;17484:12;17477:19;;17136:366;;;:::o;17508:::-;17650:3;17671:67;17735:2;17730:3;17671:67;:::i;:::-;17664:74;;17747:93;17836:3;17747:93;:::i;:::-;17865:2;17860:3;17856:12;17849:19;;17508:366;;;:::o;17880:::-;18022:3;18043:67;18107:2;18102:3;18043:67;:::i;:::-;18036:74;;18119:93;18208:3;18119:93;:::i;:::-;18237:2;18232:3;18228:12;18221:19;;17880:366;;;:::o;18252:118::-;18339:24;18357:5;18339:24;:::i;:::-;18334:3;18327:37;18252:118;;:::o;18376:256::-;18488:3;18503:75;18574:3;18565:6;18503:75;:::i;:::-;18603:2;18598:3;18594:12;18587:19;;18623:3;18616:10;;18376:256;;;;:::o;18638:589::-;18863:3;18885:95;18976:3;18967:6;18885:95;:::i;:::-;18878:102;;18997:95;19088:3;19079:6;18997:95;:::i;:::-;18990:102;;19109:92;19197:3;19188:6;19109:92;:::i;:::-;19102:99;;19218:3;19211:10;;18638:589;;;;;;:::o;19233:379::-;19417:3;19439:147;19582:3;19439:147;:::i;:::-;19432:154;;19603:3;19596:10;;19233:379;;;:::o;19618:222::-;19711:4;19749:2;19738:9;19734:18;19726:26;;19762:71;19830:1;19819:9;19815:17;19806:6;19762:71;:::i;:::-;19618:222;;;;:::o;19846:640::-;20041:4;20079:3;20068:9;20064:19;20056:27;;20093:71;20161:1;20150:9;20146:17;20137:6;20093:71;:::i;:::-;20174:72;20242:2;20231:9;20227:18;20218:6;20174:72;:::i;:::-;20256;20324:2;20313:9;20309:18;20300:6;20256:72;:::i;:::-;20375:9;20369:4;20365:20;20360:2;20349:9;20345:18;20338:48;20403:76;20474:4;20465:6;20403:76;:::i;:::-;20395:84;;19846:640;;;;;;;:::o;20492:210::-;20579:4;20617:2;20606:9;20602:18;20594:26;;20630:65;20692:1;20681:9;20677:17;20668:6;20630:65;:::i;:::-;20492:210;;;;:::o;20708:222::-;20801:4;20839:2;20828:9;20824:18;20816:26;;20852:71;20920:1;20909:9;20905:17;20896:6;20852:71;:::i;:::-;20708:222;;;;:::o;20936:313::-;21049:4;21087:2;21076:9;21072:18;21064:26;;21136:9;21130:4;21126:20;21122:1;21111:9;21107:17;21100:47;21164:78;21237:4;21228:6;21164:78;:::i;:::-;21156:86;;20936:313;;;;:::o;21255:419::-;21421:4;21459:2;21448:9;21444:18;21436:26;;21508:9;21502:4;21498:20;21494:1;21483:9;21479:17;21472:47;21536:131;21662:4;21536:131;:::i;:::-;21528:139;;21255:419;;;:::o;21680:::-;21846:4;21884:2;21873:9;21869:18;21861:26;;21933:9;21927:4;21923:20;21919:1;21908:9;21904:17;21897:47;21961:131;22087:4;21961:131;:::i;:::-;21953:139;;21680:419;;;:::o;22105:::-;22271:4;22309:2;22298:9;22294:18;22286:26;;22358:9;22352:4;22348:20;22344:1;22333:9;22329:17;22322:47;22386:131;22512:4;22386:131;:::i;:::-;22378:139;;22105:419;;;:::o;22530:::-;22696:4;22734:2;22723:9;22719:18;22711:26;;22783:9;22777:4;22773:20;22769:1;22758:9;22754:17;22747:47;22811:131;22937:4;22811:131;:::i;:::-;22803:139;;22530:419;;;:::o;22955:::-;23121:4;23159:2;23148:9;23144:18;23136:26;;23208:9;23202:4;23198:20;23194:1;23183:9;23179:17;23172:47;23236:131;23362:4;23236:131;:::i;:::-;23228:139;;22955:419;;;:::o;23380:::-;23546:4;23584:2;23573:9;23569:18;23561:26;;23633:9;23627:4;23623:20;23619:1;23608:9;23604:17;23597:47;23661:131;23787:4;23661:131;:::i;:::-;23653:139;;23380:419;;;:::o;23805:::-;23971:4;24009:2;23998:9;23994:18;23986:26;;24058:9;24052:4;24048:20;24044:1;24033:9;24029:17;24022:47;24086:131;24212:4;24086:131;:::i;:::-;24078:139;;23805:419;;;:::o;24230:::-;24396:4;24434:2;24423:9;24419:18;24411:26;;24483:9;24477:4;24473:20;24469:1;24458:9;24454:17;24447:47;24511:131;24637:4;24511:131;:::i;:::-;24503:139;;24230:419;;;:::o;24655:::-;24821:4;24859:2;24848:9;24844:18;24836:26;;24908:9;24902:4;24898:20;24894:1;24883:9;24879:17;24872:47;24936:131;25062:4;24936:131;:::i;:::-;24928:139;;24655:419;;;:::o;25080:::-;25246:4;25284:2;25273:9;25269:18;25261:26;;25333:9;25327:4;25323:20;25319:1;25308:9;25304:17;25297:47;25361:131;25487:4;25361:131;:::i;:::-;25353:139;;25080:419;;;:::o;25505:::-;25671:4;25709:2;25698:9;25694:18;25686:26;;25758:9;25752:4;25748:20;25744:1;25733:9;25729:17;25722:47;25786:131;25912:4;25786:131;:::i;:::-;25778:139;;25505:419;;;:::o;25930:::-;26096:4;26134:2;26123:9;26119:18;26111:26;;26183:9;26177:4;26173:20;26169:1;26158:9;26154:17;26147:47;26211:131;26337:4;26211:131;:::i;:::-;26203:139;;25930:419;;;:::o;26355:::-;26521:4;26559:2;26548:9;26544:18;26536:26;;26608:9;26602:4;26598:20;26594:1;26583:9;26579:17;26572:47;26636:131;26762:4;26636:131;:::i;:::-;26628:139;;26355:419;;;:::o;26780:::-;26946:4;26984:2;26973:9;26969:18;26961:26;;27033:9;27027:4;27023:20;27019:1;27008:9;27004:17;26997:47;27061:131;27187:4;27061:131;:::i;:::-;27053:139;;26780:419;;;:::o;27205:::-;27371:4;27409:2;27398:9;27394:18;27386:26;;27458:9;27452:4;27448:20;27444:1;27433:9;27429:17;27422:47;27486:131;27612:4;27486:131;:::i;:::-;27478:139;;27205:419;;;:::o;27630:222::-;27723:4;27761:2;27750:9;27746:18;27738:26;;27774:71;27842:1;27831:9;27827:17;27818:6;27774:71;:::i;:::-;27630:222;;;;:::o;27858:129::-;27892:6;27919:20;;:::i;:::-;27909:30;;27948:33;27976:4;27968:6;27948:33;:::i;:::-;27858:129;;;:::o;27993:75::-;28026:6;28059:2;28053:9;28043:19;;27993:75;:::o;28074:307::-;28135:4;28225:18;28217:6;28214:30;28211:56;;;28247:18;;:::i;:::-;28211:56;28285:29;28307:6;28285:29;:::i;:::-;28277:37;;28369:4;28363;28359:15;28351:23;;28074:307;;;:::o;28387:308::-;28449:4;28539:18;28531:6;28528:30;28525:56;;;28561:18;;:::i;:::-;28525:56;28599:29;28621:6;28599:29;:::i;:::-;28591:37;;28683:4;28677;28673:15;28665:23;;28387:308;;;:::o;28701:141::-;28750:4;28773:3;28765:11;;28796:3;28793:1;28786:14;28830:4;28827:1;28817:18;28809:26;;28701:141;;;:::o;28848:98::-;28899:6;28933:5;28927:12;28917:22;;28848:98;;;:::o;28952:99::-;29004:6;29038:5;29032:12;29022:22;;28952:99;;;:::o;29057:168::-;29140:11;29174:6;29169:3;29162:19;29214:4;29209:3;29205:14;29190:29;;29057:168;;;;:::o;29231:147::-;29332:11;29369:3;29354:18;;29231:147;;;;:::o;29384:169::-;29468:11;29502:6;29497:3;29490:19;29542:4;29537:3;29533:14;29518:29;;29384:169;;;;:::o;29559:148::-;29661:11;29698:3;29683:18;;29559:148;;;;:::o;29713:305::-;29753:3;29772:20;29790:1;29772:20;:::i;:::-;29767:25;;29806:20;29824:1;29806:20;:::i;:::-;29801:25;;29960:1;29892:66;29888:74;29885:1;29882:81;29879:107;;;29966:18;;:::i;:::-;29879:107;30010:1;30007;30003:9;29996:16;;29713:305;;;;:::o;30024:185::-;30064:1;30081:20;30099:1;30081:20;:::i;:::-;30076:25;;30115:20;30133:1;30115:20;:::i;:::-;30110:25;;30154:1;30144:35;;30159:18;;:::i;:::-;30144:35;30201:1;30198;30194:9;30189:14;;30024:185;;;;:::o;30215:348::-;30255:7;30278:20;30296:1;30278:20;:::i;:::-;30273:25;;30312:20;30330:1;30312:20;:::i;:::-;30307:25;;30500:1;30432:66;30428:74;30425:1;30422:81;30417:1;30410:9;30403:17;30399:105;30396:131;;;30507:18;;:::i;:::-;30396:131;30555:1;30552;30548:9;30537:20;;30215:348;;;;:::o;30569:191::-;30609:4;30629:20;30647:1;30629:20;:::i;:::-;30624:25;;30663:20;30681:1;30663:20;:::i;:::-;30658:25;;30702:1;30699;30696:8;30693:34;;;30707:18;;:::i;:::-;30693:34;30752:1;30749;30745:9;30737:17;;30569:191;;;;:::o;30766:96::-;30803:7;30832:24;30850:5;30832:24;:::i;:::-;30821:35;;30766:96;;;:::o;30868:90::-;30902:7;30945:5;30938:13;30931:21;30920:32;;30868:90;;;:::o;30964:77::-;31001:7;31030:5;31019:16;;30964:77;;;:::o;31047:149::-;31083:7;31123:66;31116:5;31112:78;31101:89;;31047:149;;;:::o;31202:126::-;31239:7;31279:42;31272:5;31268:54;31257:65;;31202:126;;;:::o;31334:77::-;31371:7;31400:5;31389:16;;31334:77;;;:::o;31417:154::-;31501:6;31496:3;31491;31478:30;31563:1;31554:6;31549:3;31545:16;31538:27;31417:154;;;:::o;31577:307::-;31645:1;31655:113;31669:6;31666:1;31663:13;31655:113;;;31754:1;31749:3;31745:11;31739:18;31735:1;31730:3;31726:11;31719:39;31691:2;31688:1;31684:10;31679:15;;31655:113;;;31786:6;31783:1;31780:13;31777:101;;;31866:1;31857:6;31852:3;31848:16;31841:27;31777:101;31626:258;31577:307;;;:::o;31890:320::-;31934:6;31971:1;31965:4;31961:12;31951:22;;32018:1;32012:4;32008:12;32039:18;32029:81;;32095:4;32087:6;32083:17;32073:27;;32029:81;32157:2;32149:6;32146:14;32126:18;32123:38;32120:84;;;32176:18;;:::i;:::-;32120:84;31941:269;31890:320;;;:::o;32216:281::-;32299:27;32321:4;32299:27;:::i;:::-;32291:6;32287:40;32429:6;32417:10;32414:22;32393:18;32381:10;32378:34;32375:62;32372:88;;;32440:18;;:::i;:::-;32372:88;32480:10;32476:2;32469:22;32259:238;32216:281;;:::o;32503:233::-;32542:3;32565:24;32583:5;32565:24;:::i;:::-;32556:33;;32611:66;32604:5;32601:77;32598:103;;;32681:18;;:::i;:::-;32598:103;32728:1;32721:5;32717:13;32710:20;;32503:233;;;:::o;32742:100::-;32781:7;32810:26;32830:5;32810:26;:::i;:::-;32799:37;;32742:100;;;:::o;32848:94::-;32887:7;32916:20;32930:5;32916:20;:::i;:::-;32905:31;;32848:94;;;:::o;32948:176::-;32980:1;32997:20;33015:1;32997:20;:::i;:::-;32992:25;;33031:20;33049:1;33031:20;:::i;:::-;33026:25;;33070:1;33060:35;;33075:18;;:::i;:::-;33060:35;33116:1;33113;33109:9;33104:14;;32948:176;;;;:::o;33130:180::-;33178:77;33175:1;33168:88;33275:4;33272:1;33265:15;33299:4;33296:1;33289:15;33316:180;33364:77;33361:1;33354:88;33461:4;33458:1;33451:15;33485:4;33482:1;33475:15;33502:180;33550:77;33547:1;33540:88;33647:4;33644:1;33637:15;33671:4;33668:1;33661:15;33688:180;33736:77;33733:1;33726:88;33833:4;33830:1;33823:15;33857:4;33854:1;33847:15;33874:180;33922:77;33919:1;33912:88;34019:4;34016:1;34009:15;34043:4;34040:1;34033:15;34060:117;34169:1;34166;34159:12;34183:117;34292:1;34289;34282:12;34306:117;34415:1;34412;34405:12;34429:117;34538:1;34535;34528:12;34552:117;34661:1;34658;34651:12;34675:117;34784:1;34781;34774:12;34798:102;34839:6;34890:2;34886:7;34881:2;34874:5;34870:14;34866:28;34856:38;;34798:102;;;:::o;34906:94::-;34939:8;34987:5;34983:2;34979:14;34958:35;;34906:94;;;:::o;35006:235::-;35146:34;35142:1;35134:6;35130:14;35123:58;35215:18;35210:2;35202:6;35198:15;35191:43;35006:235;:::o;35247:181::-;35387:33;35383:1;35375:6;35371:14;35364:57;35247:181;:::o;35434:225::-;35574:34;35570:1;35562:6;35558:14;35551:58;35643:8;35638:2;35630:6;35626:15;35619:33;35434:225;:::o;35665:223::-;35805:34;35801:1;35793:6;35789:14;35782:58;35874:6;35869:2;35861:6;35857:15;35850:31;35665:223;:::o;35894:226::-;36034:34;36030:1;36022:6;36018:14;36011:58;36103:9;36098:2;36090:6;36086:15;36079:34;35894:226;:::o;36126:168::-;36266:20;36262:1;36254:6;36250:14;36243:44;36126:168;:::o;36300:182::-;36440:34;36436:1;36428:6;36424:14;36417:58;36300:182;:::o;36488:222::-;36628:34;36624:1;36616:6;36612:14;36605:58;36697:5;36692:2;36684:6;36680:15;36673:30;36488:222;:::o;36716:172::-;36856:24;36852:1;36844:6;36840:14;36833:48;36716:172;:::o;36894:182::-;37034:34;37030:1;37022:6;37018:14;37011:58;36894:182;:::o;37082:181::-;37222:33;37218:1;37210:6;37206:14;37199:57;37082:181;:::o;37269:176::-;37409:28;37405:1;37397:6;37393:14;37386:52;37269:176;:::o;37451:114::-;;:::o;37571:222::-;37711:34;37707:1;37699:6;37695:14;37688:58;37780:5;37775:2;37767:6;37763:15;37756:30;37571:222;:::o;37799:181::-;37939:33;37935:1;37927:6;37923:14;37916:57;37799:181;:::o;37986:177::-;38126:29;38122:1;38114:6;38110:14;38103:53;37986:177;:::o;38169:122::-;38242:24;38260:5;38242:24;:::i;:::-;38235:5;38232:35;38222:63;;38281:1;38278;38271:12;38222:63;38169:122;:::o;38297:116::-;38367:21;38382:5;38367:21;:::i;:::-;38360:5;38357:32;38347:60;;38403:1;38400;38393:12;38347:60;38297:116;:::o;38419:122::-;38492:24;38510:5;38492:24;:::i;:::-;38485:5;38482:35;38472:63;;38531:1;38528;38521:12;38472:63;38419:122;:::o;38547:120::-;38619:23;38636:5;38619:23;:::i;:::-;38612:5;38609:34;38599:62;;38657:1;38654;38647:12;38599:62;38547:120;:::o;38673:122::-;38746:24;38764:5;38746:24;:::i;:::-;38739:5;38736:35;38726:63;;38785:1;38782;38775:12;38726:63;38673:122;:::o
Swarm Source
ipfs://5ed136e85a71b6585b87b0f0bbe1cbea6d9ab116d6787d797bf58f38fbe90af5
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.