Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 P
Holders
6,121
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 PLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Pandies
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-04 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) /* ░░░░░░░░▄██▄░░░░░░▄▄░░ ░░░░░░░▐███▀░░░░░▄███▌ ░░▄▀░░▄█▀▀░░░░░░░░▀██░ ░█░░░██░░░░░░░░░░░░░░░ █▌░░▐██░░▄██▌░░▄▄▄░░░▄ ██░░▐██▄░▀█▀░░░▀██░░▐▌ ██▄░▐███▄▄░░▄▄▄░▀▀░▄██ ▐███▄██████▄░▀░▄█████▌ ▐████████████▀▀██████░ ░▐████▀██████░░█████░░ ░░░▀▀▀░░█████▌░████▀░░ ░░░░░░░░░▀▀███░▀▀▀░░░░ */ pragma solidity ^0.8.0; 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(); error OwnerIndexOutOfBounds(); /** * @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); } /** * @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; } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @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); } /** * @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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } /** * @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); } } /** * @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; } } /** * @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); } } /** * @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, IERC721Enumerable { 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() override 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 || interfaceId == type(IERC721Enumerable).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; } /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) override external view returns (uint256) { uint256 currCount = 0; uint256 currSupply = _currentIndex; bool counting = false; TokenOwnership memory ownership; unchecked { for (uint256 i = _startTokenId(); i < currSupply; ++i) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if(ownership.addr == owner) { counting = true; currCount++; } else if(ownership.addr == address(0)) { if(counting) currCount++; } else { counting = false; } if(counting && index == (currCount - 1)) { return i; } } } revert OwnerIndexOutOfBounds(); } /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) override external pure returns (uint256) { return index; } /** * @dev Returns the tokenIds of the address. O(totalSupply) in complexity. */ function tokensOfOwner(address owner) public view returns (uint256[] memory) { uint256 holdingAmount = balanceOf(owner); uint256 currSupply = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; uint256[] memory list = new uint256[](holdingAmount); unchecked { for (uint256 i = _startTokenId(); i < currSupply; ++i) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } // Find out who owns this sequence if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } // Append tokens the last found owner owns in the sequence if (currOwnershipAddr == owner) { list[tokenIdsIdx++] = i; } // All tokens have been found, we don't need to keep searching if (tokenIdsIdx == holdingAmount) { break; } } } return list; } /** * 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 {} } abstract contract PixieJars { function balanceOf(address owner) public view virtual returns (uint256); } contract Pandies is ERC721A, Ownable { // Minting Variables uint256 public maxPerWalletNonHolder = 1; uint256 public maxPerWalletHolder = 2; uint256 public holderReserve = 3500; uint256 constant public maxSupply = 10000; PixieJars pjContract = PixieJars(0xeA508034fCC8eefF24bF43effe42621008359A2E); mapping(address => uint256) public mintedPerWallet; // Sale Status bool public saleIsActive = false; // Metadata string _baseTokenURI = ""; string _prerevealTokenURI = ""; string _contractURI = ""; bool public locked = false; bool public revealed = false; // Events event SaleActivation(bool isActive); constructor() ERC721A("Pandies", "P") { } function mint() external { require(saleIsActive, "SALE_INACTIVE"); bool pjHolder = (pjContract.balanceOf(msg.sender) > 0); uint256 _count = (pjHolder ? maxPerWalletHolder : maxPerWalletNonHolder); uint256 _minted = mintedPerWallet[msg.sender]; require(_minted < _count, "MAX PER WALLET REACHED"); if(_minted > 0) { _count -= _minted; } if(totalSupply() < maxSupply && totalSupply() + _count > maxSupply) { _count = maxSupply - totalSupply(); } require( totalSupply() + _count + (pjHolder ? 0 : holderReserve) <= maxSupply, "SOLD_OUT" ); _safeMint(msg.sender, _count); mintedPerWallet[msg.sender] = _minted + _count; if(pjHolder) { if(holderReserve > _count) { holderReserve -= _count; } else { holderReserve = 0; } } } function airdrop(address[] calldata recipients, uint256[] calldata count) external onlyOwner { require(recipients.length == count.length, "Array length mismatch"); uint256 totalCount = 0; for(uint256 i = 0;i < count.length;i++) { totalCount += count[i]; } require( totalSupply() + totalCount <= maxSupply, "SOLD_OUT" ); for(uint256 i = 0;i < recipients.length;i++) { _safeMint(recipients[i], count[i]); } } function toggleSaleStatus() external onlyOwner { saleIsActive = !saleIsActive; emit SaleActivation(saleIsActive); } function setMaxPerWalletNonHolder(uint256 _max) external onlyOwner { maxPerWalletNonHolder = _max; } function setMaxPerWalletHolder(uint256 _max) external onlyOwner { maxPerWalletHolder = _max; } function setHolderReserve(uint256 _reserve) external onlyOwner { holderReserve = _reserve; } function lockMetadata() external onlyOwner { locked = true; } function toggleRevealed() external onlyOwner { revealed = !revealed; } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function getWalletOfOwner(address owner) external view returns (uint256[] memory) { unchecked { uint256[] memory a = new uint256[](balanceOf(owner)); uint256 end = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; for (uint256 i; i < end; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { a[tokenIdsIdx++] = i; } } return a; } } function setBaseURI(string memory baseURI) external onlyOwner { require(!locked, "METADATA_LOCKED"); _baseTokenURI = baseURI; } function setPrerevealURI(string memory prerevealURI) external onlyOwner { require(!locked, "METADATA_LOCKED"); _prerevealTokenURI = prerevealURI; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setContractURI(string memory mContractURI) external onlyOwner { _contractURI = mContractURI; } function tokenURI(uint256 tokenId) public view override returns (string memory){ if(!revealed) { return _prerevealTokenURI; } return string(abi.encodePacked(super.tokenURI(tokenId), ".json")); } function contractURI() public view returns (string memory) { return _contractURI; } function _startTokenId() internal view virtual override returns (uint256){ return 1; } }
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":"OwnerIndexOutOfBounds","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"},{"inputs":[],"name":"URIQueryForNonexistentToken","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":false,"internalType":"bool","name":"isActive","type":"bool"}],"name":"SaleActivation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"count","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getWalletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletHolder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletNonHolder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"mContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserve","type":"uint256"}],"name":"setHolderReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxPerWalletHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxPerWalletNonHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prerevealURI","type":"string"}],"name":"setPrerevealURI","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":[],"name":"toggleRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260016009556002600a55610dac600b5573ea508034fcc8eeff24bf43effe42621008359a2e600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60006101000a81548160ff02191690831515021790555060405180602001604052806000815250600f9080519060200190620000ab929190620002f3565b506040518060200160405280600081525060109080519060200190620000d3929190620002f3565b506040518060200160405280600081525060119080519060200190620000fb929190620002f3565b506000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055503480156200013f57600080fd5b506040518060400160405280600781526020017f50616e64696573000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f50000000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001c4929190620002f3565b508060039080519060200190620001dd929190620002f3565b50620001ee6200021c60201b60201c565b6000819055505050620002166200020a6200022560201b60201c565b6200022d60201b60201c565b62000408565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200030190620003a3565b90600052602060002090601f01602090048101928262000325576000855562000371565b82601f106200034057805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037057825182559160200191906001019062000353565b5b50905062000380919062000384565b5090565b5b808211156200039f57600081600090555060010162000385565b5090565b60006002820490506001821680620003bc57607f821691505b60208210811415620003d357620003d2620003d9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61472c80620004186000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80636352211e11610146578063a22cb465116100c3578063dc63e90811610087578063dc63e908146106c1578063de3ebae6146106df578063e8a3d485146106fb578063e985e9c514610719578063eb8d244414610749578063f2fde38b146107675761025e565b8063a22cb4651461061d578063b88d4fde14610639578063c87b56dd14610655578063cf30901214610685578063d5abeb01146106a35761025e565b80638462151c1161010a5780638462151c1461058b5780638da5cb5b146105bb578063938e3d7b146105d957806395d89b41146105f5578063989bdbb6146106135761025e565b80636352211e146104e9578063672434821461051957806370a0823114610535578063715018a61461056557806373ed8f761461056f5761025e565b80632f745c59116101df57806351830227116101a35780635183022714610439578063524124911461045757806355f804b3146104755780635bc020bc146104915780635c47c0881461049b578063627fdeab146104b95761025e565b80632f745c59146103835780633a602b4d146103b35780633ccfd60b146103e357806342842e0e146103ed5780634f6ccce7146104095761025e565b8063081812fc11610226578063081812fc146102f3578063095ea7b3146103235780631249c58b1461033f57806318160ddd1461034957806323b872dd146103675761025e565b806301ffc9a714610263578063049c5c491461029357806306fdde031461029d57806307391ba5146102bb578063078eef28146102d7575b600080fd5b61027d60048036038101906102789190613b50565b610783565b60405161028a9190613f89565b60405180910390f35b61029b6108cd565b005b6102a56109bb565b6040516102b29190613fa4565b60405180910390f35b6102d560048036038101906102d09190613bf3565b610a4d565b005b6102f160048036038101906102ec9190613baa565b610ad3565b005b61030d60048036038101906103089190613bf3565b610bb9565b60405161031a9190613f00565b60405180910390f35b61033d60048036038101906103389190613a8f565b610c35565b005b610347610d40565b005b610351611042565b60405161035e91906140a6565b60405180910390f35b610381600480360381019061037c9190613979565b611059565b005b61039d60048036038101906103989190613a8f565b611069565b6040516103aa91906140a6565b60405180910390f35b6103cd60048036038101906103c8919061390c565b611269565b6040516103da91906140a6565b60405180910390f35b6103eb611281565b005b61040760048036038101906104029190613979565b61134d565b005b610423600480360381019061041e9190613bf3565b61136d565b60405161043091906140a6565b60405180910390f35b610441611377565b60405161044e9190613f89565b60405180910390f35b61045f61138a565b60405161046c91906140a6565b60405180910390f35b61048f600480360381019061048a9190613baa565b611390565b005b610499611476565b005b6104a361151e565b6040516104b091906140a6565b60405180910390f35b6104d360048036038101906104ce919061390c565b611524565b6040516104e09190613f67565b60405180910390f35b61050360048036038101906104fe9190613bf3565b61171b565b6040516105109190613f00565b60405180910390f35b610533600480360381019061052e9190613acf565b611731565b005b61054f600480360381019061054a919061390c565b611909565b60405161055c91906140a6565b60405180910390f35b61056d6119d9565b005b61058960048036038101906105849190613bf3565b611a61565b005b6105a560048036038101906105a0919061390c565b611ae7565b6040516105b29190613f67565b60405180910390f35b6105c3611cfa565b6040516105d09190613f00565b60405180910390f35b6105f360048036038101906105ee9190613baa565b611d24565b005b6105fd611dba565b60405161060a9190613fa4565b60405180910390f35b61061b611e4c565b005b61063760048036038101906106329190613a4f565b611ee5565b005b610653600480360381019061064e91906139cc565b61205d565b005b61066f600480360381019061066a9190613bf3565b6120d9565b60405161067c9190613fa4565b60405180910390f35b61068d6121b1565b60405161069a9190613f89565b60405180910390f35b6106ab6121c4565b6040516106b891906140a6565b60405180910390f35b6106c96121ca565b6040516106d691906140a6565b60405180910390f35b6106f960048036038101906106f49190613bf3565b6121d0565b005b610703612256565b6040516107109190613fa4565b60405180910390f35b610733600480360381019061072e9190613939565b6122e8565b6040516107409190613f89565b60405180910390f35b61075161237c565b60405161075e9190613f89565b60405180910390f35b610781600480360381019061077c919061390c565b61238f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c657506108c582612487565b5b9050919050565b6108d56124f1565b73ffffffffffffffffffffffffffffffffffffffff166108f3611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090614086565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff0219169083151502179055507f58655b75d3df612fe99ead00dbf0812d415d35078fe06217a94c0818bb13967f600e60009054906101000a900460ff166040516109b19190613f89565b60405180910390a1565b6060600280546109ca90614335565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690614335565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b610a556124f1565b73ffffffffffffffffffffffffffffffffffffffff16610a73611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614086565b60405180910390fd5b80600b8190555050565b610adb6124f1565b73ffffffffffffffffffffffffffffffffffffffff16610af9611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690614086565b60405180910390fd5b601260009054906101000a900460ff1615610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614026565b60405180910390fd5b8060109080519060200190610bb592919061361c565b5050565b6000610bc4826124f9565b610bfa576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c408261171b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca8576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc76124f1565b73ffffffffffffffffffffffffffffffffffffffff1614158015610cf95750610cf781610cf26124f1565b6122e8565b155b15610d30576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3b838383612547565b505050565b600e60009054906101000a900460ff16610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690614066565b60405180910390fd5b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610ded9190613f00565b60206040518083038186803b158015610e0557600080fd5b505afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190613c20565b119050600081610e4f57600954610e53565b600a545b90506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290614006565b60405180910390fd5b6000811115610ef3578082610ef0919061424b565b91505b612710610efe611042565b108015610f1e575061271082610f12611042565b610f1c91906141c4565b115b15610f3b57610f2b611042565b612710610f38919061424b565b91505b61271083610f4b57600b54610f4e565b60005b83610f57611042565b610f6191906141c4565b610f6b91906141c4565b1115610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614046565b60405180910390fd5b610fb633836125f9565b8181610fc291906141c4565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550821561103d5781600b5411156110335781600b6000828254611027919061424b565b9250508190555061103c565b6000600b819055505b5b505050565b600061104c612617565b6001546000540303905090565b611064838383612620565b505050565b6000806000905060008054905060006110806136a2565b600061108a612617565b90505b8381101561123057600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050915081604001511561116757611225565b8773ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614156111b057600192508480600101955050611203565b600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614156111fd5782156111f85784806001019550505b611202565b600092505b5b82801561121257506001850387145b15611224578095505050505050611263565b5b80600101905061108d565b506040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b600d6020528060005260406000206000915090505481565b6112896124f1565b73ffffffffffffffffffffffffffffffffffffffff166112a7611cfa565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490614086565b60405180910390fd5b611305611cfa565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561134a573d6000803e3d6000fd5b50565b6113688383836040518060200160405280600081525061205d565b505050565b6000819050919050565b601260019054906101000a900460ff1681565b60095481565b6113986124f1565b73ffffffffffffffffffffffffffffffffffffffff166113b6611cfa565b73ffffffffffffffffffffffffffffffffffffffff161461140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614086565b60405180910390fd5b601260009054906101000a900460ff161561145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614026565b60405180910390fd5b80600f908051906020019061147292919061361c565b5050565b61147e6124f1565b73ffffffffffffffffffffffffffffffffffffffff1661149c611cfa565b73ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990614086565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b600b5481565b6060600061153183611909565b67ffffffffffffffff81111561154a576115496144ce565b5b6040519080825280602002602001820160405280156115785781602001602082028036833780820191505090505b50905060008054905060008060005b8381101561170e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151156116645750611701565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146116a457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116ff57818685806001019650815181106116f2576116f161449f565b5b6020026020010181815250505b505b8080600101915050611587565b5083945050505050919050565b600061172682612ad6565b600001519050919050565b6117396124f1565b73ffffffffffffffffffffffffffffffffffffffff16611757611cfa565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490614086565b60405180910390fd5b8181905084849050146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90613fc6565b60405180910390fd5b6000805b8383905081101561183e578383828181106118175761181661449f565b5b905060200201358261182991906141c4565b9150808061183690614398565b9150506117f9565b506127108161184b611042565b61185591906141c4565b1115611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614046565b60405180910390fd5b60005b85859050811015611901576118ee8686838181106118ba576118b961449f565b5b90506020020160208101906118cf919061390c565b8585848181106118e2576118e161449f565b5b905060200201356125f9565b80806118f990614398565b915050611899565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611971576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119e16124f1565b73ffffffffffffffffffffffffffffffffffffffff166119ff611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90614086565b60405180910390fd5b611a5f6000612d65565b565b611a696124f1565b73ffffffffffffffffffffffffffffffffffffffff16611a87611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490614086565b60405180910390fd5b8060098190555050565b60606000611af483611909565b905060008054905060008060008467ffffffffffffffff811115611b1b57611b1a6144ce565b5b604051908082528060200260200182016040528015611b495781602001602082028036833780820191505090505b5090506000611b56612617565b90505b84811015611cec576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115611c365750611ce1565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c7657806000015193505b8873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cd15781838680600101975081518110611cc457611cc361449f565b5b6020026020010181815250505b86851415611cdf5750611cec565b505b806001019050611b59565b508095505050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d2c6124f1565b73ffffffffffffffffffffffffffffffffffffffff16611d4a611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614086565b60405180910390fd5b8060119080519060200190611db692919061361c565b5050565b606060038054611dc990614335565b80601f0160208091040260200160405190810160405280929190818152602001828054611df590614335565b8015611e425780601f10611e1757610100808354040283529160200191611e42565b820191906000526020600020905b815481529060010190602001808311611e2557829003601f168201915b5050505050905090565b611e546124f1565b73ffffffffffffffffffffffffffffffffffffffff16611e72611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90614086565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b611eed6124f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f52576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611f5f6124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661200c6124f1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120519190613f89565b60405180910390a35050565b612068848484612620565b6120878373ffffffffffffffffffffffffffffffffffffffff16612e2b565b801561209c575061209a84848484612e3e565b155b156120d3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060601260019054906101000a900460ff1661218157601080546120fc90614335565b80601f016020809104026020016040519081016040528092919081815260200182805461212890614335565b80156121755780601f1061214a57610100808354040283529160200191612175565b820191906000526020600020905b81548152906001019060200180831161215857829003601f168201915b505050505090506121ac565b61218a82612f9e565b60405160200161219a9190613ede565b60405160208183030381529060405290505b919050565b601260009054906101000a900460ff1681565b61271081565b600a5481565b6121d86124f1565b73ffffffffffffffffffffffffffffffffffffffff166121f6611cfa565b73ffffffffffffffffffffffffffffffffffffffff161461224c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224390614086565b60405180910390fd5b80600a8190555050565b60606011805461226590614335565b80601f016020809104026020016040519081016040528092919081815260200182805461229190614335565b80156122de5780601f106122b3576101008083540402835291602001916122de565b820191906000526020600020905b8154815290600101906020018083116122c157829003601f168201915b5050505050905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b6123976124f1565b73ffffffffffffffffffffffffffffffffffffffff166123b5611cfa565b73ffffffffffffffffffffffffffffffffffffffff161461240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614086565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290613fe6565b60405180910390fd5b61248481612d65565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612504612617565b11158015612513575060005482105b8015612540575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61261382826040518060200160405280600081525061303d565b5050565b60006001905090565b600061262b82612ad6565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612696576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166126b76124f1565b73ffffffffffffffffffffffffffffffffffffffff1614806126e657506126e5856126e06124f1565b6122e8565b5b8061272b57506126f46124f1565b73ffffffffffffffffffffffffffffffffffffffff1661271384610bb9565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612764576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127cb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127d8858585600161304f565b6127e460008487612547565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a64576000548214612a6357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612acf8585856001613055565b5050505050565b612ade6136a2565b600082905080612aec612617565b11158015612afb575060005481105b15612d2e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d2c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c10578092505050612d60565b5b600115612d2b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d26578092505050612d60565b612c11565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e646124f1565b8786866040518563ffffffff1660e01b8152600401612e869493929190613f1b565b602060405180830381600087803b158015612ea057600080fd5b505af1925050508015612ed157506040513d601f19601f82011682018060405250810190612ece9190613b7d565b60015b612f4b573d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b50600081511415612f43576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060612fa9826124f9565b612fdf576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612fe961305b565b905060008151141561300a5760405180602001604052806000815250613035565b80613014846130ed565b604051602001613025929190613eba565b6040516020818303038152906040525b915050919050565b61304a838383600161324e565b505050565b50505050565b50505050565b6060600f805461306a90614335565b80601f016020809104026020016040519081016040528092919081815260200182805461309690614335565b80156130e35780601f106130b8576101008083540402835291602001916130e3565b820191906000526020600020905b8154815290600101906020018083116130c657829003601f168201915b5050505050905090565b60606000821415613135576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613249565b600082905060005b6000821461316757808061315090614398565b915050600a82613160919061421a565b915061313d565b60008167ffffffffffffffff811115613183576131826144ce565b5b6040519080825280601f01601f1916602001820160405280156131b55781602001600182028036833780820191505090505b5090505b60008514613242576001826131ce919061424b565b9150600a856131dd91906143e1565b60306131e991906141c4565b60f81b8183815181106131ff576131fe61449f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561323b919061421a565b94506131b9565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156132bb576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156132f6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613303600086838761304f565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156134cd57506134cc8773ffffffffffffffffffffffffffffffffffffffff16612e2b565b5b15613593575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135426000888480600101955088612e3e565b613578576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156134d357826000541461358e57600080fd5b6135ff565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613594575b8160008190555050506136156000868387613055565b5050505050565b82805461362890614335565b90600052602060002090601f01602090048101928261364a5760008555613691565b82601f1061366357805160ff1916838001178555613691565b82800160010185558215613691579182015b82811115613690578251825591602001919060010190613675565b5b50905061369e91906136e5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156136fe5760008160009055506001016136e6565b5090565b6000613715613710846140e6565b6140c1565b9050828152602081018484840111156137315761373061450c565b5b61373c8482856142f3565b509392505050565b600061375761375284614117565b6140c1565b9050828152602081018484840111156137735761377261450c565b5b61377e8482856142f3565b509392505050565b6000813590506137958161469a565b92915050565b60008083601f8401126137b1576137b0614502565b5b8235905067ffffffffffffffff8111156137ce576137cd6144fd565b5b6020830191508360208202830111156137ea576137e9614507565b5b9250929050565b60008083601f84011261380757613806614502565b5b8235905067ffffffffffffffff811115613824576138236144fd565b5b6020830191508360208202830111156138405761383f614507565b5b9250929050565b600081359050613856816146b1565b92915050565b60008135905061386b816146c8565b92915050565b600081519050613880816146c8565b92915050565b600082601f83011261389b5761389a614502565b5b81356138ab848260208601613702565b91505092915050565b600082601f8301126138c9576138c8614502565b5b81356138d9848260208601613744565b91505092915050565b6000813590506138f1816146df565b92915050565b600081519050613906816146df565b92915050565b60006020828403121561392257613921614516565b5b600061393084828501613786565b91505092915050565b600080604083850312156139505761394f614516565b5b600061395e85828601613786565b925050602061396f85828601613786565b9150509250929050565b60008060006060848603121561399257613991614516565b5b60006139a086828701613786565b93505060206139b186828701613786565b92505060406139c2868287016138e2565b9150509250925092565b600080600080608085870312156139e6576139e5614516565b5b60006139f487828801613786565b9450506020613a0587828801613786565b9350506040613a16878288016138e2565b925050606085013567ffffffffffffffff811115613a3757613a36614511565b5b613a4387828801613886565b91505092959194509250565b60008060408385031215613a6657613a65614516565b5b6000613a7485828601613786565b9250506020613a8585828601613847565b9150509250929050565b60008060408385031215613aa657613aa5614516565b5b6000613ab485828601613786565b9250506020613ac5858286016138e2565b9150509250929050565b60008060008060408587031215613ae957613ae8614516565b5b600085013567ffffffffffffffff811115613b0757613b06614511565b5b613b138782880161379b565b9450945050602085013567ffffffffffffffff811115613b3657613b35614511565b5b613b42878288016137f1565b925092505092959194509250565b600060208284031215613b6657613b65614516565b5b6000613b748482850161385c565b91505092915050565b600060208284031215613b9357613b92614516565b5b6000613ba184828501613871565b91505092915050565b600060208284031215613bc057613bbf614516565b5b600082013567ffffffffffffffff811115613bde57613bdd614511565b5b613bea848285016138b4565b91505092915050565b600060208284031215613c0957613c08614516565b5b6000613c17848285016138e2565b91505092915050565b600060208284031215613c3657613c35614516565b5b6000613c44848285016138f7565b91505092915050565b6000613c598383613e9c565b60208301905092915050565b613c6e8161427f565b82525050565b6000613c7f82614158565b613c898185614186565b9350613c9483614148565b8060005b83811015613cc5578151613cac8882613c4d565b9750613cb783614179565b925050600181019050613c98565b5085935050505092915050565b613cdb81614291565b82525050565b6000613cec82614163565b613cf68185614197565b9350613d06818560208601614302565b613d0f8161451b565b840191505092915050565b6000613d258261416e565b613d2f81856141a8565b9350613d3f818560208601614302565b613d488161451b565b840191505092915050565b6000613d5e8261416e565b613d6881856141b9565b9350613d78818560208601614302565b80840191505092915050565b6000613d916015836141a8565b9150613d9c8261452c565b602082019050919050565b6000613db46026836141a8565b9150613dbf82614555565b604082019050919050565b6000613dd76016836141a8565b9150613de2826145a4565b602082019050919050565b6000613dfa600f836141a8565b9150613e05826145cd565b602082019050919050565b6000613e1d6008836141a8565b9150613e28826145f6565b602082019050919050565b6000613e406005836141b9565b9150613e4b8261461f565b600582019050919050565b6000613e63600d836141a8565b9150613e6e82614648565b602082019050919050565b6000613e866020836141a8565b9150613e9182614671565b602082019050919050565b613ea5816142e9565b82525050565b613eb4816142e9565b82525050565b6000613ec68285613d53565b9150613ed28284613d53565b91508190509392505050565b6000613eea8284613d53565b9150613ef582613e33565b915081905092915050565b6000602082019050613f156000830184613c65565b92915050565b6000608082019050613f306000830187613c65565b613f3d6020830186613c65565b613f4a6040830185613eab565b8181036060830152613f5c8184613ce1565b905095945050505050565b60006020820190508181036000830152613f818184613c74565b905092915050565b6000602082019050613f9e6000830184613cd2565b92915050565b60006020820190508181036000830152613fbe8184613d1a565b905092915050565b60006020820190508181036000830152613fdf81613d84565b9050919050565b60006020820190508181036000830152613fff81613da7565b9050919050565b6000602082019050818103600083015261401f81613dca565b9050919050565b6000602082019050818103600083015261403f81613ded565b9050919050565b6000602082019050818103600083015261405f81613e10565b9050919050565b6000602082019050818103600083015261407f81613e56565b9050919050565b6000602082019050818103600083015261409f81613e79565b9050919050565b60006020820190506140bb6000830184613eab565b92915050565b60006140cb6140dc565b90506140d78282614367565b919050565b6000604051905090565b600067ffffffffffffffff821115614101576141006144ce565b5b61410a8261451b565b9050602081019050919050565b600067ffffffffffffffff821115614132576141316144ce565b5b61413b8261451b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141cf826142e9565b91506141da836142e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561420f5761420e614412565b5b828201905092915050565b6000614225826142e9565b9150614230836142e9565b9250826142405761423f614441565b5b828204905092915050565b6000614256826142e9565b9150614261836142e9565b92508282101561427457614273614412565b5b828203905092915050565b600061428a826142c9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614320578082015181840152602081019050614305565b8381111561432f576000848401525b50505050565b6000600282049050600182168061434d57607f821691505b6020821081141561436157614360614470565b5b50919050565b6143708261451b565b810181811067ffffffffffffffff8211171561438f5761438e6144ce565b5b80604052505050565b60006143a3826142e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143d6576143d5614412565b5b600182019050919050565b60006143ec826142e9565b91506143f7836142e9565b92508261440757614406614441565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4172726179206c656e677468206d69736d617463680000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d4158205045522057414c4c4554205245414348454400000000000000000000600082015250565b7f4d455441444154415f4c4f434b45440000000000000000000000000000000000600082015250565b7f534f4c445f4f5554000000000000000000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f53414c455f494e41435449564500000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6146a38161427f565b81146146ae57600080fd5b50565b6146ba81614291565b81146146c557600080fd5b50565b6146d18161429d565b81146146dc57600080fd5b50565b6146e8816142e9565b81146146f357600080fd5b5056fea2646970667358221220ce53d66f5358d40b81f14ed8d40b391fee4be5e1cd93a9f0ca12da976a0d7cdb64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80636352211e11610146578063a22cb465116100c3578063dc63e90811610087578063dc63e908146106c1578063de3ebae6146106df578063e8a3d485146106fb578063e985e9c514610719578063eb8d244414610749578063f2fde38b146107675761025e565b8063a22cb4651461061d578063b88d4fde14610639578063c87b56dd14610655578063cf30901214610685578063d5abeb01146106a35761025e565b80638462151c1161010a5780638462151c1461058b5780638da5cb5b146105bb578063938e3d7b146105d957806395d89b41146105f5578063989bdbb6146106135761025e565b80636352211e146104e9578063672434821461051957806370a0823114610535578063715018a61461056557806373ed8f761461056f5761025e565b80632f745c59116101df57806351830227116101a35780635183022714610439578063524124911461045757806355f804b3146104755780635bc020bc146104915780635c47c0881461049b578063627fdeab146104b95761025e565b80632f745c59146103835780633a602b4d146103b35780633ccfd60b146103e357806342842e0e146103ed5780634f6ccce7146104095761025e565b8063081812fc11610226578063081812fc146102f3578063095ea7b3146103235780631249c58b1461033f57806318160ddd1461034957806323b872dd146103675761025e565b806301ffc9a714610263578063049c5c491461029357806306fdde031461029d57806307391ba5146102bb578063078eef28146102d7575b600080fd5b61027d60048036038101906102789190613b50565b610783565b60405161028a9190613f89565b60405180910390f35b61029b6108cd565b005b6102a56109bb565b6040516102b29190613fa4565b60405180910390f35b6102d560048036038101906102d09190613bf3565b610a4d565b005b6102f160048036038101906102ec9190613baa565b610ad3565b005b61030d60048036038101906103089190613bf3565b610bb9565b60405161031a9190613f00565b60405180910390f35b61033d60048036038101906103389190613a8f565b610c35565b005b610347610d40565b005b610351611042565b60405161035e91906140a6565b60405180910390f35b610381600480360381019061037c9190613979565b611059565b005b61039d60048036038101906103989190613a8f565b611069565b6040516103aa91906140a6565b60405180910390f35b6103cd60048036038101906103c8919061390c565b611269565b6040516103da91906140a6565b60405180910390f35b6103eb611281565b005b61040760048036038101906104029190613979565b61134d565b005b610423600480360381019061041e9190613bf3565b61136d565b60405161043091906140a6565b60405180910390f35b610441611377565b60405161044e9190613f89565b60405180910390f35b61045f61138a565b60405161046c91906140a6565b60405180910390f35b61048f600480360381019061048a9190613baa565b611390565b005b610499611476565b005b6104a361151e565b6040516104b091906140a6565b60405180910390f35b6104d360048036038101906104ce919061390c565b611524565b6040516104e09190613f67565b60405180910390f35b61050360048036038101906104fe9190613bf3565b61171b565b6040516105109190613f00565b60405180910390f35b610533600480360381019061052e9190613acf565b611731565b005b61054f600480360381019061054a919061390c565b611909565b60405161055c91906140a6565b60405180910390f35b61056d6119d9565b005b61058960048036038101906105849190613bf3565b611a61565b005b6105a560048036038101906105a0919061390c565b611ae7565b6040516105b29190613f67565b60405180910390f35b6105c3611cfa565b6040516105d09190613f00565b60405180910390f35b6105f360048036038101906105ee9190613baa565b611d24565b005b6105fd611dba565b60405161060a9190613fa4565b60405180910390f35b61061b611e4c565b005b61063760048036038101906106329190613a4f565b611ee5565b005b610653600480360381019061064e91906139cc565b61205d565b005b61066f600480360381019061066a9190613bf3565b6120d9565b60405161067c9190613fa4565b60405180910390f35b61068d6121b1565b60405161069a9190613f89565b60405180910390f35b6106ab6121c4565b6040516106b891906140a6565b60405180910390f35b6106c96121ca565b6040516106d691906140a6565b60405180910390f35b6106f960048036038101906106f49190613bf3565b6121d0565b005b610703612256565b6040516107109190613fa4565b60405180910390f35b610733600480360381019061072e9190613939565b6122e8565b6040516107409190613f89565b60405180910390f35b61075161237c565b60405161075e9190613f89565b60405180910390f35b610781600480360381019061077c919061390c565b61238f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c657506108c582612487565b5b9050919050565b6108d56124f1565b73ffffffffffffffffffffffffffffffffffffffff166108f3611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090614086565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff0219169083151502179055507f58655b75d3df612fe99ead00dbf0812d415d35078fe06217a94c0818bb13967f600e60009054906101000a900460ff166040516109b19190613f89565b60405180910390a1565b6060600280546109ca90614335565b80601f01602080910402602001604051908101604052809291908181526020018280546109f690614335565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b610a556124f1565b73ffffffffffffffffffffffffffffffffffffffff16610a73611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090614086565b60405180910390fd5b80600b8190555050565b610adb6124f1565b73ffffffffffffffffffffffffffffffffffffffff16610af9611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690614086565b60405180910390fd5b601260009054906101000a900460ff1615610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614026565b60405180910390fd5b8060109080519060200190610bb592919061361c565b5050565b6000610bc4826124f9565b610bfa576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c408261171b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca8576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc76124f1565b73ffffffffffffffffffffffffffffffffffffffff1614158015610cf95750610cf781610cf26124f1565b6122e8565b155b15610d30576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d3b838383612547565b505050565b600e60009054906101000a900460ff16610d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8690614066565b60405180910390fd5b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610ded9190613f00565b60206040518083038186803b158015610e0557600080fd5b505afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190613c20565b119050600081610e4f57600954610e53565b600a545b90506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290614006565b60405180910390fd5b6000811115610ef3578082610ef0919061424b565b91505b612710610efe611042565b108015610f1e575061271082610f12611042565b610f1c91906141c4565b115b15610f3b57610f2b611042565b612710610f38919061424b565b91505b61271083610f4b57600b54610f4e565b60005b83610f57611042565b610f6191906141c4565b610f6b91906141c4565b1115610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614046565b60405180910390fd5b610fb633836125f9565b8181610fc291906141c4565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550821561103d5781600b5411156110335781600b6000828254611027919061424b565b9250508190555061103c565b6000600b819055505b5b505050565b600061104c612617565b6001546000540303905090565b611064838383612620565b505050565b6000806000905060008054905060006110806136a2565b600061108a612617565b90505b8381101561123057600460008281526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050915081604001511561116757611225565b8773ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614156111b057600192508480600101955050611203565b600073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614156111fd5782156111f85784806001019550505b611202565b600092505b5b82801561121257506001850387145b15611224578095505050505050611263565b5b80600101905061108d565b506040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b600d6020528060005260406000206000915090505481565b6112896124f1565b73ffffffffffffffffffffffffffffffffffffffff166112a7611cfa565b73ffffffffffffffffffffffffffffffffffffffff16146112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490614086565b60405180910390fd5b611305611cfa565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561134a573d6000803e3d6000fd5b50565b6113688383836040518060200160405280600081525061205d565b505050565b6000819050919050565b601260019054906101000a900460ff1681565b60095481565b6113986124f1565b73ffffffffffffffffffffffffffffffffffffffff166113b6611cfa565b73ffffffffffffffffffffffffffffffffffffffff161461140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614086565b60405180910390fd5b601260009054906101000a900460ff161561145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614026565b60405180910390fd5b80600f908051906020019061147292919061361c565b5050565b61147e6124f1565b73ffffffffffffffffffffffffffffffffffffffff1661149c611cfa565b73ffffffffffffffffffffffffffffffffffffffff16146114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e990614086565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff021916908315150217905550565b600b5481565b6060600061153183611909565b67ffffffffffffffff81111561154a576115496144ce565b5b6040519080825280602002602001820160405280156115785781602001602082028036833780820191505090505b50905060008054905060008060005b8381101561170e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151156116645750611701565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146116a457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116ff57818685806001019650815181106116f2576116f161449f565b5b6020026020010181815250505b505b8080600101915050611587565b5083945050505050919050565b600061172682612ad6565b600001519050919050565b6117396124f1565b73ffffffffffffffffffffffffffffffffffffffff16611757611cfa565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490614086565b60405180910390fd5b8181905084849050146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90613fc6565b60405180910390fd5b6000805b8383905081101561183e578383828181106118175761181661449f565b5b905060200201358261182991906141c4565b9150808061183690614398565b9150506117f9565b506127108161184b611042565b61185591906141c4565b1115611896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188d90614046565b60405180910390fd5b60005b85859050811015611901576118ee8686838181106118ba576118b961449f565b5b90506020020160208101906118cf919061390c565b8585848181106118e2576118e161449f565b5b905060200201356125f9565b80806118f990614398565b915050611899565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611971576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119e16124f1565b73ffffffffffffffffffffffffffffffffffffffff166119ff611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90614086565b60405180910390fd5b611a5f6000612d65565b565b611a696124f1565b73ffffffffffffffffffffffffffffffffffffffff16611a87611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490614086565b60405180910390fd5b8060098190555050565b60606000611af483611909565b905060008054905060008060008467ffffffffffffffff811115611b1b57611b1a6144ce565b5b604051908082528060200260200182016040528015611b495781602001602082028036833780820191505090505b5090506000611b56612617565b90505b84811015611cec576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115611c365750611ce1565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c7657806000015193505b8873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cd15781838680600101975081518110611cc457611cc361449f565b5b6020026020010181815250505b86851415611cdf5750611cec565b505b806001019050611b59565b508095505050505050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d2c6124f1565b73ffffffffffffffffffffffffffffffffffffffff16611d4a611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614086565b60405180910390fd5b8060119080519060200190611db692919061361c565b5050565b606060038054611dc990614335565b80601f0160208091040260200160405190810160405280929190818152602001828054611df590614335565b8015611e425780601f10611e1757610100808354040283529160200191611e42565b820191906000526020600020905b815481529060010190602001808311611e2557829003601f168201915b5050505050905090565b611e546124f1565b73ffffffffffffffffffffffffffffffffffffffff16611e72611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90614086565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b611eed6124f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f52576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611f5f6124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661200c6124f1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120519190613f89565b60405180910390a35050565b612068848484612620565b6120878373ffffffffffffffffffffffffffffffffffffffff16612e2b565b801561209c575061209a84848484612e3e565b155b156120d3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060601260019054906101000a900460ff1661218157601080546120fc90614335565b80601f016020809104026020016040519081016040528092919081815260200182805461212890614335565b80156121755780601f1061214a57610100808354040283529160200191612175565b820191906000526020600020905b81548152906001019060200180831161215857829003601f168201915b505050505090506121ac565b61218a82612f9e565b60405160200161219a9190613ede565b60405160208183030381529060405290505b919050565b601260009054906101000a900460ff1681565b61271081565b600a5481565b6121d86124f1565b73ffffffffffffffffffffffffffffffffffffffff166121f6611cfa565b73ffffffffffffffffffffffffffffffffffffffff161461224c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224390614086565b60405180910390fd5b80600a8190555050565b60606011805461226590614335565b80601f016020809104026020016040519081016040528092919081815260200182805461229190614335565b80156122de5780601f106122b3576101008083540402835291602001916122de565b820191906000526020600020905b8154815290600101906020018083116122c157829003601f168201915b5050505050905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900460ff1681565b6123976124f1565b73ffffffffffffffffffffffffffffffffffffffff166123b5611cfa565b73ffffffffffffffffffffffffffffffffffffffff161461240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614086565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290613fe6565b60405180910390fd5b61248481612d65565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612504612617565b11158015612513575060005482105b8015612540575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61261382826040518060200160405280600081525061303d565b5050565b60006001905090565b600061262b82612ad6565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612696576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166126b76124f1565b73ffffffffffffffffffffffffffffffffffffffff1614806126e657506126e5856126e06124f1565b6122e8565b5b8061272b57506126f46124f1565b73ffffffffffffffffffffffffffffffffffffffff1661271384610bb9565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612764576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127cb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127d8858585600161304f565b6127e460008487612547565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a64576000548214612a6357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612acf8585856001613055565b5050505050565b612ade6136a2565b600082905080612aec612617565b11158015612afb575060005481105b15612d2e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d2c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c10578092505050612d60565b5b600115612d2b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d26578092505050612d60565b612c11565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e646124f1565b8786866040518563ffffffff1660e01b8152600401612e869493929190613f1b565b602060405180830381600087803b158015612ea057600080fd5b505af1925050508015612ed157506040513d601f19601f82011682018060405250810190612ece9190613b7d565b60015b612f4b573d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b50600081511415612f43576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060612fa9826124f9565b612fdf576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612fe961305b565b905060008151141561300a5760405180602001604052806000815250613035565b80613014846130ed565b604051602001613025929190613eba565b6040516020818303038152906040525b915050919050565b61304a838383600161324e565b505050565b50505050565b50505050565b6060600f805461306a90614335565b80601f016020809104026020016040519081016040528092919081815260200182805461309690614335565b80156130e35780601f106130b8576101008083540402835291602001916130e3565b820191906000526020600020905b8154815290600101906020018083116130c657829003601f168201915b5050505050905090565b60606000821415613135576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613249565b600082905060005b6000821461316757808061315090614398565b915050600a82613160919061421a565b915061313d565b60008167ffffffffffffffff811115613183576131826144ce565b5b6040519080825280601f01601f1916602001820160405280156131b55781602001600182028036833780820191505090505b5090505b60008514613242576001826131ce919061424b565b9150600a856131dd91906143e1565b60306131e991906141c4565b60f81b8183815181106131ff576131fe61449f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561323b919061421a565b94506131b9565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156132bb576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156132f6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613303600086838761304f565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156134cd57506134cc8773ffffffffffffffffffffffffffffffffffffffff16612e2b565b5b15613593575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135426000888480600101955088612e3e565b613578576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156134d357826000541461358e57600080fd5b6135ff565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613594575b8160008190555050506136156000868387613055565b5050505050565b82805461362890614335565b90600052602060002090601f01602090048101928261364a5760008555613691565b82601f1061366357805160ff1916838001178555613691565b82800160010185558215613691579182015b82811115613690578251825591602001919060010190613675565b5b50905061369e91906136e5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156136fe5760008160009055506001016136e6565b5090565b6000613715613710846140e6565b6140c1565b9050828152602081018484840111156137315761373061450c565b5b61373c8482856142f3565b509392505050565b600061375761375284614117565b6140c1565b9050828152602081018484840111156137735761377261450c565b5b61377e8482856142f3565b509392505050565b6000813590506137958161469a565b92915050565b60008083601f8401126137b1576137b0614502565b5b8235905067ffffffffffffffff8111156137ce576137cd6144fd565b5b6020830191508360208202830111156137ea576137e9614507565b5b9250929050565b60008083601f84011261380757613806614502565b5b8235905067ffffffffffffffff811115613824576138236144fd565b5b6020830191508360208202830111156138405761383f614507565b5b9250929050565b600081359050613856816146b1565b92915050565b60008135905061386b816146c8565b92915050565b600081519050613880816146c8565b92915050565b600082601f83011261389b5761389a614502565b5b81356138ab848260208601613702565b91505092915050565b600082601f8301126138c9576138c8614502565b5b81356138d9848260208601613744565b91505092915050565b6000813590506138f1816146df565b92915050565b600081519050613906816146df565b92915050565b60006020828403121561392257613921614516565b5b600061393084828501613786565b91505092915050565b600080604083850312156139505761394f614516565b5b600061395e85828601613786565b925050602061396f85828601613786565b9150509250929050565b60008060006060848603121561399257613991614516565b5b60006139a086828701613786565b93505060206139b186828701613786565b92505060406139c2868287016138e2565b9150509250925092565b600080600080608085870312156139e6576139e5614516565b5b60006139f487828801613786565b9450506020613a0587828801613786565b9350506040613a16878288016138e2565b925050606085013567ffffffffffffffff811115613a3757613a36614511565b5b613a4387828801613886565b91505092959194509250565b60008060408385031215613a6657613a65614516565b5b6000613a7485828601613786565b9250506020613a8585828601613847565b9150509250929050565b60008060408385031215613aa657613aa5614516565b5b6000613ab485828601613786565b9250506020613ac5858286016138e2565b9150509250929050565b60008060008060408587031215613ae957613ae8614516565b5b600085013567ffffffffffffffff811115613b0757613b06614511565b5b613b138782880161379b565b9450945050602085013567ffffffffffffffff811115613b3657613b35614511565b5b613b42878288016137f1565b925092505092959194509250565b600060208284031215613b6657613b65614516565b5b6000613b748482850161385c565b91505092915050565b600060208284031215613b9357613b92614516565b5b6000613ba184828501613871565b91505092915050565b600060208284031215613bc057613bbf614516565b5b600082013567ffffffffffffffff811115613bde57613bdd614511565b5b613bea848285016138b4565b91505092915050565b600060208284031215613c0957613c08614516565b5b6000613c17848285016138e2565b91505092915050565b600060208284031215613c3657613c35614516565b5b6000613c44848285016138f7565b91505092915050565b6000613c598383613e9c565b60208301905092915050565b613c6e8161427f565b82525050565b6000613c7f82614158565b613c898185614186565b9350613c9483614148565b8060005b83811015613cc5578151613cac8882613c4d565b9750613cb783614179565b925050600181019050613c98565b5085935050505092915050565b613cdb81614291565b82525050565b6000613cec82614163565b613cf68185614197565b9350613d06818560208601614302565b613d0f8161451b565b840191505092915050565b6000613d258261416e565b613d2f81856141a8565b9350613d3f818560208601614302565b613d488161451b565b840191505092915050565b6000613d5e8261416e565b613d6881856141b9565b9350613d78818560208601614302565b80840191505092915050565b6000613d916015836141a8565b9150613d9c8261452c565b602082019050919050565b6000613db46026836141a8565b9150613dbf82614555565b604082019050919050565b6000613dd76016836141a8565b9150613de2826145a4565b602082019050919050565b6000613dfa600f836141a8565b9150613e05826145cd565b602082019050919050565b6000613e1d6008836141a8565b9150613e28826145f6565b602082019050919050565b6000613e406005836141b9565b9150613e4b8261461f565b600582019050919050565b6000613e63600d836141a8565b9150613e6e82614648565b602082019050919050565b6000613e866020836141a8565b9150613e9182614671565b602082019050919050565b613ea5816142e9565b82525050565b613eb4816142e9565b82525050565b6000613ec68285613d53565b9150613ed28284613d53565b91508190509392505050565b6000613eea8284613d53565b9150613ef582613e33565b915081905092915050565b6000602082019050613f156000830184613c65565b92915050565b6000608082019050613f306000830187613c65565b613f3d6020830186613c65565b613f4a6040830185613eab565b8181036060830152613f5c8184613ce1565b905095945050505050565b60006020820190508181036000830152613f818184613c74565b905092915050565b6000602082019050613f9e6000830184613cd2565b92915050565b60006020820190508181036000830152613fbe8184613d1a565b905092915050565b60006020820190508181036000830152613fdf81613d84565b9050919050565b60006020820190508181036000830152613fff81613da7565b9050919050565b6000602082019050818103600083015261401f81613dca565b9050919050565b6000602082019050818103600083015261403f81613ded565b9050919050565b6000602082019050818103600083015261405f81613e10565b9050919050565b6000602082019050818103600083015261407f81613e56565b9050919050565b6000602082019050818103600083015261409f81613e79565b9050919050565b60006020820190506140bb6000830184613eab565b92915050565b60006140cb6140dc565b90506140d78282614367565b919050565b6000604051905090565b600067ffffffffffffffff821115614101576141006144ce565b5b61410a8261451b565b9050602081019050919050565b600067ffffffffffffffff821115614132576141316144ce565b5b61413b8261451b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141cf826142e9565b91506141da836142e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561420f5761420e614412565b5b828201905092915050565b6000614225826142e9565b9150614230836142e9565b9250826142405761423f614441565b5b828204905092915050565b6000614256826142e9565b9150614261836142e9565b92508282101561427457614273614412565b5b828203905092915050565b600061428a826142c9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614320578082015181840152602081019050614305565b8381111561432f576000848401525b50505050565b6000600282049050600182168061434d57607f821691505b6020821081141561436157614360614470565b5b50919050565b6143708261451b565b810181811067ffffffffffffffff8211171561438f5761438e6144ce565b5b80604052505050565b60006143a3826142e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143d6576143d5614412565b5b600182019050919050565b60006143ec826142e9565b91506143f7836142e9565b92508261440757614406614441565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4172726179206c656e677468206d69736d617463680000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d4158205045522057414c4c4554205245414348454400000000000000000000600082015250565b7f4d455441444154415f4c4f434b45440000000000000000000000000000000000600082015250565b7f534f4c445f4f5554000000000000000000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f53414c455f494e41435449564500000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6146a38161427f565b81146146ae57600080fd5b50565b6146ba81614291565b81146146c557600080fd5b50565b6146d18161429d565b81146146dc57600080fd5b50565b6146e8816142e9565b81146146f357600080fd5b5056fea2646970667358221220ce53d66f5358d40b81f14ed8d40b391fee4be5e1cd93a9f0ca12da976a0d7cdb64736f6c63430008070033
Deployed Bytecode Sourcemap
47704:4815:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27017:372;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49910:138;;;:::i;:::-;;32943:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50294:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51661:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34446:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34009:371;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48464:883;;;:::i;:::-;;26257:312;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35311:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28824:977;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48042:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50591:106;;;:::i;:::-;;35552:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29982:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48312:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47776:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51503:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50499:84;;;:::i;:::-;;47867:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50707:788;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32751:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49355:545;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27453:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22491:103;;;:::i;:::-;;50056:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30200:1174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21840:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51961:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33112:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50412:75;;;:::i;:::-;;34722:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35808:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52086:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48279:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47909:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47823:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50178:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52311:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35080:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48121:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22749:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27017:372;27119:4;27171:25;27156:40;;;:11;:40;;;;:105;;;;27228:33;27213:48;;;:11;:48;;;;27156:105;:172;;;;27293:35;27278:50;;;:11;:50;;;;27156:172;:225;;;;27345:36;27369:11;27345:23;:36::i;:::-;27156:225;27136:245;;27017:372;;;:::o;49910:138::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49984:12:::1;;;;;;;;;;;49983:13;49968:12;;:28;;;;;;;;;;;;;;;;;;50012;50027:12;;;;;;;;;;;50012:28;;;;;;:::i;:::-;;;;;;;;49910:138::o:0;32943:100::-;32997:13;33030:5;33023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32943:100;:::o;50294:106::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50384:8:::1;50368:13;:24;;;;50294:106:::0;:::o;51661:170::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51753:6:::1;;;;;;;;;;;51752:7;51744:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;51811:12;51790:18;:33;;;;;;;;;;;;:::i;:::-;;51661:170:::0;:::o;34446:204::-;34514:7;34539:16;34547:7;34539;:16::i;:::-;34534:64;;34564:34;;;;;;;;;;;;;;34534:64;34618:15;:24;34634:7;34618:24;;;;;;;;;;;;;;;;;;;;;34611:31;;34446:204;;;:::o;34009:371::-;34082:13;34098:24;34114:7;34098:15;:24::i;:::-;34082:40;;34143:5;34137:11;;:2;:11;;;34133:48;;;34157:24;;;;;;;;;;;;;;34133:48;34214:5;34198:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34224:37;34241:5;34248:12;:10;:12::i;:::-;34224:16;:37::i;:::-;34223:38;34198:63;34194:138;;;34285:35;;;;;;;;;;;;;;34194:138;34344:28;34353:2;34357:7;34366:5;34344:8;:28::i;:::-;34071:309;34009:371;;:::o;48464:883::-;48508:12;;;;;;;;;;;48500:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48559:13;48611:1;48576:10;;;;;;;;;;;:20;;;48597:10;48576:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;48559:54;;48624:14;48642:8;:53;;48674:21;;48642:53;;;48653:18;;48642:53;48624:72;;48707:15;48725;:27;48741:10;48725:27;;;;;;;;;;;;;;;;48707:45;;48783:6;48773:7;:16;48765:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48850:1;48840:7;:11;48837:38;;;48865:7;48855:17;;;;;:::i;:::-;;;48837:38;47945:5;48888:13;:11;:13::i;:::-;:25;:63;;;;;47945:5;48933:6;48917:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:34;48888:63;48885:107;;;48976:13;:11;:13::i;:::-;47945:5;48964:25;;;;:::i;:::-;48955:34;;48885:107;47945:5;49052:8;:28;;49067:13;;49052:28;;;49063:1;49052:28;49042:6;49026:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:55;;;;:::i;:::-;:68;;49004:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;49143:29;49153:10;49165:6;49143:9;:29::i;:::-;49223:6;49213:7;:16;;;;:::i;:::-;49183:15;:27;49199:10;49183:27;;;;;;;;;;;;;;;:46;;;;49243:8;49240:100;;;49274:6;49258:13;;:22;49255:83;;;49301:6;49284:13;;:23;;;;;;;:::i;:::-;;;;;;;;49255:83;;;49334:1;49318:13;:17;;;;49255:83;49240:100;48489:858;;;48464:883::o;26257:312::-;26310:7;26535:15;:13;:15::i;:::-;26520:12;;26504:13;;:28;:46;26497:53;;26257:312;:::o;35311:170::-;35445:28;35455:4;35461:2;35465:7;35445:9;:28::i;:::-;35311:170;;;:::o;28824:977::-;28915:7;28935:17;28955:1;28935:21;;28967:18;28988:13;;28967:34;;29012:13;29045:31;;:::i;:::-;29118:9;29130:15;:13;:15::i;:::-;29118:27;;29113:629;29151:10;29147:1;:14;29113:629;;;29199:11;:14;29211:1;29199:14;;;;;;;;;;;29187:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29236:9;:16;;;29232:73;;;29277:8;;29232:73;29344:5;29326:23;;:9;:14;;;:23;;;29323:293;;;29385:4;29374:15;;29413:11;;;;;;;29323:293;;;29479:1;29453:28;;:9;:14;;;:28;;;29450:166;;;29509:8;29506:24;;;29519:11;;;;;;;29506:24;29450:166;;;29590:5;29579:16;;29450:166;29323:293;29637:8;:36;;;;;29671:1;29659:9;:13;29649:5;:24;29637:36;29634:93;;;29705:1;29698:8;;;;;;;;;29634:93;29113:629;29163:3;;;;;29113:629;;;;29770:23;;;;;;;;;;;;;;28824:977;;;;;:::o;48042:50::-;;;;;;;;;;;;;;;;;:::o;50591:106::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50649:7:::1;:5;:7::i;:::-;50641:25;;:48;50667:21;50641:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50591:106::o:0;35552:185::-;35690:39;35707:4;35713:2;35717:7;35690:39;;;;;;;;;;;;:16;:39::i;:::-;35552:185;;;:::o;29982:110::-;30051:7;30078:5;30071:12;;29982:110;;;:::o;48312:28::-;;;;;;;;;;;;;:::o;47776:40::-;;;;:::o;51503:150::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51585:6:::1;;;;;;;;;;;51584:7;51576:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;51638:7;51622:13;:23;;;;;;;;;;;;:::i;:::-;;51503:150:::0;:::o;50499:84::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50567:8:::1;;;;;;;;;;;50566:9;50555:8;;:20;;;;;;;;;;;;;;;;;;50499:84::o:0;47867:35::-;;;;:::o;50707:788::-;50771:16;50825:18;50860:16;50870:5;50860:9;:16::i;:::-;50846:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50825:52;;50892:11;50906:13;;50892:27;;50934:19;50968:25;51013:9;51008:446;51028:3;51024:1;:7;51008:446;;;51057:31;51091:11;:14;51103:1;51091:14;;;;;;;;;;;51057:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51128:9;:16;;;51124:73;;;51169:8;;;51124:73;51245:1;51219:28;;:9;:14;;;:28;;;51215:111;;51292:9;:14;;;51272:34;;51215:111;51369:5;51348:26;;:17;:26;;;51344:95;;;51418:1;51399;51401:13;;;;;;51399:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;51344:95;51038:416;51008:446;51033:3;;;;;;;51008:446;;;;51475:1;51468:8;;;;;;50707:788;;;:::o;32751:125::-;32815:7;32842:21;32855:7;32842:12;:21::i;:::-;:26;;;32835:33;;32751:125;;;:::o;49355:545::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49488:5:::1;;:12;;49467:10;;:17;;:33;49459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49537:18;49574:9:::0;49570:89:::1;49592:5;;:12;;49588:1;:16;49570:89;;;49639:5;;49645:1;49639:8;;;;;;;:::i;:::-;;;;;;;;49625:22;;;;;:::i;:::-;;;49605:3;;;;;:::i;:::-;;;;49570:89;;;;47945:5;49707:10;49691:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:39;;49669:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49791:9;49787:106;49809:10;;:17;;49805:1;:21;49787:106;;;49847:34;49857:10;;49868:1;49857:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49872:5;;49878:1;49872:8;;;;;;;:::i;:::-;;;;;;;;49847:9;:34::i;:::-;49827:3;;;;;:::i;:::-;;;;49787:106;;;;49448:452;49355:545:::0;;;;:::o;27453:206::-;27517:7;27558:1;27541:19;;:5;:19;;;27537:60;;;27569:28;;;;;;;;;;;;;;27537:60;27623:12;:19;27636:5;27623:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27615:36;;27608:43;;27453:206;;;:::o;22491:103::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22556:30:::1;22583:1;22556:18;:30::i;:::-;22491:103::o:0;50056:114::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50158:4:::1;50134:21;:28;;;;50056:114:::0;:::o;30200:1174::-;30259:16;30288:21;30312:16;30322:5;30312:9;:16::i;:::-;30288:40;;30339:18;30360:13;;30339:34;;30384:19;30414:25;30452:21;30490:13;30476:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30452:52;;30547:9;30559:15;:13;:15::i;:::-;30547:27;;30542:790;30580:10;30576:1;:14;30542:790;;;30616:31;30650:11;:14;30662:1;30650:14;;;;;;;;;;;30616:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30689:9;:16;;;30685:73;;;30730:8;;;30685:73;30860:1;30834:28;;:9;:14;;;:28;;;30830:111;;30907:9;:14;;;30887:34;;30830:111;31062:5;31041:26;;:17;:26;;;31037:98;;;31114:1;31092:4;31097:13;;;;;;31092:19;;;;;;;;:::i;:::-;;;;;;;:23;;;;;31037:98;31254:13;31239:11;:28;31235:82;;;31292:5;;;31235:82;30597:735;30542:790;30592:3;;;;;30542:790;;;;31362:4;31355:11;;;;;;;30200:1174;;;:::o;21840:87::-;21886:7;21913:6;;;;;;;;;;;21906:13;;21840:87;:::o;51961:117::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52058:12:::1;52043;:27;;;;;;;;;;;;:::i;:::-;;51961:117:::0;:::o;33112:104::-;33168:13;33201:7;33194:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33112:104;:::o;50412:75::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50475:4:::1;50466:6;;:13;;;;;;;;;;;;;;;;;;50412:75::o:0;34722:287::-;34833:12;:10;:12::i;:::-;34821:24;;:8;:24;;;34817:54;;;34854:17;;;;;;;;;;;;;;34817:54;34929:8;34884:18;:32;34903:12;:10;:12::i;:::-;34884:32;;;;;;;;;;;;;;;:42;34917:8;34884:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34982:8;34953:48;;34968:12;:10;:12::i;:::-;34953:48;;;34992:8;34953:48;;;;;;:::i;:::-;;;;;;;;34722:287;;:::o;35808:369::-;35975:28;35985:4;35991:2;35995:7;35975:9;:28::i;:::-;36018:15;:2;:13;;;:15::i;:::-;:76;;;;;36038:56;36069:4;36075:2;36079:7;36088:5;36038:30;:56::i;:::-;36037:57;36018:76;36014:156;;;36118:40;;;;;;;;;;;;;;36014:156;35808:369;;;;:::o;52086:217::-;52151:13;52180:8;;;;;;;;;;;52176:44;;52199:18;52192:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52176:44;52261:23;52276:7;52261:14;:23::i;:::-;52244:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;52230:65;;52086:217;;;;:::o;48279:26::-;;;;;;;;;;;;;:::o;47909:41::-;47945:5;47909:41;:::o;47823:37::-;;;;:::o;50178:108::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50274:4:::1;50253:18;:25;;;;50178:108:::0;:::o;52311:97::-;52355:13;52388:12;52381:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52311:97;:::o;35080:164::-;35177:4;35201:18;:25;35220:5;35201:25;;;;;;;;;;;;;;;:35;35227:8;35201:35;;;;;;;;;;;;;;;;;;;;;;;;;35194:42;;35080:164;;;;:::o;48121:32::-;;;;;;;;;;;;;:::o;22749:201::-;22071:12;:10;:12::i;:::-;22060:23;;:7;:5;:7::i;:::-;:23;;;22052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22858:1:::1;22838:22;;:8;:22;;;;22830:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22914:28;22933:8;22914:18;:28::i;:::-;22749:201:::0;:::o;20753:157::-;20838:4;20877:25;20862:40;;;:11;:40;;;;20855:47;;20753:157;;;:::o;17854:98::-;17907:7;17934:10;17927:17;;17854:98;:::o;36432:187::-;36489:4;36532:7;36513:15;:13;:15::i;:::-;:26;;:53;;;;;36553:13;;36543:7;:23;36513:53;:98;;;;;36584:11;:20;36596:7;36584:20;;;;;;;;;;;:27;;;;;;;;;;;;36583:28;36513:98;36506:105;;36432:187;;;:::o;44602:196::-;44744:2;44717:15;:24;44733:7;44717:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44782:7;44778:2;44762:28;;44771:5;44762:28;;;;;;;;;;;;44602:196;;;:::o;36627:104::-;36696:27;36706:2;36710:8;36696:27;;;;;;;;;;;;:9;:27::i;:::-;36627:104;;:::o;52416:100::-;52481:7;52507:1;52500:8;;52416:100;:::o;39545:2130::-;39660:35;39698:21;39711:7;39698:12;:21::i;:::-;39660:59;;39758:4;39736:26;;:13;:18;;;:26;;;39732:67;;39771:28;;;;;;;;;;;;;;39732:67;39812:22;39854:4;39838:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39875:36;39892:4;39898:12;:10;:12::i;:::-;39875:16;:36::i;:::-;39838:73;:126;;;;39952:12;:10;:12::i;:::-;39928:36;;:20;39940:7;39928:11;:20::i;:::-;:36;;;39838:126;39812:153;;39983:17;39978:66;;40009:35;;;;;;;;;;;;;;39978:66;40073:1;40059:16;;:2;:16;;;40055:52;;;40084:23;;;;;;;;;;;;;;40055:52;40120:43;40142:4;40148:2;40152:7;40161:1;40120:21;:43::i;:::-;40228:35;40245:1;40249:7;40258:4;40228:8;:35::i;:::-;40589:1;40559:12;:18;40572:4;40559:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40633:1;40605:12;:16;40618:2;40605:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40651:31;40685:11;:20;40697:7;40685:20;;;;;;;;;;;40651:54;;40736:2;40720:8;:13;;;:18;;;;;;;;;;;;;;;;;;40786:15;40753:8;:23;;;:49;;;;;;;;;;;;;;;;;;41054:19;41086:1;41076:7;:11;41054:33;;41102:31;41136:11;:24;41148:11;41136:24;;;;;;;;;;;41102:58;;41204:1;41179:27;;:8;:13;;;;;;;;;;;;:27;;;41175:384;;;41389:13;;41374:11;:28;41370:174;;41443:4;41427:8;:13;;;:20;;;;;;;;;;;;;;;;;;41496:13;:28;;;41470:8;:23;;;:54;;;;;;;;;;;;;;;;;;41370:174;41175:384;40534:1036;;;41606:7;41602:2;41587:27;;41596:4;41587:27;;;;;;;;;;;;41625:42;41646:4;41652:2;41656:7;41665:1;41625:20;:42::i;:::-;39649:2026;;39545:2130;;;:::o;31580:1109::-;31642:21;;:::i;:::-;31676:12;31691:7;31676:22;;31759:4;31740:15;:13;:15::i;:::-;:23;;:47;;;;;31774:13;;31767:4;:20;31740:47;31736:886;;;31808:31;31842:11;:17;31854:4;31842:17;;;;;;;;;;;31808:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31883:9;:16;;;31878:729;;31954:1;31928:28;;:9;:14;;;:28;;;31924:101;;31992:9;31985:16;;;;;;31924:101;32327:261;32334:4;32327:261;;;32367:6;;;;;;;;32412:11;:17;32424:4;32412:17;;;;;;;;;;;32400:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32486:1;32460:28;;:9;:14;;;:28;;;32456:109;;32528:9;32521:16;;;;;;32456:109;32327:261;;;31878:729;31789:833;31736:886;32650:31;;;;;;;;;;;;;;31580:1109;;;;:::o;23110:191::-;23184:16;23203:6;;;;;;;;;;;23184:25;;23229:8;23220:6;;:17;;;;;;;;;;;;;;;;;;23284:8;23253:40;;23274:8;23253:40;;;;;;;;;;;;23173:128;23110:191;:::o;9981:387::-;10041:4;10249:12;10316:7;10304:20;10296:28;;10359:1;10352:4;:8;10345:15;;;9981:387;;;:::o;45290:667::-;45453:4;45490:2;45474:36;;;45511:12;:10;:12::i;:::-;45525:4;45531:7;45540:5;45474:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45470:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45725:1;45708:6;:13;:18;45704:235;;;45754:40;;;;;;;;;;;;;;45704:235;45897:6;45891:13;45882:6;45878:2;45874:15;45867:38;45470:480;45603:45;;;45593:55;;;:6;:55;;;;45586:62;;;45290:667;;;;;;:::o;33287:318::-;33360:13;33391:16;33399:7;33391;:16::i;:::-;33386:59;;33416:29;;;;;;;;;;;;;;33386:59;33458:21;33482:10;:8;:10::i;:::-;33458:34;;33535:1;33516:7;33510:21;:26;;:87;;;;;;;;;;;;;;;;;33563:7;33572:18;:7;:16;:18::i;:::-;33546:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33510:87;33503:94;;;33287:318;;;:::o;37094:163::-;37217:32;37223:2;37227:8;37237:5;37244:4;37217:5;:32::i;:::-;37094:163;;;:::o;46605:159::-;;;;;:::o;47423:158::-;;;;;:::o;51839:114::-;51899:13;51932;51925:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51839:114;:::o;18296:723::-;18352:13;18582:1;18573:5;:10;18569:53;;;18600:10;;;;;;;;;;;;;;;;;;;;;18569:53;18632:12;18647:5;18632:20;;18663:14;18688:78;18703:1;18695:4;:9;18688:78;;18721:8;;;;;:::i;:::-;;;;18752:2;18744:10;;;;;:::i;:::-;;;18688:78;;;18776:19;18808:6;18798:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18776:39;;18826:154;18842:1;18833:5;:10;18826:154;;18870:1;18860:11;;;;;:::i;:::-;;;18937:2;18929:5;:10;;;;:::i;:::-;18916:2;:24;;;;:::i;:::-;18903:39;;18886:6;18893;18886:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18966:2;18957:11;;;;;:::i;:::-;;;18826:154;;;19004:6;18990:21;;;;;18296:723;;;;:::o;37516:1775::-;37655:20;37678:13;;37655:36;;37720:1;37706:16;;:2;:16;;;37702:48;;;37731:19;;;;;;;;;;;;;;37702:48;37777:1;37765:8;:13;37761:44;;;37787:18;;;;;;;;;;;;;;37761:44;37818:61;37848:1;37852:2;37856:12;37870:8;37818:21;:61::i;:::-;38191:8;38156:12;:16;38169:2;38156:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38255:8;38215:12;:16;38228:2;38215:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38314:2;38281:11;:25;38293:12;38281:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38381:15;38331:11;:25;38343:12;38331:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38414:20;38437:12;38414:35;;38464:11;38493:8;38478:12;:23;38464:37;;38522:4;:23;;;;;38530:15;:2;:13;;;:15::i;:::-;38522:23;38518:641;;;38566:314;38622:12;38618:2;38597:38;;38614:1;38597:38;;;;;;;;;;;;38663:69;38702:1;38706:2;38710:14;;;;;;38726:5;38663:30;:69::i;:::-;38658:174;;38768:40;;;;;;;;;;;;;;38658:174;38875:3;38859:12;:19;;38566:314;;38961:12;38944:13;;:29;38940:43;;38975:8;;;38940:43;38518:641;;;39024:120;39080:14;;;;;;39076:2;39055:40;;39072:1;39055:40;;;;;;;;;;;;39139:3;39123:12;:19;;39024:120;;38518:641;39189:12;39173:13;:28;;;;38131:1082;;39223:60;39252:1;39256:2;39260:12;39274:8;39223:20;:60::i;:::-;37644:1647;37516: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;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:143::-;3516:5;3547:6;3541:13;3532:22;;3563:33;3590:5;3563:33;:::i;:::-;3459:143;;;;:::o;3608:329::-;3667:6;3716:2;3704:9;3695:7;3691:23;3687:32;3684:119;;;3722:79;;:::i;:::-;3684:119;3842:1;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3813:117;3608:329;;;;:::o;3943:474::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4165:117;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3943:474;;;;;:::o;4423:619::-;4500:6;4508;4516;4565:2;4553:9;4544:7;4540:23;4536:32;4533:119;;;4571:79;;:::i;:::-;4533:119;4691:1;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;:::i;:::-;4706:63;;4662:117;4818:2;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4789:118;4946:2;4972:53;5017:7;5008:6;4997:9;4993:22;4972:53;:::i;:::-;4962:63;;4917:118;4423:619;;;;;:::o;5048:943::-;5143:6;5151;5159;5167;5216:3;5204:9;5195:7;5191:23;5187:33;5184:120;;;5223:79;;:::i;:::-;5184:120;5343:1;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5314:117;5470:2;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5441:118;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5754:2;5743:9;5739:18;5726:32;5785:18;5777:6;5774:30;5771:117;;;5807:79;;:::i;:::-;5771:117;5912:62;5966:7;5957:6;5946:9;5942:22;5912:62;:::i;:::-;5902:72;;5697:287;5048:943;;;;;;;:::o;5997:468::-;6062:6;6070;6119:2;6107:9;6098:7;6094:23;6090:32;6087:119;;;6125:79;;:::i;:::-;6087:119;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6372:2;6398:50;6440:7;6431:6;6420:9;6416:22;6398:50;:::i;:::-;6388:60;;6343:115;5997:468;;;;;:::o;6471:474::-;6539:6;6547;6596:2;6584:9;6575:7;6571:23;6567:32;6564:119;;;6602:79;;:::i;:::-;6564:119;6722:1;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6693:117;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6471:474;;;;;:::o;6951:934::-;7073:6;7081;7089;7097;7146:2;7134:9;7125:7;7121:23;7117:32;7114:119;;;7152:79;;:::i;:::-;7114:119;7300:1;7289:9;7285:17;7272:31;7330:18;7322:6;7319:30;7316:117;;;7352:79;;:::i;:::-;7316:117;7465:80;7537:7;7528:6;7517:9;7513:22;7465:80;:::i;:::-;7447:98;;;;7243:312;7622:2;7611:9;7607:18;7594:32;7653:18;7645:6;7642:30;7639:117;;;7675:79;;:::i;:::-;7639:117;7788:80;7860:7;7851:6;7840:9;7836:22;7788:80;:::i;:::-;7770:98;;;;7565:313;6951:934;;;;;;;:::o;7891:327::-;7949:6;7998:2;7986:9;7977:7;7973:23;7969:32;7966:119;;;8004:79;;:::i;:::-;7966:119;8124:1;8149:52;8193:7;8184:6;8173:9;8169:22;8149:52;:::i;:::-;8139:62;;8095:116;7891:327;;;;:::o;8224:349::-;8293:6;8342:2;8330:9;8321:7;8317:23;8313:32;8310:119;;;8348:79;;:::i;:::-;8310:119;8468:1;8493:63;8548:7;8539:6;8528:9;8524:22;8493:63;:::i;:::-;8483:73;;8439:127;8224:349;;;;:::o;8579:509::-;8648:6;8697:2;8685:9;8676:7;8672:23;8668:32;8665:119;;;8703:79;;:::i;:::-;8665:119;8851:1;8840:9;8836:17;8823:31;8881:18;8873:6;8870:30;8867:117;;;8903:79;;:::i;:::-;8867:117;9008:63;9063:7;9054:6;9043:9;9039:22;9008:63;:::i;:::-;8998:73;;8794:287;8579:509;;;;:::o;9094:329::-;9153:6;9202:2;9190:9;9181:7;9177:23;9173:32;9170:119;;;9208:79;;:::i;:::-;9170:119;9328:1;9353:53;9398:7;9389:6;9378:9;9374:22;9353:53;:::i;:::-;9343:63;;9299:117;9094:329;;;;:::o;9429:351::-;9499:6;9548:2;9536:9;9527:7;9523:23;9519:32;9516:119;;;9554:79;;:::i;:::-;9516:119;9674:1;9699:64;9755:7;9746:6;9735:9;9731:22;9699:64;:::i;:::-;9689:74;;9645:128;9429:351;;;;:::o;9786:179::-;9855:10;9876:46;9918:3;9910:6;9876:46;:::i;:::-;9954:4;9949:3;9945:14;9931:28;;9786:179;;;;:::o;9971:118::-;10058:24;10076:5;10058:24;:::i;:::-;10053:3;10046:37;9971:118;;:::o;10125:732::-;10244:3;10273:54;10321:5;10273:54;:::i;:::-;10343:86;10422:6;10417:3;10343:86;:::i;:::-;10336:93;;10453:56;10503:5;10453:56;:::i;:::-;10532:7;10563:1;10548:284;10573:6;10570:1;10567:13;10548:284;;;10649:6;10643:13;10676:63;10735:3;10720:13;10676:63;:::i;:::-;10669:70;;10762:60;10815:6;10762:60;:::i;:::-;10752:70;;10608:224;10595:1;10592;10588:9;10583:14;;10548:284;;;10552:14;10848:3;10841:10;;10249:608;;;10125:732;;;;:::o;10863:109::-;10944:21;10959:5;10944:21;:::i;:::-;10939:3;10932:34;10863:109;;:::o;10978:360::-;11064:3;11092:38;11124:5;11092:38;:::i;:::-;11146:70;11209:6;11204:3;11146:70;:::i;:::-;11139:77;;11225:52;11270:6;11265:3;11258:4;11251:5;11247:16;11225:52;:::i;:::-;11302:29;11324:6;11302:29;:::i;:::-;11297:3;11293:39;11286:46;;11068:270;10978:360;;;;:::o;11344:364::-;11432:3;11460:39;11493:5;11460:39;:::i;:::-;11515:71;11579:6;11574:3;11515:71;:::i;:::-;11508:78;;11595:52;11640:6;11635:3;11628:4;11621:5;11617:16;11595:52;:::i;:::-;11672:29;11694:6;11672:29;:::i;:::-;11667:3;11663:39;11656:46;;11436:272;11344:364;;;;:::o;11714:377::-;11820:3;11848:39;11881:5;11848:39;:::i;:::-;11903:89;11985:6;11980:3;11903:89;:::i;:::-;11896:96;;12001:52;12046:6;12041:3;12034:4;12027:5;12023:16;12001:52;:::i;:::-;12078:6;12073:3;12069:16;12062:23;;11824:267;11714:377;;;;:::o;12097:366::-;12239:3;12260:67;12324:2;12319:3;12260:67;:::i;:::-;12253:74;;12336:93;12425:3;12336:93;:::i;:::-;12454:2;12449:3;12445:12;12438:19;;12097:366;;;:::o;12469:::-;12611:3;12632:67;12696:2;12691:3;12632:67;:::i;:::-;12625:74;;12708:93;12797:3;12708:93;:::i;:::-;12826:2;12821:3;12817:12;12810:19;;12469:366;;;:::o;12841:::-;12983:3;13004:67;13068:2;13063:3;13004:67;:::i;:::-;12997:74;;13080:93;13169:3;13080:93;:::i;:::-;13198:2;13193:3;13189:12;13182:19;;12841:366;;;:::o;13213:::-;13355:3;13376:67;13440:2;13435:3;13376:67;:::i;:::-;13369:74;;13452:93;13541:3;13452:93;:::i;:::-;13570:2;13565:3;13561:12;13554:19;;13213:366;;;:::o;13585:365::-;13727:3;13748:66;13812:1;13807:3;13748:66;:::i;:::-;13741:73;;13823:93;13912:3;13823:93;:::i;:::-;13941:2;13936:3;13932:12;13925:19;;13585:365;;;:::o;13956:400::-;14116:3;14137:84;14219:1;14214:3;14137:84;:::i;:::-;14130:91;;14230:93;14319:3;14230:93;:::i;:::-;14348:1;14343:3;14339:11;14332:18;;13956:400;;;:::o;14362:366::-;14504:3;14525:67;14589:2;14584:3;14525:67;:::i;:::-;14518:74;;14601:93;14690:3;14601:93;:::i;:::-;14719:2;14714:3;14710:12;14703:19;;14362:366;;;:::o;14734:::-;14876:3;14897:67;14961:2;14956:3;14897:67;:::i;:::-;14890:74;;14973:93;15062:3;14973:93;:::i;:::-;15091:2;15086:3;15082:12;15075:19;;14734:366;;;:::o;15106:108::-;15183:24;15201:5;15183:24;:::i;:::-;15178:3;15171:37;15106:108;;:::o;15220:118::-;15307:24;15325:5;15307:24;:::i;:::-;15302:3;15295:37;15220:118;;:::o;15344:435::-;15524:3;15546:95;15637:3;15628:6;15546:95;:::i;:::-;15539:102;;15658:95;15749:3;15740:6;15658:95;:::i;:::-;15651:102;;15770:3;15763:10;;15344:435;;;;;:::o;15785:541::-;16018:3;16040:95;16131:3;16122:6;16040:95;:::i;:::-;16033:102;;16152:148;16296:3;16152:148;:::i;:::-;16145:155;;16317:3;16310:10;;15785:541;;;;:::o;16332:222::-;16425:4;16463:2;16452:9;16448:18;16440:26;;16476:71;16544:1;16533:9;16529:17;16520:6;16476:71;:::i;:::-;16332:222;;;;:::o;16560:640::-;16755:4;16793:3;16782:9;16778:19;16770:27;;16807:71;16875:1;16864:9;16860:17;16851:6;16807:71;:::i;:::-;16888:72;16956:2;16945:9;16941:18;16932:6;16888:72;:::i;:::-;16970;17038:2;17027:9;17023:18;17014:6;16970:72;:::i;:::-;17089:9;17083:4;17079:20;17074:2;17063:9;17059:18;17052:48;17117:76;17188:4;17179:6;17117:76;:::i;:::-;17109:84;;16560:640;;;;;;;:::o;17206:373::-;17349:4;17387:2;17376:9;17372:18;17364:26;;17436:9;17430:4;17426:20;17422:1;17411:9;17407:17;17400:47;17464:108;17567:4;17558:6;17464:108;:::i;:::-;17456:116;;17206:373;;;;:::o;17585:210::-;17672:4;17710:2;17699:9;17695:18;17687:26;;17723:65;17785:1;17774:9;17770:17;17761:6;17723:65;:::i;:::-;17585:210;;;;:::o;17801:313::-;17914:4;17952:2;17941:9;17937:18;17929:26;;18001:9;17995:4;17991:20;17987:1;17976:9;17972:17;17965:47;18029:78;18102:4;18093:6;18029:78;:::i;:::-;18021:86;;17801:313;;;;:::o;18120:419::-;18286:4;18324:2;18313:9;18309:18;18301:26;;18373:9;18367:4;18363:20;18359:1;18348:9;18344:17;18337:47;18401:131;18527:4;18401:131;:::i;:::-;18393:139;;18120:419;;;:::o;18545:::-;18711:4;18749:2;18738:9;18734:18;18726:26;;18798:9;18792:4;18788:20;18784:1;18773:9;18769:17;18762:47;18826:131;18952:4;18826:131;:::i;:::-;18818:139;;18545:419;;;:::o;18970:::-;19136:4;19174:2;19163:9;19159:18;19151:26;;19223:9;19217:4;19213:20;19209:1;19198:9;19194:17;19187:47;19251:131;19377:4;19251:131;:::i;:::-;19243:139;;18970:419;;;:::o;19395:::-;19561:4;19599:2;19588:9;19584:18;19576:26;;19648:9;19642:4;19638:20;19634:1;19623:9;19619:17;19612:47;19676:131;19802:4;19676:131;:::i;:::-;19668:139;;19395:419;;;:::o;19820:::-;19986:4;20024:2;20013:9;20009:18;20001:26;;20073:9;20067:4;20063:20;20059:1;20048:9;20044:17;20037:47;20101:131;20227:4;20101:131;:::i;:::-;20093:139;;19820:419;;;:::o;20245:::-;20411:4;20449:2;20438:9;20434:18;20426:26;;20498:9;20492:4;20488:20;20484:1;20473:9;20469:17;20462:47;20526:131;20652:4;20526:131;:::i;:::-;20518:139;;20245:419;;;:::o;20670:::-;20836:4;20874:2;20863:9;20859:18;20851:26;;20923:9;20917:4;20913:20;20909:1;20898:9;20894:17;20887:47;20951:131;21077:4;20951:131;:::i;:::-;20943:139;;20670:419;;;:::o;21095:222::-;21188:4;21226:2;21215:9;21211:18;21203:26;;21239:71;21307:1;21296:9;21292:17;21283:6;21239:71;:::i;:::-;21095:222;;;;:::o;21323:129::-;21357:6;21384:20;;:::i;:::-;21374:30;;21413:33;21441:4;21433:6;21413:33;:::i;:::-;21323:129;;;:::o;21458:75::-;21491:6;21524:2;21518:9;21508:19;;21458:75;:::o;21539:307::-;21600:4;21690:18;21682:6;21679:30;21676:56;;;21712:18;;:::i;:::-;21676:56;21750:29;21772:6;21750:29;:::i;:::-;21742:37;;21834:4;21828;21824:15;21816:23;;21539:307;;;:::o;21852:308::-;21914:4;22004:18;21996:6;21993:30;21990:56;;;22026:18;;:::i;:::-;21990:56;22064:29;22086:6;22064:29;:::i;:::-;22056:37;;22148:4;22142;22138:15;22130:23;;21852:308;;;:::o;22166:132::-;22233:4;22256:3;22248:11;;22286:4;22281:3;22277:14;22269:22;;22166:132;;;:::o;22304:114::-;22371:6;22405:5;22399:12;22389:22;;22304:114;;;:::o;22424:98::-;22475:6;22509:5;22503:12;22493:22;;22424:98;;;:::o;22528:99::-;22580:6;22614:5;22608:12;22598:22;;22528:99;;;:::o;22633:113::-;22703:4;22735;22730:3;22726:14;22718:22;;22633:113;;;:::o;22752:184::-;22851:11;22885:6;22880:3;22873:19;22925:4;22920:3;22916:14;22901:29;;22752:184;;;;:::o;22942:168::-;23025:11;23059:6;23054:3;23047:19;23099:4;23094:3;23090:14;23075:29;;22942:168;;;;:::o;23116:169::-;23200:11;23234:6;23229:3;23222:19;23274:4;23269:3;23265:14;23250:29;;23116:169;;;;:::o;23291:148::-;23393:11;23430:3;23415:18;;23291:148;;;;:::o;23445:305::-;23485:3;23504:20;23522:1;23504:20;:::i;:::-;23499:25;;23538:20;23556:1;23538:20;:::i;:::-;23533:25;;23692:1;23624:66;23620:74;23617:1;23614:81;23611:107;;;23698:18;;:::i;:::-;23611:107;23742:1;23739;23735:9;23728:16;;23445:305;;;;:::o;23756:185::-;23796:1;23813:20;23831:1;23813:20;:::i;:::-;23808:25;;23847:20;23865:1;23847:20;:::i;:::-;23842:25;;23886:1;23876:35;;23891:18;;:::i;:::-;23876:35;23933:1;23930;23926:9;23921:14;;23756:185;;;;:::o;23947:191::-;23987:4;24007:20;24025:1;24007:20;:::i;:::-;24002:25;;24041:20;24059:1;24041:20;:::i;:::-;24036:25;;24080:1;24077;24074:8;24071:34;;;24085:18;;:::i;:::-;24071:34;24130:1;24127;24123:9;24115:17;;23947:191;;;;:::o;24144:96::-;24181:7;24210:24;24228:5;24210:24;:::i;:::-;24199:35;;24144:96;;;:::o;24246:90::-;24280:7;24323:5;24316:13;24309:21;24298:32;;24246:90;;;:::o;24342:149::-;24378:7;24418:66;24411:5;24407:78;24396:89;;24342:149;;;:::o;24497:126::-;24534:7;24574:42;24567:5;24563:54;24552:65;;24497:126;;;:::o;24629:77::-;24666:7;24695:5;24684:16;;24629:77;;;:::o;24712:154::-;24796:6;24791:3;24786;24773:30;24858:1;24849:6;24844:3;24840:16;24833:27;24712:154;;;:::o;24872:307::-;24940:1;24950:113;24964:6;24961:1;24958:13;24950:113;;;25049:1;25044:3;25040:11;25034:18;25030:1;25025:3;25021:11;25014:39;24986:2;24983:1;24979:10;24974:15;;24950:113;;;25081:6;25078:1;25075:13;25072:101;;;25161:1;25152:6;25147:3;25143:16;25136:27;25072:101;24921:258;24872:307;;;:::o;25185:320::-;25229:6;25266:1;25260:4;25256:12;25246:22;;25313:1;25307:4;25303:12;25334:18;25324:81;;25390:4;25382:6;25378:17;25368:27;;25324:81;25452:2;25444:6;25441:14;25421:18;25418:38;25415:84;;;25471:18;;:::i;:::-;25415:84;25236:269;25185:320;;;:::o;25511:281::-;25594:27;25616:4;25594:27;:::i;:::-;25586:6;25582:40;25724:6;25712:10;25709:22;25688:18;25676:10;25673:34;25670:62;25667:88;;;25735:18;;:::i;:::-;25667:88;25775:10;25771:2;25764:22;25554:238;25511:281;;:::o;25798:233::-;25837:3;25860:24;25878:5;25860:24;:::i;:::-;25851:33;;25906:66;25899:5;25896:77;25893:103;;;25976:18;;:::i;:::-;25893:103;26023:1;26016:5;26012:13;26005:20;;25798:233;;;:::o;26037:176::-;26069:1;26086:20;26104:1;26086:20;:::i;:::-;26081:25;;26120:20;26138:1;26120:20;:::i;:::-;26115:25;;26159:1;26149:35;;26164:18;;:::i;:::-;26149:35;26205:1;26202;26198:9;26193:14;;26037:176;;;;:::o;26219:180::-;26267:77;26264:1;26257:88;26364:4;26361:1;26354:15;26388:4;26385:1;26378:15;26405:180;26453:77;26450:1;26443:88;26550:4;26547:1;26540:15;26574:4;26571:1;26564:15;26591:180;26639:77;26636:1;26629:88;26736:4;26733:1;26726:15;26760:4;26757:1;26750:15;26777:180;26825:77;26822:1;26815:88;26922:4;26919:1;26912:15;26946:4;26943:1;26936:15;26963:180;27011:77;27008:1;27001:88;27108:4;27105:1;27098:15;27132:4;27129:1;27122:15;27149:117;27258:1;27255;27248:12;27272:117;27381:1;27378;27371:12;27395:117;27504:1;27501;27494:12;27518:117;27627:1;27624;27617:12;27641:117;27750:1;27747;27740:12;27764:117;27873:1;27870;27863:12;27887:102;27928:6;27979:2;27975:7;27970:2;27963:5;27959:14;27955:28;27945:38;;27887:102;;;:::o;27995:171::-;28135:23;28131:1;28123:6;28119:14;28112:47;27995:171;:::o;28172:225::-;28312:34;28308:1;28300:6;28296:14;28289:58;28381:8;28376:2;28368:6;28364:15;28357:33;28172:225;:::o;28403:172::-;28543:24;28539:1;28531:6;28527:14;28520:48;28403:172;:::o;28581:165::-;28721:17;28717:1;28709:6;28705:14;28698:41;28581:165;:::o;28752:158::-;28892:10;28888:1;28880:6;28876:14;28869:34;28752:158;:::o;28916:155::-;29056:7;29052:1;29044:6;29040:14;29033:31;28916:155;:::o;29077:163::-;29217:15;29213:1;29205:6;29201:14;29194:39;29077:163;:::o;29246:182::-;29386:34;29382:1;29374:6;29370:14;29363:58;29246:182;:::o;29434:122::-;29507:24;29525:5;29507:24;:::i;:::-;29500:5;29497:35;29487:63;;29546:1;29543;29536:12;29487:63;29434:122;:::o;29562:116::-;29632:21;29647:5;29632:21;:::i;:::-;29625:5;29622:32;29612:60;;29668:1;29665;29658:12;29612:60;29562:116;:::o;29684:120::-;29756:23;29773:5;29756:23;:::i;:::-;29749:5;29746:34;29736:62;;29794:1;29791;29784:12;29736:62;29684:120;:::o;29810:122::-;29883:24;29901:5;29883:24;:::i;:::-;29876:5;29873:35;29863:63;;29922:1;29919;29912:12;29863:63;29810:122;:::o
Swarm Source
ipfs://ce53d66f5358d40b81f14ed8d40b391fee4be5e1cd93a9f0ca12da976a0d7cdb
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.