ERC-721
Overview
Max Total Supply
155 PFISH
Holders
46
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 PFISHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PokerFish
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-25 */ // SPDX-License-Identifier: UNLICENSED // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: 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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not 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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: pokerfish.sol /** PokerFishNFT Contract Developed from HashLip's NFTFull Contract */ pragma solidity >=0.7.0 <0.9.0; contract PokerFish is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; // 0.1 Ether uint256 public cost = 100000000000000000; uint256 public maxSupply = 5000; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; bool ownerCanMint = true; mapping(address => bool) whiteListedUsers; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { baseURI = _initBaseURI; mintGiveawayTokens(); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mintGiveawayTokens() public onlyOwner{ require(ownerCanMint, "Giveaway tokens already minted!"); uint256 supply = totalSupply(); require(supply + 100 <= maxSupply, "Cannot mint over 5000"); for (uint256 i = 1; i <= 100; ++i){ _safeMint(msg.sender, supply + i); } ownerCanMint = false; } //Mint Function function mint(uint256 _mintAmount) public payable { require(!paused, "Minting not active yet!"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); require(msg.sender != owner(), "Owner cannot mint tokens other than giveaways!"); if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); } require(msg.value == cost * _mintAmount, "Amount of Ether sent must be equal to cost to mint _mintAmount NFTS"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { return whiteListedUsers[_user]; } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed){ return string(abi.encodePacked(baseURI, Strings.toString(tokenId))); } else{ return _baseURI(); } } //Reveals NFT URI function reveal(string memory _revealedURI) public onlyOwner { require(!revealed, "Cannot change revealed state more than once!"); revealed = true; baseURI = _revealedURI; } function setBaseURI(string memory _revealedURI) public onlyOwner { baseURI = _revealedURI; } function togglePause() public onlyOwner { paused = !paused; } function removeWhitelist() public onlyOwner { require(onlyWhitelisted, "Cannot change whitelisted state more than once!"); onlyWhitelisted = false; } function whitelistUsers(address[] calldata _users) public onlyOwner { for (uint i = 0; i < _users.length; ++i){ whiteListedUsers[_users[i]] = true; } } function withdraw() public payable onlyOwner { uint totalEth = address(this).balance; uint t1 = totalEth * 6 / 100; address a_send = 0xcC2B2295ca9e2b8513d549B54DF1D8Fb9072f4b1; (bool success,) = a_send.call{value: t1}(""); require(success, "Failed to send ether"); uint t2 = totalEth * 2 / 100; a_send = 0x3E2c9c3791D3765b0779886DcC6636f17f6C5381; (success,) = a_send.call{value: t2}(""); require(success, "Failed to send ether"); a_send = 0xE5232A951aA1B5562298dfc04Ff8a73F2dA5333e; (success,) = a_send.call{value: t2}(""); require(success, "Failed to send ether"); uint t3 = totalEth * 20 / 100; a_send = 0x639F6f3DB538C633c4332782d76efFF048372288; (success,) = a_send.call{value: t3}(""); require(success, "Failed to send ether"); a_send = 0x00ba4A12E8c861dF5d4e182c18f7fC4666c299Ef; (success,) = a_send.call{value: t3}(""); require(success, "Failed to send ether"); a_send = 0x3EA7f8F24b9d7dDf33488193B211b4aB2b27E742; (success,) = a_send.call{value: t3}(""); require(success, "Failed to send ether"); a_send = 0xaBaD7A69a19cbCa3f887E510d56C81EB2180B8E2; (success,) = a_send.call{value: t3}(""); require(success, "Failed to send ether"); a_send = 0xb5DbEF7A2bA479f092824e65867fCBF3f1d7b310; (success,) = a_send.call{value: address(this).balance}(""); require(success, "Failed to send ether"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintGiveawayTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_revealedURI","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_revealedURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405267016345785d8a0000600c55611388600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055506001600e60036101000a81548160ff0219169083151502179055503480156200008f57600080fd5b506040516200681f3803806200681f8339818101604052810190620000b5919062000f77565b82828160009080519060200190620000cf92919062000e00565b508060019080519060200190620000e892919062000e00565b5050506200010b620000ff6200013d60201b60201c565b6200014560201b60201c565b80600b90805190602001906200012392919062000e00565b50620001346200020b60201b60201c565b505050620017f9565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021b6200013d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000241620003b860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029190620012a2565b60405180910390fd5b600e60039054906101000a900460ff16620002ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e3906200125e565b60405180910390fd5b6000620002fe620003e260201b60201c565b9050600d5460648262000312919062001372565b111562000356576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034d90620012c4565b60405180910390fd5b6000600190505b6064811162000399576200038533828462000379919062001372565b620003ef60201b60201c565b80620003919062001516565b90506200035d565b506000600e60036101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620004118282604051806020016040528060008152506200041560201b60201c565b5050565b6200042783836200048360201b60201c565b6200043c60008484846200067d60201b60201c565b6200047e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047590620011f8565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ed9062001280565b60405180910390fd5b62000507816200083760201b60201c565b156200054a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000541906200121a565b60405180910390fd5b6200055e60008383620008a360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005b0919062001372565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200067960008383620009ea60201b60201c565b5050565b6000620006ab8473ffffffffffffffffffffffffffffffffffffffff16620009ef60201b6200219b1760201c565b156200082a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006dd6200013d60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007019493929190620011a4565b602060405180830381600087803b1580156200071c57600080fd5b505af19250505080156200075057506040513d601f19601f820116820180604052508101906200074d919062000f45565b60015b620007d9573d806000811462000783576040519150601f19603f3d011682016040523d82523d6000602084013e62000788565b606091505b50600081511415620007d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c890620011f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200082f565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008bb83838362000a1260201b620021be1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200090857620009028162000a1760201b60201c565b62000950565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200094f576200094e838262000a6060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200099d57620009978162000bdd60201b60201c565b620009e5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009e457620009e3828262000cb960201b60201c565b5b5b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a7a8462000d4560201b6200174a1760201c565b62000a869190620013cf565b905060006007600084815260200190815260200160002054905081811462000b6c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000bf39190620013cf565b905060006009600084815260200190815260200160002054905060006008838154811062000c265762000c25620015f1565b5b90600052602060002001549050806008838154811062000c4b5762000c4a620015f1565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c9d5762000c9c620015c2565b5b6001900381819060005260206000200160009055905550505050565b600062000cd18362000d4560201b6200174a1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000db9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000db0906200123c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e0e90620014aa565b90600052602060002090601f01602090048101928262000e32576000855562000e7e565b82601f1062000e4d57805160ff191683800117855562000e7e565b8280016001018555821562000e7e579182015b8281111562000e7d57825182559160200191906001019062000e60565b5b50905062000e8d919062000e91565b5090565b5b8082111562000eac57600081600090555060010162000e92565b5090565b600062000ec762000ec1846200130f565b620012e6565b90508281526020810184848401111562000ee65762000ee562001654565b5b62000ef384828562001474565b509392505050565b60008151905062000f0c81620017df565b92915050565b600082601f83011262000f2a5762000f296200164f565b5b815162000f3c84826020860162000eb0565b91505092915050565b60006020828403121562000f5e5762000f5d6200165e565b5b600062000f6e8482850162000efb565b91505092915050565b60008060006060848603121562000f935762000f926200165e565b5b600084015167ffffffffffffffff81111562000fb45762000fb362001659565b5b62000fc28682870162000f12565b935050602084015167ffffffffffffffff81111562000fe65762000fe562001659565b5b62000ff48682870162000f12565b925050604084015167ffffffffffffffff81111562001018576200101762001659565b5b620010268682870162000f12565b9150509250925092565b6200103b816200140a565b82525050565b60006200104e8262001345565b6200105a818562001350565b93506200106c81856020860162001474565b620010778162001663565b840191505092915050565b60006200109160328362001361565b91506200109e8262001674565b604082019050919050565b6000620010b8601c8362001361565b9150620010c582620016c3565b602082019050919050565b6000620010df602a8362001361565b9150620010ec82620016ec565b604082019050919050565b600062001106601f8362001361565b915062001113826200173b565b602082019050919050565b60006200112d60208362001361565b91506200113a8262001764565b602082019050919050565b60006200115460208362001361565b915062001161826200178d565b602082019050919050565b60006200117b60158362001361565b91506200118882620017b6565b602082019050919050565b6200119e816200146a565b82525050565b6000608082019050620011bb600083018762001030565b620011ca602083018662001030565b620011d9604083018562001193565b8181036060830152620011ed818462001041565b905095945050505050565b60006020820190508181036000830152620012138162001082565b9050919050565b600060208201905081810360008301526200123581620010a9565b9050919050565b600060208201905081810360008301526200125781620010d0565b9050919050565b600060208201905081810360008301526200127981620010f7565b9050919050565b600060208201905081810360008301526200129b816200111e565b9050919050565b60006020820190508181036000830152620012bd8162001145565b9050919050565b60006020820190508181036000830152620012df816200116c565b9050919050565b6000620012f262001305565b9050620013008282620014e0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200132d576200132c62001620565b5b620013388262001663565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200137f826200146a565b91506200138c836200146a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013c457620013c362001564565b5b828201905092915050565b6000620013dc826200146a565b9150620013e9836200146a565b925082821015620013ff57620013fe62001564565b5b828203905092915050565b600062001417826200144a565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200149457808201518184015260208101905062001477565b83811115620014a4576000848401525b50505050565b60006002820490506001821680620014c357607f821691505b60208210811415620014da57620014d962001593565b5b50919050565b620014eb8262001663565b810181811067ffffffffffffffff821117156200150d576200150c62001620565b5b80604052505050565b600062001523826200146a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001559576200155862001564565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f476976656177617920746f6b656e7320616c7265616479206d696e7465642100600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74206d696e74206f76657220353030300000000000000000000000600082015250565b620017ea816200141e565b8114620017f657600080fd5b50565b61501680620018096000396000f3fe6080604052600436106101f95760003560e01c80636352211e1161010d578063a1ade66b116100a0578063c87b56dd1161006f578063c87b56dd146106cd578063d5abeb011461070a578063e985e9c514610735578063edec5f2714610772578063f2fde38b1461079b576101f9565b8063a1ade66b1461064d578063a22cb46514610664578063b88d4fde1461068d578063c4ae3168146106b6576101f9565b80638da5cb5b116100dc5780638da5cb5b146105b057806395d89b41146105db5780639c70b51214610606578063a0712d6814610631576101f9565b80636352211e146104f45780636c0360eb1461053157806370a082311461055c578063715018a614610599576101f9565b80632f745c59116101905780634c2612471161015f5780634c2612471461040f5780634f6ccce714610438578063518302271461047557806355f804b3146104a05780635c975abb146104c9576101f9565b80632f745c59146103625780633af32abf1461039f5780633ccfd60b146103dc57806342842e0e146103e6576101f9565b806313faede6116101cc57806313faede6146102cc57806317f708fb146102f757806318160ddd1461030e57806323b872dd14610339576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061385e565b6107c4565b6040516102329190613f37565b60405180910390f35b34801561024757600080fd5b5061025061083e565b60405161025d9190613f52565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613901565b6108d0565b60405161029a9190613ed0565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906137d1565b610955565b005b3480156102d857600080fd5b506102e1610a6d565b6040516102ee9190614314565b60405180910390f35b34801561030357600080fd5b5061030c610a73565b005b34801561031a57600080fd5b50610323610b5b565b6040516103309190614314565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906136bb565b610b68565b005b34801561036e57600080fd5b50610389600480360381019061038491906137d1565b610bc8565b6040516103969190614314565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c1919061364e565b610c6d565b6040516103d39190613f37565b60405180910390f35b6103e4610cc3565b005b3480156103f257600080fd5b5061040d600480360381019061040891906136bb565b6113bc565b005b34801561041b57600080fd5b50610436600480360381019061043191906138b8565b6113dc565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613901565b6114dd565b60405161046c9190614314565b60405180910390f35b34801561048157600080fd5b5061048a61154e565b6040516104979190613f37565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c291906138b8565b611561565b005b3480156104d557600080fd5b506104de6115f7565b6040516104eb9190613f37565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613901565b61160a565b6040516105289190613ed0565b60405180910390f35b34801561053d57600080fd5b506105466116bc565b6040516105539190613f52565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e919061364e565b61174a565b6040516105909190614314565b60405180910390f35b3480156105a557600080fd5b506105ae611802565b005b3480156105bc57600080fd5b506105c561188a565b6040516105d29190613ed0565b60405180910390f35b3480156105e757600080fd5b506105f06118b4565b6040516105fd9190613f52565b60405180910390f35b34801561061257600080fd5b5061061b611946565b6040516106289190613f37565b60405180910390f35b61064b60048036038101906106469190613901565b611959565b005b34801561065957600080fd5b50610662611bad565b005b34801561067057600080fd5b5061068b60048036038101906106869190613791565b611d29565b005b34801561069957600080fd5b506106b460048036038101906106af919061370e565b611d3f565b005b3480156106c257600080fd5b506106cb611da1565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613901565b611e49565b6040516107019190613f52565b60405180910390f35b34801561071657600080fd5b5061071f611eea565b60405161072c9190614314565b60405180910390f35b34801561074157600080fd5b5061075c6004803603810190610757919061367b565b611ef0565b6040516107699190613f37565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613811565b611f84565b005b3480156107a757600080fd5b506107c260048036038101906107bd919061364e565b6120a3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108375750610836826121c3565b5b9050919050565b60606000805461084d906145e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610879906145e4565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b60006108db826122a5565b61091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190614194565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109608261160a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890614234565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f0612311565b73ffffffffffffffffffffffffffffffffffffffff161480610a1f5750610a1e81610a19612311565b611ef0565b5b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a55906140d4565b60405180910390fd5b610a688383612319565b505050565b600c5481565b610a7b612311565b73ffffffffffffffffffffffffffffffffffffffff16610a9961188a565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae6906141b4565b60405180910390fd5b600e60029054906101000a900460ff16610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906141f4565b60405180910390fd5b6000600e60026101000a81548160ff021916908315150217905550565b6000600880549050905090565b610b79610b73612311565b826123d2565b610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90614254565b60405180910390fd5b610bc38383836124b0565b505050565b6000610bd38361174a565b8210610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90613f94565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ccb612311565b73ffffffffffffffffffffffffffffffffffffffff16610ce961188a565b73ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d36906141b4565b60405180910390fd5b600047905060006064600683610d5591906144a0565b610d5f919061446f565b9050600073cc2b2295ca9e2b8513d549b54df1d8fb9072f4b1905060008173ffffffffffffffffffffffffffffffffffffffff1683604051610da090613ebb565b60006040518083038185875af1925050503d8060008114610ddd576040519150601f19603f3d011682016040523d82523d6000602084013e610de2565b606091505b5050905080610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d906141d4565b60405180910390fd5b60006064600286610e3791906144a0565b610e41919061446f565b9050733e2c9c3791d3765b0779886dcc6636f17f6c538192508273ffffffffffffffffffffffffffffffffffffffff1681604051610e7e90613ebb565b60006040518083038185875af1925050503d8060008114610ebb576040519150601f19603f3d011682016040523d82523d6000602084013e610ec0565b606091505b50508092505081610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906141d4565b60405180910390fd5b73e5232a951aa1b5562298dfc04ff8a73f2da5333e92508273ffffffffffffffffffffffffffffffffffffffff1681604051610f4190613ebb565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b50508092505081610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc0906141d4565b60405180910390fd5b60006064601487610fda91906144a0565b610fe4919061446f565b905073639f6f3db538c633c4332782d76efff04837228893508373ffffffffffffffffffffffffffffffffffffffff168160405161102190613ebb565b60006040518083038185875af1925050503d806000811461105e576040519150601f19603f3d011682016040523d82523d6000602084013e611063565b606091505b505080935050826110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0906141d4565b60405180910390fd5b72ba4a12e8c861df5d4e182c18f7fc4666c299ef93508373ffffffffffffffffffffffffffffffffffffffff16816040516110e390613ebb565b60006040518083038185875af1925050503d8060008114611120576040519150601f19603f3d011682016040523d82523d6000602084013e611125565b606091505b5050809350508261116b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611162906141d4565b60405180910390fd5b733ea7f8f24b9d7ddf33488193b211b4ab2b27e74293508373ffffffffffffffffffffffffffffffffffffffff16816040516111a690613ebb565b60006040518083038185875af1925050503d80600081146111e3576040519150601f19603f3d011682016040523d82523d6000602084013e6111e8565b606091505b5050809350508261122e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611225906141d4565b60405180910390fd5b73abad7a69a19cbca3f887e510d56c81eb2180b8e293508373ffffffffffffffffffffffffffffffffffffffff168160405161126990613ebb565b60006040518083038185875af1925050503d80600081146112a6576040519150601f19603f3d011682016040523d82523d6000602084013e6112ab565b606091505b505080935050826112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e8906141d4565b60405180910390fd5b73b5dbef7a2ba479f092824e65867fcbf3f1d7b31093508373ffffffffffffffffffffffffffffffffffffffff164760405161132c90613ebb565b60006040518083038185875af1925050503d8060008114611369576040519150601f19603f3d011682016040523d82523d6000602084013e61136e565b606091505b505080935050826113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab906141d4565b60405180910390fd5b505050505050565b6113d783838360405180602001604052806000815250611d3f565b505050565b6113e4612311565b73ffffffffffffffffffffffffffffffffffffffff1661140261188a565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906141b4565b60405180910390fd5b600e60019054906101000a900460ff16156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90614054565b60405180910390fd5b6001600e60016101000a81548160ff02191690831515021790555080600b90805190602001906114d992919061340c565b5050565b60006114e7610b5b565b8210611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614274565b60405180910390fd5b6008828154811061153c5761153b61477d565b5b90600052602060002001549050919050565b600e60019054906101000a900460ff1681565b611569612311565b73ffffffffffffffffffffffffffffffffffffffff1661158761188a565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906141b4565b60405180910390fd5b80600b90805190602001906115f392919061340c565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614114565b60405180910390fd5b80915050919050565b600b80546116c9906145e4565b80601f01602080910402602001604051908101604052809291908181526020018280546116f5906145e4565b80156117425780601f1061171757610100808354040283529160200191611742565b820191906000526020600020905b81548152906001019060200180831161172557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906140f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180a612311565b73ffffffffffffffffffffffffffffffffffffffff1661182861188a565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611875906141b4565b60405180910390fd5b6118886000612717565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118c3906145e4565b80601f01602080910402602001604051908101604052809291908181526020018280546118ef906145e4565b801561193c5780601f106119115761010080835404028352916020019161193c565b820191906000526020600020905b81548152906001019060200180831161191f57829003601f168201915b5050505050905090565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff16156119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090614034565b60405180910390fd5b60006119b3610b5b565b9050600082116119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906142f4565b60405180910390fd5b600d548282611a079190614419565b1115611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614154565b60405180910390fd5b611a5061188a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590613f74565b60405180910390fd5b60011515600e60029054906101000a900460ff1615151415611b2357611ae333610c6d565b611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990614294565b60405180910390fd5b5b81600c54611b3191906144a0565b3414611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b69906142d4565b60405180910390fd5b6000600190505b828111611ba857611b95338284611b909190614419565b6127dd565b8080611ba090614647565b915050611b79565b505050565b611bb5612311565b73ffffffffffffffffffffffffffffffffffffffff16611bd361188a565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906141b4565b60405180910390fd5b600e60039054906101000a900460ff16611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614134565b60405180910390fd5b6000611c82610b5b565b9050600d54606482611c949190614419565b1115611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906142b4565b60405180910390fd5b6000600190505b60648111611d0a57611cf9338284611cf49190614419565b6127dd565b80611d0390614647565b9050611cdc565b506000600e60036101000a81548160ff02191690831515021790555050565b611d3b611d34612311565b83836127fb565b5050565b611d50611d4a612311565b836123d2565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690614254565b60405180910390fd5b611d9b84848484612968565b50505050565b611da9612311565b73ffffffffffffffffffffffffffffffffffffffff16611dc761188a565b73ffffffffffffffffffffffffffffffffffffffff1614611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e14906141b4565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060611e54826122a5565b611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90614214565b60405180910390fd5b600e60019054906101000a900460ff1615611eda57600b611eb3836129c4565b604051602001611ec4929190613e97565b6040516020818303038152906040529050611ee5565b611ee2612b25565b90505b919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f8c612311565b73ffffffffffffffffffffffffffffffffffffffff16611faa61188a565b73ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff7906141b4565b60405180910390fd5b60005b8282905081101561209e576001600f60008585858181106120275761202661477d565b5b905060200201602081019061203c919061364e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061209790614647565b9050612003565b505050565b6120ab612311565b73ffffffffffffffffffffffffffffffffffffffff166120c961188a565b73ffffffffffffffffffffffffffffffffffffffff161461211f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612116906141b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690613fd4565b60405180910390fd5b61219881612717565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061228e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061229e575061229d82612bb7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661238c8361160a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123dd826122a5565b61241c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612413906140b4565b60405180910390fd5b60006124278361160a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061246957506124688185611ef0565b5b806124a757508373ffffffffffffffffffffffffffffffffffffffff1661248f846108d0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124d08261160a565b73ffffffffffffffffffffffffffffffffffffffff1614612526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251d90613ff4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614074565b60405180910390fd5b6125a1838383612c21565b6125ac600082612319565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fc91906144fa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126539190614419565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612712838383612d35565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127f7828260405180602001604052806000815250612d3a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614094565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161295b9190613f37565b60405180910390a3505050565b6129738484846124b0565b61297f84848484612d95565b6129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b590613fb4565b60405180910390fd5b50505050565b60606000821415612a0c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b20565b600082905060005b60008214612a3e578080612a2790614647565b915050600a82612a37919061446f565b9150612a14565b60008167ffffffffffffffff811115612a5a57612a596147ac565b5b6040519080825280601f01601f191660200182016040528015612a8c5781602001600182028036833780820191505090505b5090505b60008514612b1957600182612aa591906144fa565b9150600a85612ab49190614690565b6030612ac09190614419565b60f81b818381518110612ad657612ad561477d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b12919061446f565b9450612a90565b8093505050505b919050565b6060600b8054612b34906145e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612b60906145e4565b8015612bad5780601f10612b8257610100808354040283529160200191612bad565b820191906000526020600020905b815481529060010190602001808311612b9057829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c2c8383836121be565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6f57612c6a81612f2c565b612cae565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cad57612cac8382612f75565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf157612cec816130e2565b612d30565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2f57612d2e82826131b3565b5b5b505050565b505050565b612d448383613232565b612d516000848484612d95565b612d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8790613fb4565b60405180910390fd5b505050565b6000612db68473ffffffffffffffffffffffffffffffffffffffff1661219b565b15612f1f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ddf612311565b8786866040518563ffffffff1660e01b8152600401612e019493929190613eeb565b602060405180830381600087803b158015612e1b57600080fd5b505af1925050508015612e4c57506040513d601f19601f82011682018060405250810190612e49919061388b565b60015b612ecf573d8060008114612e7c576040519150601f19603f3d011682016040523d82523d6000602084013e612e81565b606091505b50600081511415612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe90613fb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f24565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f828461174a565b612f8c91906144fa565b9050600060076000848152602001908152602001600020549050818114613071576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130f691906144fa565b90506000600960008481526020019081526020016000205490506000600883815481106131265761312561477d565b5b9060005260206000200154905080600883815481106131485761314761477d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131975761319661474e565b5b6001900381819060005260206000200160009055905550505050565b60006131be8361174a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329990614174565b60405180910390fd5b6132ab816122a5565b156132eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e290614014565b60405180910390fd5b6132f760008383612c21565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133479190614419565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461340860008383612d35565b5050565b828054613418906145e4565b90600052602060002090601f01602090048101928261343a5760008555613481565b82601f1061345357805160ff1916838001178555613481565b82800160010185558215613481579182015b82811115613480578251825591602001919060010190613465565b5b50905061348e9190613492565b5090565b5b808211156134ab576000816000905550600101613493565b5090565b60006134c26134bd84614354565b61432f565b9050828152602081018484840111156134de576134dd6147ea565b5b6134e98482856145a2565b509392505050565b60006135046134ff84614385565b61432f565b9050828152602081018484840111156135205761351f6147ea565b5b61352b8482856145a2565b509392505050565b60008135905061354281614f84565b92915050565b60008083601f84011261355e5761355d6147e0565b5b8235905067ffffffffffffffff81111561357b5761357a6147db565b5b602083019150836020820283011115613597576135966147e5565b5b9250929050565b6000813590506135ad81614f9b565b92915050565b6000813590506135c281614fb2565b92915050565b6000815190506135d781614fb2565b92915050565b600082601f8301126135f2576135f16147e0565b5b81356136028482602086016134af565b91505092915050565b600082601f8301126136205761361f6147e0565b5b81356136308482602086016134f1565b91505092915050565b60008135905061364881614fc9565b92915050565b600060208284031215613664576136636147f4565b5b600061367284828501613533565b91505092915050565b60008060408385031215613692576136916147f4565b5b60006136a085828601613533565b92505060206136b185828601613533565b9150509250929050565b6000806000606084860312156136d4576136d36147f4565b5b60006136e286828701613533565b93505060206136f386828701613533565b925050604061370486828701613639565b9150509250925092565b60008060008060808587031215613728576137276147f4565b5b600061373687828801613533565b945050602061374787828801613533565b935050604061375887828801613639565b925050606085013567ffffffffffffffff811115613779576137786147ef565b5b613785878288016135dd565b91505092959194509250565b600080604083850312156137a8576137a76147f4565b5b60006137b685828601613533565b92505060206137c78582860161359e565b9150509250929050565b600080604083850312156137e8576137e76147f4565b5b60006137f685828601613533565b925050602061380785828601613639565b9150509250929050565b60008060208385031215613828576138276147f4565b5b600083013567ffffffffffffffff811115613846576138456147ef565b5b61385285828601613548565b92509250509250929050565b600060208284031215613874576138736147f4565b5b6000613882848285016135b3565b91505092915050565b6000602082840312156138a1576138a06147f4565b5b60006138af848285016135c8565b91505092915050565b6000602082840312156138ce576138cd6147f4565b5b600082013567ffffffffffffffff8111156138ec576138eb6147ef565b5b6138f88482850161360b565b91505092915050565b600060208284031215613917576139166147f4565b5b600061392584828501613639565b91505092915050565b6139378161452e565b82525050565b61394681614540565b82525050565b6000613957826143cb565b61396181856143e1565b93506139718185602086016145b1565b61397a816147f9565b840191505092915050565b6000613990826143d6565b61399a81856143fd565b93506139aa8185602086016145b1565b6139b3816147f9565b840191505092915050565b60006139c9826143d6565b6139d3818561440e565b93506139e38185602086016145b1565b80840191505092915050565b600081546139fc816145e4565b613a06818661440e565b94506001821660008114613a215760018114613a3257613a65565b60ff19831686528186019350613a65565b613a3b856143b6565b60005b83811015613a5d57815481890152600182019150602081019050613a3e565b838801955050505b50505092915050565b6000613a7b602e836143fd565b9150613a868261480a565b604082019050919050565b6000613a9e602b836143fd565b9150613aa982614859565b604082019050919050565b6000613ac16032836143fd565b9150613acc826148a8565b604082019050919050565b6000613ae46026836143fd565b9150613aef826148f7565b604082019050919050565b6000613b076025836143fd565b9150613b1282614946565b604082019050919050565b6000613b2a601c836143fd565b9150613b3582614995565b602082019050919050565b6000613b4d6017836143fd565b9150613b58826149be565b602082019050919050565b6000613b70602c836143fd565b9150613b7b826149e7565b604082019050919050565b6000613b936024836143fd565b9150613b9e82614a36565b604082019050919050565b6000613bb66019836143fd565b9150613bc182614a85565b602082019050919050565b6000613bd9602c836143fd565b9150613be482614aae565b604082019050919050565b6000613bfc6038836143fd565b9150613c0782614afd565b604082019050919050565b6000613c1f602a836143fd565b9150613c2a82614b4c565b604082019050919050565b6000613c426029836143fd565b9150613c4d82614b9b565b604082019050919050565b6000613c65601f836143fd565b9150613c7082614bea565b602082019050919050565b6000613c886016836143fd565b9150613c9382614c13565b602082019050919050565b6000613cab6020836143fd565b9150613cb682614c3c565b602082019050919050565b6000613cce602c836143fd565b9150613cd982614c65565b604082019050919050565b6000613cf16020836143fd565b9150613cfc82614cb4565b602082019050919050565b6000613d146014836143fd565b9150613d1f82614cdd565b602082019050919050565b6000613d37602f836143fd565b9150613d4282614d06565b604082019050919050565b6000613d5a602f836143fd565b9150613d6582614d55565b604082019050919050565b6000613d7d6021836143fd565b9150613d8882614da4565b604082019050919050565b6000613da06000836143f2565b9150613dab82614df3565b600082019050919050565b6000613dc36031836143fd565b9150613dce82614df6565b604082019050919050565b6000613de6602c836143fd565b9150613df182614e45565b604082019050919050565b6000613e096017836143fd565b9150613e1482614e94565b602082019050919050565b6000613e2c6015836143fd565b9150613e3782614ebd565b602082019050919050565b6000613e4f6043836143fd565b9150613e5a82614ee6565b606082019050919050565b6000613e72601b836143fd565b9150613e7d82614f5b565b602082019050919050565b613e9181614598565b82525050565b6000613ea382856139ef565b9150613eaf82846139be565b91508190509392505050565b6000613ec682613d93565b9150819050919050565b6000602082019050613ee5600083018461392e565b92915050565b6000608082019050613f00600083018761392e565b613f0d602083018661392e565b613f1a6040830185613e88565b8181036060830152613f2c818461394c565b905095945050505050565b6000602082019050613f4c600083018461393d565b92915050565b60006020820190508181036000830152613f6c8184613985565b905092915050565b60006020820190508181036000830152613f8d81613a6e565b9050919050565b60006020820190508181036000830152613fad81613a91565b9050919050565b60006020820190508181036000830152613fcd81613ab4565b9050919050565b60006020820190508181036000830152613fed81613ad7565b9050919050565b6000602082019050818103600083015261400d81613afa565b9050919050565b6000602082019050818103600083015261402d81613b1d565b9050919050565b6000602082019050818103600083015261404d81613b40565b9050919050565b6000602082019050818103600083015261406d81613b63565b9050919050565b6000602082019050818103600083015261408d81613b86565b9050919050565b600060208201905081810360008301526140ad81613ba9565b9050919050565b600060208201905081810360008301526140cd81613bcc565b9050919050565b600060208201905081810360008301526140ed81613bef565b9050919050565b6000602082019050818103600083015261410d81613c12565b9050919050565b6000602082019050818103600083015261412d81613c35565b9050919050565b6000602082019050818103600083015261414d81613c58565b9050919050565b6000602082019050818103600083015261416d81613c7b565b9050919050565b6000602082019050818103600083015261418d81613c9e565b9050919050565b600060208201905081810360008301526141ad81613cc1565b9050919050565b600060208201905081810360008301526141cd81613ce4565b9050919050565b600060208201905081810360008301526141ed81613d07565b9050919050565b6000602082019050818103600083015261420d81613d2a565b9050919050565b6000602082019050818103600083015261422d81613d4d565b9050919050565b6000602082019050818103600083015261424d81613d70565b9050919050565b6000602082019050818103600083015261426d81613db6565b9050919050565b6000602082019050818103600083015261428d81613dd9565b9050919050565b600060208201905081810360008301526142ad81613dfc565b9050919050565b600060208201905081810360008301526142cd81613e1f565b9050919050565b600060208201905081810360008301526142ed81613e42565b9050919050565b6000602082019050818103600083015261430d81613e65565b9050919050565b60006020820190506143296000830184613e88565b92915050565b600061433961434a565b90506143458282614616565b919050565b6000604051905090565b600067ffffffffffffffff82111561436f5761436e6147ac565b5b614378826147f9565b9050602081019050919050565b600067ffffffffffffffff8211156143a05761439f6147ac565b5b6143a9826147f9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061442482614598565b915061442f83614598565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614464576144636146c1565b5b828201905092915050565b600061447a82614598565b915061448583614598565b925082614495576144946146f0565b5b828204905092915050565b60006144ab82614598565b91506144b683614598565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ef576144ee6146c1565b5b828202905092915050565b600061450582614598565b915061451083614598565b925082821015614523576145226146c1565b5b828203905092915050565b600061453982614578565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145cf5780820151818401526020810190506145b4565b838111156145de576000848401525b50505050565b600060028204905060018216806145fc57607f821691505b602082108114156146105761460f61471f565b5b50919050565b61461f826147f9565b810181811067ffffffffffffffff8211171561463e5761463d6147ac565b5b80604052505050565b600061465282614598565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614685576146846146c1565b5b600182019050919050565b600061469b82614598565b91506146a683614598565b9250826146b6576146b56146f0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e65722063616e6e6f74206d696e7420746f6b656e73206f74686572207460008201527f68616e2067697665617761797321000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e74696e67206e6f74206163746976652079657421000000000000000000600082015250565b7f43616e6e6f74206368616e67652072657665616c6564207374617465206d6f7260008201527f65207468616e206f6e6365210000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f476976656177617920746f6b656e7320616c7265616479206d696e7465642100600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f43616e6e6f74206368616e67652077686974656c69737465642073746174652060008201527f6d6f7265207468616e206f6e6365210000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f43616e6e6f74206d696e74206f76657220353030300000000000000000000000600082015250565b7f416d6f756e74206f662045746865722073656e74206d7573742062652065717560008201527f616c20746f20636f737420746f206d696e74205f6d696e74416d6f756e74204e60208201527f4654530000000000000000000000000000000000000000000000000000000000604082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f8d8161452e565b8114614f9857600080fd5b50565b614fa481614540565b8114614faf57600080fd5b50565b614fbb8161454c565b8114614fc657600080fd5b50565b614fd281614598565b8114614fdd57600080fd5b5056fea2646970667358221220dad2f7ff39440fe5c1e74f876fddb82d962d43472fe19b919b7f37e25bd1785c64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009506f6b6572466973680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000550464953480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5072517770707377696d39796862357a424b434750755339477a6372543459353850736a574a7742656237580000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80636352211e1161010d578063a1ade66b116100a0578063c87b56dd1161006f578063c87b56dd146106cd578063d5abeb011461070a578063e985e9c514610735578063edec5f2714610772578063f2fde38b1461079b576101f9565b8063a1ade66b1461064d578063a22cb46514610664578063b88d4fde1461068d578063c4ae3168146106b6576101f9565b80638da5cb5b116100dc5780638da5cb5b146105b057806395d89b41146105db5780639c70b51214610606578063a0712d6814610631576101f9565b80636352211e146104f45780636c0360eb1461053157806370a082311461055c578063715018a614610599576101f9565b80632f745c59116101905780634c2612471161015f5780634c2612471461040f5780634f6ccce714610438578063518302271461047557806355f804b3146104a05780635c975abb146104c9576101f9565b80632f745c59146103625780633af32abf1461039f5780633ccfd60b146103dc57806342842e0e146103e6576101f9565b806313faede6116101cc57806313faede6146102cc57806317f708fb146102f757806318160ddd1461030e57806323b872dd14610339576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b506102256004803603810190610220919061385e565b6107c4565b6040516102329190613f37565b60405180910390f35b34801561024757600080fd5b5061025061083e565b60405161025d9190613f52565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613901565b6108d0565b60405161029a9190613ed0565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906137d1565b610955565b005b3480156102d857600080fd5b506102e1610a6d565b6040516102ee9190614314565b60405180910390f35b34801561030357600080fd5b5061030c610a73565b005b34801561031a57600080fd5b50610323610b5b565b6040516103309190614314565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906136bb565b610b68565b005b34801561036e57600080fd5b50610389600480360381019061038491906137d1565b610bc8565b6040516103969190614314565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c1919061364e565b610c6d565b6040516103d39190613f37565b60405180910390f35b6103e4610cc3565b005b3480156103f257600080fd5b5061040d600480360381019061040891906136bb565b6113bc565b005b34801561041b57600080fd5b50610436600480360381019061043191906138b8565b6113dc565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613901565b6114dd565b60405161046c9190614314565b60405180910390f35b34801561048157600080fd5b5061048a61154e565b6040516104979190613f37565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c291906138b8565b611561565b005b3480156104d557600080fd5b506104de6115f7565b6040516104eb9190613f37565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613901565b61160a565b6040516105289190613ed0565b60405180910390f35b34801561053d57600080fd5b506105466116bc565b6040516105539190613f52565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e919061364e565b61174a565b6040516105909190614314565b60405180910390f35b3480156105a557600080fd5b506105ae611802565b005b3480156105bc57600080fd5b506105c561188a565b6040516105d29190613ed0565b60405180910390f35b3480156105e757600080fd5b506105f06118b4565b6040516105fd9190613f52565b60405180910390f35b34801561061257600080fd5b5061061b611946565b6040516106289190613f37565b60405180910390f35b61064b60048036038101906106469190613901565b611959565b005b34801561065957600080fd5b50610662611bad565b005b34801561067057600080fd5b5061068b60048036038101906106869190613791565b611d29565b005b34801561069957600080fd5b506106b460048036038101906106af919061370e565b611d3f565b005b3480156106c257600080fd5b506106cb611da1565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613901565b611e49565b6040516107019190613f52565b60405180910390f35b34801561071657600080fd5b5061071f611eea565b60405161072c9190614314565b60405180910390f35b34801561074157600080fd5b5061075c6004803603810190610757919061367b565b611ef0565b6040516107699190613f37565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613811565b611f84565b005b3480156107a757600080fd5b506107c260048036038101906107bd919061364e565b6120a3565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108375750610836826121c3565b5b9050919050565b60606000805461084d906145e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610879906145e4565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b60006108db826122a5565b61091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190614194565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109608261160a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890614234565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f0612311565b73ffffffffffffffffffffffffffffffffffffffff161480610a1f5750610a1e81610a19612311565b611ef0565b5b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a55906140d4565b60405180910390fd5b610a688383612319565b505050565b600c5481565b610a7b612311565b73ffffffffffffffffffffffffffffffffffffffff16610a9961188a565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae6906141b4565b60405180910390fd5b600e60029054906101000a900460ff16610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906141f4565b60405180910390fd5b6000600e60026101000a81548160ff021916908315150217905550565b6000600880549050905090565b610b79610b73612311565b826123d2565b610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90614254565b60405180910390fd5b610bc38383836124b0565b505050565b6000610bd38361174a565b8210610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90613f94565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ccb612311565b73ffffffffffffffffffffffffffffffffffffffff16610ce961188a565b73ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d36906141b4565b60405180910390fd5b600047905060006064600683610d5591906144a0565b610d5f919061446f565b9050600073cc2b2295ca9e2b8513d549b54df1d8fb9072f4b1905060008173ffffffffffffffffffffffffffffffffffffffff1683604051610da090613ebb565b60006040518083038185875af1925050503d8060008114610ddd576040519150601f19603f3d011682016040523d82523d6000602084013e610de2565b606091505b5050905080610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d906141d4565b60405180910390fd5b60006064600286610e3791906144a0565b610e41919061446f565b9050733e2c9c3791d3765b0779886dcc6636f17f6c538192508273ffffffffffffffffffffffffffffffffffffffff1681604051610e7e90613ebb565b60006040518083038185875af1925050503d8060008114610ebb576040519150601f19603f3d011682016040523d82523d6000602084013e610ec0565b606091505b50508092505081610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906141d4565b60405180910390fd5b73e5232a951aa1b5562298dfc04ff8a73f2da5333e92508273ffffffffffffffffffffffffffffffffffffffff1681604051610f4190613ebb565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b50508092505081610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc0906141d4565b60405180910390fd5b60006064601487610fda91906144a0565b610fe4919061446f565b905073639f6f3db538c633c4332782d76efff04837228893508373ffffffffffffffffffffffffffffffffffffffff168160405161102190613ebb565b60006040518083038185875af1925050503d806000811461105e576040519150601f19603f3d011682016040523d82523d6000602084013e611063565b606091505b505080935050826110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0906141d4565b60405180910390fd5b72ba4a12e8c861df5d4e182c18f7fc4666c299ef93508373ffffffffffffffffffffffffffffffffffffffff16816040516110e390613ebb565b60006040518083038185875af1925050503d8060008114611120576040519150601f19603f3d011682016040523d82523d6000602084013e611125565b606091505b5050809350508261116b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611162906141d4565b60405180910390fd5b733ea7f8f24b9d7ddf33488193b211b4ab2b27e74293508373ffffffffffffffffffffffffffffffffffffffff16816040516111a690613ebb565b60006040518083038185875af1925050503d80600081146111e3576040519150601f19603f3d011682016040523d82523d6000602084013e6111e8565b606091505b5050809350508261122e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611225906141d4565b60405180910390fd5b73abad7a69a19cbca3f887e510d56c81eb2180b8e293508373ffffffffffffffffffffffffffffffffffffffff168160405161126990613ebb565b60006040518083038185875af1925050503d80600081146112a6576040519150601f19603f3d011682016040523d82523d6000602084013e6112ab565b606091505b505080935050826112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e8906141d4565b60405180910390fd5b73b5dbef7a2ba479f092824e65867fcbf3f1d7b31093508373ffffffffffffffffffffffffffffffffffffffff164760405161132c90613ebb565b60006040518083038185875af1925050503d8060008114611369576040519150601f19603f3d011682016040523d82523d6000602084013e61136e565b606091505b505080935050826113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab906141d4565b60405180910390fd5b505050505050565b6113d783838360405180602001604052806000815250611d3f565b505050565b6113e4612311565b73ffffffffffffffffffffffffffffffffffffffff1661140261188a565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906141b4565b60405180910390fd5b600e60019054906101000a900460ff16156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90614054565b60405180910390fd5b6001600e60016101000a81548160ff02191690831515021790555080600b90805190602001906114d992919061340c565b5050565b60006114e7610b5b565b8210611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614274565b60405180910390fd5b6008828154811061153c5761153b61477d565b5b90600052602060002001549050919050565b600e60019054906101000a900460ff1681565b611569612311565b73ffffffffffffffffffffffffffffffffffffffff1661158761188a565b73ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d4906141b4565b60405180910390fd5b80600b90805190602001906115f392919061340c565b5050565b600e60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614114565b60405180910390fd5b80915050919050565b600b80546116c9906145e4565b80601f01602080910402602001604051908101604052809291908181526020018280546116f5906145e4565b80156117425780601f1061171757610100808354040283529160200191611742565b820191906000526020600020905b81548152906001019060200180831161172557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906140f4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180a612311565b73ffffffffffffffffffffffffffffffffffffffff1661182861188a565b73ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611875906141b4565b60405180910390fd5b6118886000612717565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118c3906145e4565b80601f01602080910402602001604051908101604052809291908181526020018280546118ef906145e4565b801561193c5780601f106119115761010080835404028352916020019161193c565b820191906000526020600020905b81548152906001019060200180831161191f57829003601f168201915b5050505050905090565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff16156119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090614034565b60405180910390fd5b60006119b3610b5b565b9050600082116119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906142f4565b60405180910390fd5b600d548282611a079190614419565b1115611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614154565b60405180910390fd5b611a5061188a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590613f74565b60405180910390fd5b60011515600e60029054906101000a900460ff1615151415611b2357611ae333610c6d565b611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990614294565b60405180910390fd5b5b81600c54611b3191906144a0565b3414611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b69906142d4565b60405180910390fd5b6000600190505b828111611ba857611b95338284611b909190614419565b6127dd565b8080611ba090614647565b915050611b79565b505050565b611bb5612311565b73ffffffffffffffffffffffffffffffffffffffff16611bd361188a565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c20906141b4565b60405180910390fd5b600e60039054906101000a900460ff16611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614134565b60405180910390fd5b6000611c82610b5b565b9050600d54606482611c949190614419565b1115611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc906142b4565b60405180910390fd5b6000600190505b60648111611d0a57611cf9338284611cf49190614419565b6127dd565b80611d0390614647565b9050611cdc565b506000600e60036101000a81548160ff02191690831515021790555050565b611d3b611d34612311565b83836127fb565b5050565b611d50611d4a612311565b836123d2565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690614254565b60405180910390fd5b611d9b84848484612968565b50505050565b611da9612311565b73ffffffffffffffffffffffffffffffffffffffff16611dc761188a565b73ffffffffffffffffffffffffffffffffffffffff1614611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e14906141b4565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6060611e54826122a5565b611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90614214565b60405180910390fd5b600e60019054906101000a900460ff1615611eda57600b611eb3836129c4565b604051602001611ec4929190613e97565b6040516020818303038152906040529050611ee5565b611ee2612b25565b90505b919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f8c612311565b73ffffffffffffffffffffffffffffffffffffffff16611faa61188a565b73ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff7906141b4565b60405180910390fd5b60005b8282905081101561209e576001600f60008585858181106120275761202661477d565b5b905060200201602081019061203c919061364e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061209790614647565b9050612003565b505050565b6120ab612311565b73ffffffffffffffffffffffffffffffffffffffff166120c961188a565b73ffffffffffffffffffffffffffffffffffffffff161461211f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612116906141b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690613fd4565b60405180910390fd5b61219881612717565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061228e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061229e575061229d82612bb7565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661238c8361160a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123dd826122a5565b61241c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612413906140b4565b60405180910390fd5b60006124278361160a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061246957506124688185611ef0565b5b806124a757508373ffffffffffffffffffffffffffffffffffffffff1661248f846108d0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124d08261160a565b73ffffffffffffffffffffffffffffffffffffffff1614612526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251d90613ff4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258d90614074565b60405180910390fd5b6125a1838383612c21565b6125ac600082612319565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fc91906144fa565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126539190614419565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612712838383612d35565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127f7828260405180602001604052806000815250612d3a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190614094565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161295b9190613f37565b60405180910390a3505050565b6129738484846124b0565b61297f84848484612d95565b6129be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b590613fb4565b60405180910390fd5b50505050565b60606000821415612a0c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b20565b600082905060005b60008214612a3e578080612a2790614647565b915050600a82612a37919061446f565b9150612a14565b60008167ffffffffffffffff811115612a5a57612a596147ac565b5b6040519080825280601f01601f191660200182016040528015612a8c5781602001600182028036833780820191505090505b5090505b60008514612b1957600182612aa591906144fa565b9150600a85612ab49190614690565b6030612ac09190614419565b60f81b818381518110612ad657612ad561477d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b12919061446f565b9450612a90565b8093505050505b919050565b6060600b8054612b34906145e4565b80601f0160208091040260200160405190810160405280929190818152602001828054612b60906145e4565b8015612bad5780601f10612b8257610100808354040283529160200191612bad565b820191906000526020600020905b815481529060010190602001808311612b9057829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c2c8383836121be565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6f57612c6a81612f2c565b612cae565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cad57612cac8382612f75565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf157612cec816130e2565b612d30565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2f57612d2e82826131b3565b5b5b505050565b505050565b612d448383613232565b612d516000848484612d95565b612d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8790613fb4565b60405180910390fd5b505050565b6000612db68473ffffffffffffffffffffffffffffffffffffffff1661219b565b15612f1f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ddf612311565b8786866040518563ffffffff1660e01b8152600401612e019493929190613eeb565b602060405180830381600087803b158015612e1b57600080fd5b505af1925050508015612e4c57506040513d601f19601f82011682018060405250810190612e49919061388b565b60015b612ecf573d8060008114612e7c576040519150601f19603f3d011682016040523d82523d6000602084013e612e81565b606091505b50600081511415612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe90613fb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f24565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f828461174a565b612f8c91906144fa565b9050600060076000848152602001908152602001600020549050818114613071576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130f691906144fa565b90506000600960008481526020019081526020016000205490506000600883815481106131265761312561477d565b5b9060005260206000200154905080600883815481106131485761314761477d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131975761319661474e565b5b6001900381819060005260206000200160009055905550505050565b60006131be8361174a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329990614174565b60405180910390fd5b6132ab816122a5565b156132eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e290614014565b60405180910390fd5b6132f760008383612c21565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133479190614419565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461340860008383612d35565b5050565b828054613418906145e4565b90600052602060002090601f01602090048101928261343a5760008555613481565b82601f1061345357805160ff1916838001178555613481565b82800160010185558215613481579182015b82811115613480578251825591602001919060010190613465565b5b50905061348e9190613492565b5090565b5b808211156134ab576000816000905550600101613493565b5090565b60006134c26134bd84614354565b61432f565b9050828152602081018484840111156134de576134dd6147ea565b5b6134e98482856145a2565b509392505050565b60006135046134ff84614385565b61432f565b9050828152602081018484840111156135205761351f6147ea565b5b61352b8482856145a2565b509392505050565b60008135905061354281614f84565b92915050565b60008083601f84011261355e5761355d6147e0565b5b8235905067ffffffffffffffff81111561357b5761357a6147db565b5b602083019150836020820283011115613597576135966147e5565b5b9250929050565b6000813590506135ad81614f9b565b92915050565b6000813590506135c281614fb2565b92915050565b6000815190506135d781614fb2565b92915050565b600082601f8301126135f2576135f16147e0565b5b81356136028482602086016134af565b91505092915050565b600082601f8301126136205761361f6147e0565b5b81356136308482602086016134f1565b91505092915050565b60008135905061364881614fc9565b92915050565b600060208284031215613664576136636147f4565b5b600061367284828501613533565b91505092915050565b60008060408385031215613692576136916147f4565b5b60006136a085828601613533565b92505060206136b185828601613533565b9150509250929050565b6000806000606084860312156136d4576136d36147f4565b5b60006136e286828701613533565b93505060206136f386828701613533565b925050604061370486828701613639565b9150509250925092565b60008060008060808587031215613728576137276147f4565b5b600061373687828801613533565b945050602061374787828801613533565b935050604061375887828801613639565b925050606085013567ffffffffffffffff811115613779576137786147ef565b5b613785878288016135dd565b91505092959194509250565b600080604083850312156137a8576137a76147f4565b5b60006137b685828601613533565b92505060206137c78582860161359e565b9150509250929050565b600080604083850312156137e8576137e76147f4565b5b60006137f685828601613533565b925050602061380785828601613639565b9150509250929050565b60008060208385031215613828576138276147f4565b5b600083013567ffffffffffffffff811115613846576138456147ef565b5b61385285828601613548565b92509250509250929050565b600060208284031215613874576138736147f4565b5b6000613882848285016135b3565b91505092915050565b6000602082840312156138a1576138a06147f4565b5b60006138af848285016135c8565b91505092915050565b6000602082840312156138ce576138cd6147f4565b5b600082013567ffffffffffffffff8111156138ec576138eb6147ef565b5b6138f88482850161360b565b91505092915050565b600060208284031215613917576139166147f4565b5b600061392584828501613639565b91505092915050565b6139378161452e565b82525050565b61394681614540565b82525050565b6000613957826143cb565b61396181856143e1565b93506139718185602086016145b1565b61397a816147f9565b840191505092915050565b6000613990826143d6565b61399a81856143fd565b93506139aa8185602086016145b1565b6139b3816147f9565b840191505092915050565b60006139c9826143d6565b6139d3818561440e565b93506139e38185602086016145b1565b80840191505092915050565b600081546139fc816145e4565b613a06818661440e565b94506001821660008114613a215760018114613a3257613a65565b60ff19831686528186019350613a65565b613a3b856143b6565b60005b83811015613a5d57815481890152600182019150602081019050613a3e565b838801955050505b50505092915050565b6000613a7b602e836143fd565b9150613a868261480a565b604082019050919050565b6000613a9e602b836143fd565b9150613aa982614859565b604082019050919050565b6000613ac16032836143fd565b9150613acc826148a8565b604082019050919050565b6000613ae46026836143fd565b9150613aef826148f7565b604082019050919050565b6000613b076025836143fd565b9150613b1282614946565b604082019050919050565b6000613b2a601c836143fd565b9150613b3582614995565b602082019050919050565b6000613b4d6017836143fd565b9150613b58826149be565b602082019050919050565b6000613b70602c836143fd565b9150613b7b826149e7565b604082019050919050565b6000613b936024836143fd565b9150613b9e82614a36565b604082019050919050565b6000613bb66019836143fd565b9150613bc182614a85565b602082019050919050565b6000613bd9602c836143fd565b9150613be482614aae565b604082019050919050565b6000613bfc6038836143fd565b9150613c0782614afd565b604082019050919050565b6000613c1f602a836143fd565b9150613c2a82614b4c565b604082019050919050565b6000613c426029836143fd565b9150613c4d82614b9b565b604082019050919050565b6000613c65601f836143fd565b9150613c7082614bea565b602082019050919050565b6000613c886016836143fd565b9150613c9382614c13565b602082019050919050565b6000613cab6020836143fd565b9150613cb682614c3c565b602082019050919050565b6000613cce602c836143fd565b9150613cd982614c65565b604082019050919050565b6000613cf16020836143fd565b9150613cfc82614cb4565b602082019050919050565b6000613d146014836143fd565b9150613d1f82614cdd565b602082019050919050565b6000613d37602f836143fd565b9150613d4282614d06565b604082019050919050565b6000613d5a602f836143fd565b9150613d6582614d55565b604082019050919050565b6000613d7d6021836143fd565b9150613d8882614da4565b604082019050919050565b6000613da06000836143f2565b9150613dab82614df3565b600082019050919050565b6000613dc36031836143fd565b9150613dce82614df6565b604082019050919050565b6000613de6602c836143fd565b9150613df182614e45565b604082019050919050565b6000613e096017836143fd565b9150613e1482614e94565b602082019050919050565b6000613e2c6015836143fd565b9150613e3782614ebd565b602082019050919050565b6000613e4f6043836143fd565b9150613e5a82614ee6565b606082019050919050565b6000613e72601b836143fd565b9150613e7d82614f5b565b602082019050919050565b613e9181614598565b82525050565b6000613ea382856139ef565b9150613eaf82846139be565b91508190509392505050565b6000613ec682613d93565b9150819050919050565b6000602082019050613ee5600083018461392e565b92915050565b6000608082019050613f00600083018761392e565b613f0d602083018661392e565b613f1a6040830185613e88565b8181036060830152613f2c818461394c565b905095945050505050565b6000602082019050613f4c600083018461393d565b92915050565b60006020820190508181036000830152613f6c8184613985565b905092915050565b60006020820190508181036000830152613f8d81613a6e565b9050919050565b60006020820190508181036000830152613fad81613a91565b9050919050565b60006020820190508181036000830152613fcd81613ab4565b9050919050565b60006020820190508181036000830152613fed81613ad7565b9050919050565b6000602082019050818103600083015261400d81613afa565b9050919050565b6000602082019050818103600083015261402d81613b1d565b9050919050565b6000602082019050818103600083015261404d81613b40565b9050919050565b6000602082019050818103600083015261406d81613b63565b9050919050565b6000602082019050818103600083015261408d81613b86565b9050919050565b600060208201905081810360008301526140ad81613ba9565b9050919050565b600060208201905081810360008301526140cd81613bcc565b9050919050565b600060208201905081810360008301526140ed81613bef565b9050919050565b6000602082019050818103600083015261410d81613c12565b9050919050565b6000602082019050818103600083015261412d81613c35565b9050919050565b6000602082019050818103600083015261414d81613c58565b9050919050565b6000602082019050818103600083015261416d81613c7b565b9050919050565b6000602082019050818103600083015261418d81613c9e565b9050919050565b600060208201905081810360008301526141ad81613cc1565b9050919050565b600060208201905081810360008301526141cd81613ce4565b9050919050565b600060208201905081810360008301526141ed81613d07565b9050919050565b6000602082019050818103600083015261420d81613d2a565b9050919050565b6000602082019050818103600083015261422d81613d4d565b9050919050565b6000602082019050818103600083015261424d81613d70565b9050919050565b6000602082019050818103600083015261426d81613db6565b9050919050565b6000602082019050818103600083015261428d81613dd9565b9050919050565b600060208201905081810360008301526142ad81613dfc565b9050919050565b600060208201905081810360008301526142cd81613e1f565b9050919050565b600060208201905081810360008301526142ed81613e42565b9050919050565b6000602082019050818103600083015261430d81613e65565b9050919050565b60006020820190506143296000830184613e88565b92915050565b600061433961434a565b90506143458282614616565b919050565b6000604051905090565b600067ffffffffffffffff82111561436f5761436e6147ac565b5b614378826147f9565b9050602081019050919050565b600067ffffffffffffffff8211156143a05761439f6147ac565b5b6143a9826147f9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061442482614598565b915061442f83614598565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614464576144636146c1565b5b828201905092915050565b600061447a82614598565b915061448583614598565b925082614495576144946146f0565b5b828204905092915050565b60006144ab82614598565b91506144b683614598565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ef576144ee6146c1565b5b828202905092915050565b600061450582614598565b915061451083614598565b925082821015614523576145226146c1565b5b828203905092915050565b600061453982614578565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145cf5780820151818401526020810190506145b4565b838111156145de576000848401525b50505050565b600060028204905060018216806145fc57607f821691505b602082108114156146105761460f61471f565b5b50919050565b61461f826147f9565b810181811067ffffffffffffffff8211171561463e5761463d6147ac565b5b80604052505050565b600061465282614598565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614685576146846146c1565b5b600182019050919050565b600061469b82614598565b91506146a683614598565b9250826146b6576146b56146f0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e65722063616e6e6f74206d696e7420746f6b656e73206f74686572207460008201527f68616e2067697665617761797321000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d696e74696e67206e6f74206163746976652079657421000000000000000000600082015250565b7f43616e6e6f74206368616e67652072657665616c6564207374617465206d6f7260008201527f65207468616e206f6e6365210000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f476976656177617920746f6b656e7320616c7265616479206d696e7465642100600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f43616e6e6f74206368616e67652077686974656c69737465642073746174652060008201527f6d6f7265207468616e206f6e6365210000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f43616e6e6f74206d696e74206f76657220353030300000000000000000000000600082015250565b7f416d6f756e74206f662045746865722073656e74206d7573742062652065717560008201527f616c20746f20636f737420746f206d696e74205f6d696e74416d6f756e74204e60208201527f4654530000000000000000000000000000000000000000000000000000000000604082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f8d8161452e565b8114614f9857600080fd5b50565b614fa481614540565b8114614faf57600080fd5b50565b614fbb8161454c565b8114614fc657600080fd5b50565b614fd281614598565b8114614fdd57600080fd5b5056fea2646970667358221220dad2f7ff39440fe5c1e74f876fddb82d962d43472fe19b919b7f37e25bd1785c64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000009506f6b6572466973680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000550464953480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5072517770707377696d39796862357a424b434750755339477a6372543459353850736a574a7742656237580000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): PokerFish
Arg [1] : _symbol (string): PFISH
Arg [2] : _initBaseURI (string): ipfs://QmPrQwppswim9yhb5zBKCGPuS9GzcrT4Y58PsjWJwBeb7X
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 506f6b6572466973680000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 5046495348000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [8] : 697066733a2f2f516d5072517770707377696d39796862357a424b4347507553
Arg [9] : 39477a6372543459353850736a574a7742656237580000000000000000000000
Deployed Bytecode Sourcemap
45696:4528:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39393:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26212:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27772:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27295:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45829:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48391:162;;;;;;;;;;;;;:::i;:::-;;40033:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28522:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39701:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47487:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48738:1483;;;:::i;:::-;;28932:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47991:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40223:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45941:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48202:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45910:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25906:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45785:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25636:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4770:103;;;;;;;;;;;;;:::i;:::-;;4119:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26381:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45974:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46767:712;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46393:349;;;;;;;;;;;;;:::i;:::-;;28065:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29188:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48314:69;;;;;;;;;;;;;:::i;:::-;;47607:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45874:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28291:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48561:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5028:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39393:224;39495:4;39534:35;39519:50;;;:11;:50;;;;:90;;;;39573:36;39597:11;39573:23;:36::i;:::-;39519:90;39512:97;;39393:224;;;:::o;26212:100::-;26266:13;26299:5;26292:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26212:100;:::o;27772:221::-;27848:7;27876:16;27884:7;27876;:16::i;:::-;27868:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27961:15;:24;27977:7;27961:24;;;;;;;;;;;;;;;;;;;;;27954:31;;27772:221;;;:::o;27295:411::-;27376:13;27392:23;27407:7;27392:14;:23::i;:::-;27376:39;;27440:5;27434:11;;:2;:11;;;;27426:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27534:5;27518:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27543:37;27560:5;27567:12;:10;:12::i;:::-;27543:16;:37::i;:::-;27518:62;27496:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27677:21;27686:2;27690:7;27677:8;:21::i;:::-;27365:341;27295:411;;:::o;45829:40::-;;;;:::o;48391:162::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48450:15:::1;;;;;;;;;;;48442:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;48542:5;48524:15;;:23;;;;;;;;;;;;;;;;;;48391:162::o:0;40033:113::-;40094:7;40121:10;:17;;;;40114:24;;40033:113;:::o;28522:339::-;28717:41;28736:12;:10;:12::i;:::-;28750:7;28717:18;:41::i;:::-;28709:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28825:28;28835:4;28841:2;28845:7;28825:9;:28::i;:::-;28522:339;;;:::o;39701:256::-;39798:7;39834:23;39851:5;39834:16;:23::i;:::-;39826:5;:31;39818:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39923:12;:19;39936:5;39923:19;;;;;;;;;;;;;;;:26;39943:5;39923:26;;;;;;;;;;;;39916:33;;39701:256;;;;:::o;47487:108::-;47546:4;47566:16;:23;47583:5;47566:23;;;;;;;;;;;;;;;;;;;;;;;;;47559:30;;47487:108;;;:::o;48738:1483::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48792:13:::1;48808:21;48792:37;;48838:7;48863:3;48859:1;48848:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;48838:28;;48875:14;48892:42;48875:59;;48948:12;48965:6;:11;;48984:2;48965:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48947:44;;;49006:7;48998:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49047:7;49072:3;49068:1;49057:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;49047:28;;49093:42;49084:51;;49155:6;:11;;49174:2;49155:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49142:39;;;;;49196:7;49188:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49246:42;49237:51;;49308:6;:11;;49327:2;49308:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49295:39;;;;;49349:7;49341:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49390:7;49416:3;49411:2;49400:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;49390:29;;49437:42;49428:51;;49499:6;:11;;49518:2;49499:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49486:39;;;;;49540:7;49532:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49590:42;49581:51;;49652:6;:11;;49671:2;49652:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49639:39;;;;;49693:7;49685:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49747:42;49738:51;;49809:6;:11;;49828:2;49809:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49796:39;;;;;49850:7;49842:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;49900:42;49891:51;;49962:6;:11;;49981:2;49962:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49949:39;;;;;50003:7;49995:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;50057:42;50048:51;;50121:6;:11;;50140:21;50121:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50108:58;;;;;50181:7;50173:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;48783:1438;;;;;;48738:1483::o:0;28932:185::-;29070:39;29087:4;29093:2;29097:7;29070:39;;;;;;;;;;;;:16;:39::i;:::-;28932:185;;;:::o;47991:205::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48074:8:::1;;;;;;;;;;;48073:9;48065:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48155:4;48144:8;;:15;;;;;;;;;;;;;;;;;;48176:12;48166:7;:22;;;;;;;;;;;;:::i;:::-;;47991:205:::0;:::o;40223:233::-;40298:7;40334:30;:28;:30::i;:::-;40326:5;:38;40318:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40431:10;40442:5;40431:17;;;;;;;;:::i;:::-;;;;;;;;;;40424:24;;40223:233;;;:::o;45941:28::-;;;;;;;;;;;;;:::o;48202:106::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48288:12:::1;48278:7;:22;;;;;;;;;;;;:::i;:::-;;48202:106:::0;:::o;45910:26::-;;;;;;;;;;;;;:::o;25906:239::-;25978:7;25998:13;26014:7;:16;26022:7;26014:16;;;;;;;;;;;;;;;;;;;;;25998:32;;26066:1;26049:19;;:5;:19;;;;26041:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26132:5;26125:12;;;25906:239;;;:::o;45785:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25636:208::-;25708:7;25753:1;25736:19;;:5;:19;;;;25728:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25820:9;:16;25830:5;25820:16;;;;;;;;;;;;;;;;25813:23;;25636:208;;;:::o;4770:103::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4835:30:::1;4862:1;4835:18;:30::i;:::-;4770:103::o:0;4119:87::-;4165:7;4192:6;;;;;;;;;;;4185:13;;4119:87;:::o;26381:104::-;26437:13;26470:7;26463:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26381:104;:::o;45974:34::-;;;;;;;;;;;;;:::o;46767:712::-;46837:6;;;;;;;;;;;46836:7;46828:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46878:14;46895:13;:11;:13::i;:::-;46878:30;;46937:1;46923:11;:15;46915:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47009:9;;46994:11;46985:6;:20;;;;:::i;:::-;:33;;46977:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47074:7;:5;:7::i;:::-;47060:21;;:10;:21;;;;47052:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;47163:4;47144:23;;:15;;;;;;;;;;;:23;;;47141:108;;;47188:25;47202:10;47188:13;:25::i;:::-;47180:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47141:108;47283:11;47276:4;;:18;;;;:::i;:::-;47263:9;:31;47255:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;47386:9;47398:1;47386:13;;47381:93;47406:11;47401:1;:16;47381:93;;47433:33;47443:10;47464:1;47455:6;:10;;;;:::i;:::-;47433:9;:33::i;:::-;47419:3;;;;;:::i;:::-;;;;47381:93;;;;46817:662;46767:712;:::o;46393:349::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46454:12:::1;;;;;;;;;;;46446:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46511:14;46528:13;:11;:13::i;:::-;46511:30;;46578:9;;46571:3;46562:6;:12;;;;:::i;:::-;:25;;46554:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46629:9;46641:1;46629:13;;46624:84;46649:3;46644:1;:8;46624:84;;46667:33;46677:10;46698:1;46689:6;:10;;;;:::i;:::-;46667:9;:33::i;:::-;46654:3;;;;:::i;:::-;;;46624:84;;;;46731:5;46716:12;;:20;;;;;;;;;;;;;;;;;;46439:303;46393:349::o:0;28065:155::-;28160:52;28179:12;:10;:12::i;:::-;28193:8;28203;28160:18;:52::i;:::-;28065:155;;:::o;29188:328::-;29363:41;29382:12;:10;:12::i;:::-;29396:7;29363:18;:41::i;:::-;29355:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29469:39;29483:4;29489:2;29493:7;29502:5;29469:13;:39::i;:::-;29188:328;;;;:::o;48314:69::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48371:6:::1;;;;;;;;;;;48370:7;48361:6;;:16;;;;;;;;;;;;;;;;;;48314:69::o:0;47607:355::-;47680:13;47718:16;47726:7;47718;:16::i;:::-;47704:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;47810:8;;;;;;;;;;;47806:151;;;47861:7;47870:25;47887:7;47870:16;:25::i;:::-;47844:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47830:67;;;;47806:151;47937:10;:8;:10::i;:::-;47930:17;;47607:355;;;;:::o;45874:31::-;;;;:::o;28291:164::-;28388:4;28412:18;:25;28431:5;28412:25;;;;;;;;;;;;;;;:35;28438:8;28412:35;;;;;;;;;;;;;;;;;;;;;;;;;28405:42;;28291:164;;;;:::o;48561:171::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48641:6:::1;48636:91;48657:6;;:13;;48653:1;:17;48636:91;;;48715:4;48685:16;:27;48702:6;;48709:1;48702:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48685:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;48672:3;;;;:::i;:::-;;;48636:91;;;;48561:171:::0;;:::o;5028:201::-;4350:12;:10;:12::i;:::-;4339:23;;:7;:5;:7::i;:::-;:23;;;4331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5137:1:::1;5117:22;;:8;:22;;;;5109:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5193:28;5212:8;5193:18;:28::i;:::-;5028:201:::0;:::o;6820:326::-;6880:4;7137:1;7115:7;:19;;;:23;7108:30;;6820:326;;;:::o;37739:126::-;;;;:::o;25267:305::-;25369:4;25421:25;25406:40;;;:11;:40;;;;:105;;;;25478:33;25463:48;;;:11;:48;;;;25406:105;:158;;;;25528:36;25552:11;25528:23;:36::i;:::-;25406:158;25386:178;;25267:305;;;:::o;31026:127::-;31091:4;31143:1;31115:30;;:7;:16;31123:7;31115:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31108:37;;31026:127;;;:::o;2843:98::-;2896:7;2923:10;2916:17;;2843:98;:::o;35172:174::-;35274:2;35247:15;:24;35263:7;35247:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35330:7;35326:2;35292:46;;35301:23;35316:7;35301:14;:23::i;:::-;35292:46;;;;;;;;;;;;35172:174;;:::o;31320:348::-;31413:4;31438:16;31446:7;31438;:16::i;:::-;31430:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31514:13;31530:23;31545:7;31530:14;:23::i;:::-;31514:39;;31583:5;31572:16;;:7;:16;;;:52;;;;31592:32;31609:5;31616:7;31592:16;:32::i;:::-;31572:52;:87;;;;31652:7;31628:31;;:20;31640:7;31628:11;:20::i;:::-;:31;;;31572:87;31564:96;;;31320:348;;;;:::o;34429:625::-;34588:4;34561:31;;:23;34576:7;34561:14;:23::i;:::-;:31;;;34553:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34667:1;34653:16;;:2;:16;;;;34645:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34723:39;34744:4;34750:2;34754:7;34723:20;:39::i;:::-;34827:29;34844:1;34848:7;34827:8;:29::i;:::-;34888:1;34869:9;:15;34879:4;34869:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34917:1;34900:9;:13;34910:2;34900:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34948:2;34929:7;:16;34937:7;34929:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34987:7;34983:2;34968:27;;34977:4;34968:27;;;;;;;;;;;;35008:38;35028:4;35034:2;35038:7;35008:19;:38::i;:::-;34429:625;;;:::o;5389:191::-;5463:16;5482:6;;;;;;;;;;;5463:25;;5508:8;5499:6;;:17;;;;;;;;;;;;;;;;;;5563:8;5532:40;;5553:8;5532:40;;;;;;;;;;;;5452:128;5389:191;:::o;32010:110::-;32086:26;32096:2;32100:7;32086:26;;;;;;;;;;;;:9;:26::i;:::-;32010:110;;:::o;35488:315::-;35643:8;35634:17;;:5;:17;;;;35626:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35730:8;35692:18;:25;35711:5;35692:25;;;;;;;;;;;;;;;:35;35718:8;35692:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35776:8;35754:41;;35769:5;35754:41;;;35786:8;35754:41;;;;;;:::i;:::-;;;;;;;;35488:315;;;:::o;30398:::-;30555:28;30565:4;30571:2;30575:7;30555:9;:28::i;:::-;30602:48;30625:4;30631:2;30635:7;30644:5;30602:22;:48::i;:::-;30594:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30398:315;;;;:::o;405:723::-;461:13;691:1;682:5;:10;678:53;;;709:10;;;;;;;;;;;;;;;;;;;;;678:53;741:12;756:5;741:20;;772:14;797:78;812:1;804:4;:9;797:78;;830:8;;;;;:::i;:::-;;;;861:2;853:10;;;;;:::i;:::-;;;797:78;;;885:19;917:6;907:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;885:39;;935:154;951:1;942:5;:10;935:154;;979:1;969:11;;;;;:::i;:::-;;;1046:2;1038:5;:10;;;;:::i;:::-;1025:2;:24;;;;:::i;:::-;1012:39;;995:6;1002;995:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1075:2;1066:11;;;;;:::i;:::-;;;935:154;;;1113:6;1099:21;;;;;405:723;;;;:::o;46285:102::-;46345:13;46374:7;46367:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46285:102;:::o;16926:157::-;17011:4;17050:25;17035:40;;;:11;:40;;;;17028:47;;16926:157;;;:::o;41069:589::-;41213:45;41240:4;41246:2;41250:7;41213:26;:45::i;:::-;41291:1;41275:18;;:4;:18;;;41271:187;;;41310:40;41342:7;41310:31;:40::i;:::-;41271:187;;;41380:2;41372:10;;:4;:10;;;41368:90;;41399:47;41432:4;41438:7;41399:32;:47::i;:::-;41368:90;41271:187;41486:1;41472:16;;:2;:16;;;41468:183;;;41505:45;41542:7;41505:36;:45::i;:::-;41468:183;;;41578:4;41572:10;;:2;:10;;;41568:83;;41599:40;41627:2;41631:7;41599:27;:40::i;:::-;41568:83;41468:183;41069:589;;;:::o;38250:125::-;;;;:::o;32347:321::-;32477:18;32483:2;32487:7;32477:5;:18::i;:::-;32528:54;32559:1;32563:2;32567:7;32576:5;32528:22;:54::i;:::-;32506:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32347:321;;;:::o;36368:799::-;36523:4;36544:15;:2;:13;;;:15::i;:::-;36540:620;;;36596:2;36580:36;;;36617:12;:10;:12::i;:::-;36631:4;36637:7;36646:5;36580:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36576:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36839:1;36822:6;:13;:18;36818:272;;;36865:60;;;;;;;;;;:::i;:::-;;;;;;;;36818:272;37040:6;37034:13;37025:6;37021:2;37017:15;37010:38;36576:529;36713:41;;;36703:51;;;:6;:51;;;;36696:58;;;;;36540:620;37144:4;37137:11;;36368:799;;;;;;;:::o;42381:164::-;42485:10;:17;;;;42458:15;:24;42474:7;42458:24;;;;;;;;;;;:44;;;;42513:10;42529:7;42513:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42381:164;:::o;43172:988::-;43438:22;43488:1;43463:22;43480:4;43463:16;:22::i;:::-;:26;;;;:::i;:::-;43438:51;;43500:18;43521:17;:26;43539:7;43521:26;;;;;;;;;;;;43500:47;;43668:14;43654:10;:28;43650:328;;43699:19;43721:12;:18;43734:4;43721:18;;;;;;;;;;;;;;;:34;43740:14;43721:34;;;;;;;;;;;;43699:56;;43805:11;43772:12;:18;43785:4;43772:18;;;;;;;;;;;;;;;:30;43791:10;43772:30;;;;;;;;;;;:44;;;;43922:10;43889:17;:30;43907:11;43889:30;;;;;;;;;;;:43;;;;43684:294;43650:328;44074:17;:26;44092:7;44074:26;;;;;;;;;;;44067:33;;;44118:12;:18;44131:4;44118:18;;;;;;;;;;;;;;;:34;44137:14;44118:34;;;;;;;;;;;44111:41;;;43253:907;;43172:988;;:::o;44455:1079::-;44708:22;44753:1;44733:10;:17;;;;:21;;;;:::i;:::-;44708:46;;44765:18;44786:15;:24;44802:7;44786:24;;;;;;;;;;;;44765:45;;45137:19;45159:10;45170:14;45159:26;;;;;;;;:::i;:::-;;;;;;;;;;45137:48;;45223:11;45198:10;45209;45198:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45334:10;45303:15;:28;45319:11;45303:28;;;;;;;;;;;:41;;;;45475:15;:24;45491:7;45475:24;;;;;;;;;;;45468:31;;;45510:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44526:1008;;;44455:1079;:::o;41959:221::-;42044:14;42061:20;42078:2;42061:16;:20::i;:::-;42044:37;;42119:7;42092:12;:16;42105:2;42092:16;;;;;;;;;;;;;;;:24;42109:6;42092:24;;;;;;;;;;;:34;;;;42166:6;42137:17;:26;42155:7;42137:26;;;;;;;;;;;:35;;;;42033:147;41959:221;;:::o;33004:439::-;33098:1;33084:16;;:2;:16;;;;33076:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33157:16;33165:7;33157;:16::i;:::-;33156:17;33148:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33219:45;33248:1;33252:2;33256:7;33219:20;:45::i;:::-;33294:1;33277:9;:13;33287:2;33277:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33325:2;33306:7;:16;33314:7;33306:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33370:7;33366:2;33345:33;;33362:1;33345:33;;;;;;;;;;;;33391:44;33419:1;33423:2;33427:7;33391:19;:44::i;:::-;33004:439;;:::o;-1:-1:-1:-;;;;;;;:::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;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9696:845::-;9799:3;9836:5;9830:12;9865:36;9891:9;9865:36;:::i;:::-;9917:89;9999:6;9994:3;9917:89;:::i;:::-;9910:96;;10037:1;10026:9;10022:17;10053:1;10048:137;;;;10199:1;10194:341;;;;10015:520;;10048:137;10132:4;10128:9;10117;10113:25;10108:3;10101:38;10168:6;10163:3;10159:16;10152:23;;10048:137;;10194:341;10261:38;10293:5;10261:38;:::i;:::-;10321:1;10335:154;10349:6;10346:1;10343:13;10335:154;;;10423:7;10417:14;10413:1;10408:3;10404:11;10397:35;10473:1;10464:7;10460:15;10449:26;;10371:4;10368:1;10364:12;10359:17;;10335:154;;;10518:6;10513:3;10509:16;10502:23;;10201:334;;10015:520;;9803:738;;9696:845;;;;:::o;10547:366::-;10689:3;10710:67;10774:2;10769:3;10710:67;:::i;:::-;10703:74;;10786:93;10875:3;10786:93;:::i;:::-;10904:2;10899:3;10895:12;10888:19;;10547:366;;;:::o;10919:::-;11061:3;11082:67;11146:2;11141:3;11082:67;:::i;:::-;11075:74;;11158:93;11247:3;11158:93;:::i;:::-;11276:2;11271:3;11267:12;11260:19;;10919:366;;;:::o;11291:::-;11433:3;11454:67;11518:2;11513:3;11454:67;:::i;:::-;11447:74;;11530:93;11619:3;11530:93;:::i;:::-;11648:2;11643:3;11639:12;11632:19;;11291:366;;;:::o;11663:::-;11805:3;11826:67;11890:2;11885:3;11826:67;:::i;:::-;11819:74;;11902:93;11991:3;11902:93;:::i;:::-;12020:2;12015:3;12011:12;12004:19;;11663:366;;;:::o;12035:::-;12177:3;12198:67;12262:2;12257:3;12198:67;:::i;:::-;12191:74;;12274:93;12363:3;12274:93;:::i;:::-;12392:2;12387:3;12383:12;12376:19;;12035:366;;;:::o;12407:::-;12549:3;12570:67;12634:2;12629:3;12570:67;:::i;:::-;12563:74;;12646:93;12735:3;12646:93;:::i;:::-;12764:2;12759:3;12755:12;12748:19;;12407:366;;;:::o;12779:::-;12921:3;12942:67;13006:2;13001:3;12942:67;:::i;:::-;12935:74;;13018:93;13107:3;13018:93;:::i;:::-;13136:2;13131:3;13127:12;13120:19;;12779:366;;;:::o;13151:::-;13293:3;13314:67;13378:2;13373:3;13314:67;:::i;:::-;13307:74;;13390:93;13479:3;13390:93;:::i;:::-;13508:2;13503:3;13499:12;13492:19;;13151:366;;;:::o;13523:::-;13665:3;13686:67;13750:2;13745:3;13686:67;:::i;:::-;13679:74;;13762:93;13851:3;13762:93;:::i;:::-;13880:2;13875:3;13871:12;13864:19;;13523:366;;;:::o;13895:::-;14037:3;14058:67;14122:2;14117:3;14058:67;:::i;:::-;14051:74;;14134:93;14223:3;14134:93;:::i;:::-;14252:2;14247:3;14243:12;14236:19;;13895:366;;;:::o;14267:::-;14409:3;14430:67;14494:2;14489:3;14430:67;:::i;:::-;14423:74;;14506:93;14595:3;14506:93;:::i;:::-;14624:2;14619:3;14615:12;14608:19;;14267:366;;;:::o;14639:::-;14781:3;14802:67;14866:2;14861:3;14802:67;:::i;:::-;14795:74;;14878:93;14967:3;14878:93;:::i;:::-;14996:2;14991:3;14987:12;14980:19;;14639:366;;;:::o;15011:::-;15153:3;15174:67;15238:2;15233:3;15174:67;:::i;:::-;15167:74;;15250:93;15339:3;15250:93;:::i;:::-;15368:2;15363:3;15359:12;15352:19;;15011:366;;;:::o;15383:::-;15525:3;15546:67;15610:2;15605:3;15546:67;:::i;:::-;15539:74;;15622:93;15711:3;15622:93;:::i;:::-;15740:2;15735:3;15731:12;15724:19;;15383:366;;;:::o;15755:::-;15897:3;15918:67;15982:2;15977:3;15918:67;:::i;:::-;15911:74;;15994:93;16083:3;15994:93;:::i;:::-;16112:2;16107:3;16103:12;16096:19;;15755:366;;;:::o;16127:::-;16269:3;16290:67;16354:2;16349:3;16290:67;:::i;:::-;16283:74;;16366:93;16455:3;16366:93;:::i;:::-;16484:2;16479:3;16475:12;16468:19;;16127:366;;;:::o;16499:::-;16641:3;16662:67;16726:2;16721:3;16662:67;:::i;:::-;16655:74;;16738:93;16827:3;16738:93;:::i;:::-;16856:2;16851:3;16847:12;16840:19;;16499:366;;;:::o;16871:::-;17013:3;17034:67;17098:2;17093:3;17034:67;:::i;:::-;17027:74;;17110:93;17199:3;17110:93;:::i;:::-;17228:2;17223:3;17219:12;17212:19;;16871:366;;;:::o;17243:::-;17385:3;17406:67;17470:2;17465:3;17406:67;:::i;:::-;17399:74;;17482:93;17571:3;17482:93;:::i;:::-;17600:2;17595:3;17591:12;17584:19;;17243:366;;;:::o;17615:::-;17757:3;17778:67;17842:2;17837:3;17778:67;:::i;:::-;17771:74;;17854:93;17943:3;17854:93;:::i;:::-;17972:2;17967:3;17963:12;17956:19;;17615:366;;;:::o;17987:::-;18129:3;18150:67;18214:2;18209:3;18150:67;:::i;:::-;18143:74;;18226:93;18315:3;18226:93;:::i;:::-;18344:2;18339:3;18335:12;18328:19;;17987:366;;;:::o;18359:::-;18501:3;18522:67;18586:2;18581:3;18522:67;:::i;:::-;18515:74;;18598:93;18687:3;18598:93;:::i;:::-;18716:2;18711:3;18707:12;18700:19;;18359:366;;;:::o;18731:::-;18873:3;18894:67;18958:2;18953:3;18894:67;:::i;:::-;18887:74;;18970:93;19059:3;18970:93;:::i;:::-;19088:2;19083:3;19079:12;19072:19;;18731:366;;;:::o;19103:398::-;19262:3;19283:83;19364:1;19359:3;19283:83;:::i;:::-;19276:90;;19375:93;19464:3;19375:93;:::i;:::-;19493:1;19488:3;19484:11;19477:18;;19103:398;;;:::o;19507:366::-;19649:3;19670:67;19734:2;19729:3;19670:67;:::i;:::-;19663:74;;19746:93;19835:3;19746:93;:::i;:::-;19864:2;19859:3;19855:12;19848:19;;19507:366;;;:::o;19879:::-;20021:3;20042:67;20106:2;20101:3;20042:67;:::i;:::-;20035:74;;20118:93;20207:3;20118:93;:::i;:::-;20236:2;20231:3;20227:12;20220:19;;19879:366;;;:::o;20251:::-;20393:3;20414:67;20478:2;20473:3;20414:67;:::i;:::-;20407:74;;20490:93;20579:3;20490:93;:::i;:::-;20608:2;20603:3;20599:12;20592:19;;20251:366;;;:::o;20623:::-;20765:3;20786:67;20850:2;20845:3;20786:67;:::i;:::-;20779:74;;20862:93;20951:3;20862:93;:::i;:::-;20980:2;20975:3;20971:12;20964:19;;20623:366;;;:::o;20995:::-;21137:3;21158:67;21222:2;21217:3;21158:67;:::i;:::-;21151:74;;21234:93;21323:3;21234:93;:::i;:::-;21352:2;21347:3;21343:12;21336:19;;20995:366;;;:::o;21367:::-;21509:3;21530:67;21594:2;21589:3;21530:67;:::i;:::-;21523:74;;21606:93;21695:3;21606:93;:::i;:::-;21724:2;21719:3;21715:12;21708:19;;21367:366;;;:::o;21739:118::-;21826:24;21844:5;21826:24;:::i;:::-;21821:3;21814:37;21739:118;;:::o;21863:429::-;22040:3;22062:92;22150:3;22141:6;22062:92;:::i;:::-;22055:99;;22171:95;22262:3;22253:6;22171:95;:::i;:::-;22164:102;;22283:3;22276:10;;21863:429;;;;;:::o;22298:379::-;22482:3;22504:147;22647:3;22504:147;:::i;:::-;22497:154;;22668:3;22661:10;;22298:379;;;:::o;22683:222::-;22776:4;22814:2;22803:9;22799:18;22791:26;;22827:71;22895:1;22884:9;22880:17;22871:6;22827:71;:::i;:::-;22683:222;;;;:::o;22911:640::-;23106:4;23144:3;23133:9;23129:19;23121:27;;23158:71;23226:1;23215:9;23211:17;23202:6;23158:71;:::i;:::-;23239:72;23307:2;23296:9;23292:18;23283:6;23239:72;:::i;:::-;23321;23389:2;23378:9;23374:18;23365:6;23321:72;:::i;:::-;23440:9;23434:4;23430:20;23425:2;23414:9;23410:18;23403:48;23468:76;23539:4;23530:6;23468:76;:::i;:::-;23460:84;;22911:640;;;;;;;:::o;23557:210::-;23644:4;23682:2;23671:9;23667:18;23659:26;;23695:65;23757:1;23746:9;23742:17;23733:6;23695:65;:::i;:::-;23557:210;;;;:::o;23773:313::-;23886:4;23924:2;23913:9;23909:18;23901:26;;23973:9;23967:4;23963:20;23959:1;23948:9;23944:17;23937:47;24001:78;24074:4;24065:6;24001:78;:::i;:::-;23993:86;;23773:313;;;;:::o;24092:419::-;24258:4;24296:2;24285:9;24281:18;24273:26;;24345:9;24339:4;24335:20;24331:1;24320:9;24316:17;24309:47;24373:131;24499:4;24373:131;:::i;:::-;24365:139;;24092:419;;;:::o;24517:::-;24683:4;24721:2;24710:9;24706:18;24698:26;;24770:9;24764:4;24760:20;24756:1;24745:9;24741:17;24734:47;24798:131;24924:4;24798:131;:::i;:::-;24790:139;;24517:419;;;:::o;24942:::-;25108:4;25146:2;25135:9;25131:18;25123:26;;25195:9;25189:4;25185:20;25181:1;25170:9;25166:17;25159:47;25223:131;25349:4;25223:131;:::i;:::-;25215:139;;24942:419;;;:::o;25367:::-;25533:4;25571:2;25560:9;25556:18;25548:26;;25620:9;25614:4;25610:20;25606:1;25595:9;25591:17;25584:47;25648:131;25774:4;25648:131;:::i;:::-;25640:139;;25367:419;;;:::o;25792:::-;25958:4;25996:2;25985:9;25981:18;25973:26;;26045:9;26039:4;26035:20;26031:1;26020:9;26016:17;26009:47;26073:131;26199:4;26073:131;:::i;:::-;26065:139;;25792:419;;;:::o;26217:::-;26383:4;26421:2;26410:9;26406:18;26398:26;;26470:9;26464:4;26460:20;26456:1;26445:9;26441:17;26434:47;26498:131;26624:4;26498:131;:::i;:::-;26490:139;;26217:419;;;:::o;26642:::-;26808:4;26846:2;26835:9;26831:18;26823:26;;26895:9;26889:4;26885:20;26881:1;26870:9;26866:17;26859:47;26923:131;27049:4;26923:131;:::i;:::-;26915:139;;26642:419;;;:::o;27067:::-;27233:4;27271:2;27260:9;27256:18;27248:26;;27320:9;27314:4;27310:20;27306:1;27295:9;27291:17;27284:47;27348:131;27474:4;27348:131;:::i;:::-;27340:139;;27067:419;;;:::o;27492:::-;27658:4;27696:2;27685:9;27681:18;27673:26;;27745:9;27739:4;27735:20;27731:1;27720:9;27716:17;27709:47;27773:131;27899:4;27773:131;:::i;:::-;27765:139;;27492:419;;;:::o;27917:::-;28083:4;28121:2;28110:9;28106:18;28098:26;;28170:9;28164:4;28160:20;28156:1;28145:9;28141:17;28134:47;28198:131;28324:4;28198:131;:::i;:::-;28190:139;;27917:419;;;:::o;28342:::-;28508:4;28546:2;28535:9;28531:18;28523:26;;28595:9;28589:4;28585:20;28581:1;28570:9;28566:17;28559:47;28623:131;28749:4;28623:131;:::i;:::-;28615:139;;28342:419;;;:::o;28767:::-;28933:4;28971:2;28960:9;28956:18;28948:26;;29020:9;29014:4;29010:20;29006:1;28995:9;28991:17;28984:47;29048:131;29174:4;29048:131;:::i;:::-;29040:139;;28767:419;;;:::o;29192:::-;29358:4;29396:2;29385:9;29381:18;29373:26;;29445:9;29439:4;29435:20;29431:1;29420:9;29416:17;29409:47;29473:131;29599:4;29473:131;:::i;:::-;29465:139;;29192:419;;;:::o;29617:::-;29783:4;29821:2;29810:9;29806:18;29798:26;;29870:9;29864:4;29860:20;29856:1;29845:9;29841:17;29834:47;29898:131;30024:4;29898:131;:::i;:::-;29890:139;;29617:419;;;:::o;30042:::-;30208:4;30246:2;30235:9;30231:18;30223:26;;30295:9;30289:4;30285:20;30281:1;30270:9;30266:17;30259:47;30323:131;30449:4;30323:131;:::i;:::-;30315:139;;30042:419;;;:::o;30467:::-;30633:4;30671:2;30660:9;30656:18;30648:26;;30720:9;30714:4;30710:20;30706:1;30695:9;30691:17;30684:47;30748:131;30874:4;30748:131;:::i;:::-;30740:139;;30467:419;;;:::o;30892:::-;31058:4;31096:2;31085:9;31081:18;31073:26;;31145:9;31139:4;31135:20;31131:1;31120:9;31116:17;31109:47;31173:131;31299:4;31173:131;:::i;:::-;31165:139;;30892:419;;;:::o;31317:::-;31483:4;31521:2;31510:9;31506:18;31498:26;;31570:9;31564:4;31560:20;31556:1;31545:9;31541:17;31534:47;31598:131;31724:4;31598:131;:::i;:::-;31590:139;;31317:419;;;:::o;31742:::-;31908:4;31946:2;31935:9;31931:18;31923:26;;31995:9;31989:4;31985:20;31981:1;31970:9;31966:17;31959:47;32023:131;32149:4;32023:131;:::i;:::-;32015:139;;31742:419;;;:::o;32167:::-;32333:4;32371:2;32360:9;32356:18;32348:26;;32420:9;32414:4;32410:20;32406:1;32395:9;32391:17;32384:47;32448:131;32574:4;32448:131;:::i;:::-;32440:139;;32167:419;;;:::o;32592:::-;32758:4;32796:2;32785:9;32781:18;32773:26;;32845:9;32839:4;32835:20;32831:1;32820:9;32816:17;32809:47;32873:131;32999:4;32873:131;:::i;:::-;32865:139;;32592:419;;;:::o;33017:::-;33183:4;33221:2;33210:9;33206:18;33198:26;;33270:9;33264:4;33260:20;33256:1;33245:9;33241:17;33234:47;33298:131;33424:4;33298:131;:::i;:::-;33290:139;;33017:419;;;:::o;33442:::-;33608:4;33646:2;33635:9;33631:18;33623:26;;33695:9;33689:4;33685:20;33681:1;33670:9;33666:17;33659:47;33723:131;33849:4;33723:131;:::i;:::-;33715:139;;33442:419;;;:::o;33867:::-;34033:4;34071:2;34060:9;34056:18;34048:26;;34120:9;34114:4;34110:20;34106:1;34095:9;34091:17;34084:47;34148:131;34274:4;34148:131;:::i;:::-;34140:139;;33867:419;;;:::o;34292:::-;34458:4;34496:2;34485:9;34481:18;34473:26;;34545:9;34539:4;34535:20;34531:1;34520:9;34516:17;34509:47;34573:131;34699:4;34573:131;:::i;:::-;34565:139;;34292:419;;;:::o;34717:::-;34883:4;34921:2;34910:9;34906:18;34898:26;;34970:9;34964:4;34960:20;34956:1;34945:9;34941:17;34934:47;34998:131;35124:4;34998:131;:::i;:::-;34990:139;;34717:419;;;:::o;35142:::-;35308:4;35346:2;35335:9;35331:18;35323:26;;35395:9;35389:4;35385:20;35381:1;35370:9;35366:17;35359:47;35423:131;35549:4;35423:131;:::i;:::-;35415:139;;35142:419;;;:::o;35567:::-;35733:4;35771:2;35760:9;35756:18;35748:26;;35820:9;35814:4;35810:20;35806:1;35795:9;35791:17;35784:47;35848:131;35974:4;35848:131;:::i;:::-;35840:139;;35567:419;;;:::o;35992:::-;36158:4;36196:2;36185:9;36181:18;36173:26;;36245:9;36239:4;36235:20;36231:1;36220:9;36216:17;36209:47;36273:131;36399:4;36273:131;:::i;:::-;36265:139;;35992:419;;;:::o;36417:222::-;36510:4;36548:2;36537:9;36533:18;36525:26;;36561:71;36629:1;36618:9;36614:17;36605:6;36561:71;:::i;:::-;36417:222;;;;:::o;36645:129::-;36679:6;36706:20;;:::i;:::-;36696:30;;36735:33;36763:4;36755:6;36735:33;:::i;:::-;36645:129;;;:::o;36780:75::-;36813:6;36846:2;36840:9;36830:19;;36780:75;:::o;36861:307::-;36922:4;37012:18;37004:6;37001:30;36998:56;;;37034:18;;:::i;:::-;36998:56;37072:29;37094:6;37072:29;:::i;:::-;37064:37;;37156:4;37150;37146:15;37138:23;;36861:307;;;:::o;37174:308::-;37236:4;37326:18;37318:6;37315:30;37312:56;;;37348:18;;:::i;:::-;37312:56;37386:29;37408:6;37386:29;:::i;:::-;37378:37;;37470:4;37464;37460:15;37452:23;;37174:308;;;:::o;37488:141::-;37537:4;37560:3;37552:11;;37583:3;37580:1;37573:14;37617:4;37614:1;37604:18;37596:26;;37488:141;;;:::o;37635:98::-;37686:6;37720:5;37714:12;37704:22;;37635:98;;;:::o;37739:99::-;37791:6;37825:5;37819:12;37809:22;;37739:99;;;:::o;37844:168::-;37927:11;37961:6;37956:3;37949:19;38001:4;37996:3;37992:14;37977:29;;37844:168;;;;:::o;38018:147::-;38119:11;38156:3;38141:18;;38018:147;;;;:::o;38171:169::-;38255:11;38289:6;38284:3;38277:19;38329:4;38324:3;38320:14;38305:29;;38171:169;;;;:::o;38346:148::-;38448:11;38485:3;38470:18;;38346:148;;;;:::o;38500:305::-;38540:3;38559:20;38577:1;38559:20;:::i;:::-;38554:25;;38593:20;38611:1;38593:20;:::i;:::-;38588:25;;38747:1;38679:66;38675:74;38672:1;38669:81;38666:107;;;38753:18;;:::i;:::-;38666:107;38797:1;38794;38790:9;38783:16;;38500:305;;;;:::o;38811:185::-;38851:1;38868:20;38886:1;38868:20;:::i;:::-;38863:25;;38902:20;38920:1;38902:20;:::i;:::-;38897:25;;38941:1;38931:35;;38946:18;;:::i;:::-;38931:35;38988:1;38985;38981:9;38976:14;;38811:185;;;;:::o;39002:348::-;39042:7;39065:20;39083:1;39065:20;:::i;:::-;39060:25;;39099:20;39117:1;39099:20;:::i;:::-;39094:25;;39287:1;39219:66;39215:74;39212:1;39209:81;39204:1;39197:9;39190:17;39186:105;39183:131;;;39294:18;;:::i;:::-;39183:131;39342:1;39339;39335:9;39324:20;;39002:348;;;;:::o;39356:191::-;39396:4;39416:20;39434:1;39416:20;:::i;:::-;39411:25;;39450:20;39468:1;39450:20;:::i;:::-;39445:25;;39489:1;39486;39483:8;39480:34;;;39494:18;;:::i;:::-;39480:34;39539:1;39536;39532:9;39524:17;;39356:191;;;;:::o;39553:96::-;39590:7;39619:24;39637:5;39619:24;:::i;:::-;39608:35;;39553:96;;;:::o;39655:90::-;39689:7;39732:5;39725:13;39718:21;39707:32;;39655:90;;;:::o;39751:149::-;39787:7;39827:66;39820:5;39816:78;39805:89;;39751:149;;;:::o;39906:126::-;39943:7;39983:42;39976:5;39972:54;39961:65;;39906:126;;;:::o;40038:77::-;40075:7;40104:5;40093:16;;40038:77;;;:::o;40121:154::-;40205:6;40200:3;40195;40182:30;40267:1;40258:6;40253:3;40249:16;40242:27;40121:154;;;:::o;40281:307::-;40349:1;40359:113;40373:6;40370:1;40367:13;40359:113;;;40458:1;40453:3;40449:11;40443:18;40439:1;40434:3;40430:11;40423:39;40395:2;40392:1;40388:10;40383:15;;40359:113;;;40490:6;40487:1;40484:13;40481:101;;;40570:1;40561:6;40556:3;40552:16;40545:27;40481:101;40330:258;40281:307;;;:::o;40594:320::-;40638:6;40675:1;40669:4;40665:12;40655:22;;40722:1;40716:4;40712:12;40743:18;40733:81;;40799:4;40791:6;40787:17;40777:27;;40733:81;40861:2;40853:6;40850:14;40830:18;40827:38;40824:84;;;40880:18;;:::i;:::-;40824:84;40645:269;40594:320;;;:::o;40920:281::-;41003:27;41025:4;41003:27;:::i;:::-;40995:6;40991:40;41133:6;41121:10;41118:22;41097:18;41085:10;41082:34;41079:62;41076:88;;;41144:18;;:::i;:::-;41076:88;41184:10;41180:2;41173:22;40963:238;40920:281;;:::o;41207:233::-;41246:3;41269:24;41287:5;41269:24;:::i;:::-;41260:33;;41315:66;41308:5;41305:77;41302:103;;;41385:18;;:::i;:::-;41302:103;41432:1;41425:5;41421:13;41414:20;;41207:233;;;:::o;41446:176::-;41478:1;41495:20;41513:1;41495:20;:::i;:::-;41490:25;;41529:20;41547:1;41529:20;:::i;:::-;41524:25;;41568:1;41558:35;;41573:18;;:::i;:::-;41558:35;41614:1;41611;41607:9;41602:14;;41446:176;;;;:::o;41628:180::-;41676:77;41673:1;41666:88;41773:4;41770:1;41763:15;41797:4;41794:1;41787:15;41814:180;41862:77;41859:1;41852:88;41959:4;41956:1;41949:15;41983:4;41980:1;41973:15;42000:180;42048:77;42045:1;42038:88;42145:4;42142:1;42135:15;42169:4;42166:1;42159:15;42186:180;42234:77;42231:1;42224:88;42331:4;42328:1;42321:15;42355:4;42352:1;42345:15;42372:180;42420:77;42417:1;42410:88;42517:4;42514:1;42507:15;42541:4;42538:1;42531:15;42558:180;42606:77;42603:1;42596:88;42703:4;42700:1;42693:15;42727:4;42724:1;42717:15;42744:117;42853:1;42850;42843:12;42867:117;42976:1;42973;42966:12;42990:117;43099:1;43096;43089:12;43113:117;43222:1;43219;43212:12;43236:117;43345:1;43342;43335:12;43359:117;43468:1;43465;43458:12;43482:102;43523:6;43574:2;43570:7;43565:2;43558:5;43554:14;43550:28;43540:38;;43482:102;;;:::o;43590:233::-;43730:34;43726:1;43718:6;43714:14;43707:58;43799:16;43794:2;43786:6;43782:15;43775:41;43590:233;:::o;43829:230::-;43969:34;43965:1;43957:6;43953:14;43946:58;44038:13;44033:2;44025:6;44021:15;44014:38;43829:230;:::o;44065:237::-;44205:34;44201:1;44193:6;44189:14;44182:58;44274:20;44269:2;44261:6;44257:15;44250:45;44065:237;:::o;44308:225::-;44448:34;44444:1;44436:6;44432:14;44425:58;44517:8;44512:2;44504:6;44500:15;44493:33;44308:225;:::o;44539:224::-;44679:34;44675:1;44667:6;44663:14;44656:58;44748:7;44743:2;44735:6;44731:15;44724:32;44539:224;:::o;44769:178::-;44909:30;44905:1;44897:6;44893:14;44886:54;44769:178;:::o;44953:173::-;45093:25;45089:1;45081:6;45077:14;45070:49;44953:173;:::o;45132:231::-;45272:34;45268:1;45260:6;45256:14;45249:58;45341:14;45336:2;45328:6;45324:15;45317:39;45132:231;:::o;45369:223::-;45509:34;45505:1;45497:6;45493:14;45486:58;45578:6;45573:2;45565:6;45561:15;45554:31;45369:223;:::o;45598:175::-;45738:27;45734:1;45726:6;45722:14;45715:51;45598:175;:::o;45779:231::-;45919:34;45915:1;45907:6;45903:14;45896:58;45988:14;45983:2;45975:6;45971:15;45964:39;45779:231;:::o;46016:243::-;46156:34;46152:1;46144:6;46140:14;46133:58;46225:26;46220:2;46212:6;46208:15;46201:51;46016:243;:::o;46265:229::-;46405:34;46401:1;46393:6;46389:14;46382:58;46474:12;46469:2;46461:6;46457:15;46450:37;46265:229;:::o;46500:228::-;46640:34;46636:1;46628:6;46624:14;46617:58;46709:11;46704:2;46696:6;46692:15;46685:36;46500:228;:::o;46734:181::-;46874:33;46870:1;46862:6;46858:14;46851:57;46734:181;:::o;46921:172::-;47061:24;47057:1;47049:6;47045:14;47038:48;46921:172;:::o;47099:182::-;47239:34;47235:1;47227:6;47223:14;47216:58;47099:182;:::o;47287:231::-;47427:34;47423:1;47415:6;47411:14;47404:58;47496:14;47491:2;47483:6;47479:15;47472:39;47287:231;:::o;47524:182::-;47664:34;47660:1;47652:6;47648:14;47641:58;47524:182;:::o;47712:170::-;47852:22;47848:1;47840:6;47836:14;47829:46;47712:170;:::o;47888:234::-;48028:34;48024:1;48016:6;48012:14;48005:58;48097:17;48092:2;48084:6;48080:15;48073:42;47888:234;:::o;48128:::-;48268:34;48264:1;48256:6;48252:14;48245:58;48337:17;48332:2;48324:6;48320:15;48313:42;48128:234;:::o;48368:220::-;48508:34;48504:1;48496:6;48492:14;48485:58;48577:3;48572:2;48564:6;48560:15;48553:28;48368:220;:::o;48594:114::-;;:::o;48714:236::-;48854:34;48850:1;48842:6;48838:14;48831:58;48923:19;48918:2;48910:6;48906:15;48899:44;48714:236;:::o;48956:231::-;49096:34;49092:1;49084:6;49080:14;49073:58;49165:14;49160:2;49152:6;49148:15;49141:39;48956:231;:::o;49193:173::-;49333:25;49329:1;49321:6;49317:14;49310:49;49193:173;:::o;49372:171::-;49512:23;49508:1;49500:6;49496:14;49489:47;49372:171;:::o;49549:291::-;49689:34;49685:1;49677:6;49673:14;49666:58;49758:34;49753:2;49745:6;49741:15;49734:59;49827:5;49822:2;49814:6;49810:15;49803:30;49549:291;:::o;49846:177::-;49986:29;49982:1;49974:6;49970:14;49963:53;49846:177;:::o;50029:122::-;50102:24;50120:5;50102:24;:::i;:::-;50095:5;50092:35;50082:63;;50141:1;50138;50131:12;50082:63;50029:122;:::o;50157:116::-;50227:21;50242:5;50227:21;:::i;:::-;50220:5;50217:32;50207:60;;50263:1;50260;50253:12;50207:60;50157:116;:::o;50279:120::-;50351:23;50368:5;50351:23;:::i;:::-;50344:5;50341:34;50331:62;;50389:1;50386;50379:12;50331:62;50279:120;:::o;50405:122::-;50478:24;50496:5;50478:24;:::i;:::-;50471:5;50468:35;50458:63;;50517:1;50514;50507:12;50458:63;50405:122;:::o
Swarm Source
ipfs://dad2f7ff39440fe5c1e74f876fddb82d962d43472fe19b919b7f37e25bd1785c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.