ERC-721
Overview
Max Total Supply
848 PepeKnights
Holders
278
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
0 PepeKnightsLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PepeKnights
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-10-20 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly 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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721URIStorage: URI query for nonexistent token" ); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require( _exists(tokenId), "ERC721URIStorage: URI set of nonexistent token" ); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved" ); _burn(tokenId); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } } pragma solidity ^0.8.7; pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } interface IERC20 { function transfer(address _to, uint256 _amount) external returns (bool); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); } // File contracts/HamsterHeroes.sol pragma solidity ^0.8.0; contract PepeKnights is ERC721, ERC721Enumerable, ERC721URIStorage, IERC2981, Pausable, Ownable, ERC721Burnable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint256 public constant maxSupply = 1000; uint256 public maxBuy = 5; uint256 public price = 100 ether; string public baseURI; address private royaltyAddress=0xfd173533D94e680b1183B46eFA078b459e03BcBb; uint256 public royalty = 500; constructor() ERC721("Pepe Knights", "PepeKnights") { _pause(); } function _baseURI() internal view override returns (string memory) { return baseURI; } function mintKnights(uint256 amount) public payable { require(msg.value >= price * amount, "You didn't pay enough!"); require( amount <= maxBuy, "Can't buy that much in one transaction" ); for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); } } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function knightsOwned(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function royaltyInfo(uint256, uint256 _salePrice) external view override returns (address receiver, uint256 royaltyAmount) { return (royaltyAddress, (_salePrice * royalty) / 10000); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function setMaxBuy(uint256 newMaxBuy) public onlyOwner { maxBuy = newMaxBuy; } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function setURI(uint256 tokenId, string memory uri) external onlyOwner { _setTokenURI(tokenId, uri); } function setRoyalty(uint16 _royalty) external onlyOwner { require(_royalty >= 0, "Royalty must be greater than or equal to 0%"); require( _royalty <= 750, "Royalty must be greater than or equal to 7.5%" ); royalty = _royalty; } function setRoyaltyAddress(address _royaltyAddress) external onlyOwner { royaltyAddress = _royaltyAddress; } function internalMint(address to) internal { require(totalSupply() < maxSupply, "PepeKnights have sold out!"); _safeMint(to, _tokenIdCounter.current()); _tokenIdCounter.increment(); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function withdraw() public onlyOwner{ uint256 amount=(address(this).balance); payable(royaltyAddress).transfer(amount*7/10); payable(msg.sender).transfer(amount*3/10); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"knightsOwned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintKnights","outputs":[],"stateMutability":"payable","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_royalty","type":"uint16"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyAddress","type":"address"}],"name":"setRoyaltyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526005600d5568056bc75e2d63100000600e5573fd173533d94e680b1183b46efa078b459e03bcbb601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f46011553480156200007e57600080fd5b506040518060400160405280600c81526020017f50657065204b6e696768747300000000000000000000000000000000000000008152506040518060400160405280600b81526020017f506570654b6e6967687473000000000000000000000000000000000000000000815250816000908051906020019062000103929190620002d8565b5080600190805190602001906200011c929190620002d8565b5050506000600b60006101000a81548160ff02191690831515021790555060006200014c6200020160201b60201c565b905080600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001fb6200020960201b60201c565b620004d2565b600033905090565b62000219620002c160201b60201c565b156200025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025390620003dd565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620002a86200020160201b60201c565b604051620002b79190620003c0565b60405180910390a1565b6000600b60009054906101000a900460ff16905090565b828054620002e69062000444565b90600052602060002090601f0160209004810192826200030a576000855562000356565b82601f106200032557805160ff191683800117855562000356565b8280016001018555821562000356579182015b828111156200035557825182559160200191906001019062000338565b5b50905062000365919062000369565b5090565b5b80821115620003845760008160009055506001016200036a565b5090565b620003938162000410565b82525050565b6000620003a8601083620003ff565b9150620003b582620004a9565b602082019050919050565b6000602082019050620003d7600083018462000388565b92915050565b60006020820190508181036000830152620003f88162000399565b9050919050565b600082825260208201905092915050565b60006200041d8262000424565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200045d57607f821691505b602082108114156200047457620004736200047a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b61517b80620004e26000396000f3fe6080604052600436106102295760003560e01c80636352211e1161012357806395d89b41116100ab578063d5abeb011161006f578063d5abeb01146107dc578063e985e9c514610807578063f2fde38b14610844578063f3af77281461086d578063f53bc835146108aa57610230565b806395d89b41146106f7578063a035b1fe14610722578063a22cb4651461074d578063b88d4fde14610776578063c87b56dd1461079f57610230565b8063715018a6116100f2578063715018a61461064c5780638456cb5914610663578063862440e21461067a5780638da5cb5b146106a357806391b7f5ed146106ce57610230565b80636352211e1461057c5780636c0360eb146105b957806370a08231146105e457806370db69d61461062157610230565b80632f745c59116101b157806342842e0e1161017557806342842e0e1461049957806342966c68146104c25780634f6ccce7146104eb57806355f804b3146105285780635c975abb1461055157610230565b80632f745c59146103e95780632fd94ecb1461042657806336e79a5a146104425780633ccfd60b1461046b5780633f4ba83a1461048257610230565b8063095ea7b3116101f8578063095ea7b31461030357806318160ddd1461032c57806323b872dd1461035757806329ee566c146103805780632a55205a146103ab57610230565b806301ffc9a71461023557806306d254da1461027257806306fdde031461029b578063081812fc146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906138f6565b6108d3565b604051610269919061408e565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613733565b61094d565b005b3480156102a757600080fd5b506102b0610a0d565b6040516102bd91906140a9565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906139c6565b610a9f565b6040516102fa9190613fdc565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906138b6565b610b24565b005b34801561033857600080fd5b50610341610c3c565b60405161034e919061444b565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906137a0565b610c49565b005b34801561038c57600080fd5b50610395610ca9565b6040516103a2919061444b565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613a4f565b610caf565b6040516103e0929190614043565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906138b6565b610cfb565b60405161041d919061444b565b60405180910390f35b610440600480360381019061043b91906139c6565b610da0565b005b34801561044e57600080fd5b5061046960048036038101906104649190613999565b610e60565b005b34801561047757600080fd5b50610480610f7b565b005b34801561048e57600080fd5b506104976110df565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906137a0565b611165565b005b3480156104ce57600080fd5b506104e960048036038101906104e491906139c6565b611185565b005b3480156104f757600080fd5b50610512600480360381019061050d91906139c6565b6111e1565b60405161051f919061444b565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613950565b611252565b005b34801561055d57600080fd5b506105666112e8565b604051610573919061408e565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906139c6565b6112ff565b6040516105b09190613fdc565b60405180910390f35b3480156105c557600080fd5b506105ce6113b1565b6040516105db91906140a9565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613733565b61143f565b604051610618919061444b565b60405180910390f35b34801561062d57600080fd5b506106366114f7565b604051610643919061444b565b60405180910390f35b34801561065857600080fd5b506106616114fd565b005b34801561066f57600080fd5b5061067861163a565b005b34801561068657600080fd5b506106a1600480360381019061069c91906139f3565b6116c0565b005b3480156106af57600080fd5b506106b861174a565b6040516106c59190613fdc565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906139c6565b611774565b005b34801561070357600080fd5b5061070c6117fa565b60405161071991906140a9565b60405180910390f35b34801561072e57600080fd5b5061073761188c565b604051610744919061444b565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613876565b611892565b005b34801561078257600080fd5b5061079d600480360381019061079891906137f3565b611a13565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906139c6565b611a75565b6040516107d391906140a9565b60405180910390f35b3480156107e857600080fd5b506107f1611a87565b6040516107fe919061444b565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613760565b611a8d565b60405161083b919061408e565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613733565b611b21565b005b34801561087957600080fd5b50610894600480360381019061088f9190613733565b611ccd565b6040516108a1919061406c565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc91906139c6565b611dd7565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610946575061094582611e5d565b5b9050919050565b610955611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661097361174a565b73ffffffffffffffffffffffffffffffffffffffff16146109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c09061432b565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610a1c90614742565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890614742565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050905090565b6000610aaa82611edf565b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae0906142eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2f826112ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b979061438b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbf611ed7565b73ffffffffffffffffffffffffffffffffffffffff161480610bee5750610bed81610be8611ed7565b611a8d565b5b610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c249061420b565b60405180910390fd5b610c378383611f4b565b505050565b6000600880549050905090565b610c5a610c54611ed7565b82612004565b610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c90906143cb565b60405180910390fd5b610ca48383836120e2565b505050565b60115481565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271060115485610ce691906145f0565b610cf091906145bf565b915091509250929050565b6000610d068361143f565b8210610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906140eb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b80600e54610dae91906145f0565b341015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906143eb565b60405180910390fd5b600d54811115610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c906141ab565b60405180910390fd5b60005b81811015610e5c57610e493361233e565b8080610e54906147a5565b915050610e38565b5050565b610e68611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610e8661174a565b73ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed39061432b565b60405180910390fd5b60008161ffff161015610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b9061422b565b60405180910390fd5b6102ee8161ffff161115610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f64906143ab565b60405180910390fd5b8061ffff1660118190555050565b610f83611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610fa161174a565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee9061432b565b60405180910390fd5b6000479050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a60078461104791906145f0565b61105191906145bf565b9081150290604051600060405180830381858888f1935050505015801561107c573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc600a6003846110a691906145f0565b6110b091906145bf565b9081150290604051600060405180830381858888f193505050501580156110db573d6000803e3d6000fd5b5050565b6110e7611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661110561174a565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111529061432b565b60405180910390fd5b6111636123a9565b565b61118083838360405180602001604052806000815250611a13565b505050565b611196611190611ed7565b82612004565b6111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc9061442b565b60405180910390fd5b6111de8161244b565b50565b60006111eb610c3c565b821061122c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112239061440b565b60405180910390fd5b600882815481106112405761123f6148db565b5b90600052602060002001549050919050565b61125a611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661127861174a565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c59061432b565b60405180910390fd5b80600f90805190602001906112e49291906134f2565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f9061426b565b60405180910390fd5b80915050919050565b600f80546113be90614742565b80601f01602080910402602001604051908101604052809291908181526020018280546113ea90614742565b80156114375780601f1061140c57610100808354040283529160200191611437565b820191906000526020600020905b81548152906001019060200180831161141a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a79061424b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611505611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661152361174a565b73ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061432b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611642611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661166061174a565b73ffffffffffffffffffffffffffffffffffffffff16146116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad9061432b565b60405180910390fd5b6116be612457565b565b6116c8611ed7565b73ffffffffffffffffffffffffffffffffffffffff166116e661174a565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117339061432b565b60405180910390fd5b61174682826124fa565b5050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61177c611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661179a61174a565b73ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061432b565b60405180910390fd5b80600e8190555050565b60606001805461180990614742565b80601f016020809104026020016040519081016040528092919081815260200182805461183590614742565b80156118825780601f1061185757610100808354040283529160200191611882565b820191906000526020600020905b81548152906001019060200180831161186557829003601f168201915b5050505050905090565b600e5481565b61189a611ed7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061418b565b60405180910390fd5b8060056000611915611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119c2611ed7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a07919061408e565b60405180910390a35050565b611a24611a1e611ed7565b83612004565b611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906143cb565b60405180910390fd5b611a6f8484848461256e565b50505050565b6060611a80826125ca565b9050919050565b6103e881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b29611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611b4761174a565b73ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b949061432b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c049061412b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000611cda8361143f565b90506000811415611d3757600067ffffffffffffffff811115611d0057611cff61490a565b5b604051908082528060200260200182016040528015611d2e5781602001602082028036833780820191505090505b50915050611dd2565b60008167ffffffffffffffff811115611d5357611d5261490a565b5b604051908082528060200260200182016040528015611d815781602001602082028036833780820191505090505b50905060005b82811015611dcb57611d998582610cfb565b828281518110611dac57611dab6148db565b5b6020026020010181815250508080611dc3906147a5565b915050611d87565b8193505050505b919050565b611ddf611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611dfd61174a565b73ffffffffffffffffffffffffffffffffffffffff1614611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a9061432b565b60405180910390fd5b80600d8190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ed05750611ecf8261271c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fbe836112ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200f82611edf565b61204e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612045906141cb565b60405180910390fd5b6000612059836112ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120c857508373ffffffffffffffffffffffffffffffffffffffff166120b084610a9f565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d957506120d88185611a8d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612102826112ff565b73ffffffffffffffffffffffffffffffffffffffff1614612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f9061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061416b565b60405180910390fd5b6121d38383836127fe565b6121de600082611f4b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222e919061464a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122859190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6103e8612349610c3c565b10612389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123809061430b565b60405180910390fd5b61239c81612397600c612856565b612864565b6123a6600c612882565b50565b6123b16112e8565b6123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e7906140cb565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612434611ed7565b6040516124419190613fdc565b60405180910390a1565b61245481612898565b50565b61245f6112e8565b1561249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906141eb565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124e3611ed7565b6040516124f09190613fdc565b60405180910390a1565b61250382611edf565b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061428b565b60405180910390fd5b80600a600084815260200190815260200160002090805190602001906125699291906134f2565b505050565b6125798484846120e2565b612585848484846128eb565b6125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061410b565b60405180910390fd5b50505050565b60606125d582611edf565b612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b906142cb565b60405180910390fd5b6000600a6000848152602001908152602001600020805461263490614742565b80601f016020809104026020016040519081016040528092919081815260200182805461266090614742565b80156126ad5780601f10612682576101008083540402835291602001916126ad565b820191906000526020600020905b81548152906001019060200180831161269057829003601f168201915b5050505050905060006126be612a82565b90506000815114156126d4578192505050612717565b6000825111156127095780826040516020016126f1929190613fb8565b60405160208183030381529060405292505050612717565b61271284612b14565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127f757506127f682612bbb565b5b9050919050565b6128066112e8565b15612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906141eb565b60405180910390fd5b612851838383612c25565b505050565b600081600001549050919050565b61287e828260405180602001604052806000815250612d39565b5050565b6001816000016000828254019250508190555050565b6128a181612d94565b6000600a600083815260200190815260200160002080546128c190614742565b9050146128e857600a600082815260200190815260200160002060006128e79190613578565b5b50565b600061290c8473ffffffffffffffffffffffffffffffffffffffff16612ea5565b15612a75578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612935611ed7565b8786866040518563ffffffff1660e01b81526004016129579493929190613ff7565b602060405180830381600087803b15801561297157600080fd5b505af19250505080156129a257506040513d601f19601f8201168201806040525081019061299f9190613923565b60015b612a25573d80600081146129d2576040519150601f19603f3d011682016040523d82523d6000602084013e6129d7565b606091505b50600081511415612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a149061410b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a7a565b600190505b949350505050565b6060600f8054612a9190614742565b80601f0160208091040260200160405190810160405280929190818152602001828054612abd90614742565b8015612b0a5780601f10612adf57610100808354040283529160200191612b0a565b820191906000526020600020905b815481529060010190602001808311612aed57829003601f168201915b5050505050905090565b6060612b1f82611edf565b612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559061436b565b60405180910390fd5b6000612b68612a82565b90506000815111612b885760405180602001604052806000815250612bb3565b80612b9284612eb8565b604051602001612ba3929190613fb8565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c30838383613019565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7357612c6e8161301e565b612cb2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cb157612cb08382613067565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf557612cf0816131d4565b612d34565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d3357612d3282826132a5565b5b5b505050565b612d438383613324565b612d5060008484846128eb565b612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d869061410b565b60405180910390fd5b505050565b6000612d9f826112ff565b9050612dad816000846127fe565b612db8600083611f4b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e08919061464a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612f00576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613014565b600082905060005b60008214612f32578080612f1b906147a5565b915050600a82612f2b91906145bf565b9150612f08565b60008167ffffffffffffffff811115612f4e57612f4d61490a565b5b6040519080825280601f01601f191660200182016040528015612f805781602001600182028036833780820191505090505b5090505b6000851461300d57600182612f99919061464a565b9150600a85612fa891906147ee565b6030612fb49190614569565b60f81b818381518110612fca57612fc96148db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561300691906145bf565b9450612f84565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130748461143f565b61307e919061464a565b9050600060076000848152602001908152602001600020549050818114613163576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131e8919061464a565b9050600060096000848152602001908152602001600020549050600060088381548110613218576132176148db565b5b90600052602060002001549050806008838154811061323a576132396148db565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613289576132886148ac565b5b6001900381819060005260206000200160009055905550505050565b60006132b08361143f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338b906142ab565b60405180910390fd5b61339d81611edf565b156133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d49061414b565b60405180910390fd5b6133e9600083836127fe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134399190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134fe90614742565b90600052602060002090601f0160209004810192826135205760008555613567565b82601f1061353957805160ff1916838001178555613567565b82800160010185558215613567579182015b8281111561356657825182559160200191906001019061354b565b5b50905061357491906135b8565b5090565b50805461358490614742565b6000825580601f1061359657506135b5565b601f0160209004906000526020600020908101906135b491906135b8565b5b50565b5b808211156135d15760008160009055506001016135b9565b5090565b60006135e86135e38461448b565b614466565b9050828152602081018484840111156136045761360361493e565b5b61360f848285614700565b509392505050565b600061362a613625846144bc565b614466565b9050828152602081018484840111156136465761364561493e565b5b613651848285614700565b509392505050565b600081359050613668816150d2565b92915050565b60008135905061367d816150e9565b92915050565b60008135905061369281615100565b92915050565b6000815190506136a781615100565b92915050565b600082601f8301126136c2576136c1614939565b5b81356136d28482602086016135d5565b91505092915050565b600082601f8301126136f0576136ef614939565b5b8135613700848260208601613617565b91505092915050565b60008135905061371881615117565b92915050565b60008135905061372d8161512e565b92915050565b60006020828403121561374957613748614948565b5b600061375784828501613659565b91505092915050565b6000806040838503121561377757613776614948565b5b600061378585828601613659565b925050602061379685828601613659565b9150509250929050565b6000806000606084860312156137b9576137b8614948565b5b60006137c786828701613659565b93505060206137d886828701613659565b92505060406137e98682870161371e565b9150509250925092565b6000806000806080858703121561380d5761380c614948565b5b600061381b87828801613659565b945050602061382c87828801613659565b935050604061383d8782880161371e565b925050606085013567ffffffffffffffff81111561385e5761385d614943565b5b61386a878288016136ad565b91505092959194509250565b6000806040838503121561388d5761388c614948565b5b600061389b85828601613659565b92505060206138ac8582860161366e565b9150509250929050565b600080604083850312156138cd576138cc614948565b5b60006138db85828601613659565b92505060206138ec8582860161371e565b9150509250929050565b60006020828403121561390c5761390b614948565b5b600061391a84828501613683565b91505092915050565b60006020828403121561393957613938614948565b5b600061394784828501613698565b91505092915050565b60006020828403121561396657613965614948565b5b600082013567ffffffffffffffff81111561398457613983614943565b5b613990848285016136db565b91505092915050565b6000602082840312156139af576139ae614948565b5b60006139bd84828501613709565b91505092915050565b6000602082840312156139dc576139db614948565b5b60006139ea8482850161371e565b91505092915050565b60008060408385031215613a0a57613a09614948565b5b6000613a188582860161371e565b925050602083013567ffffffffffffffff811115613a3957613a38614943565b5b613a45858286016136db565b9150509250929050565b60008060408385031215613a6657613a65614948565b5b6000613a748582860161371e565b9250506020613a858582860161371e565b9150509250929050565b6000613a9b8383613f9a565b60208301905092915050565b613ab08161467e565b82525050565b6000613ac1826144fd565b613acb818561452b565b9350613ad6836144ed565b8060005b83811015613b07578151613aee8882613a8f565b9750613af98361451e565b925050600181019050613ada565b5085935050505092915050565b613b1d81614690565b82525050565b6000613b2e82614508565b613b38818561453c565b9350613b4881856020860161470f565b613b518161494d565b840191505092915050565b6000613b6782614513565b613b71818561454d565b9350613b8181856020860161470f565b613b8a8161494d565b840191505092915050565b6000613ba082614513565b613baa818561455e565b9350613bba81856020860161470f565b80840191505092915050565b6000613bd360148361454d565b9150613bde8261495e565b602082019050919050565b6000613bf6602b8361454d565b9150613c0182614987565b604082019050919050565b6000613c1960328361454d565b9150613c24826149d6565b604082019050919050565b6000613c3c60268361454d565b9150613c4782614a25565b604082019050919050565b6000613c5f601c8361454d565b9150613c6a82614a74565b602082019050919050565b6000613c8260248361454d565b9150613c8d82614a9d565b604082019050919050565b6000613ca560198361454d565b9150613cb082614aec565b602082019050919050565b6000613cc860268361454d565b9150613cd382614b15565b604082019050919050565b6000613ceb602c8361454d565b9150613cf682614b64565b604082019050919050565b6000613d0e60108361454d565b9150613d1982614bb3565b602082019050919050565b6000613d3160388361454d565b9150613d3c82614bdc565b604082019050919050565b6000613d54602b8361454d565b9150613d5f82614c2b565b604082019050919050565b6000613d77602a8361454d565b9150613d8282614c7a565b604082019050919050565b6000613d9a60298361454d565b9150613da582614cc9565b604082019050919050565b6000613dbd602e8361454d565b9150613dc882614d18565b604082019050919050565b6000613de060208361454d565b9150613deb82614d67565b602082019050919050565b6000613e0360318361454d565b9150613e0e82614d90565b604082019050919050565b6000613e26602c8361454d565b9150613e3182614ddf565b604082019050919050565b6000613e49601a8361454d565b9150613e5482614e2e565b602082019050919050565b6000613e6c60208361454d565b9150613e7782614e57565b602082019050919050565b6000613e8f60298361454d565b9150613e9a82614e80565b604082019050919050565b6000613eb2602f8361454d565b9150613ebd82614ecf565b604082019050919050565b6000613ed560218361454d565b9150613ee082614f1e565b604082019050919050565b6000613ef8602d8361454d565b9150613f0382614f6d565b604082019050919050565b6000613f1b60318361454d565b9150613f2682614fbc565b604082019050919050565b6000613f3e60168361454d565b9150613f498261500b565b602082019050919050565b6000613f61602c8361454d565b9150613f6c82615034565b604082019050919050565b6000613f8460308361454d565b9150613f8f82615083565b604082019050919050565b613fa3816146f6565b82525050565b613fb2816146f6565b82525050565b6000613fc48285613b95565b9150613fd08284613b95565b91508190509392505050565b6000602082019050613ff16000830184613aa7565b92915050565b600060808201905061400c6000830187613aa7565b6140196020830186613aa7565b6140266040830185613fa9565b81810360608301526140388184613b23565b905095945050505050565b60006040820190506140586000830185613aa7565b6140656020830184613fa9565b9392505050565b600060208201905081810360008301526140868184613ab6565b905092915050565b60006020820190506140a36000830184613b14565b92915050565b600060208201905081810360008301526140c38184613b5c565b905092915050565b600060208201905081810360008301526140e481613bc6565b9050919050565b6000602082019050818103600083015261410481613be9565b9050919050565b6000602082019050818103600083015261412481613c0c565b9050919050565b6000602082019050818103600083015261414481613c2f565b9050919050565b6000602082019050818103600083015261416481613c52565b9050919050565b6000602082019050818103600083015261418481613c75565b9050919050565b600060208201905081810360008301526141a481613c98565b9050919050565b600060208201905081810360008301526141c481613cbb565b9050919050565b600060208201905081810360008301526141e481613cde565b9050919050565b6000602082019050818103600083015261420481613d01565b9050919050565b6000602082019050818103600083015261422481613d24565b9050919050565b6000602082019050818103600083015261424481613d47565b9050919050565b6000602082019050818103600083015261426481613d6a565b9050919050565b6000602082019050818103600083015261428481613d8d565b9050919050565b600060208201905081810360008301526142a481613db0565b9050919050565b600060208201905081810360008301526142c481613dd3565b9050919050565b600060208201905081810360008301526142e481613df6565b9050919050565b6000602082019050818103600083015261430481613e19565b9050919050565b6000602082019050818103600083015261432481613e3c565b9050919050565b6000602082019050818103600083015261434481613e5f565b9050919050565b6000602082019050818103600083015261436481613e82565b9050919050565b6000602082019050818103600083015261438481613ea5565b9050919050565b600060208201905081810360008301526143a481613ec8565b9050919050565b600060208201905081810360008301526143c481613eeb565b9050919050565b600060208201905081810360008301526143e481613f0e565b9050919050565b6000602082019050818103600083015261440481613f31565b9050919050565b6000602082019050818103600083015261442481613f54565b9050919050565b6000602082019050818103600083015261444481613f77565b9050919050565b60006020820190506144606000830184613fa9565b92915050565b6000614470614481565b905061447c8282614774565b919050565b6000604051905090565b600067ffffffffffffffff8211156144a6576144a561490a565b5b6144af8261494d565b9050602081019050919050565b600067ffffffffffffffff8211156144d7576144d661490a565b5b6144e08261494d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614574826146f6565b915061457f836146f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b4576145b361481f565b5b828201905092915050565b60006145ca826146f6565b91506145d5836146f6565b9250826145e5576145e461484e565b5b828204905092915050565b60006145fb826146f6565b9150614606836146f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463f5761463e61481f565b5b828202905092915050565b6000614655826146f6565b9150614660836146f6565b9250828210156146735761467261481f565b5b828203905092915050565b6000614689826146d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561472d578082015181840152602081019050614712565b8381111561473c576000848401525b50505050565b6000600282049050600182168061475a57607f821691505b6020821081141561476e5761476d61487d565b5b50919050565b61477d8261494d565b810181811067ffffffffffffffff8211171561479c5761479b61490a565b5b80604052505050565b60006147b0826146f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147e3576147e261481f565b5b600182019050919050565b60006147f9826146f6565b9150614804836146f6565b9250826148145761481361484e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43616e2774206275792074686174206d75636820696e206f6e65207472616e7360008201527f616374696f6e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f526f79616c7479206d7573742062652067726561746572207468616e206f722060008201527f657175616c20746f203025000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f506570654b6e6967687473206861766520736f6c64206f757421000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f526f79616c7479206d7573742062652067726561746572207468616e206f722060008201527f657175616c20746f20372e352500000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f75206469646e27742070617920656e6f7567682100000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6150db8161467e565b81146150e657600080fd5b50565b6150f281614690565b81146150fd57600080fd5b50565b6151098161469c565b811461511457600080fd5b50565b615120816146c8565b811461512b57600080fd5b50565b615137816146f6565b811461514257600080fd5b5056fea2646970667358221220331c9552306a6824ac9ca1eb37a0ceb23a6d28bd154c61724e5aff45ee9f272e64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80636352211e1161012357806395d89b41116100ab578063d5abeb011161006f578063d5abeb01146107dc578063e985e9c514610807578063f2fde38b14610844578063f3af77281461086d578063f53bc835146108aa57610230565b806395d89b41146106f7578063a035b1fe14610722578063a22cb4651461074d578063b88d4fde14610776578063c87b56dd1461079f57610230565b8063715018a6116100f2578063715018a61461064c5780638456cb5914610663578063862440e21461067a5780638da5cb5b146106a357806391b7f5ed146106ce57610230565b80636352211e1461057c5780636c0360eb146105b957806370a08231146105e457806370db69d61461062157610230565b80632f745c59116101b157806342842e0e1161017557806342842e0e1461049957806342966c68146104c25780634f6ccce7146104eb57806355f804b3146105285780635c975abb1461055157610230565b80632f745c59146103e95780632fd94ecb1461042657806336e79a5a146104425780633ccfd60b1461046b5780633f4ba83a1461048257610230565b8063095ea7b3116101f8578063095ea7b31461030357806318160ddd1461032c57806323b872dd1461035757806329ee566c146103805780632a55205a146103ab57610230565b806301ffc9a71461023557806306d254da1461027257806306fdde031461029b578063081812fc146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906138f6565b6108d3565b604051610269919061408e565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613733565b61094d565b005b3480156102a757600080fd5b506102b0610a0d565b6040516102bd91906140a9565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906139c6565b610a9f565b6040516102fa9190613fdc565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906138b6565b610b24565b005b34801561033857600080fd5b50610341610c3c565b60405161034e919061444b565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906137a0565b610c49565b005b34801561038c57600080fd5b50610395610ca9565b6040516103a2919061444b565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd9190613a4f565b610caf565b6040516103e0929190614043565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906138b6565b610cfb565b60405161041d919061444b565b60405180910390f35b610440600480360381019061043b91906139c6565b610da0565b005b34801561044e57600080fd5b5061046960048036038101906104649190613999565b610e60565b005b34801561047757600080fd5b50610480610f7b565b005b34801561048e57600080fd5b506104976110df565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906137a0565b611165565b005b3480156104ce57600080fd5b506104e960048036038101906104e491906139c6565b611185565b005b3480156104f757600080fd5b50610512600480360381019061050d91906139c6565b6111e1565b60405161051f919061444b565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613950565b611252565b005b34801561055d57600080fd5b506105666112e8565b604051610573919061408e565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e91906139c6565b6112ff565b6040516105b09190613fdc565b60405180910390f35b3480156105c557600080fd5b506105ce6113b1565b6040516105db91906140a9565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613733565b61143f565b604051610618919061444b565b60405180910390f35b34801561062d57600080fd5b506106366114f7565b604051610643919061444b565b60405180910390f35b34801561065857600080fd5b506106616114fd565b005b34801561066f57600080fd5b5061067861163a565b005b34801561068657600080fd5b506106a1600480360381019061069c91906139f3565b6116c0565b005b3480156106af57600080fd5b506106b861174a565b6040516106c59190613fdc565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906139c6565b611774565b005b34801561070357600080fd5b5061070c6117fa565b60405161071991906140a9565b60405180910390f35b34801561072e57600080fd5b5061073761188c565b604051610744919061444b565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190613876565b611892565b005b34801561078257600080fd5b5061079d600480360381019061079891906137f3565b611a13565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906139c6565b611a75565b6040516107d391906140a9565b60405180910390f35b3480156107e857600080fd5b506107f1611a87565b6040516107fe919061444b565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613760565b611a8d565b60405161083b919061408e565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190613733565b611b21565b005b34801561087957600080fd5b50610894600480360381019061088f9190613733565b611ccd565b6040516108a1919061406c565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc91906139c6565b611dd7565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610946575061094582611e5d565b5b9050919050565b610955611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661097361174a565b73ffffffffffffffffffffffffffffffffffffffff16146109c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c09061432b565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610a1c90614742565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4890614742565b8015610a955780601f10610a6a57610100808354040283529160200191610a95565b820191906000526020600020905b815481529060010190602001808311610a7857829003601f168201915b5050505050905090565b6000610aaa82611edf565b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae0906142eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2f826112ff565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b979061438b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbf611ed7565b73ffffffffffffffffffffffffffffffffffffffff161480610bee5750610bed81610be8611ed7565b611a8d565b5b610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c249061420b565b60405180910390fd5b610c378383611f4b565b505050565b6000600880549050905090565b610c5a610c54611ed7565b82612004565b610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c90906143cb565b60405180910390fd5b610ca48383836120e2565b505050565b60115481565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271060115485610ce691906145f0565b610cf091906145bf565b915091509250929050565b6000610d068361143f565b8210610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906140eb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b80600e54610dae91906145f0565b341015610df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de7906143eb565b60405180910390fd5b600d54811115610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c906141ab565b60405180910390fd5b60005b81811015610e5c57610e493361233e565b8080610e54906147a5565b915050610e38565b5050565b610e68611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610e8661174a565b73ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed39061432b565b60405180910390fd5b60008161ffff161015610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b9061422b565b60405180910390fd5b6102ee8161ffff161115610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f64906143ab565b60405180910390fd5b8061ffff1660118190555050565b610f83611ed7565b73ffffffffffffffffffffffffffffffffffffffff16610fa161174a565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee9061432b565b60405180910390fd5b6000479050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a60078461104791906145f0565b61105191906145bf565b9081150290604051600060405180830381858888f1935050505015801561107c573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff166108fc600a6003846110a691906145f0565b6110b091906145bf565b9081150290604051600060405180830381858888f193505050501580156110db573d6000803e3d6000fd5b5050565b6110e7611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661110561174a565b73ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111529061432b565b60405180910390fd5b6111636123a9565b565b61118083838360405180602001604052806000815250611a13565b505050565b611196611190611ed7565b82612004565b6111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc9061442b565b60405180910390fd5b6111de8161244b565b50565b60006111eb610c3c565b821061122c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112239061440b565b60405180910390fd5b600882815481106112405761123f6148db565b5b90600052602060002001549050919050565b61125a611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661127861174a565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c59061432b565b60405180910390fd5b80600f90805190602001906112e49291906134f2565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f9061426b565b60405180910390fd5b80915050919050565b600f80546113be90614742565b80601f01602080910402602001604051908101604052809291908181526020018280546113ea90614742565b80156114375780601f1061140c57610100808354040283529160200191611437565b820191906000526020600020905b81548152906001019060200180831161141a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a79061424b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611505611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661152361174a565b73ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061432b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611642611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661166061174a565b73ffffffffffffffffffffffffffffffffffffffff16146116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad9061432b565b60405180910390fd5b6116be612457565b565b6116c8611ed7565b73ffffffffffffffffffffffffffffffffffffffff166116e661174a565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117339061432b565b60405180910390fd5b61174682826124fa565b5050565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61177c611ed7565b73ffffffffffffffffffffffffffffffffffffffff1661179a61174a565b73ffffffffffffffffffffffffffffffffffffffff16146117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e79061432b565b60405180910390fd5b80600e8190555050565b60606001805461180990614742565b80601f016020809104026020016040519081016040528092919081815260200182805461183590614742565b80156118825780601f1061185757610100808354040283529160200191611882565b820191906000526020600020905b81548152906001019060200180831161186557829003601f168201915b5050505050905090565b600e5481565b61189a611ed7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061418b565b60405180910390fd5b8060056000611915611ed7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119c2611ed7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a07919061408e565b60405180910390a35050565b611a24611a1e611ed7565b83612004565b611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a906143cb565b60405180910390fd5b611a6f8484848461256e565b50505050565b6060611a80826125ca565b9050919050565b6103e881565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b29611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611b4761174a565b73ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b949061432b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c049061412b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000611cda8361143f565b90506000811415611d3757600067ffffffffffffffff811115611d0057611cff61490a565b5b604051908082528060200260200182016040528015611d2e5781602001602082028036833780820191505090505b50915050611dd2565b60008167ffffffffffffffff811115611d5357611d5261490a565b5b604051908082528060200260200182016040528015611d815781602001602082028036833780820191505090505b50905060005b82811015611dcb57611d998582610cfb565b828281518110611dac57611dab6148db565b5b6020026020010181815250508080611dc3906147a5565b915050611d87565b8193505050505b919050565b611ddf611ed7565b73ffffffffffffffffffffffffffffffffffffffff16611dfd61174a565b73ffffffffffffffffffffffffffffffffffffffff1614611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a9061432b565b60405180910390fd5b80600d8190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ed05750611ecf8261271c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611fbe836112ff565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061200f82611edf565b61204e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612045906141cb565b60405180910390fd5b6000612059836112ff565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120c857508373ffffffffffffffffffffffffffffffffffffffff166120b084610a9f565b73ffffffffffffffffffffffffffffffffffffffff16145b806120d957506120d88185611a8d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612102826112ff565b73ffffffffffffffffffffffffffffffffffffffff1614612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f9061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061416b565b60405180910390fd5b6121d38383836127fe565b6121de600082611f4b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222e919061464a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122859190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6103e8612349610c3c565b10612389576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123809061430b565b60405180910390fd5b61239c81612397600c612856565b612864565b6123a6600c612882565b50565b6123b16112e8565b6123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e7906140cb565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612434611ed7565b6040516124419190613fdc565b60405180910390a1565b61245481612898565b50565b61245f6112e8565b1561249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906141eb565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124e3611ed7565b6040516124f09190613fdc565b60405180910390a1565b61250382611edf565b612542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125399061428b565b60405180910390fd5b80600a600084815260200190815260200160002090805190602001906125699291906134f2565b505050565b6125798484846120e2565b612585848484846128eb565b6125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb9061410b565b60405180910390fd5b50505050565b60606125d582611edf565b612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b906142cb565b60405180910390fd5b6000600a6000848152602001908152602001600020805461263490614742565b80601f016020809104026020016040519081016040528092919081815260200182805461266090614742565b80156126ad5780601f10612682576101008083540402835291602001916126ad565b820191906000526020600020905b81548152906001019060200180831161269057829003601f168201915b5050505050905060006126be612a82565b90506000815114156126d4578192505050612717565b6000825111156127095780826040516020016126f1929190613fb8565b60405160208183030381529060405292505050612717565b61271284612b14565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127f757506127f682612bbb565b5b9050919050565b6128066112e8565b15612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906141eb565b60405180910390fd5b612851838383612c25565b505050565b600081600001549050919050565b61287e828260405180602001604052806000815250612d39565b5050565b6001816000016000828254019250508190555050565b6128a181612d94565b6000600a600083815260200190815260200160002080546128c190614742565b9050146128e857600a600082815260200190815260200160002060006128e79190613578565b5b50565b600061290c8473ffffffffffffffffffffffffffffffffffffffff16612ea5565b15612a75578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612935611ed7565b8786866040518563ffffffff1660e01b81526004016129579493929190613ff7565b602060405180830381600087803b15801561297157600080fd5b505af19250505080156129a257506040513d601f19601f8201168201806040525081019061299f9190613923565b60015b612a25573d80600081146129d2576040519150601f19603f3d011682016040523d82523d6000602084013e6129d7565b606091505b50600081511415612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a149061410b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a7a565b600190505b949350505050565b6060600f8054612a9190614742565b80601f0160208091040260200160405190810160405280929190818152602001828054612abd90614742565b8015612b0a5780601f10612adf57610100808354040283529160200191612b0a565b820191906000526020600020905b815481529060010190602001808311612aed57829003601f168201915b5050505050905090565b6060612b1f82611edf565b612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559061436b565b60405180910390fd5b6000612b68612a82565b90506000815111612b885760405180602001604052806000815250612bb3565b80612b9284612eb8565b604051602001612ba3929190613fb8565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c30838383613019565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7357612c6e8161301e565b612cb2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cb157612cb08382613067565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf557612cf0816131d4565b612d34565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d3357612d3282826132a5565b5b5b505050565b612d438383613324565b612d5060008484846128eb565b612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d869061410b565b60405180910390fd5b505050565b6000612d9f826112ff565b9050612dad816000846127fe565b612db8600083611f4b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e08919061464a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612f00576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613014565b600082905060005b60008214612f32578080612f1b906147a5565b915050600a82612f2b91906145bf565b9150612f08565b60008167ffffffffffffffff811115612f4e57612f4d61490a565b5b6040519080825280601f01601f191660200182016040528015612f805781602001600182028036833780820191505090505b5090505b6000851461300d57600182612f99919061464a565b9150600a85612fa891906147ee565b6030612fb49190614569565b60f81b818381518110612fca57612fc96148db565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561300691906145bf565b9450612f84565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130748461143f565b61307e919061464a565b9050600060076000848152602001908152602001600020549050818114613163576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131e8919061464a565b9050600060096000848152602001908152602001600020549050600060088381548110613218576132176148db565b5b90600052602060002001549050806008838154811061323a576132396148db565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613289576132886148ac565b5b6001900381819060005260206000200160009055905550505050565b60006132b08361143f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338b906142ab565b60405180910390fd5b61339d81611edf565b156133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d49061414b565b60405180910390fd5b6133e9600083836127fe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134399190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134fe90614742565b90600052602060002090601f0160209004810192826135205760008555613567565b82601f1061353957805160ff1916838001178555613567565b82800160010185558215613567579182015b8281111561356657825182559160200191906001019061354b565b5b50905061357491906135b8565b5090565b50805461358490614742565b6000825580601f1061359657506135b5565b601f0160209004906000526020600020908101906135b491906135b8565b5b50565b5b808211156135d15760008160009055506001016135b9565b5090565b60006135e86135e38461448b565b614466565b9050828152602081018484840111156136045761360361493e565b5b61360f848285614700565b509392505050565b600061362a613625846144bc565b614466565b9050828152602081018484840111156136465761364561493e565b5b613651848285614700565b509392505050565b600081359050613668816150d2565b92915050565b60008135905061367d816150e9565b92915050565b60008135905061369281615100565b92915050565b6000815190506136a781615100565b92915050565b600082601f8301126136c2576136c1614939565b5b81356136d28482602086016135d5565b91505092915050565b600082601f8301126136f0576136ef614939565b5b8135613700848260208601613617565b91505092915050565b60008135905061371881615117565b92915050565b60008135905061372d8161512e565b92915050565b60006020828403121561374957613748614948565b5b600061375784828501613659565b91505092915050565b6000806040838503121561377757613776614948565b5b600061378585828601613659565b925050602061379685828601613659565b9150509250929050565b6000806000606084860312156137b9576137b8614948565b5b60006137c786828701613659565b93505060206137d886828701613659565b92505060406137e98682870161371e565b9150509250925092565b6000806000806080858703121561380d5761380c614948565b5b600061381b87828801613659565b945050602061382c87828801613659565b935050604061383d8782880161371e565b925050606085013567ffffffffffffffff81111561385e5761385d614943565b5b61386a878288016136ad565b91505092959194509250565b6000806040838503121561388d5761388c614948565b5b600061389b85828601613659565b92505060206138ac8582860161366e565b9150509250929050565b600080604083850312156138cd576138cc614948565b5b60006138db85828601613659565b92505060206138ec8582860161371e565b9150509250929050565b60006020828403121561390c5761390b614948565b5b600061391a84828501613683565b91505092915050565b60006020828403121561393957613938614948565b5b600061394784828501613698565b91505092915050565b60006020828403121561396657613965614948565b5b600082013567ffffffffffffffff81111561398457613983614943565b5b613990848285016136db565b91505092915050565b6000602082840312156139af576139ae614948565b5b60006139bd84828501613709565b91505092915050565b6000602082840312156139dc576139db614948565b5b60006139ea8482850161371e565b91505092915050565b60008060408385031215613a0a57613a09614948565b5b6000613a188582860161371e565b925050602083013567ffffffffffffffff811115613a3957613a38614943565b5b613a45858286016136db565b9150509250929050565b60008060408385031215613a6657613a65614948565b5b6000613a748582860161371e565b9250506020613a858582860161371e565b9150509250929050565b6000613a9b8383613f9a565b60208301905092915050565b613ab08161467e565b82525050565b6000613ac1826144fd565b613acb818561452b565b9350613ad6836144ed565b8060005b83811015613b07578151613aee8882613a8f565b9750613af98361451e565b925050600181019050613ada565b5085935050505092915050565b613b1d81614690565b82525050565b6000613b2e82614508565b613b38818561453c565b9350613b4881856020860161470f565b613b518161494d565b840191505092915050565b6000613b6782614513565b613b71818561454d565b9350613b8181856020860161470f565b613b8a8161494d565b840191505092915050565b6000613ba082614513565b613baa818561455e565b9350613bba81856020860161470f565b80840191505092915050565b6000613bd360148361454d565b9150613bde8261495e565b602082019050919050565b6000613bf6602b8361454d565b9150613c0182614987565b604082019050919050565b6000613c1960328361454d565b9150613c24826149d6565b604082019050919050565b6000613c3c60268361454d565b9150613c4782614a25565b604082019050919050565b6000613c5f601c8361454d565b9150613c6a82614a74565b602082019050919050565b6000613c8260248361454d565b9150613c8d82614a9d565b604082019050919050565b6000613ca560198361454d565b9150613cb082614aec565b602082019050919050565b6000613cc860268361454d565b9150613cd382614b15565b604082019050919050565b6000613ceb602c8361454d565b9150613cf682614b64565b604082019050919050565b6000613d0e60108361454d565b9150613d1982614bb3565b602082019050919050565b6000613d3160388361454d565b9150613d3c82614bdc565b604082019050919050565b6000613d54602b8361454d565b9150613d5f82614c2b565b604082019050919050565b6000613d77602a8361454d565b9150613d8282614c7a565b604082019050919050565b6000613d9a60298361454d565b9150613da582614cc9565b604082019050919050565b6000613dbd602e8361454d565b9150613dc882614d18565b604082019050919050565b6000613de060208361454d565b9150613deb82614d67565b602082019050919050565b6000613e0360318361454d565b9150613e0e82614d90565b604082019050919050565b6000613e26602c8361454d565b9150613e3182614ddf565b604082019050919050565b6000613e49601a8361454d565b9150613e5482614e2e565b602082019050919050565b6000613e6c60208361454d565b9150613e7782614e57565b602082019050919050565b6000613e8f60298361454d565b9150613e9a82614e80565b604082019050919050565b6000613eb2602f8361454d565b9150613ebd82614ecf565b604082019050919050565b6000613ed560218361454d565b9150613ee082614f1e565b604082019050919050565b6000613ef8602d8361454d565b9150613f0382614f6d565b604082019050919050565b6000613f1b60318361454d565b9150613f2682614fbc565b604082019050919050565b6000613f3e60168361454d565b9150613f498261500b565b602082019050919050565b6000613f61602c8361454d565b9150613f6c82615034565b604082019050919050565b6000613f8460308361454d565b9150613f8f82615083565b604082019050919050565b613fa3816146f6565b82525050565b613fb2816146f6565b82525050565b6000613fc48285613b95565b9150613fd08284613b95565b91508190509392505050565b6000602082019050613ff16000830184613aa7565b92915050565b600060808201905061400c6000830187613aa7565b6140196020830186613aa7565b6140266040830185613fa9565b81810360608301526140388184613b23565b905095945050505050565b60006040820190506140586000830185613aa7565b6140656020830184613fa9565b9392505050565b600060208201905081810360008301526140868184613ab6565b905092915050565b60006020820190506140a36000830184613b14565b92915050565b600060208201905081810360008301526140c38184613b5c565b905092915050565b600060208201905081810360008301526140e481613bc6565b9050919050565b6000602082019050818103600083015261410481613be9565b9050919050565b6000602082019050818103600083015261412481613c0c565b9050919050565b6000602082019050818103600083015261414481613c2f565b9050919050565b6000602082019050818103600083015261416481613c52565b9050919050565b6000602082019050818103600083015261418481613c75565b9050919050565b600060208201905081810360008301526141a481613c98565b9050919050565b600060208201905081810360008301526141c481613cbb565b9050919050565b600060208201905081810360008301526141e481613cde565b9050919050565b6000602082019050818103600083015261420481613d01565b9050919050565b6000602082019050818103600083015261422481613d24565b9050919050565b6000602082019050818103600083015261424481613d47565b9050919050565b6000602082019050818103600083015261426481613d6a565b9050919050565b6000602082019050818103600083015261428481613d8d565b9050919050565b600060208201905081810360008301526142a481613db0565b9050919050565b600060208201905081810360008301526142c481613dd3565b9050919050565b600060208201905081810360008301526142e481613df6565b9050919050565b6000602082019050818103600083015261430481613e19565b9050919050565b6000602082019050818103600083015261432481613e3c565b9050919050565b6000602082019050818103600083015261434481613e5f565b9050919050565b6000602082019050818103600083015261436481613e82565b9050919050565b6000602082019050818103600083015261438481613ea5565b9050919050565b600060208201905081810360008301526143a481613ec8565b9050919050565b600060208201905081810360008301526143c481613eeb565b9050919050565b600060208201905081810360008301526143e481613f0e565b9050919050565b6000602082019050818103600083015261440481613f31565b9050919050565b6000602082019050818103600083015261442481613f54565b9050919050565b6000602082019050818103600083015261444481613f77565b9050919050565b60006020820190506144606000830184613fa9565b92915050565b6000614470614481565b905061447c8282614774565b919050565b6000604051905090565b600067ffffffffffffffff8211156144a6576144a561490a565b5b6144af8261494d565b9050602081019050919050565b600067ffffffffffffffff8211156144d7576144d661490a565b5b6144e08261494d565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614574826146f6565b915061457f836146f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b4576145b361481f565b5b828201905092915050565b60006145ca826146f6565b91506145d5836146f6565b9250826145e5576145e461484e565b5b828204905092915050565b60006145fb826146f6565b9150614606836146f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463f5761463e61481f565b5b828202905092915050565b6000614655826146f6565b9150614660836146f6565b9250828210156146735761467261481f565b5b828203905092915050565b6000614689826146d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561472d578082015181840152602081019050614712565b8381111561473c576000848401525b50505050565b6000600282049050600182168061475a57607f821691505b6020821081141561476e5761476d61487d565b5b50919050565b61477d8261494d565b810181811067ffffffffffffffff8211171561479c5761479b61490a565b5b80604052505050565b60006147b0826146f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147e3576147e261481f565b5b600182019050919050565b60006147f9826146f6565b9150614804836146f6565b9250826148145761481361484e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f43616e2774206275792074686174206d75636820696e206f6e65207472616e7360008201527f616374696f6e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f526f79616c7479206d7573742062652067726561746572207468616e206f722060008201527f657175616c20746f203025000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f506570654b6e6967687473206861766520736f6c64206f757421000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f526f79616c7479206d7573742062652067726561746572207468616e206f722060008201527f657175616c20746f20372e352500000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f596f75206469646e27742070617920656e6f7567682100000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6150db8161467e565b81146150e657600080fd5b50565b6150f281614690565b81146150fd57600080fd5b50565b6151098161469c565b811461511457600080fd5b50565b615120816146c8565b811461512b57600080fd5b50565b615137816146f6565b811461514257600080fd5b5056fea2646970667358221220331c9552306a6824ac9ca1eb37a0ceb23a6d28bd154c61724e5aff45ee9f272e64736f6c63430008070033
Deployed Bytecode Sourcemap
52912:4299:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56259:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55889:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22839:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24421:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23944:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37505:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53394:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54737:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37086:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53636:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55581:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56954:201;;;;;;;;;;;;;:::i;:::-;;55058:65;;;;;;;;;;;;;:::i;:::-;;25927:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50262:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37695:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55231:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46259:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22446:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53282:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22089:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53207:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49216:148;;;;;;;;;;;;;:::i;:::-;;54989:61;;;;;;;;;;;;;:::i;:::-;;55447:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48565:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55341:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23008:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53239:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24801:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26183:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53992:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53160:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25199:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49519:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54196:533;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55131:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56259:292;56407:4;56464:26;56449:41;;;:11;:41;;;;:94;;;;56507:36;56531:11;56507:23;:36::i;:::-;56449:94;56429:114;;56259:292;;;:::o;55889:122::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55988:15:::1;55971:14;;:32;;;;;;;;;;;;;;;;;;55889:122:::0;:::o;22839:100::-;22893:13;22926:5;22919:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22839:100;:::o;24421:308::-;24542:7;24589:16;24597:7;24589;:16::i;:::-;24567:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24697:15;:24;24713:7;24697:24;;;;;;;;;;;;;;;;;;;;;24690:31;;24421:308;;;:::o;23944:411::-;24025:13;24041:23;24056:7;24041:14;:23::i;:::-;24025:39;;24089:5;24083:11;;:2;:11;;;;24075:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24183:5;24167:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24192:37;24209:5;24216:12;:10;:12::i;:::-;24192:16;:37::i;:::-;24167:62;24145:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24326:21;24335:2;24339:7;24326:8;:21::i;:::-;24014:341;23944:411;;:::o;37505:113::-;37566:7;37593:10;:17;;;;37586:24;;37505:113;:::o;25480:376::-;25689:41;25708:12;:10;:12::i;:::-;25722:7;25689:18;:41::i;:::-;25667:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25820:28;25830:4;25836:2;25840:7;25820:9;:28::i;:::-;25480:376;;;:::o;53394:28::-;;;;:::o;54737:238::-;54855:16;54873:21;54920:14;;;;;;;;;;;54961:5;54950:7;;54937:10;:20;;;;:::i;:::-;54936:30;;;;:::i;:::-;54912:55;;;;54737:238;;;;;:::o;37086:343::-;37228:7;37283:23;37300:5;37283:16;:23::i;:::-;37275:5;:31;37253:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;37395:12;:19;37408:5;37395:19;;;;;;;;;;;;;;;:26;37415:5;37395:26;;;;;;;;;;;;37388:33;;37086:343;;;;:::o;53636:346::-;53728:6;53720:5;;:14;;;;:::i;:::-;53707:9;:27;;53699:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53804:6;;53794;:16;;53772:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;53892:9;53887:88;53911:6;53907:1;:10;53887:88;;;53939:24;53952:10;53939:12;:24::i;:::-;53919:3;;;;;:::i;:::-;;;;53887:88;;;;53636:346;:::o;55581:296::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55668:1:::1;55656:8;:13;;;;55648:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;55762:3;55750:8;:15;;;;55728:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;55861:8;55851:18;;:7;:18;;;;55581:296:::0;:::o;56954:201::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57001:14:::1;57017:21;57001:38;;57058:14;;;;;;;;;;;57050:32;;:45;57092:2;57090:1;57083:6;:8;;;;:::i;:::-;:11;;;;:::i;:::-;57050:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;57114:10;57106:28;;:41;57144:2;57142:1;57135:6;:8;;;;:::i;:::-;:11;;;;:::i;:::-;57106:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56990:165;56954:201::o:0;55058:65::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55105:10:::1;:8;:10::i;:::-;55058:65::o:0;25927:185::-;26065:39;26082:4;26088:2;26092:7;26065:39;;;;;;;;;;;;:16;:39::i;:::-;25927:185;;;:::o;50262:282::-;50394:41;50413:12;:10;:12::i;:::-;50427:7;50394:18;:41::i;:::-;50372:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;50522:14;50528:7;50522:5;:14::i;:::-;50262:282;:::o;37695:320::-;37815:7;37870:30;:28;:30::i;:::-;37862:5;:38;37840:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37990:10;38001:5;37990:17;;;;;;;;:::i;:::-;;;;;;;;;;37983:24;;37695:320;;;:::o;55231:102::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55315:10:::1;55305:7;:20;;;;;;;;;;;;:::i;:::-;;55231:102:::0;:::o;46259:86::-;46306:4;46330:7;;;;;;;;;;;46323:14;;46259:86;:::o;22446:326::-;22563:7;22588:13;22604:7;:16;22612:7;22604:16;;;;;;;;;;;;;;;;;;;;;22588:32;;22670:1;22653:19;;:5;:19;;;;22631:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22759:5;22752:12;;;22446:326;;;:::o;53282:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22089:295::-;22206:7;22270:1;22253:19;;:5;:19;;;;22231:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;22360:9;:16;22370:5;22360:16;;;;;;;;;;;;;;;;22353:23;;22089:295;;;:::o;53207:25::-;;;;:::o;49216:148::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49323:1:::1;49286:40;;49307:6;;;;;;;;;;;49286:40;;;;;;;;;;;;49354:1;49337:6;;:19;;;;;;;;;;;;;;;;;;49216:148::o:0;54989:61::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55034:8:::1;:6;:8::i;:::-;54989:61::o:0;55447:116::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55529:26:::1;55542:7;55551:3;55529:12;:26::i;:::-;55447:116:::0;;:::o;48565:87::-;48611:7;48638:6;;;;;;;;;;;48631:13;;48565:87;:::o;55341:88::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55413:8:::1;55405:5;:16;;;;55341:88:::0;:::o;23008:104::-;23064:13;23097:7;23090:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23008:104;:::o;53239:32::-;;;;:::o;24801:327::-;24948:12;:10;:12::i;:::-;24936:24;;:8;:24;;;;24928:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25048:8;25003:18;:32;25022:12;:10;:12::i;:::-;25003:32;;;;;;;;;;;;;;;:42;25036:8;25003:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25101:8;25072:48;;25087:12;:10;:12::i;:::-;25072:48;;;25111:8;25072:48;;;;;;:::i;:::-;;;;;;;;24801:327;;:::o;26183:365::-;26372:41;26391:12;:10;:12::i;:::-;26405:7;26372:18;:41::i;:::-;26350:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26501:39;26515:4;26521:2;26525:7;26534:5;26501:13;:39::i;:::-;26183:365;;;;:::o;53992:196::-;54119:13;54157:23;54172:7;54157:14;:23::i;:::-;54150:30;;53992:196;;;:::o;53160:40::-;53196:4;53160:40;:::o;25199:214::-;25341:4;25370:18;:25;25389:5;25370:25;;;;;;;;;;;;;;;:35;25396:8;25370:35;;;;;;;;;;;;;;;;;;;;;;;;;25363:42;;25199:214;;;;:::o;49519:281::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49642:1:::1;49622:22;;:8;:22;;;;49600:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;49755:8;49726:38;;49747:6;;;;;;;;;;;49726:38;;;;;;;;;;;;49784:8;49775:6;;:17;;;;;;;;;;;;;;;;;;49519:281:::0;:::o;54196:533::-;54284:16;54318:18;54339:17;54349:6;54339:9;:17::i;:::-;54318:38;;54385:1;54371:10;:15;54367:355;;;54424:1;54410:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54403:23;;;;;54367:355;54459:23;54499:10;54485:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54459:51;;54525:13;54553:130;54577:10;54569:5;:18;54553:130;;;54633:34;54653:6;54661:5;54633:19;:34::i;:::-;54617:6;54624:5;54617:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;54589:7;;;;;:::i;:::-;;;;54553:130;;;54704:6;54697:13;;;;;54196:533;;;;:::o;55131:92::-;48796:12;:10;:12::i;:::-;48785:23;;:7;:5;:7::i;:::-;:23;;;48777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55206:9:::1;55197:6;:18;;;;55131:92:::0;:::o;36702:300::-;36849:4;36906:35;36891:50;;;:11;:50;;;;:103;;;;36958:36;36982:11;36958:23;:36::i;:::-;36891:103;36871:123;;36702:300;;;:::o;16894:98::-;16947:7;16974:10;16967:17;;16894:98;:::o;28095:127::-;28160:4;28212:1;28184:30;;:7;:16;28192:7;28184:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28177:37;;28095:127;;;:::o;32218:174::-;32320:2;32293:15;:24;32309:7;32293:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32376:7;32372:2;32338:46;;32347:23;32362:7;32347:14;:23::i;:::-;32338:46;;;;;;;;;;;;32218:174;;:::o;28389:452::-;28518:4;28562:16;28570:7;28562;:16::i;:::-;28540:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28661:13;28677:23;28692:7;28677:14;:23::i;:::-;28661:39;;28730:5;28719:16;;:7;:16;;;:64;;;;28776:7;28752:31;;:20;28764:7;28752:11;:20::i;:::-;:31;;;28719:64;:113;;;;28800:32;28817:5;28824:7;28800:16;:32::i;:::-;28719:113;28711:122;;;28389:452;;;;:::o;31485:615::-;31658:4;31631:31;;:23;31646:7;31631:14;:23::i;:::-;:31;;;31609:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31764:1;31750:16;;:2;:16;;;;31742:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31820:39;31841:4;31847:2;31851:7;31820:20;:39::i;:::-;31924:29;31941:1;31945:7;31924:8;:29::i;:::-;31985:1;31966:9;:15;31976:4;31966:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32014:1;31997:9;:13;32007:2;31997:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32045:2;32026:7;:16;32034:7;32026:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32084:7;32080:2;32065:27;;32074:4;32065:27;;;;;;;;;;;;31485:615;;;:::o;56024:215::-;53196:4;56086:13;:11;:13::i;:::-;:25;56078:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;56153:40;56163:2;56167:25;:15;:23;:25::i;:::-;56153:9;:40::i;:::-;56204:27;:15;:25;:27::i;:::-;56024:215;:::o;47318:120::-;46862:8;:6;:8::i;:::-;46854:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;47387:5:::1;47377:7;;:15;;;;;;;;;;;;;;;;;;47408:22;47417:12;:10;:12::i;:::-;47408:22;;;;;;:::i;:::-;;;;;;;;47318:120::o:0;56808:138::-;56918:20;56930:7;56918:11;:20::i;:::-;56808:138;:::o;47059:118::-;46585:8;:6;:8::i;:::-;46584:9;46576:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;47129:4:::1;47119:7;;:14;;;;;;;;;;;;;;;;;;47149:20;47156:12;:10;:12::i;:::-;47149:20;;;;;;:::i;:::-;;;;;;;;47059:118::o:0;44466:277::-;44603:16;44611:7;44603;:16::i;:::-;44581:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;44726:9;44704:10;:19;44715:7;44704:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;44466:277;;:::o;27430:352::-;27587:28;27597:4;27603:2;27607:7;27587:9;:28::i;:::-;27648:48;27671:4;27677:2;27681:7;27690:5;27648:22;:48::i;:::-;27626:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;27430:352;;;;:::o;43544:766::-;43662:13;43715:16;43723:7;43715;:16::i;:::-;43693:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;43821:23;43847:10;:19;43858:7;43847:19;;;;;;;;;;;43821:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43877:18;43898:10;:8;:10::i;:::-;43877:31;;44006:1;43990:4;43984:18;:23;43980:72;;;44031:9;44024:16;;;;;;43980:72;44182:1;44162:9;44156:23;:27;44152:108;;;44231:4;44237:9;44214:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44200:48;;;;;;44152:108;44279:23;44294:7;44279:14;:23::i;:::-;44272:30;;;;43544:766;;;;:::o;21670:355::-;21817:4;21874:25;21859:40;;;:11;:40;;;;:105;;;;21931:33;21916:48;;;:11;:48;;;;21859:105;:158;;;;21981:36;22005:11;21981:23;:36::i;:::-;21859:158;21839:178;;21670:355;;;:::o;56563:229::-;46585:8;:6;:8::i;:::-;46584:9;46576:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;56739:45:::1;56766:4;56772:2;56776:7;56739:26;:45::i;:::-;56563:229:::0;;;:::o;51370:114::-;51435:7;51462;:14;;;51455:21;;51370:114;;;:::o;29183:110::-;29259:26;29269:2;29273:7;29259:26;;;;;;;;;;;;:9;:26::i;:::-;29183:110;;:::o;51492:127::-;51599:1;51581:7;:14;;;:19;;;;;;;;;;;51492:127;:::o;44972:206::-;45041:20;45053:7;45041:11;:20::i;:::-;45115:1;45084:10;:19;45095:7;45084:19;;;;;;;;;;;45078:33;;;;;:::i;:::-;;;:38;45074:97;;45140:10;:19;45151:7;45140:19;;;;;;;;;;;;45133:26;;;;:::i;:::-;45074:97;44972:206;:::o;32957:1053::-;33112:4;33133:15;:2;:13;;;:15::i;:::-;33129:874;;;33202:2;33186:36;;;33245:12;:10;:12::i;:::-;33280:4;33307:7;33337:5;33186:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33165:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33565:1;33548:6;:13;:18;33544:389;;;33591:108;;;;;;;;;;:::i;:::-;;;;;;;;33544:389;33883:6;33877:13;33868:6;33864:2;33860:15;33853:38;33165:783;33435:45;;;33425:55;;;:6;:55;;;;33418:62;;;;;33129:874;33987:4;33980:11;;32957:1053;;;;;;;:::o;53526:100::-;53578:13;53611:7;53604:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53526:100;:::o;23183:468::-;23301:13;23354:16;23362:7;23354;:16::i;:::-;23332:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;23458:21;23482:10;:8;:10::i;:::-;23458:34;;23547:1;23529:7;23523:21;:25;:120;;;;;;;;;;;;;;;;;23592:7;23601:18;:7;:16;:18::i;:::-;23575:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23523:120;23503:140;;;23183:468;;;:::o;20136:207::-;20266:4;20310:25;20295:40;;;:11;:40;;;;20288:47;;20136:207;;;:::o;38628:589::-;38772:45;38799:4;38805:2;38809:7;38772:26;:45::i;:::-;38850:1;38834:18;;:4;:18;;;38830:187;;;38869:40;38901:7;38869:31;:40::i;:::-;38830:187;;;38939:2;38931:10;;:4;:10;;;38927:90;;38958:47;38991:4;38997:7;38958:32;:47::i;:::-;38927:90;38830:187;39045:1;39031:16;;:2;:16;;;39027:183;;;39064:45;39101:7;39064:36;:45::i;:::-;39027:183;;;39137:4;39131:10;;:2;:10;;;39127:83;;39158:40;39186:2;39190:7;39158:27;:40::i;:::-;39127:83;39027:183;38628:589;;;:::o;29520:321::-;29650:18;29656:2;29660:7;29650:5;:18::i;:::-;29701:54;29732:1;29736:2;29740:7;29749:5;29701:22;:54::i;:::-;29679:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29520:321;;;:::o;30788:360::-;30848:13;30864:23;30879:7;30864:14;:23::i;:::-;30848:39;;30900:48;30921:5;30936:1;30940:7;30900:20;:48::i;:::-;30989:29;31006:1;31010:7;30989:8;:29::i;:::-;31051:1;31031:9;:16;31041:5;31031:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31070:7;:16;31078:7;31070:16;;;;;;;;;;;;31063:23;;;;;;;;;;;31132:7;31128:1;31104:36;;31113:5;31104:36;;;;;;;;;;;;30837:311;30788:360;:::o;8308:444::-;8368:4;8576:12;8700:7;8688:20;8680:28;;8743:1;8736:4;:8;8729:15;;;8308:444;;;:::o;17551:723::-;17607:13;17837:1;17828:5;:10;17824:53;;;17855:10;;;;;;;;;;;;;;;;;;;;;17824:53;17887:12;17902:5;17887:20;;17918:14;17943:78;17958:1;17950:4;:9;17943:78;;17976:8;;;;;:::i;:::-;;;;18007:2;17999:10;;;;;:::i;:::-;;;17943:78;;;18031:19;18063:6;18053:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18031:39;;18081:154;18097:1;18088:5;:10;18081:154;;18125:1;18115:11;;;;;:::i;:::-;;;18192:2;18184:5;:10;;;;:::i;:::-;18171:2;:24;;;;:::i;:::-;18158:39;;18141:6;18148;18141:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18221:2;18212:11;;;;;:::i;:::-;;;18081:154;;;18259:6;18245:21;;;;;17551:723;;;;:::o;34623:126::-;;;;:::o;39940:164::-;40044:10;:17;;;;40017:15;:24;40033:7;40017:24;;;;;;;;;;;:44;;;;40072:10;40088:7;40072:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39940:164;:::o;40731:1002::-;41011:22;41061:1;41036:22;41053:4;41036:16;:22::i;:::-;:26;;;;:::i;:::-;41011:51;;41073:18;41094:17;:26;41112:7;41094:26;;;;;;;;;;;;41073:47;;41241:14;41227:10;:28;41223:328;;41272:19;41294:12;:18;41307:4;41294:18;;;;;;;;;;;;;;;:34;41313:14;41294:34;;;;;;;;;;;;41272:56;;41378:11;41345:12;:18;41358:4;41345:18;;;;;;;;;;;;;;;:30;41364:10;41345:30;;;;;;;;;;;:44;;;;41495:10;41462:17;:30;41480:11;41462:30;;;;;;;;;;;:43;;;;41257:294;41223:328;41647:17;:26;41665:7;41647:26;;;;;;;;;;;41640:33;;;41691:12;:18;41704:4;41691:18;;;;;;;;;;;;;;;:34;41710:14;41691:34;;;;;;;;;;;41684:41;;;40826:907;;40731:1002;;:::o;42028:1079::-;42281:22;42326:1;42306:10;:17;;;;:21;;;;:::i;:::-;42281:46;;42338:18;42359:15;:24;42375:7;42359:24;;;;;;;;;;;;42338:45;;42710:19;42732:10;42743:14;42732:26;;;;;;;;:::i;:::-;;;;;;;;;;42710:48;;42796:11;42771:10;42782;42771:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42907:10;42876:15;:28;42892:11;42876:28;;;;;;;;;;;:41;;;;43048:15;:24;43064:7;43048:24;;;;;;;;;;;43041:31;;;43083:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42099:1008;;;42028:1079;:::o;39518:221::-;39603:14;39620:20;39637:2;39620:16;:20::i;:::-;39603:37;;39678:7;39651:12;:16;39664:2;39651:16;;;;;;;;;;;;;;;:24;39668:6;39651:24;;;;;;;;;;;:34;;;;39725:6;39696:17;:26;39714:7;39696:26;;;;;;;;;;;:35;;;;39592:147;39518:221;;:::o;30177:382::-;30271:1;30257:16;;:2;:16;;;;30249:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30330:16;30338:7;30330;:16::i;:::-;30329:17;30321:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30392:45;30421:1;30425:2;30429:7;30392:20;:45::i;:::-;30467:1;30450:9;:13;30460:2;30450:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30498:2;30479:7;:16;30487:7;30479:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30543:7;30539:2;30518:33;;30535:1;30518:33;;;;;;;;;;;;30177:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:137::-;2177:5;2215:6;2202:20;2193:29;;2231:32;2257:5;2231:32;:::i;:::-;2132:137;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:329::-;2479:6;2528:2;2516:9;2507:7;2503:23;2499:32;2496:119;;;2534:79;;:::i;:::-;2496:119;2654:1;2679:53;2724:7;2715:6;2704:9;2700:22;2679:53;:::i;:::-;2669:63;;2625:117;2420:329;;;;:::o;2755:474::-;2823:6;2831;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:53;3076:7;3067:6;3056:9;3052:22;3031:53;:::i;:::-;3021:63;;2977:117;3133:2;3159:53;3204:7;3195:6;3184:9;3180:22;3159:53;:::i;:::-;3149:63;;3104:118;2755:474;;;;;:::o;3235:619::-;3312:6;3320;3328;3377:2;3365:9;3356:7;3352:23;3348:32;3345:119;;;3383:79;;:::i;:::-;3345:119;3503:1;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3474:117;3630:2;3656:53;3701:7;3692:6;3681:9;3677:22;3656:53;:::i;:::-;3646:63;;3601:118;3758:2;3784:53;3829:7;3820:6;3809:9;3805:22;3784:53;:::i;:::-;3774:63;;3729:118;3235:619;;;;;:::o;3860:943::-;3955:6;3963;3971;3979;4028:3;4016:9;4007:7;4003:23;3999:33;3996:120;;;4035:79;;:::i;:::-;3996:120;4155:1;4180:53;4225:7;4216:6;4205:9;4201:22;4180:53;:::i;:::-;4170:63;;4126:117;4282:2;4308:53;4353:7;4344:6;4333:9;4329:22;4308:53;:::i;:::-;4298:63;;4253:118;4410:2;4436:53;4481:7;4472:6;4461:9;4457:22;4436:53;:::i;:::-;4426:63;;4381:118;4566:2;4555:9;4551:18;4538:32;4597:18;4589:6;4586:30;4583:117;;;4619:79;;:::i;:::-;4583:117;4724:62;4778:7;4769:6;4758:9;4754:22;4724:62;:::i;:::-;4714:72;;4509:287;3860:943;;;;;;;:::o;4809:468::-;4874:6;4882;4931:2;4919:9;4910:7;4906:23;4902:32;4899:119;;;4937:79;;:::i;:::-;4899:119;5057:1;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5028:117;5184:2;5210:50;5252:7;5243:6;5232:9;5228:22;5210:50;:::i;:::-;5200:60;;5155:115;4809:468;;;;;:::o;5283:474::-;5351:6;5359;5408:2;5396:9;5387:7;5383:23;5379:32;5376:119;;;5414:79;;:::i;:::-;5376:119;5534:1;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5505:117;5661:2;5687:53;5732:7;5723:6;5712:9;5708:22;5687:53;:::i;:::-;5677:63;;5632:118;5283:474;;;;;:::o;5763:327::-;5821:6;5870:2;5858:9;5849:7;5845:23;5841:32;5838:119;;;5876:79;;:::i;:::-;5838:119;5996:1;6021:52;6065:7;6056:6;6045:9;6041:22;6021:52;:::i;:::-;6011:62;;5967:116;5763:327;;;;:::o;6096:349::-;6165:6;6214:2;6202:9;6193:7;6189:23;6185:32;6182:119;;;6220:79;;:::i;:::-;6182:119;6340:1;6365:63;6420:7;6411:6;6400:9;6396:22;6365:63;:::i;:::-;6355:73;;6311:127;6096:349;;;;:::o;6451:509::-;6520:6;6569:2;6557:9;6548:7;6544:23;6540:32;6537:119;;;6575:79;;:::i;:::-;6537:119;6723:1;6712:9;6708:17;6695:31;6753:18;6745:6;6742:30;6739:117;;;6775:79;;:::i;:::-;6739:117;6880:63;6935:7;6926:6;6915:9;6911:22;6880:63;:::i;:::-;6870:73;;6666:287;6451:509;;;;:::o;6966:327::-;7024:6;7073:2;7061:9;7052:7;7048:23;7044:32;7041:119;;;7079:79;;:::i;:::-;7041:119;7199:1;7224:52;7268:7;7259:6;7248:9;7244:22;7224:52;:::i;:::-;7214:62;;7170:116;6966:327;;;;:::o;7299:329::-;7358:6;7407:2;7395:9;7386:7;7382:23;7378:32;7375:119;;;7413:79;;:::i;:::-;7375:119;7533:1;7558:53;7603:7;7594:6;7583:9;7579:22;7558:53;:::i;:::-;7548:63;;7504:117;7299:329;;;;:::o;7634:654::-;7712:6;7720;7769:2;7757:9;7748:7;7744:23;7740:32;7737:119;;;7775:79;;:::i;:::-;7737:119;7895:1;7920:53;7965:7;7956:6;7945:9;7941:22;7920:53;:::i;:::-;7910:63;;7866:117;8050:2;8039:9;8035:18;8022:32;8081:18;8073:6;8070:30;8067:117;;;8103:79;;:::i;:::-;8067:117;8208:63;8263:7;8254:6;8243:9;8239:22;8208:63;:::i;:::-;8198:73;;7993:288;7634:654;;;;;:::o;8294:474::-;8362:6;8370;8419:2;8407:9;8398:7;8394:23;8390:32;8387:119;;;8425:79;;:::i;:::-;8387:119;8545:1;8570:53;8615:7;8606:6;8595:9;8591:22;8570:53;:::i;:::-;8560:63;;8516:117;8672:2;8698:53;8743:7;8734:6;8723:9;8719:22;8698:53;:::i;:::-;8688:63;;8643:118;8294:474;;;;;:::o;8774:179::-;8843:10;8864:46;8906:3;8898:6;8864:46;:::i;:::-;8942:4;8937:3;8933:14;8919:28;;8774:179;;;;:::o;8959:118::-;9046:24;9064:5;9046:24;:::i;:::-;9041:3;9034:37;8959:118;;:::o;9113:732::-;9232:3;9261:54;9309:5;9261:54;:::i;:::-;9331:86;9410:6;9405:3;9331:86;:::i;:::-;9324:93;;9441:56;9491:5;9441:56;:::i;:::-;9520:7;9551:1;9536:284;9561:6;9558:1;9555:13;9536:284;;;9637:6;9631:13;9664:63;9723:3;9708:13;9664:63;:::i;:::-;9657:70;;9750:60;9803:6;9750:60;:::i;:::-;9740:70;;9596:224;9583:1;9580;9576:9;9571:14;;9536:284;;;9540:14;9836:3;9829:10;;9237:608;;;9113:732;;;;:::o;9851:109::-;9932:21;9947:5;9932:21;:::i;:::-;9927:3;9920:34;9851:109;;:::o;9966:360::-;10052:3;10080:38;10112:5;10080:38;:::i;:::-;10134:70;10197:6;10192:3;10134:70;:::i;:::-;10127:77;;10213:52;10258:6;10253:3;10246:4;10239:5;10235:16;10213:52;:::i;:::-;10290:29;10312:6;10290:29;:::i;:::-;10285:3;10281:39;10274:46;;10056:270;9966:360;;;;:::o;10332:364::-;10420:3;10448:39;10481:5;10448:39;:::i;:::-;10503:71;10567:6;10562:3;10503:71;:::i;:::-;10496:78;;10583:52;10628:6;10623:3;10616:4;10609:5;10605:16;10583:52;:::i;:::-;10660:29;10682:6;10660:29;:::i;:::-;10655:3;10651:39;10644:46;;10424:272;10332:364;;;;:::o;10702:377::-;10808:3;10836:39;10869:5;10836:39;:::i;:::-;10891:89;10973:6;10968:3;10891:89;:::i;:::-;10884:96;;10989:52;11034:6;11029:3;11022:4;11015:5;11011:16;10989:52;:::i;:::-;11066:6;11061:3;11057:16;11050:23;;10812:267;10702:377;;;;:::o;11085:366::-;11227:3;11248:67;11312:2;11307:3;11248:67;:::i;:::-;11241:74;;11324:93;11413:3;11324:93;:::i;:::-;11442:2;11437:3;11433:12;11426:19;;11085:366;;;:::o;11457:::-;11599:3;11620:67;11684:2;11679:3;11620:67;:::i;:::-;11613:74;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11457:366;;;:::o;11829:::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:::-;19039:3;19060:67;19124:2;19119:3;19060:67;:::i;:::-;19053:74;;19136:93;19225:3;19136:93;:::i;:::-;19254:2;19249:3;19245:12;19238:19;;18897:366;;;:::o;19269:::-;19411:3;19432:67;19496:2;19491:3;19432:67;:::i;:::-;19425:74;;19508:93;19597:3;19508:93;:::i;:::-;19626:2;19621:3;19617:12;19610:19;;19269:366;;;:::o;19641:::-;19783:3;19804:67;19868:2;19863:3;19804:67;:::i;:::-;19797:74;;19880:93;19969:3;19880:93;:::i;:::-;19998:2;19993:3;19989:12;19982:19;;19641:366;;;:::o;20013:::-;20155:3;20176:67;20240:2;20235:3;20176:67;:::i;:::-;20169:74;;20252:93;20341:3;20252:93;:::i;:::-;20370:2;20365:3;20361:12;20354:19;;20013:366;;;:::o;20385:::-;20527:3;20548:67;20612:2;20607:3;20548:67;:::i;:::-;20541:74;;20624:93;20713:3;20624:93;:::i;:::-;20742:2;20737:3;20733:12;20726:19;;20385:366;;;:::o;20757:::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20757:366;;;:::o;21129:::-;21271:3;21292:67;21356:2;21351:3;21292:67;:::i;:::-;21285:74;;21368:93;21457:3;21368:93;:::i;:::-;21486:2;21481:3;21477:12;21470:19;;21129:366;;;:::o;21501:108::-;21578:24;21596:5;21578:24;:::i;:::-;21573:3;21566:37;21501:108;;:::o;21615:118::-;21702:24;21720:5;21702:24;:::i;:::-;21697:3;21690:37;21615:118;;:::o;21739:435::-;21919:3;21941:95;22032:3;22023:6;21941:95;:::i;:::-;21934:102;;22053:95;22144:3;22135:6;22053:95;:::i;:::-;22046:102;;22165:3;22158:10;;21739:435;;;;;:::o;22180:222::-;22273:4;22311:2;22300:9;22296:18;22288:26;;22324:71;22392:1;22381:9;22377:17;22368:6;22324:71;:::i;:::-;22180:222;;;;:::o;22408:640::-;22603:4;22641:3;22630:9;22626:19;22618:27;;22655:71;22723:1;22712:9;22708:17;22699:6;22655:71;:::i;:::-;22736:72;22804:2;22793:9;22789:18;22780:6;22736:72;:::i;:::-;22818;22886:2;22875:9;22871:18;22862:6;22818:72;:::i;:::-;22937:9;22931:4;22927:20;22922:2;22911:9;22907:18;22900:48;22965:76;23036:4;23027:6;22965:76;:::i;:::-;22957:84;;22408:640;;;;;;;:::o;23054:332::-;23175:4;23213:2;23202:9;23198:18;23190:26;;23226:71;23294:1;23283:9;23279:17;23270:6;23226:71;:::i;:::-;23307:72;23375:2;23364:9;23360:18;23351:6;23307:72;:::i;:::-;23054:332;;;;;:::o;23392:373::-;23535:4;23573:2;23562:9;23558:18;23550:26;;23622:9;23616:4;23612:20;23608:1;23597:9;23593:17;23586:47;23650:108;23753:4;23744:6;23650:108;:::i;:::-;23642:116;;23392:373;;;;:::o;23771:210::-;23858:4;23896:2;23885:9;23881:18;23873:26;;23909:65;23971:1;23960:9;23956:17;23947:6;23909:65;:::i;:::-;23771:210;;;;:::o;23987:313::-;24100:4;24138:2;24127:9;24123:18;24115:26;;24187:9;24181:4;24177:20;24173:1;24162:9;24158:17;24151:47;24215:78;24288:4;24279:6;24215:78;:::i;:::-;24207:86;;23987:313;;;;:::o;24306:419::-;24472:4;24510:2;24499:9;24495:18;24487:26;;24559:9;24553:4;24549:20;24545:1;24534:9;24530:17;24523:47;24587:131;24713:4;24587:131;:::i;:::-;24579:139;;24306:419;;;:::o;24731:::-;24897:4;24935:2;24924:9;24920:18;24912:26;;24984:9;24978:4;24974:20;24970:1;24959:9;24955:17;24948:47;25012:131;25138:4;25012:131;:::i;:::-;25004:139;;24731:419;;;:::o;25156:::-;25322:4;25360:2;25349:9;25345:18;25337:26;;25409:9;25403:4;25399:20;25395:1;25384:9;25380:17;25373:47;25437:131;25563:4;25437:131;:::i;:::-;25429:139;;25156:419;;;:::o;25581:::-;25747:4;25785:2;25774:9;25770:18;25762:26;;25834:9;25828:4;25824:20;25820:1;25809:9;25805:17;25798:47;25862:131;25988:4;25862:131;:::i;:::-;25854:139;;25581:419;;;:::o;26006:::-;26172:4;26210:2;26199:9;26195:18;26187:26;;26259:9;26253:4;26249:20;26245:1;26234:9;26230:17;26223:47;26287:131;26413:4;26287:131;:::i;:::-;26279:139;;26006:419;;;:::o;26431:::-;26597:4;26635:2;26624:9;26620:18;26612:26;;26684:9;26678:4;26674:20;26670:1;26659:9;26655:17;26648:47;26712:131;26838:4;26712:131;:::i;:::-;26704:139;;26431:419;;;:::o;26856:::-;27022:4;27060:2;27049:9;27045:18;27037:26;;27109:9;27103:4;27099:20;27095:1;27084:9;27080:17;27073:47;27137:131;27263:4;27137:131;:::i;:::-;27129:139;;26856:419;;;:::o;27281:::-;27447:4;27485:2;27474:9;27470:18;27462:26;;27534:9;27528:4;27524:20;27520:1;27509:9;27505:17;27498:47;27562:131;27688:4;27562:131;:::i;:::-;27554:139;;27281:419;;;:::o;27706:::-;27872:4;27910:2;27899:9;27895:18;27887:26;;27959:9;27953:4;27949:20;27945:1;27934:9;27930:17;27923:47;27987:131;28113:4;27987:131;:::i;:::-;27979:139;;27706:419;;;:::o;28131:::-;28297:4;28335:2;28324:9;28320:18;28312:26;;28384:9;28378:4;28374:20;28370:1;28359:9;28355:17;28348:47;28412:131;28538:4;28412:131;:::i;:::-;28404:139;;28131:419;;;:::o;28556:::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28556:419;;;:::o;28981:::-;29147:4;29185:2;29174:9;29170:18;29162:26;;29234:9;29228:4;29224:20;29220:1;29209:9;29205:17;29198:47;29262:131;29388:4;29262:131;:::i;:::-;29254:139;;28981:419;;;:::o;29406:::-;29572:4;29610:2;29599:9;29595:18;29587:26;;29659:9;29653:4;29649:20;29645:1;29634:9;29630:17;29623:47;29687:131;29813:4;29687:131;:::i;:::-;29679:139;;29406:419;;;:::o;29831:::-;29997:4;30035:2;30024:9;30020:18;30012:26;;30084:9;30078:4;30074:20;30070:1;30059:9;30055:17;30048:47;30112:131;30238:4;30112:131;:::i;:::-;30104:139;;29831:419;;;:::o;30256:::-;30422:4;30460:2;30449:9;30445:18;30437:26;;30509:9;30503:4;30499:20;30495:1;30484:9;30480:17;30473:47;30537:131;30663:4;30537:131;:::i;:::-;30529:139;;30256:419;;;:::o;30681:::-;30847:4;30885:2;30874:9;30870:18;30862:26;;30934:9;30928:4;30924:20;30920:1;30909:9;30905:17;30898:47;30962:131;31088:4;30962:131;:::i;:::-;30954:139;;30681:419;;;:::o;31106:::-;31272:4;31310:2;31299:9;31295:18;31287:26;;31359:9;31353:4;31349:20;31345:1;31334:9;31330:17;31323:47;31387:131;31513:4;31387:131;:::i;:::-;31379:139;;31106:419;;;:::o;31531:::-;31697:4;31735:2;31724:9;31720:18;31712:26;;31784:9;31778:4;31774:20;31770:1;31759:9;31755:17;31748:47;31812:131;31938:4;31812:131;:::i;:::-;31804:139;;31531:419;;;:::o;31956:::-;32122:4;32160:2;32149:9;32145:18;32137:26;;32209:9;32203:4;32199:20;32195:1;32184:9;32180:17;32173:47;32237:131;32363:4;32237:131;:::i;:::-;32229:139;;31956:419;;;:::o;32381:::-;32547:4;32585:2;32574:9;32570:18;32562:26;;32634:9;32628:4;32624:20;32620:1;32609:9;32605:17;32598:47;32662:131;32788:4;32662:131;:::i;:::-;32654:139;;32381:419;;;:::o;32806:::-;32972:4;33010:2;32999:9;32995:18;32987:26;;33059:9;33053:4;33049:20;33045:1;33034:9;33030:17;33023:47;33087:131;33213:4;33087:131;:::i;:::-;33079:139;;32806:419;;;:::o;33231:::-;33397:4;33435:2;33424:9;33420:18;33412:26;;33484:9;33478:4;33474:20;33470:1;33459:9;33455:17;33448:47;33512:131;33638:4;33512:131;:::i;:::-;33504:139;;33231:419;;;:::o;33656:::-;33822:4;33860:2;33849:9;33845:18;33837:26;;33909:9;33903:4;33899:20;33895:1;33884:9;33880:17;33873:47;33937:131;34063:4;33937:131;:::i;:::-;33929:139;;33656:419;;;:::o;34081:::-;34247:4;34285:2;34274:9;34270:18;34262:26;;34334:9;34328:4;34324:20;34320:1;34309:9;34305:17;34298:47;34362:131;34488:4;34362:131;:::i;:::-;34354:139;;34081:419;;;:::o;34506:::-;34672:4;34710:2;34699:9;34695:18;34687:26;;34759:9;34753:4;34749:20;34745:1;34734:9;34730:17;34723:47;34787:131;34913:4;34787:131;:::i;:::-;34779:139;;34506:419;;;:::o;34931:::-;35097:4;35135:2;35124:9;35120:18;35112:26;;35184:9;35178:4;35174:20;35170:1;35159:9;35155:17;35148:47;35212:131;35338:4;35212:131;:::i;:::-;35204:139;;34931:419;;;:::o;35356:::-;35522:4;35560:2;35549:9;35545:18;35537:26;;35609:9;35603:4;35599:20;35595:1;35584:9;35580:17;35573:47;35637:131;35763:4;35637:131;:::i;:::-;35629:139;;35356:419;;;:::o;35781:::-;35947:4;35985:2;35974:9;35970:18;35962:26;;36034:9;36028:4;36024:20;36020:1;36009:9;36005:17;35998:47;36062:131;36188:4;36062:131;:::i;:::-;36054:139;;35781:419;;;:::o;36206:222::-;36299:4;36337:2;36326:9;36322:18;36314:26;;36350:71;36418:1;36407:9;36403:17;36394:6;36350:71;:::i;:::-;36206:222;;;;:::o;36434:129::-;36468:6;36495:20;;:::i;:::-;36485:30;;36524:33;36552:4;36544:6;36524:33;:::i;:::-;36434:129;;;:::o;36569:75::-;36602:6;36635:2;36629:9;36619:19;;36569:75;:::o;36650:307::-;36711:4;36801:18;36793:6;36790:30;36787:56;;;36823:18;;:::i;:::-;36787:56;36861:29;36883:6;36861:29;:::i;:::-;36853:37;;36945:4;36939;36935:15;36927:23;;36650:307;;;:::o;36963:308::-;37025:4;37115:18;37107:6;37104:30;37101:56;;;37137:18;;:::i;:::-;37101:56;37175:29;37197:6;37175:29;:::i;:::-;37167:37;;37259:4;37253;37249:15;37241:23;;36963:308;;;:::o;37277:132::-;37344:4;37367:3;37359:11;;37397:4;37392:3;37388:14;37380:22;;37277:132;;;:::o;37415:114::-;37482:6;37516:5;37510:12;37500:22;;37415:114;;;:::o;37535:98::-;37586:6;37620:5;37614:12;37604:22;;37535:98;;;:::o;37639:99::-;37691:6;37725:5;37719:12;37709:22;;37639:99;;;:::o;37744:113::-;37814:4;37846;37841:3;37837:14;37829:22;;37744:113;;;:::o;37863:184::-;37962:11;37996:6;37991:3;37984:19;38036:4;38031:3;38027:14;38012:29;;37863:184;;;;:::o;38053:168::-;38136:11;38170:6;38165:3;38158:19;38210:4;38205:3;38201:14;38186:29;;38053:168;;;;:::o;38227:169::-;38311:11;38345:6;38340:3;38333:19;38385:4;38380:3;38376:14;38361:29;;38227:169;;;;:::o;38402:148::-;38504:11;38541:3;38526:18;;38402:148;;;;:::o;38556:305::-;38596:3;38615:20;38633:1;38615:20;:::i;:::-;38610:25;;38649:20;38667:1;38649:20;:::i;:::-;38644:25;;38803:1;38735:66;38731:74;38728:1;38725:81;38722:107;;;38809:18;;:::i;:::-;38722:107;38853:1;38850;38846:9;38839:16;;38556:305;;;;:::o;38867:185::-;38907:1;38924:20;38942:1;38924:20;:::i;:::-;38919:25;;38958:20;38976:1;38958:20;:::i;:::-;38953:25;;38997:1;38987:35;;39002:18;;:::i;:::-;38987:35;39044:1;39041;39037:9;39032:14;;38867:185;;;;:::o;39058:348::-;39098:7;39121:20;39139:1;39121:20;:::i;:::-;39116:25;;39155:20;39173:1;39155:20;:::i;:::-;39150:25;;39343:1;39275:66;39271:74;39268:1;39265:81;39260:1;39253:9;39246:17;39242:105;39239:131;;;39350:18;;:::i;:::-;39239:131;39398:1;39395;39391:9;39380:20;;39058:348;;;;:::o;39412:191::-;39452:4;39472:20;39490:1;39472:20;:::i;:::-;39467:25;;39506:20;39524:1;39506:20;:::i;:::-;39501:25;;39545:1;39542;39539:8;39536:34;;;39550:18;;:::i;:::-;39536:34;39595:1;39592;39588:9;39580:17;;39412:191;;;;:::o;39609:96::-;39646:7;39675:24;39693:5;39675:24;:::i;:::-;39664:35;;39609:96;;;:::o;39711:90::-;39745:7;39788:5;39781:13;39774:21;39763:32;;39711:90;;;:::o;39807:149::-;39843:7;39883:66;39876:5;39872:78;39861:89;;39807:149;;;:::o;39962:89::-;39998:7;40038:6;40031:5;40027:18;40016:29;;39962:89;;;:::o;40057:126::-;40094:7;40134:42;40127:5;40123:54;40112:65;;40057:126;;;:::o;40189:77::-;40226:7;40255:5;40244:16;;40189:77;;;:::o;40272:154::-;40356:6;40351:3;40346;40333:30;40418:1;40409:6;40404:3;40400:16;40393:27;40272:154;;;:::o;40432:307::-;40500:1;40510:113;40524:6;40521:1;40518:13;40510:113;;;40609:1;40604:3;40600:11;40594:18;40590:1;40585:3;40581:11;40574:39;40546:2;40543:1;40539:10;40534:15;;40510:113;;;40641:6;40638:1;40635:13;40632:101;;;40721:1;40712:6;40707:3;40703:16;40696:27;40632:101;40481:258;40432:307;;;:::o;40745:320::-;40789:6;40826:1;40820:4;40816:12;40806:22;;40873:1;40867:4;40863:12;40894:18;40884:81;;40950:4;40942:6;40938:17;40928:27;;40884:81;41012:2;41004:6;41001:14;40981:18;40978:38;40975:84;;;41031:18;;:::i;:::-;40975:84;40796:269;40745:320;;;:::o;41071:281::-;41154:27;41176:4;41154:27;:::i;:::-;41146:6;41142:40;41284:6;41272:10;41269:22;41248:18;41236:10;41233:34;41230:62;41227:88;;;41295:18;;:::i;:::-;41227:88;41335:10;41331:2;41324:22;41114:238;41071:281;;:::o;41358:233::-;41397:3;41420:24;41438:5;41420:24;:::i;:::-;41411:33;;41466:66;41459:5;41456:77;41453:103;;;41536:18;;:::i;:::-;41453:103;41583:1;41576:5;41572:13;41565:20;;41358:233;;;:::o;41597:176::-;41629:1;41646:20;41664:1;41646:20;:::i;:::-;41641:25;;41680:20;41698:1;41680:20;:::i;:::-;41675:25;;41719:1;41709:35;;41724:18;;:::i;:::-;41709:35;41765:1;41762;41758:9;41753:14;;41597:176;;;;:::o;41779:180::-;41827:77;41824:1;41817:88;41924:4;41921:1;41914:15;41948:4;41945:1;41938:15;41965:180;42013:77;42010:1;42003:88;42110:4;42107:1;42100:15;42134:4;42131:1;42124:15;42151:180;42199:77;42196:1;42189:88;42296:4;42293:1;42286:15;42320:4;42317:1;42310:15;42337:180;42385:77;42382:1;42375:88;42482:4;42479:1;42472:15;42506:4;42503:1;42496:15;42523:180;42571:77;42568:1;42561:88;42668:4;42665:1;42658:15;42692:4;42689:1;42682:15;42709:180;42757:77;42754:1;42747:88;42854:4;42851:1;42844:15;42878:4;42875:1;42868:15;42895:117;43004:1;43001;42994:12;43018:117;43127:1;43124;43117:12;43141:117;43250:1;43247;43240:12;43264:117;43373:1;43370;43363:12;43387:102;43428:6;43479:2;43475:7;43470:2;43463:5;43459:14;43455:28;43445:38;;43387:102;;;:::o;43495:170::-;43635:22;43631:1;43623:6;43619:14;43612:46;43495:170;:::o;43671:230::-;43811:34;43807:1;43799:6;43795:14;43788:58;43880:13;43875:2;43867:6;43863:15;43856:38;43671:230;:::o;43907:237::-;44047:34;44043:1;44035:6;44031:14;44024:58;44116:20;44111:2;44103:6;44099:15;44092:45;43907:237;:::o;44150:225::-;44290:34;44286:1;44278:6;44274:14;44267:58;44359:8;44354:2;44346:6;44342:15;44335:33;44150:225;:::o;44381:178::-;44521:30;44517:1;44509:6;44505:14;44498:54;44381:178;:::o;44565:223::-;44705:34;44701:1;44693:6;44689:14;44682:58;44774:6;44769:2;44761:6;44757:15;44750:31;44565:223;:::o;44794:175::-;44934:27;44930:1;44922:6;44918:14;44911:51;44794:175;:::o;44975:225::-;45115:34;45111:1;45103:6;45099:14;45092:58;45184:8;45179:2;45171:6;45167:15;45160:33;44975:225;:::o;45206:231::-;45346:34;45342:1;45334:6;45330:14;45323:58;45415:14;45410:2;45402:6;45398:15;45391:39;45206:231;:::o;45443:166::-;45583:18;45579:1;45571:6;45567:14;45560:42;45443:166;:::o;45615:243::-;45755:34;45751:1;45743:6;45739:14;45732:58;45824:26;45819:2;45811:6;45807:15;45800:51;45615:243;:::o;45864:230::-;46004:34;46000:1;45992:6;45988:14;45981:58;46073:13;46068:2;46060:6;46056:15;46049:38;45864:230;:::o;46100:229::-;46240:34;46236:1;46228:6;46224:14;46217:58;46309:12;46304:2;46296:6;46292:15;46285:37;46100:229;:::o;46335:228::-;46475:34;46471:1;46463:6;46459:14;46452:58;46544:11;46539:2;46531:6;46527:15;46520:36;46335:228;:::o;46569:233::-;46709:34;46705:1;46697:6;46693:14;46686:58;46778:16;46773:2;46765:6;46761:15;46754:41;46569:233;:::o;46808:182::-;46948:34;46944:1;46936:6;46932:14;46925:58;46808:182;:::o;46996:236::-;47136:34;47132:1;47124:6;47120:14;47113:58;47205:19;47200:2;47192:6;47188:15;47181:44;46996:236;:::o;47238:231::-;47378:34;47374:1;47366:6;47362:14;47355:58;47447:14;47442:2;47434:6;47430:15;47423:39;47238:231;:::o;47475:176::-;47615:28;47611:1;47603:6;47599:14;47592:52;47475:176;:::o;47657:182::-;47797:34;47793:1;47785:6;47781:14;47774:58;47657:182;:::o;47845:228::-;47985:34;47981:1;47973:6;47969:14;47962:58;48054:11;48049:2;48041:6;48037:15;48030:36;47845:228;:::o;48079:234::-;48219:34;48215:1;48207:6;48203:14;48196:58;48288:17;48283:2;48275:6;48271:15;48264:42;48079:234;:::o;48319:220::-;48459:34;48455:1;48447:6;48443:14;48436:58;48528:3;48523:2;48515:6;48511:15;48504:28;48319:220;:::o;48545:232::-;48685:34;48681:1;48673:6;48669:14;48662:58;48754:15;48749:2;48741:6;48737:15;48730:40;48545:232;:::o;48783:236::-;48923:34;48919:1;48911:6;48907:14;48900:58;48992:19;48987:2;48979:6;48975:15;48968:44;48783:236;:::o;49025:172::-;49165:24;49161:1;49153:6;49149:14;49142:48;49025:172;:::o;49203:231::-;49343:34;49339:1;49331:6;49327:14;49320:58;49412:14;49407:2;49399:6;49395:15;49388:39;49203:231;:::o;49440:235::-;49580:34;49576:1;49568:6;49564:14;49557:58;49649:18;49644:2;49636:6;49632:15;49625:43;49440:235;:::o;49681:122::-;49754:24;49772:5;49754:24;:::i;:::-;49747:5;49744:35;49734:63;;49793:1;49790;49783:12;49734:63;49681:122;:::o;49809:116::-;49879:21;49894:5;49879:21;:::i;:::-;49872:5;49869:32;49859:60;;49915:1;49912;49905:12;49859:60;49809:116;:::o;49931:120::-;50003:23;50020:5;50003:23;:::i;:::-;49996:5;49993:34;49983:62;;50041:1;50038;50031:12;49983:62;49931:120;:::o;50057:::-;50129:23;50146:5;50129:23;:::i;:::-;50122:5;50119:34;50109:62;;50167:1;50164;50157:12;50109:62;50057:120;:::o;50183:122::-;50256:24;50274:5;50256:24;:::i;:::-;50249:5;50246:35;50236:63;;50295:1;50292;50285:12;50236:63;50183:122;:::o
Swarm Source
ipfs://331c9552306a6824ac9ca1eb37a0ceb23a6d28bd154c61724e5aff45ee9f272e
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.