Token
PlazaNFT (PlazaNFT)
ERC-721
Overview
Max Total Supply
2 PlazaNFT
Holders
2
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 PlazaNFTLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PlazaNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.ftmscan.com on 2021-10-12 */ /** *Submitted for verification at Etherscan.io on 2021-09-03 */ // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] 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/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/Plaza.sol pragma solidity ^0.8.4; contract PlazaNFT is ERC721Enumerable, Ownable { event Minted( uint256 tokenId, address to, address minter ); using Strings for uint256; string _baseTokenURI; uint256 private _price = 555 * 10**18; //555 FTM; bool public _paused = true; uint public constant MAX_ENTRIES = 10000; address payable public _feeReceipient; constructor(string memory baseURI) ERC721("PlazaNFT", "PlazaNFT") { setBaseURI(baseURI); } function updatePrice(uint256 price) external onlyOwner { _price = price; } function updateFeeRecipient(address payable feeReceipient) external onlyOwner { _feeReceipient = feeReceipient; } function mint(address _to) public payable { uint256 supply = totalSupply(); if(msg.sender != owner()) { require(!_paused, "Sale Paused"); require( msg.value >= _price, "Insufficient funds to mint." ); } // Send FTM fee to fee recipient (bool success,) = _feeReceipient.call{value : msg.value}(""); require(success, "Transfer failed"); uint256 newTokenId = supply + 1; _safeMint( _to, newTokenId); emit Minted(newTokenId, _to, _msgSender()); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function isPaused() public view returns(bool) { return _paused; } function pause(bool val) public onlyOwner { _paused = val; } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } }
[{"inputs":[{"internalType":"string","name":"baseURI","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_ENTRIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeReceipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"feeReceipient","type":"address"}],"name":"updateFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052681e162c177be5cc0000600c556001600d60006101000a81548160ff0219169083151502179055503480156200003957600080fd5b50604051620046303803806200463083398181016040528101906200005f919062000408565b6040518060400160405280600881526020017f506c617a614e46540000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f506c617a614e46540000000000000000000000000000000000000000000000008152508160009080519060200190620000e3929190620002da565b508060019080519060200190620000fc929190620002da565b5050506200011f620001136200013760201b60201c565b6200013f60201b60201c565b62000130816200020560201b60201c565b5062000660565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002156200013760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023b620002b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000294576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028b9062000480565b60405180910390fd5b80600b9080519060200190620002ac929190620002da565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002e89062000548565b90600052602060002090601f0160209004810192826200030c576000855562000358565b82601f106200032757805160ff191683800117855562000358565b8280016001018555821562000358579182015b82811115620003575782518255916020019190600101906200033a565b5b5090506200036791906200036b565b5090565b5b80821115620003865760008160009055506001016200036c565b5090565b6000620003a16200039b84620004cb565b620004a2565b905082815260208101848484011115620003c057620003bf62000617565b5b620003cd84828562000512565b509392505050565b600082601f830112620003ed57620003ec62000612565b5b8151620003ff8482602086016200038a565b91505092915050565b60006020828403121562000421576200042062000621565b5b600082015167ffffffffffffffff8111156200044257620004416200061c565b5b6200045084828501620003d5565b91505092915050565b60006200046860208362000501565b9150620004758262000637565b602082019050919050565b600060208201905081810360008301526200049b8162000459565b9050919050565b6000620004ae620004c1565b9050620004bc82826200057e565b919050565b6000604051905090565b600067ffffffffffffffff821115620004e957620004e8620005e3565b5b620004f48262000626565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200053257808201518184015260208101905062000515565b8381111562000542576000848401525b50505050565b600060028204905060018216806200056157607f821691505b60208210811415620005785762000577620005b4565b5b50919050565b620005898262000626565b810181811067ffffffffffffffff82111715620005ab57620005aa620005e3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613fc080620006706000396000f3fe6080604052600436106101c25760003560e01c80636a627842116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd1461061f578063e985e9c51461065c578063f160d36914610699578063f2fde38b146106c2576101c2565b806395d89b4114610577578063a22cb465146105a2578063b187bd26146105cb578063b88d4fde146105f6576101c2565b80637879c8bf116100d15780637879c8bf146104cd5780637d4cb964146104f85780638d6cc56d146105235780638da5cb5b1461054c576101c2565b80636a6278421461045d57806370a0823114610479578063715018a6146104b6576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e146103915780634f6ccce7146103ba57806355f804b3146103f75780636352211e14610420576101c2565b806323b872dd146103145780632f745c591461033d5780633ccfd60b1461037a576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b31461029557806316c61ccc146102be57806318160ddd146102e9576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612c94565b6106eb565b6040516101fb9190613200565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612c67565b610765565b005b34801561023957600080fd5b506102426107fe565b60405161024f919061321b565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612d37565b610890565b60405161028c919061317e565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612c27565b610915565b005b3480156102ca57600080fd5b506102d3610a2d565b6040516102e09190613200565b60405180910390f35b3480156102f557600080fd5b506102fe610a40565b60405161030b91906134dd565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190612b11565b610a4d565b005b34801561034957600080fd5b50610364600480360381019061035f9190612c27565b610aad565b60405161037191906134dd565b60405180910390f35b34801561038657600080fd5b5061038f610b52565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612b11565b610c1d565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612d37565b610c3d565b6040516103ee91906134dd565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612cee565b610cae565b005b34801561042c57600080fd5b5061044760048036038101906104429190612d37565b610d44565b604051610454919061317e565b60405180910390f35b61047760048036038101906104729190612a77565b610df6565b005b34801561048557600080fd5b506104a0600480360381019061049b9190612a77565b611003565b6040516104ad91906134dd565b60405180910390f35b3480156104c257600080fd5b506104cb6110bb565b005b3480156104d957600080fd5b506104e2611143565b6040516104ef9190613199565b60405180910390f35b34801561050457600080fd5b5061050d611169565b60405161051a91906134dd565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190612d37565b61116f565b005b34801561055857600080fd5b506105616111f5565b60405161056e919061317e565b60405180910390f35b34801561058357600080fd5b5061058c61121f565b604051610599919061321b565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190612be7565b6112b1565b005b3480156105d757600080fd5b506105e0611432565b6040516105ed9190613200565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612b64565b611449565b005b34801561062b57600080fd5b5061064660048036038101906106419190612d37565b6114ab565b604051610653919061321b565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190612ad1565b611552565b6040516106909190613200565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190612aa4565b6115e6565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190612a77565b6116a6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075e575061075d8261179e565b5b9050919050565b61076d611880565b73ffffffffffffffffffffffffffffffffffffffff1661078b6111f5565b73ffffffffffffffffffffffffffffffffffffffff16146107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061341d565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60606000805461080d90613787565b80601f016020809104026020016040519081016040528092919081815260200182805461083990613787565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050905090565b600061089b82611888565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d1906133fd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092082610d44565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109889061347d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b0611880565b73ffffffffffffffffffffffffffffffffffffffff1614806109df57506109de816109d9611880565b611552565b5b610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a159061335d565b60405180910390fd5b610a2883836118f4565b505050565b600d60009054906101000a900460ff1681565b6000600880549050905090565b610a5e610a58611880565b826119ad565b610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a949061349d565b60405180910390fd5b610aa8838383611a8b565b505050565b6000610ab883611003565b8210610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09061325d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b5a611880565b73ffffffffffffffffffffffffffffffffffffffff16610b786111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc59061341d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c19573d6000803e3d6000fd5b5050565b610c3883838360405180602001604052806000815250611449565b505050565b6000610c47610a40565b8210610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906134bd565b60405180910390fd5b60088281548110610c9c57610c9b613920565b5b90600052602060002001549050919050565b610cb6611880565b73ffffffffffffffffffffffffffffffffffffffff16610cd46111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d219061341d565b60405180910390fd5b80600b9080519060200190610d40929190612876565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061339d565b60405180910390fd5b80915050919050565b6000610e00610a40565b9050610e0a6111f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ed257600d60009054906101000a900460ff1615610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e83906133dd565b60405180910390fd5b600c54341015610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec89061323d565b60405180910390fd5b5b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610f1a90613169565b60006040518083038185875af1925050503d8060008114610f57576040519150601f19603f3d011682016040523d82523d6000602084013e610f5c565b606091505b5050905080610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906132bd565b60405180910390fd5b6000600183610faf9190613604565b9050610fbb8482611ce7565b7f5758c4c0a4d007ca9768a0a574eedc39af88c4423f4ad0f8895b1b8fd1e761338185610fe6611880565b604051610ff5939291906134f8565b60405180910390a150505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b9061337d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c3611880565b73ffffffffffffffffffffffffffffffffffffffff166110e16111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061341d565b60405180910390fd5b6111416000611d05565b565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b611177611880565b73ffffffffffffffffffffffffffffffffffffffff166111956111f5565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061341d565b60405180910390fd5b80600c8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461122e90613787565b80601f016020809104026020016040519081016040528092919081815260200182805461125a90613787565b80156112a75780601f1061127c576101008083540402835291602001916112a7565b820191906000526020600020905b81548152906001019060200180831161128a57829003601f168201915b5050505050905090565b6112b9611880565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061331d565b60405180910390fd5b8060056000611334611880565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113e1611880565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114269190613200565b60405180910390a35050565b6000600d60009054906101000a900460ff16905090565b61145a611454611880565b836119ad565b611499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114909061349d565b60405180910390fd5b6114a584848484611dcb565b50505050565b60606114b682611888565b6114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec9061345d565b60405180910390fd5b60006114ff611e27565b9050600081511161151f576040518060200160405280600081525061154a565b8061152984611eb9565b60405160200161153a929190613145565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115ee611880565b73ffffffffffffffffffffffffffffffffffffffff1661160c6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116599061341d565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ae611880565b73ffffffffffffffffffffffffffffffffffffffff166116cc6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117199061341d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611792576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117899061329d565b60405180910390fd5b61179b81611d05565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061186957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061187957506118788261201a565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196783610d44565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b882611888565b6119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee9061333d565b60405180910390fd5b6000611a0283610d44565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a7157508373ffffffffffffffffffffffffffffffffffffffff16611a5984610890565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a825750611a818185611552565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aab82610d44565b73ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061343d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906132fd565b60405180910390fd5b611b7c838383612084565b611b876000826118f4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd7919061368b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2e9190613604565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d01828260405180602001604052806000815250612198565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611dd6848484611a8b565b611de2848484846121f3565b611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e189061327d565b60405180910390fd5b50505050565b6060600b8054611e3690613787565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6290613787565b8015611eaf5780601f10611e8457610100808354040283529160200191611eaf565b820191906000526020600020905b815481529060010190602001808311611e9257829003601f168201915b5050505050905090565b60606000821415611f01576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612015565b600082905060005b60008214611f33578080611f1c906137ea565b915050600a82611f2c919061365a565b9150611f09565b60008167ffffffffffffffff811115611f4f57611f4e61394f565b5b6040519080825280601f01601f191660200182016040528015611f815781602001600182028036833780820191505090505b5090505b6000851461200e57600182611f9a919061368b565b9150600a85611fa99190613833565b6030611fb59190613604565b60f81b818381518110611fcb57611fca613920565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612007919061365a565b9450611f85565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61208f83838361238a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d2576120cd8161238f565b612111565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121105761210f83826123d8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121545761214f81612545565b612193565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612192576121918282612616565b5b5b505050565b6121a28383612695565b6121af60008484846121f3565b6121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e59061327d565b60405180910390fd5b505050565b60006122148473ffffffffffffffffffffffffffffffffffffffff16612863565b1561237d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261223d611880565b8786866040518563ffffffff1660e01b815260040161225f94939291906131b4565b602060405180830381600087803b15801561227957600080fd5b505af19250505080156122aa57506040513d601f19601f820116820180604052508101906122a79190612cc1565b60015b61232d573d80600081146122da576040519150601f19603f3d011682016040523d82523d6000602084013e6122df565b606091505b50600081511415612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c9061327d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612382565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016123e584611003565b6123ef919061368b565b90506000600760008481526020019081526020016000205490508181146124d4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612559919061368b565b905060006009600084815260200190815260200160002054905060006008838154811061258957612588613920565b5b9060005260206000200154905080600883815481106125ab576125aa613920565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125fa576125f96138f1565b5b6001900381819060005260206000200160009055905550505050565b600061262183611003565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906133bd565b60405180910390fd5b61270e81611888565b1561274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906132dd565b60405180910390fd5b61275a60008383612084565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127aa9190613604565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461288290613787565b90600052602060002090601f0160209004810192826128a457600085556128eb565b82601f106128bd57805160ff19168380011785556128eb565b828001600101855582156128eb579182015b828111156128ea5782518255916020019190600101906128cf565b5b5090506128f891906128fc565b5090565b5b808211156129155760008160009055506001016128fd565b5090565b600061292c61292784613554565b61352f565b90508281526020810184848401111561294857612947613983565b5b612953848285613745565b509392505050565b600061296e61296984613585565b61352f565b90508281526020810184848401111561298a57612989613983565b5b612995848285613745565b509392505050565b6000813590506129ac81613f17565b92915050565b6000813590506129c181613f2e565b92915050565b6000813590506129d681613f45565b92915050565b6000813590506129eb81613f5c565b92915050565b600081519050612a0081613f5c565b92915050565b600082601f830112612a1b57612a1a61397e565b5b8135612a2b848260208601612919565b91505092915050565b600082601f830112612a4957612a4861397e565b5b8135612a5984826020860161295b565b91505092915050565b600081359050612a7181613f73565b92915050565b600060208284031215612a8d57612a8c61398d565b5b6000612a9b8482850161299d565b91505092915050565b600060208284031215612aba57612ab961398d565b5b6000612ac8848285016129b2565b91505092915050565b60008060408385031215612ae857612ae761398d565b5b6000612af68582860161299d565b9250506020612b078582860161299d565b9150509250929050565b600080600060608486031215612b2a57612b2961398d565b5b6000612b388682870161299d565b9350506020612b498682870161299d565b9250506040612b5a86828701612a62565b9150509250925092565b60008060008060808587031215612b7e57612b7d61398d565b5b6000612b8c8782880161299d565b9450506020612b9d8782880161299d565b9350506040612bae87828801612a62565b925050606085013567ffffffffffffffff811115612bcf57612bce613988565b5b612bdb87828801612a06565b91505092959194509250565b60008060408385031215612bfe57612bfd61398d565b5b6000612c0c8582860161299d565b9250506020612c1d858286016129c7565b9150509250929050565b60008060408385031215612c3e57612c3d61398d565b5b6000612c4c8582860161299d565b9250506020612c5d85828601612a62565b9150509250929050565b600060208284031215612c7d57612c7c61398d565b5b6000612c8b848285016129c7565b91505092915050565b600060208284031215612caa57612ca961398d565b5b6000612cb8848285016129dc565b91505092915050565b600060208284031215612cd757612cd661398d565b5b6000612ce5848285016129f1565b91505092915050565b600060208284031215612d0457612d0361398d565b5b600082013567ffffffffffffffff811115612d2257612d21613988565b5b612d2e84828501612a34565b91505092915050565b600060208284031215612d4d57612d4c61398d565b5b6000612d5b84828501612a62565b91505092915050565b612d6d816136d1565b82525050565b612d7c816136bf565b82525050565b612d8b816136e3565b82525050565b6000612d9c826135b6565b612da681856135cc565b9350612db6818560208601613754565b612dbf81613992565b840191505092915050565b6000612dd5826135c1565b612ddf81856135e8565b9350612def818560208601613754565b612df881613992565b840191505092915050565b6000612e0e826135c1565b612e1881856135f9565b9350612e28818560208601613754565b80840191505092915050565b6000612e41601b836135e8565b9150612e4c826139a3565b602082019050919050565b6000612e64602b836135e8565b9150612e6f826139cc565b604082019050919050565b6000612e876032836135e8565b9150612e9282613a1b565b604082019050919050565b6000612eaa6026836135e8565b9150612eb582613a6a565b604082019050919050565b6000612ecd600f836135e8565b9150612ed882613ab9565b602082019050919050565b6000612ef0601c836135e8565b9150612efb82613ae2565b602082019050919050565b6000612f136024836135e8565b9150612f1e82613b0b565b604082019050919050565b6000612f366019836135e8565b9150612f4182613b5a565b602082019050919050565b6000612f59602c836135e8565b9150612f6482613b83565b604082019050919050565b6000612f7c6038836135e8565b9150612f8782613bd2565b604082019050919050565b6000612f9f602a836135e8565b9150612faa82613c21565b604082019050919050565b6000612fc26029836135e8565b9150612fcd82613c70565b604082019050919050565b6000612fe56020836135e8565b9150612ff082613cbf565b602082019050919050565b6000613008600b836135e8565b915061301382613ce8565b602082019050919050565b600061302b602c836135e8565b915061303682613d11565b604082019050919050565b600061304e6020836135e8565b915061305982613d60565b602082019050919050565b60006130716029836135e8565b915061307c82613d89565b604082019050919050565b6000613094602f836135e8565b915061309f82613dd8565b604082019050919050565b60006130b76021836135e8565b91506130c282613e27565b604082019050919050565b60006130da6000836135dd565b91506130e582613e76565b600082019050919050565b60006130fd6031836135e8565b915061310882613e79565b604082019050919050565b6000613120602c836135e8565b915061312b82613ec8565b604082019050919050565b61313f8161373b565b82525050565b60006131518285612e03565b915061315d8284612e03565b91508190509392505050565b6000613174826130cd565b9150819050919050565b60006020820190506131936000830184612d73565b92915050565b60006020820190506131ae6000830184612d64565b92915050565b60006080820190506131c96000830187612d73565b6131d66020830186612d73565b6131e36040830185613136565b81810360608301526131f58184612d91565b905095945050505050565b60006020820190506132156000830184612d82565b92915050565b600060208201905081810360008301526132358184612dca565b905092915050565b6000602082019050818103600083015261325681612e34565b9050919050565b6000602082019050818103600083015261327681612e57565b9050919050565b6000602082019050818103600083015261329681612e7a565b9050919050565b600060208201905081810360008301526132b681612e9d565b9050919050565b600060208201905081810360008301526132d681612ec0565b9050919050565b600060208201905081810360008301526132f681612ee3565b9050919050565b6000602082019050818103600083015261331681612f06565b9050919050565b6000602082019050818103600083015261333681612f29565b9050919050565b6000602082019050818103600083015261335681612f4c565b9050919050565b6000602082019050818103600083015261337681612f6f565b9050919050565b6000602082019050818103600083015261339681612f92565b9050919050565b600060208201905081810360008301526133b681612fb5565b9050919050565b600060208201905081810360008301526133d681612fd8565b9050919050565b600060208201905081810360008301526133f681612ffb565b9050919050565b600060208201905081810360008301526134168161301e565b9050919050565b6000602082019050818103600083015261343681613041565b9050919050565b6000602082019050818103600083015261345681613064565b9050919050565b6000602082019050818103600083015261347681613087565b9050919050565b60006020820190508181036000830152613496816130aa565b9050919050565b600060208201905081810360008301526134b6816130f0565b9050919050565b600060208201905081810360008301526134d681613113565b9050919050565b60006020820190506134f26000830184613136565b92915050565b600060608201905061350d6000830186613136565b61351a6020830185612d73565b6135276040830184612d73565b949350505050565b600061353961354a565b905061354582826137b9565b919050565b6000604051905090565b600067ffffffffffffffff82111561356f5761356e61394f565b5b61357882613992565b9050602081019050919050565b600067ffffffffffffffff8211156135a05761359f61394f565b5b6135a982613992565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061360f8261373b565b915061361a8361373b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561364f5761364e613864565b5b828201905092915050565b60006136658261373b565b91506136708361373b565b9250826136805761367f613893565b5b828204905092915050565b60006136968261373b565b91506136a18361373b565b9250828210156136b4576136b3613864565b5b828203905092915050565b60006136ca8261371b565b9050919050565b60006136dc8261371b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613772578082015181840152602081019050613757565b83811115613781576000848401525b50505050565b6000600282049050600182168061379f57607f821691505b602082108114156137b3576137b26138c2565b5b50919050565b6137c282613992565b810181811067ffffffffffffffff821117156137e1576137e061394f565b5b80604052505050565b60006137f58261373b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561382857613827613864565b5b600182019050919050565b600061383e8261373b565b91506138498361373b565b92508261385957613858613893565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e73756666696369656e742066756e647320746f206d696e742e0000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520506175736564000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613f20816136bf565b8114613f2b57600080fd5b50565b613f37816136d1565b8114613f4257600080fd5b50565b613f4e816136e3565b8114613f5957600080fd5b50565b613f65816136ef565b8114613f7057600080fd5b50565b613f7c8161373b565b8114613f8757600080fd5b5056fea26469706673582212209fccb33de240e95cb53f487837ba43d5385f686e3c6a99357dfd3bcdc01bdaa764736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80636a627842116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd1461061f578063e985e9c51461065c578063f160d36914610699578063f2fde38b146106c2576101c2565b806395d89b4114610577578063a22cb465146105a2578063b187bd26146105cb578063b88d4fde146105f6576101c2565b80637879c8bf116100d15780637879c8bf146104cd5780637d4cb964146104f85780638d6cc56d146105235780638da5cb5b1461054c576101c2565b80636a6278421461045d57806370a0823114610479578063715018a6146104b6576101c2565b806323b872dd1161016457806342842e0e1161013e57806342842e0e146103915780634f6ccce7146103ba57806355f804b3146103f75780636352211e14610420576101c2565b806323b872dd146103145780632f745c591461033d5780633ccfd60b1461037a576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b31461029557806316c61ccc146102be57806318160ddd146102e9576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612c94565b6106eb565b6040516101fb9190613200565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612c67565b610765565b005b34801561023957600080fd5b506102426107fe565b60405161024f919061321b565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190612d37565b610890565b60405161028c919061317e565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b79190612c27565b610915565b005b3480156102ca57600080fd5b506102d3610a2d565b6040516102e09190613200565b60405180910390f35b3480156102f557600080fd5b506102fe610a40565b60405161030b91906134dd565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190612b11565b610a4d565b005b34801561034957600080fd5b50610364600480360381019061035f9190612c27565b610aad565b60405161037191906134dd565b60405180910390f35b34801561038657600080fd5b5061038f610b52565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612b11565b610c1d565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612d37565b610c3d565b6040516103ee91906134dd565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612cee565b610cae565b005b34801561042c57600080fd5b5061044760048036038101906104429190612d37565b610d44565b604051610454919061317e565b60405180910390f35b61047760048036038101906104729190612a77565b610df6565b005b34801561048557600080fd5b506104a0600480360381019061049b9190612a77565b611003565b6040516104ad91906134dd565b60405180910390f35b3480156104c257600080fd5b506104cb6110bb565b005b3480156104d957600080fd5b506104e2611143565b6040516104ef9190613199565b60405180910390f35b34801561050457600080fd5b5061050d611169565b60405161051a91906134dd565b60405180910390f35b34801561052f57600080fd5b5061054a60048036038101906105459190612d37565b61116f565b005b34801561055857600080fd5b506105616111f5565b60405161056e919061317e565b60405180910390f35b34801561058357600080fd5b5061058c61121f565b604051610599919061321b565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190612be7565b6112b1565b005b3480156105d757600080fd5b506105e0611432565b6040516105ed9190613200565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612b64565b611449565b005b34801561062b57600080fd5b5061064660048036038101906106419190612d37565b6114ab565b604051610653919061321b565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190612ad1565b611552565b6040516106909190613200565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190612aa4565b6115e6565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190612a77565b6116a6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075e575061075d8261179e565b5b9050919050565b61076d611880565b73ffffffffffffffffffffffffffffffffffffffff1661078b6111f5565b73ffffffffffffffffffffffffffffffffffffffff16146107e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d89061341d565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b60606000805461080d90613787565b80601f016020809104026020016040519081016040528092919081815260200182805461083990613787565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050905090565b600061089b82611888565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d1906133fd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092082610d44565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109889061347d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109b0611880565b73ffffffffffffffffffffffffffffffffffffffff1614806109df57506109de816109d9611880565b611552565b5b610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a159061335d565b60405180910390fd5b610a2883836118f4565b505050565b600d60009054906101000a900460ff1681565b6000600880549050905090565b610a5e610a58611880565b826119ad565b610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a949061349d565b60405180910390fd5b610aa8838383611a8b565b505050565b6000610ab883611003565b8210610af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af09061325d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b5a611880565b73ffffffffffffffffffffffffffffffffffffffff16610b786111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc59061341d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c19573d6000803e3d6000fd5b5050565b610c3883838360405180602001604052806000815250611449565b505050565b6000610c47610a40565b8210610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906134bd565b60405180910390fd5b60088281548110610c9c57610c9b613920565b5b90600052602060002001549050919050565b610cb6611880565b73ffffffffffffffffffffffffffffffffffffffff16610cd46111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d219061341d565b60405180910390fd5b80600b9080519060200190610d40929190612876565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061339d565b60405180910390fd5b80915050919050565b6000610e00610a40565b9050610e0a6111f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ed257600d60009054906101000a900460ff1615610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e83906133dd565b60405180910390fd5b600c54341015610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec89061323d565b60405180910390fd5b5b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610f1a90613169565b60006040518083038185875af1925050503d8060008114610f57576040519150601f19603f3d011682016040523d82523d6000602084013e610f5c565b606091505b5050905080610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906132bd565b60405180910390fd5b6000600183610faf9190613604565b9050610fbb8482611ce7565b7f5758c4c0a4d007ca9768a0a574eedc39af88c4423f4ad0f8895b1b8fd1e761338185610fe6611880565b604051610ff5939291906134f8565b60405180910390a150505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b9061337d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c3611880565b73ffffffffffffffffffffffffffffffffffffffff166110e16111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e9061341d565b60405180910390fd5b6111416000611d05565b565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b611177611880565b73ffffffffffffffffffffffffffffffffffffffff166111956111f5565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061341d565b60405180910390fd5b80600c8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461122e90613787565b80601f016020809104026020016040519081016040528092919081815260200182805461125a90613787565b80156112a75780601f1061127c576101008083540402835291602001916112a7565b820191906000526020600020905b81548152906001019060200180831161128a57829003601f168201915b5050505050905090565b6112b9611880565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061331d565b60405180910390fd5b8060056000611334611880565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113e1611880565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114269190613200565b60405180910390a35050565b6000600d60009054906101000a900460ff16905090565b61145a611454611880565b836119ad565b611499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114909061349d565b60405180910390fd5b6114a584848484611dcb565b50505050565b60606114b682611888565b6114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec9061345d565b60405180910390fd5b60006114ff611e27565b9050600081511161151f576040518060200160405280600081525061154a565b8061152984611eb9565b60405160200161153a929190613145565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115ee611880565b73ffffffffffffffffffffffffffffffffffffffff1661160c6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116599061341d565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116ae611880565b73ffffffffffffffffffffffffffffffffffffffff166116cc6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117199061341d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611792576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117899061329d565b60405180910390fd5b61179b81611d05565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061186957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061187957506118788261201a565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661196783610d44565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119b882611888565b6119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee9061333d565b60405180910390fd5b6000611a0283610d44565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a7157508373ffffffffffffffffffffffffffffffffffffffff16611a5984610890565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a825750611a818185611552565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611aab82610d44565b73ffffffffffffffffffffffffffffffffffffffff1614611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af89061343d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906132fd565b60405180910390fd5b611b7c838383612084565b611b876000826118f4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bd7919061368b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c2e9190613604565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d01828260405180602001604052806000815250612198565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611dd6848484611a8b565b611de2848484846121f3565b611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e189061327d565b60405180910390fd5b50505050565b6060600b8054611e3690613787565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6290613787565b8015611eaf5780601f10611e8457610100808354040283529160200191611eaf565b820191906000526020600020905b815481529060010190602001808311611e9257829003601f168201915b5050505050905090565b60606000821415611f01576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612015565b600082905060005b60008214611f33578080611f1c906137ea565b915050600a82611f2c919061365a565b9150611f09565b60008167ffffffffffffffff811115611f4f57611f4e61394f565b5b6040519080825280601f01601f191660200182016040528015611f815781602001600182028036833780820191505090505b5090505b6000851461200e57600182611f9a919061368b565b9150600a85611fa99190613833565b6030611fb59190613604565b60f81b818381518110611fcb57611fca613920565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612007919061365a565b9450611f85565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61208f83838361238a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d2576120cd8161238f565b612111565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121105761210f83826123d8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121545761214f81612545565b612193565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612192576121918282612616565b5b5b505050565b6121a28383612695565b6121af60008484846121f3565b6121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e59061327d565b60405180910390fd5b505050565b60006122148473ffffffffffffffffffffffffffffffffffffffff16612863565b1561237d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261223d611880565b8786866040518563ffffffff1660e01b815260040161225f94939291906131b4565b602060405180830381600087803b15801561227957600080fd5b505af19250505080156122aa57506040513d601f19601f820116820180604052508101906122a79190612cc1565b60015b61232d573d80600081146122da576040519150601f19603f3d011682016040523d82523d6000602084013e6122df565b606091505b50600081511415612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c9061327d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612382565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016123e584611003565b6123ef919061368b565b90506000600760008481526020019081526020016000205490508181146124d4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612559919061368b565b905060006009600084815260200190815260200160002054905060006008838154811061258957612588613920565b5b9060005260206000200154905080600883815481106125ab576125aa613920565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125fa576125f96138f1565b5b6001900381819060005260206000200160009055905550505050565b600061262183611003565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc906133bd565b60405180910390fd5b61270e81611888565b1561274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906132dd565b60405180910390fd5b61275a60008383612084565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127aa9190613604565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461288290613787565b90600052602060002090601f0160209004810192826128a457600085556128eb565b82601f106128bd57805160ff19168380011785556128eb565b828001600101855582156128eb579182015b828111156128ea5782518255916020019190600101906128cf565b5b5090506128f891906128fc565b5090565b5b808211156129155760008160009055506001016128fd565b5090565b600061292c61292784613554565b61352f565b90508281526020810184848401111561294857612947613983565b5b612953848285613745565b509392505050565b600061296e61296984613585565b61352f565b90508281526020810184848401111561298a57612989613983565b5b612995848285613745565b509392505050565b6000813590506129ac81613f17565b92915050565b6000813590506129c181613f2e565b92915050565b6000813590506129d681613f45565b92915050565b6000813590506129eb81613f5c565b92915050565b600081519050612a0081613f5c565b92915050565b600082601f830112612a1b57612a1a61397e565b5b8135612a2b848260208601612919565b91505092915050565b600082601f830112612a4957612a4861397e565b5b8135612a5984826020860161295b565b91505092915050565b600081359050612a7181613f73565b92915050565b600060208284031215612a8d57612a8c61398d565b5b6000612a9b8482850161299d565b91505092915050565b600060208284031215612aba57612ab961398d565b5b6000612ac8848285016129b2565b91505092915050565b60008060408385031215612ae857612ae761398d565b5b6000612af68582860161299d565b9250506020612b078582860161299d565b9150509250929050565b600080600060608486031215612b2a57612b2961398d565b5b6000612b388682870161299d565b9350506020612b498682870161299d565b9250506040612b5a86828701612a62565b9150509250925092565b60008060008060808587031215612b7e57612b7d61398d565b5b6000612b8c8782880161299d565b9450506020612b9d8782880161299d565b9350506040612bae87828801612a62565b925050606085013567ffffffffffffffff811115612bcf57612bce613988565b5b612bdb87828801612a06565b91505092959194509250565b60008060408385031215612bfe57612bfd61398d565b5b6000612c0c8582860161299d565b9250506020612c1d858286016129c7565b9150509250929050565b60008060408385031215612c3e57612c3d61398d565b5b6000612c4c8582860161299d565b9250506020612c5d85828601612a62565b9150509250929050565b600060208284031215612c7d57612c7c61398d565b5b6000612c8b848285016129c7565b91505092915050565b600060208284031215612caa57612ca961398d565b5b6000612cb8848285016129dc565b91505092915050565b600060208284031215612cd757612cd661398d565b5b6000612ce5848285016129f1565b91505092915050565b600060208284031215612d0457612d0361398d565b5b600082013567ffffffffffffffff811115612d2257612d21613988565b5b612d2e84828501612a34565b91505092915050565b600060208284031215612d4d57612d4c61398d565b5b6000612d5b84828501612a62565b91505092915050565b612d6d816136d1565b82525050565b612d7c816136bf565b82525050565b612d8b816136e3565b82525050565b6000612d9c826135b6565b612da681856135cc565b9350612db6818560208601613754565b612dbf81613992565b840191505092915050565b6000612dd5826135c1565b612ddf81856135e8565b9350612def818560208601613754565b612df881613992565b840191505092915050565b6000612e0e826135c1565b612e1881856135f9565b9350612e28818560208601613754565b80840191505092915050565b6000612e41601b836135e8565b9150612e4c826139a3565b602082019050919050565b6000612e64602b836135e8565b9150612e6f826139cc565b604082019050919050565b6000612e876032836135e8565b9150612e9282613a1b565b604082019050919050565b6000612eaa6026836135e8565b9150612eb582613a6a565b604082019050919050565b6000612ecd600f836135e8565b9150612ed882613ab9565b602082019050919050565b6000612ef0601c836135e8565b9150612efb82613ae2565b602082019050919050565b6000612f136024836135e8565b9150612f1e82613b0b565b604082019050919050565b6000612f366019836135e8565b9150612f4182613b5a565b602082019050919050565b6000612f59602c836135e8565b9150612f6482613b83565b604082019050919050565b6000612f7c6038836135e8565b9150612f8782613bd2565b604082019050919050565b6000612f9f602a836135e8565b9150612faa82613c21565b604082019050919050565b6000612fc26029836135e8565b9150612fcd82613c70565b604082019050919050565b6000612fe56020836135e8565b9150612ff082613cbf565b602082019050919050565b6000613008600b836135e8565b915061301382613ce8565b602082019050919050565b600061302b602c836135e8565b915061303682613d11565b604082019050919050565b600061304e6020836135e8565b915061305982613d60565b602082019050919050565b60006130716029836135e8565b915061307c82613d89565b604082019050919050565b6000613094602f836135e8565b915061309f82613dd8565b604082019050919050565b60006130b76021836135e8565b91506130c282613e27565b604082019050919050565b60006130da6000836135dd565b91506130e582613e76565b600082019050919050565b60006130fd6031836135e8565b915061310882613e79565b604082019050919050565b6000613120602c836135e8565b915061312b82613ec8565b604082019050919050565b61313f8161373b565b82525050565b60006131518285612e03565b915061315d8284612e03565b91508190509392505050565b6000613174826130cd565b9150819050919050565b60006020820190506131936000830184612d73565b92915050565b60006020820190506131ae6000830184612d64565b92915050565b60006080820190506131c96000830187612d73565b6131d66020830186612d73565b6131e36040830185613136565b81810360608301526131f58184612d91565b905095945050505050565b60006020820190506132156000830184612d82565b92915050565b600060208201905081810360008301526132358184612dca565b905092915050565b6000602082019050818103600083015261325681612e34565b9050919050565b6000602082019050818103600083015261327681612e57565b9050919050565b6000602082019050818103600083015261329681612e7a565b9050919050565b600060208201905081810360008301526132b681612e9d565b9050919050565b600060208201905081810360008301526132d681612ec0565b9050919050565b600060208201905081810360008301526132f681612ee3565b9050919050565b6000602082019050818103600083015261331681612f06565b9050919050565b6000602082019050818103600083015261333681612f29565b9050919050565b6000602082019050818103600083015261335681612f4c565b9050919050565b6000602082019050818103600083015261337681612f6f565b9050919050565b6000602082019050818103600083015261339681612f92565b9050919050565b600060208201905081810360008301526133b681612fb5565b9050919050565b600060208201905081810360008301526133d681612fd8565b9050919050565b600060208201905081810360008301526133f681612ffb565b9050919050565b600060208201905081810360008301526134168161301e565b9050919050565b6000602082019050818103600083015261343681613041565b9050919050565b6000602082019050818103600083015261345681613064565b9050919050565b6000602082019050818103600083015261347681613087565b9050919050565b60006020820190508181036000830152613496816130aa565b9050919050565b600060208201905081810360008301526134b6816130f0565b9050919050565b600060208201905081810360008301526134d681613113565b9050919050565b60006020820190506134f26000830184613136565b92915050565b600060608201905061350d6000830186613136565b61351a6020830185612d73565b6135276040830184612d73565b949350505050565b600061353961354a565b905061354582826137b9565b919050565b6000604051905090565b600067ffffffffffffffff82111561356f5761356e61394f565b5b61357882613992565b9050602081019050919050565b600067ffffffffffffffff8211156135a05761359f61394f565b5b6135a982613992565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061360f8261373b565b915061361a8361373b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561364f5761364e613864565b5b828201905092915050565b60006136658261373b565b91506136708361373b565b9250826136805761367f613893565b5b828204905092915050565b60006136968261373b565b91506136a18361373b565b9250828210156136b4576136b3613864565b5b828203905092915050565b60006136ca8261371b565b9050919050565b60006136dc8261371b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613772578082015181840152602081019050613757565b83811115613781576000848401525b50505050565b6000600282049050600182168061379f57607f821691505b602082108114156137b3576137b26138c2565b5b50919050565b6137c282613992565b810181811067ffffffffffffffff821117156137e1576137e061394f565b5b80604052505050565b60006137f58261373b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561382857613827613864565b5b600182019050919050565b600061383e8261373b565b91506138498361373b565b92508261385957613858613893565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e73756666696369656e742066756e647320746f206d696e742e0000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520506175736564000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613f20816136bf565b8114613f2b57600080fd5b50565b613f37816136d1565b8114613f4257600080fd5b50565b613f4e816136e3565b8114613f5957600080fd5b50565b613f65816136ef565b8114613f7057600080fd5b50565b613f7c8161373b565b8114613f8757600080fd5b5056fea26469706673582212209fccb33de240e95cb53f487837ba43d5385f686e3c6a99357dfd3bcdc01bdaa764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43315:1867:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34825:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44957:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21722:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23281:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22804:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43587:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35465:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24171:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35133:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45039:140;;;;;;;;;;;;;:::i;:::-;;24581:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35655:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44760:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21416:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44064:566;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21146:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42624:94;;;;;;;;;;;;;:::i;:::-;;43667:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43620:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43826:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41973:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21891:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44870:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24837:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22066:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23940:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43922:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42873:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34825:224;34927:4;34966:35;34951:50;;;:11;:50;;;;:90;;;;35005:36;35029:11;35005:23;:36::i;:::-;34951:90;34944:97;;34825:224;;;:::o;44957:74::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45020:3:::1;45010:7;;:13;;;;;;;;;;;;;;;;;;44957:74:::0;:::o;21722:100::-;21776:13;21809:5;21802:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21722:100;:::o;23281:221::-;23357:7;23385:16;23393:7;23385;:16::i;:::-;23377:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23470:15;:24;23486:7;23470:24;;;;;;;;;;;;;;;;;;;;;23463:31;;23281:221;;;:::o;22804:411::-;22885:13;22901:23;22916:7;22901:14;:23::i;:::-;22885:39;;22949:5;22943:11;;:2;:11;;;;22935:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23043:5;23027:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23052:37;23069:5;23076:12;:10;:12::i;:::-;23052:16;:37::i;:::-;23027:62;23005:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23186:21;23195:2;23199:7;23186:8;:21::i;:::-;22874:341;22804:411;;:::o;43587:26::-;;;;;;;;;;;;;:::o;35465:113::-;35526:7;35553:10;:17;;;;35546:24;;35465:113;:::o;24171:339::-;24366:41;24385:12;:10;:12::i;:::-;24399:7;24366:18;:41::i;:::-;24358:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24474:28;24484:4;24490:2;24494:7;24474:9;:28::i;:::-;24171:339;;;:::o;35133:256::-;35230:7;35266:23;35283:5;35266:16;:23::i;:::-;35258:5;:31;35250:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35355:12;:19;35368:5;35355:19;;;;;;;;;;;;;;;:26;35375:5;35355:26;;;;;;;;;;;;35348:33;;35133:256;;;;:::o;45039:140::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45087:12:::1;45102:21;45087:36;;45142:10;45134:28;;:37;45163:7;45134:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45076:103;45039:140::o:0;24581:185::-;24719:39;24736:4;24742:2;24746:7;24719:39;;;;;;;;;;;;:16;:39::i;:::-;24581:185;;;:::o;35655:233::-;35730:7;35766:30;:28;:30::i;:::-;35758:5;:38;35750:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35863:10;35874:5;35863:17;;;;;;;;:::i;:::-;;;;;;;;;;35856:24;;35655:233;;;:::o;44760:102::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44847:7:::1;44831:13;:23;;;;;;;;;;;;:::i;:::-;;44760:102:::0;:::o;21416:239::-;21488:7;21508:13;21524:7;:16;21532:7;21524:16;;;;;;;;;;;;;;;;;;;;;21508:32;;21576:1;21559:19;;:5;:19;;;;21551:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21642:5;21635:12;;;21416:239;;;:::o;44064:566::-;44117:14;44134:13;:11;:13::i;:::-;44117:30;;44177:7;:5;:7::i;:::-;44163:21;;:10;:21;;;44160:157;;44208:7;;;;;;;;;;;44207:8;44199:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;44266:6;;44253:9;:19;;44244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44160:157;44372:12;44389:14;;;;;;;;;;;:19;;44417:9;44389:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44371:60;;;44450:7;44442:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;44498:18;44528:1;44519:6;:10;;;;:::i;:::-;44498:31;;44540:27;44551:3;44556:10;44540:9;:27::i;:::-;44585:37;44592:10;44604:3;44609:12;:10;:12::i;:::-;44585:37;;;;;;;;:::i;:::-;;;;;;;;44106:524;;;44064:566;:::o;21146:208::-;21218:7;21263:1;21246:19;;:5;:19;;;;21238:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21330:9;:16;21340:5;21330:16;;;;;;;;;;;;;;;;21323:23;;21146:208;;;:::o;42624:94::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42689:21:::1;42707:1;42689:9;:21::i;:::-;42624:94::o:0;43667:37::-;;;;;;;;;;;;;:::o;43620:40::-;43655:5;43620:40;:::o;43826:88::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43901:5:::1;43892:6;:14;;;;43826:88:::0;:::o;41973:87::-;42019:7;42046:6;;;;;;;;;;;42039:13;;41973:87;:::o;21891:104::-;21947:13;21980:7;21973:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21891:104;:::o;23574:295::-;23689:12;:10;:12::i;:::-;23677:24;;:8;:24;;;;23669:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23789:8;23744:18;:32;23763:12;:10;:12::i;:::-;23744:32;;;;;;;;;;;;;;;:42;23777:8;23744:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23842:8;23813:48;;23828:12;:10;:12::i;:::-;23813:48;;;23852:8;23813:48;;;;;;:::i;:::-;;;;;;;;23574:295;;:::o;44870:79::-;44910:4;44934:7;;;;;;;;;;;44927:14;;44870:79;:::o;24837:328::-;25012:41;25031:12;:10;:12::i;:::-;25045:7;25012:18;:41::i;:::-;25004:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25118:39;25132:4;25138:2;25142:7;25151:5;25118:13;:39::i;:::-;24837:328;;;;:::o;22066:334::-;22139:13;22173:16;22181:7;22173;:16::i;:::-;22165:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22254:21;22278:10;:8;:10::i;:::-;22254:34;;22330:1;22312:7;22306:21;:25;:86;;;;;;;;;;;;;;;;;22358:7;22367:18;:7;:16;:18::i;:::-;22341:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22306:86;22299:93;;;22066:334;;;:::o;23940:164::-;24037:4;24061:18;:25;24080:5;24061:25;;;;;;;;;;;;;;;:35;24087:8;24061:35;;;;;;;;;;;;;;;;;;;;;;;;;24054:42;;23940:164;;;;:::o;43922:132::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44033:13:::1;44016:14;;:30;;;;;;;;;;;;;;;;;;43922:132:::0;:::o;42873:192::-;42204:12;:10;:12::i;:::-;42193:23;;:7;:5;:7::i;:::-;:23;;;42185:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42982:1:::1;42962:22;;:8;:22;;;;42954:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43038:19;43048:8;43038:9;:19::i;:::-;42873:192:::0;:::o;20777:305::-;20879:4;20931:25;20916:40;;;:11;:40;;;;:105;;;;20988:33;20973:48;;;:11;:48;;;;20916:105;:158;;;;21038:36;21062:11;21038:23;:36::i;:::-;20916:158;20896:178;;20777:305;;;:::o;16191:98::-;16244:7;16271:10;16264:17;;16191:98;:::o;26675:127::-;26740:4;26792:1;26764:30;;:7;:16;26772:7;26764:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26757:37;;26675:127;;;:::o;30657:174::-;30759:2;30732:15;:24;30748:7;30732:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30815:7;30811:2;30777:46;;30786:23;30801:7;30786:14;:23::i;:::-;30777:46;;;;;;;;;;;;30657:174;;:::o;26969:348::-;27062:4;27087:16;27095:7;27087;:16::i;:::-;27079:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27163:13;27179:23;27194:7;27179:14;:23::i;:::-;27163:39;;27232:5;27221:16;;:7;:16;;;:51;;;;27265:7;27241:31;;:20;27253:7;27241:11;:20::i;:::-;:31;;;27221:51;:87;;;;27276:32;27293:5;27300:7;27276:16;:32::i;:::-;27221:87;27213:96;;;26969:348;;;;:::o;29961:578::-;30120:4;30093:31;;:23;30108:7;30093:14;:23::i;:::-;:31;;;30085:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30203:1;30189:16;;:2;:16;;;;30181:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30259:39;30280:4;30286:2;30290:7;30259:20;:39::i;:::-;30363:29;30380:1;30384:7;30363:8;:29::i;:::-;30424:1;30405:9;:15;30415:4;30405:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30453:1;30436:9;:13;30446:2;30436:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30484:2;30465:7;:16;30473:7;30465:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30523:7;30519:2;30504:27;;30513:4;30504:27;;;;;;;;;;;;29961:578;;;:::o;27659:110::-;27735:26;27745:2;27749:7;27735:26;;;;;;;;;;;;:9;:26::i;:::-;27659:110;;:::o;43073:173::-;43129:16;43148:6;;;;;;;;;;;43129:25;;43174:8;43165:6;;:17;;;;;;;;;;;;;;;;;;43229:8;43198:40;;43219:8;43198:40;;;;;;;;;;;;43118:128;43073:173;:::o;26047:315::-;26204:28;26214:4;26220:2;26224:7;26204:9;:28::i;:::-;26251:48;26274:4;26280:2;26284:7;26293:5;26251:22;:48::i;:::-;26243:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26047:315;;;;:::o;44638:114::-;44698:13;44731;44724:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44638:114;:::o;16720:723::-;16776:13;17006:1;16997:5;:10;16993:53;;;17024:10;;;;;;;;;;;;;;;;;;;;;16993:53;17056:12;17071:5;17056:20;;17087:14;17112:78;17127:1;17119:4;:9;17112:78;;17145:8;;;;;:::i;:::-;;;;17176:2;17168:10;;;;;:::i;:::-;;;17112:78;;;17200:19;17232:6;17222:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17200:39;;17250:154;17266:1;17257:5;:10;17250:154;;17294:1;17284:11;;;;;:::i;:::-;;;17361:2;17353:5;:10;;;;:::i;:::-;17340:2;:24;;;;:::i;:::-;17327:39;;17310:6;17317;17310:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17390:2;17381:11;;;;;:::i;:::-;;;17250:154;;;17428:6;17414:21;;;;;16720:723;;;;:::o;19279:157::-;19364:4;19403:25;19388:40;;;:11;:40;;;;19381:47;;19279:157;;;:::o;36501:589::-;36645:45;36672:4;36678:2;36682:7;36645:26;:45::i;:::-;36723:1;36707:18;;:4;:18;;;36703:187;;;36742:40;36774:7;36742:31;:40::i;:::-;36703:187;;;36812:2;36804:10;;:4;:10;;;36800:90;;36831:47;36864:4;36870:7;36831:32;:47::i;:::-;36800:90;36703:187;36918:1;36904:16;;:2;:16;;;36900:183;;;36937:45;36974:7;36937:36;:45::i;:::-;36900:183;;;37010:4;37004:10;;:2;:10;;;37000:83;;37031:40;37059:2;37063:7;37031:27;:40::i;:::-;37000:83;36900:183;36501:589;;;:::o;27996:321::-;28126:18;28132:2;28136:7;28126:5;:18::i;:::-;28177:54;28208:1;28212:2;28216:7;28225:5;28177:22;:54::i;:::-;28155:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27996:321;;;:::o;31396:799::-;31551:4;31572:15;:2;:13;;;:15::i;:::-;31568:620;;;31624:2;31608:36;;;31645:12;:10;:12::i;:::-;31659:4;31665:7;31674:5;31608:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31604:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31867:1;31850:6;:13;:18;31846:272;;;31893:60;;;;;;;;;;:::i;:::-;;;;;;;;31846:272;32068:6;32062:13;32053:6;32049:2;32045:15;32038:38;31604:529;31741:41;;;31731:51;;;:6;:51;;;;31724:58;;;;;31568:620;32172:4;32165:11;;31396:799;;;;;;;:::o;32767:126::-;;;;:::o;37813:164::-;37917:10;:17;;;;37890:15;:24;37906:7;37890:24;;;;;;;;;;;:44;;;;37945:10;37961:7;37945:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37813:164;:::o;38604:988::-;38870:22;38920:1;38895:22;38912:4;38895:16;:22::i;:::-;:26;;;;:::i;:::-;38870:51;;38932:18;38953:17;:26;38971:7;38953:26;;;;;;;;;;;;38932:47;;39100:14;39086:10;:28;39082:328;;39131:19;39153:12;:18;39166:4;39153:18;;;;;;;;;;;;;;;:34;39172:14;39153:34;;;;;;;;;;;;39131:56;;39237:11;39204:12;:18;39217:4;39204:18;;;;;;;;;;;;;;;:30;39223:10;39204:30;;;;;;;;;;;:44;;;;39354:10;39321:17;:30;39339:11;39321:30;;;;;;;;;;;:43;;;;39116:294;39082:328;39506:17;:26;39524:7;39506:26;;;;;;;;;;;39499:33;;;39550:12;:18;39563:4;39550:18;;;;;;;;;;;;;;;:34;39569:14;39550:34;;;;;;;;;;;39543:41;;;38685:907;;38604:988;;:::o;39887:1079::-;40140:22;40185:1;40165:10;:17;;;;:21;;;;:::i;:::-;40140:46;;40197:18;40218:15;:24;40234:7;40218:24;;;;;;;;;;;;40197:45;;40569:19;40591:10;40602:14;40591:26;;;;;;;;:::i;:::-;;;;;;;;;;40569:48;;40655:11;40630:10;40641;40630:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40766:10;40735:15;:28;40751:11;40735:28;;;;;;;;;;;:41;;;;40907:15;:24;40923:7;40907:24;;;;;;;;;;;40900:31;;;40942:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39958:1008;;;39887:1079;:::o;37391:221::-;37476:14;37493:20;37510:2;37493:16;:20::i;:::-;37476:37;;37551:7;37524:12;:16;37537:2;37524:16;;;;;;;;;;;;;;;:24;37541:6;37524:24;;;;;;;;;;;:34;;;;37598:6;37569:17;:26;37587:7;37569:26;;;;;;;;;;;:35;;;;37465:147;37391:221;;:::o;28653:382::-;28747:1;28733:16;;:2;:16;;;;28725:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28806:16;28814:7;28806;:16::i;:::-;28805:17;28797:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28868:45;28897:1;28901:2;28905:7;28868:20;:45::i;:::-;28943:1;28926:9;:13;28936:2;28926:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28974:2;28955:7;:16;28963:7;28955:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29019:7;29015:2;28994:33;;29011:1;28994:33;;;;;;;;;;;;28653:382;;:::o;8231:387::-;8291:4;8499:12;8566:7;8554:20;8546:28;;8609:1;8602:4;:8;8595:15;;;8231:387;;;:::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;986:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;986:155;;;;:::o;1147:133::-;1190:5;1228:6;1215:20;1206:29;;1244:30;1268:5;1244:30;:::i;:::-;1147:133;;;;:::o;1286:137::-;1331:5;1369:6;1356:20;1347:29;;1385:32;1411:5;1385:32;:::i;:::-;1286:137;;;;:::o;1429:141::-;1485:5;1516:6;1510:13;1501:22;;1532:32;1558:5;1532:32;:::i;:::-;1429:141;;;;:::o;1589:338::-;1644:5;1693:3;1686:4;1678:6;1674:17;1670:27;1660:122;;1701:79;;:::i;:::-;1660:122;1818:6;1805:20;1843:78;1917:3;1909:6;1902:4;1894:6;1890:17;1843:78;:::i;:::-;1834:87;;1650:277;1589:338;;;;:::o;1947:340::-;2003:5;2052:3;2045:4;2037:6;2033:17;2029:27;2019:122;;2060:79;;:::i;:::-;2019:122;2177:6;2164:20;2202:79;2277:3;2269:6;2262:4;2254:6;2250:17;2202:79;:::i;:::-;2193:88;;2009:278;1947:340;;;;:::o;2293:139::-;2339:5;2377:6;2364:20;2355:29;;2393:33;2420:5;2393:33;:::i;:::-;2293:139;;;;:::o;2438:329::-;2497:6;2546:2;2534:9;2525:7;2521:23;2517:32;2514:119;;;2552:79;;:::i;:::-;2514:119;2672:1;2697:53;2742:7;2733:6;2722:9;2718:22;2697:53;:::i;:::-;2687:63;;2643:117;2438:329;;;;:::o;2773:345::-;2840:6;2889:2;2877:9;2868:7;2864:23;2860:32;2857:119;;;2895:79;;:::i;:::-;2857:119;3015:1;3040:61;3093:7;3084:6;3073:9;3069:22;3040:61;:::i;:::-;3030:71;;2986:125;2773:345;;;;:::o;3124:474::-;3192:6;3200;3249:2;3237:9;3228:7;3224:23;3220:32;3217:119;;;3255:79;;:::i;:::-;3217:119;3375:1;3400:53;3445:7;3436:6;3425:9;3421:22;3400:53;:::i;:::-;3390:63;;3346:117;3502:2;3528:53;3573:7;3564:6;3553:9;3549:22;3528:53;:::i;:::-;3518:63;;3473:118;3124:474;;;;;:::o;3604:619::-;3681:6;3689;3697;3746:2;3734:9;3725:7;3721:23;3717:32;3714:119;;;3752:79;;:::i;:::-;3714:119;3872:1;3897:53;3942:7;3933:6;3922:9;3918:22;3897:53;:::i;:::-;3887:63;;3843:117;3999:2;4025:53;4070:7;4061:6;4050:9;4046:22;4025:53;:::i;:::-;4015:63;;3970:118;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3604:619;;;;;:::o;4229:943::-;4324:6;4332;4340;4348;4397:3;4385:9;4376:7;4372:23;4368:33;4365:120;;;4404:79;;:::i;:::-;4365:120;4524:1;4549:53;4594:7;4585:6;4574:9;4570:22;4549:53;:::i;:::-;4539:63;;4495:117;4651:2;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4622:118;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4935:2;4924:9;4920:18;4907:32;4966:18;4958:6;4955:30;4952:117;;;4988:79;;:::i;:::-;4952:117;5093:62;5147:7;5138:6;5127:9;5123:22;5093:62;:::i;:::-;5083:72;;4878:287;4229:943;;;;;;;:::o;5178:468::-;5243:6;5251;5300:2;5288:9;5279:7;5275:23;5271:32;5268:119;;;5306:79;;:::i;:::-;5268:119;5426:1;5451:53;5496:7;5487:6;5476:9;5472:22;5451:53;:::i;:::-;5441:63;;5397:117;5553:2;5579:50;5621:7;5612:6;5601:9;5597:22;5579:50;:::i;:::-;5569:60;;5524:115;5178:468;;;;;:::o;5652:474::-;5720:6;5728;5777:2;5765:9;5756:7;5752:23;5748:32;5745:119;;;5783:79;;:::i;:::-;5745:119;5903:1;5928:53;5973:7;5964:6;5953:9;5949:22;5928:53;:::i;:::-;5918:63;;5874:117;6030:2;6056:53;6101:7;6092:6;6081:9;6077:22;6056:53;:::i;:::-;6046:63;;6001:118;5652:474;;;;;:::o;6132:323::-;6188:6;6237:2;6225:9;6216:7;6212:23;6208:32;6205:119;;;6243:79;;:::i;:::-;6205:119;6363:1;6388:50;6430:7;6421:6;6410:9;6406:22;6388:50;:::i;:::-;6378:60;;6334:114;6132:323;;;;:::o;6461:327::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:119;;;6574:79;;:::i;:::-;6536:119;6694:1;6719:52;6763:7;6754:6;6743:9;6739:22;6719:52;:::i;:::-;6709:62;;6665:116;6461:327;;;;:::o;6794:349::-;6863:6;6912:2;6900:9;6891:7;6887:23;6883:32;6880:119;;;6918:79;;:::i;:::-;6880:119;7038:1;7063:63;7118:7;7109:6;7098:9;7094:22;7063:63;:::i;:::-;7053:73;;7009:127;6794:349;;;;:::o;7149:509::-;7218:6;7267:2;7255:9;7246:7;7242:23;7238:32;7235:119;;;7273:79;;:::i;:::-;7235:119;7421:1;7410:9;7406:17;7393:31;7451:18;7443:6;7440:30;7437:117;;;7473:79;;:::i;:::-;7437:117;7578:63;7633:7;7624:6;7613:9;7609:22;7578:63;:::i;:::-;7568:73;;7364:287;7149:509;;;;:::o;7664:329::-;7723:6;7772:2;7760:9;7751:7;7747:23;7743:32;7740:119;;;7778:79;;:::i;:::-;7740:119;7898:1;7923:53;7968:7;7959:6;7948:9;7944:22;7923:53;:::i;:::-;7913:63;;7869:117;7664:329;;;;:::o;7999:142::-;8102:32;8128:5;8102:32;:::i;:::-;8097:3;8090:45;7999:142;;:::o;8147:118::-;8234:24;8252:5;8234:24;:::i;:::-;8229:3;8222:37;8147:118;;:::o;8271:109::-;8352:21;8367:5;8352:21;:::i;:::-;8347:3;8340:34;8271:109;;:::o;8386:360::-;8472:3;8500:38;8532:5;8500:38;:::i;:::-;8554:70;8617:6;8612:3;8554:70;:::i;:::-;8547:77;;8633:52;8678:6;8673:3;8666:4;8659:5;8655:16;8633:52;:::i;:::-;8710:29;8732:6;8710:29;:::i;:::-;8705:3;8701:39;8694:46;;8476:270;8386:360;;;;:::o;8752:364::-;8840:3;8868:39;8901:5;8868:39;:::i;:::-;8923:71;8987:6;8982:3;8923:71;:::i;:::-;8916:78;;9003:52;9048:6;9043:3;9036:4;9029:5;9025:16;9003:52;:::i;:::-;9080:29;9102:6;9080:29;:::i;:::-;9075:3;9071:39;9064:46;;8844:272;8752:364;;;;:::o;9122:377::-;9228:3;9256:39;9289:5;9256:39;:::i;:::-;9311:89;9393:6;9388:3;9311:89;:::i;:::-;9304:96;;9409:52;9454:6;9449:3;9442:4;9435:5;9431:16;9409:52;:::i;:::-;9486:6;9481:3;9477:16;9470:23;;9232:267;9122:377;;;;:::o;9505:366::-;9647:3;9668:67;9732:2;9727:3;9668:67;:::i;:::-;9661:74;;9744:93;9833:3;9744:93;:::i;:::-;9862:2;9857:3;9853:12;9846:19;;9505:366;;;:::o;9877:::-;10019:3;10040:67;10104:2;10099:3;10040:67;:::i;:::-;10033:74;;10116:93;10205:3;10116:93;:::i;:::-;10234:2;10229:3;10225:12;10218:19;;9877:366;;;:::o;10249:::-;10391:3;10412:67;10476:2;10471:3;10412:67;:::i;:::-;10405:74;;10488:93;10577:3;10488:93;:::i;:::-;10606:2;10601:3;10597:12;10590:19;;10249:366;;;:::o;10621:::-;10763:3;10784:67;10848:2;10843:3;10784:67;:::i;:::-;10777:74;;10860:93;10949:3;10860:93;:::i;:::-;10978:2;10973:3;10969:12;10962:19;;10621:366;;;:::o;10993:::-;11135:3;11156:67;11220:2;11215:3;11156:67;:::i;:::-;11149:74;;11232:93;11321:3;11232:93;:::i;:::-;11350:2;11345:3;11341:12;11334:19;;10993:366;;;:::o;11365:::-;11507:3;11528:67;11592:2;11587:3;11528:67;:::i;:::-;11521:74;;11604:93;11693:3;11604:93;:::i;:::-;11722:2;11717:3;11713:12;11706:19;;11365:366;;;:::o;11737:::-;11879:3;11900:67;11964:2;11959:3;11900:67;:::i;:::-;11893:74;;11976:93;12065:3;11976:93;:::i;:::-;12094:2;12089:3;12085:12;12078:19;;11737:366;;;:::o;12109:::-;12251:3;12272:67;12336:2;12331:3;12272:67;:::i;:::-;12265:74;;12348:93;12437:3;12348:93;:::i;:::-;12466:2;12461:3;12457:12;12450:19;;12109:366;;;:::o;12481:::-;12623:3;12644:67;12708:2;12703:3;12644:67;:::i;:::-;12637:74;;12720:93;12809:3;12720:93;:::i;:::-;12838:2;12833:3;12829:12;12822:19;;12481:366;;;:::o;12853:::-;12995:3;13016:67;13080:2;13075:3;13016:67;:::i;:::-;13009:74;;13092:93;13181:3;13092:93;:::i;:::-;13210:2;13205:3;13201:12;13194:19;;12853:366;;;:::o;13225:::-;13367:3;13388:67;13452:2;13447:3;13388:67;:::i;:::-;13381:74;;13464:93;13553:3;13464:93;:::i;:::-;13582:2;13577:3;13573:12;13566:19;;13225:366;;;:::o;13597:::-;13739:3;13760:67;13824:2;13819:3;13760:67;:::i;:::-;13753:74;;13836:93;13925:3;13836:93;:::i;:::-;13954:2;13949:3;13945:12;13938:19;;13597:366;;;:::o;13969:::-;14111:3;14132:67;14196:2;14191:3;14132:67;:::i;:::-;14125:74;;14208:93;14297:3;14208:93;:::i;:::-;14326:2;14321:3;14317:12;14310:19;;13969:366;;;:::o;14341:::-;14483:3;14504:67;14568:2;14563:3;14504:67;:::i;:::-;14497:74;;14580:93;14669:3;14580:93;:::i;:::-;14698:2;14693:3;14689:12;14682:19;;14341:366;;;:::o;14713:::-;14855:3;14876:67;14940:2;14935:3;14876:67;:::i;:::-;14869:74;;14952:93;15041:3;14952:93;:::i;:::-;15070:2;15065:3;15061:12;15054:19;;14713:366;;;:::o;15085:::-;15227:3;15248:67;15312:2;15307:3;15248:67;:::i;:::-;15241:74;;15324:93;15413:3;15324:93;:::i;:::-;15442:2;15437:3;15433:12;15426:19;;15085:366;;;:::o;15457:::-;15599:3;15620:67;15684:2;15679:3;15620:67;:::i;:::-;15613:74;;15696:93;15785:3;15696:93;:::i;:::-;15814:2;15809:3;15805:12;15798:19;;15457:366;;;:::o;15829:::-;15971:3;15992:67;16056:2;16051:3;15992:67;:::i;:::-;15985:74;;16068:93;16157:3;16068:93;:::i;:::-;16186:2;16181:3;16177:12;16170:19;;15829:366;;;:::o;16201:::-;16343:3;16364:67;16428:2;16423:3;16364:67;:::i;:::-;16357:74;;16440:93;16529:3;16440:93;:::i;:::-;16558:2;16553:3;16549:12;16542:19;;16201:366;;;:::o;16573:398::-;16732:3;16753:83;16834:1;16829:3;16753:83;:::i;:::-;16746:90;;16845:93;16934:3;16845:93;:::i;:::-;16963:1;16958:3;16954:11;16947:18;;16573:398;;;:::o;16977:366::-;17119:3;17140:67;17204:2;17199:3;17140:67;:::i;:::-;17133:74;;17216:93;17305:3;17216:93;:::i;:::-;17334:2;17329:3;17325:12;17318:19;;16977:366;;;:::o;17349:::-;17491:3;17512:67;17576:2;17571:3;17512:67;:::i;:::-;17505:74;;17588:93;17677:3;17588:93;:::i;:::-;17706:2;17701:3;17697:12;17690:19;;17349:366;;;:::o;17721:118::-;17808:24;17826:5;17808:24;:::i;:::-;17803:3;17796:37;17721:118;;:::o;17845:435::-;18025:3;18047:95;18138:3;18129:6;18047:95;:::i;:::-;18040:102;;18159:95;18250:3;18241:6;18159:95;:::i;:::-;18152:102;;18271:3;18264:10;;17845:435;;;;;:::o;18286:379::-;18470:3;18492:147;18635:3;18492:147;:::i;:::-;18485:154;;18656:3;18649:10;;18286:379;;;:::o;18671:222::-;18764:4;18802:2;18791:9;18787:18;18779:26;;18815:71;18883:1;18872:9;18868:17;18859:6;18815:71;:::i;:::-;18671:222;;;;:::o;18899:254::-;19008:4;19046:2;19035:9;19031:18;19023:26;;19059:87;19143:1;19132:9;19128:17;19119:6;19059:87;:::i;:::-;18899:254;;;;:::o;19159:640::-;19354:4;19392:3;19381:9;19377:19;19369:27;;19406:71;19474:1;19463:9;19459:17;19450:6;19406:71;:::i;:::-;19487:72;19555:2;19544:9;19540:18;19531:6;19487:72;:::i;:::-;19569;19637:2;19626:9;19622:18;19613:6;19569:72;:::i;:::-;19688:9;19682:4;19678:20;19673:2;19662:9;19658:18;19651:48;19716:76;19787:4;19778:6;19716:76;:::i;:::-;19708:84;;19159:640;;;;;;;:::o;19805:210::-;19892:4;19930:2;19919:9;19915:18;19907:26;;19943:65;20005:1;19994:9;19990:17;19981:6;19943:65;:::i;:::-;19805:210;;;;:::o;20021:313::-;20134:4;20172:2;20161:9;20157:18;20149:26;;20221:9;20215:4;20211:20;20207:1;20196:9;20192:17;20185:47;20249:78;20322:4;20313:6;20249:78;:::i;:::-;20241:86;;20021:313;;;;:::o;20340:419::-;20506:4;20544:2;20533:9;20529:18;20521:26;;20593:9;20587:4;20583:20;20579:1;20568:9;20564:17;20557:47;20621:131;20747:4;20621:131;:::i;:::-;20613:139;;20340:419;;;:::o;20765:::-;20931:4;20969:2;20958:9;20954:18;20946:26;;21018:9;21012:4;21008:20;21004:1;20993:9;20989:17;20982:47;21046:131;21172:4;21046:131;:::i;:::-;21038:139;;20765:419;;;:::o;21190:::-;21356:4;21394:2;21383:9;21379:18;21371:26;;21443:9;21437:4;21433:20;21429:1;21418:9;21414:17;21407:47;21471:131;21597:4;21471:131;:::i;:::-;21463:139;;21190:419;;;:::o;21615:::-;21781:4;21819:2;21808:9;21804:18;21796:26;;21868:9;21862:4;21858:20;21854:1;21843:9;21839:17;21832:47;21896:131;22022:4;21896:131;:::i;:::-;21888:139;;21615:419;;;:::o;22040:::-;22206:4;22244:2;22233:9;22229:18;22221:26;;22293:9;22287:4;22283:20;22279:1;22268:9;22264:17;22257:47;22321:131;22447:4;22321:131;:::i;:::-;22313:139;;22040:419;;;:::o;22465:::-;22631:4;22669:2;22658:9;22654:18;22646:26;;22718:9;22712:4;22708:20;22704:1;22693:9;22689:17;22682:47;22746:131;22872:4;22746:131;:::i;:::-;22738:139;;22465:419;;;:::o;22890:::-;23056:4;23094:2;23083:9;23079:18;23071:26;;23143:9;23137:4;23133:20;23129:1;23118:9;23114:17;23107:47;23171:131;23297:4;23171:131;:::i;:::-;23163:139;;22890:419;;;:::o;23315:::-;23481:4;23519:2;23508:9;23504:18;23496:26;;23568:9;23562:4;23558:20;23554:1;23543:9;23539:17;23532:47;23596:131;23722:4;23596:131;:::i;:::-;23588:139;;23315:419;;;:::o;23740:::-;23906:4;23944:2;23933:9;23929:18;23921:26;;23993:9;23987:4;23983:20;23979:1;23968:9;23964:17;23957:47;24021:131;24147:4;24021:131;:::i;:::-;24013:139;;23740:419;;;:::o;24165:::-;24331:4;24369:2;24358:9;24354:18;24346:26;;24418:9;24412:4;24408:20;24404:1;24393:9;24389:17;24382:47;24446:131;24572:4;24446:131;:::i;:::-;24438:139;;24165:419;;;:::o;24590:::-;24756:4;24794:2;24783:9;24779:18;24771:26;;24843:9;24837:4;24833:20;24829:1;24818:9;24814:17;24807:47;24871:131;24997:4;24871:131;:::i;:::-;24863:139;;24590:419;;;:::o;25015:::-;25181:4;25219:2;25208:9;25204:18;25196:26;;25268:9;25262:4;25258:20;25254:1;25243:9;25239:17;25232:47;25296:131;25422:4;25296:131;:::i;:::-;25288:139;;25015:419;;;:::o;25440:::-;25606:4;25644:2;25633:9;25629:18;25621:26;;25693:9;25687:4;25683:20;25679:1;25668:9;25664:17;25657:47;25721:131;25847:4;25721:131;:::i;:::-;25713:139;;25440:419;;;:::o;25865:::-;26031:4;26069:2;26058:9;26054:18;26046:26;;26118:9;26112:4;26108:20;26104:1;26093:9;26089:17;26082:47;26146:131;26272:4;26146:131;:::i;:::-;26138:139;;25865:419;;;:::o;26290:::-;26456:4;26494:2;26483:9;26479:18;26471:26;;26543:9;26537:4;26533:20;26529:1;26518:9;26514:17;26507:47;26571:131;26697:4;26571:131;:::i;:::-;26563:139;;26290:419;;;:::o;26715:::-;26881:4;26919:2;26908:9;26904:18;26896:26;;26968:9;26962:4;26958:20;26954:1;26943:9;26939:17;26932:47;26996:131;27122:4;26996:131;:::i;:::-;26988:139;;26715:419;;;:::o;27140:::-;27306:4;27344:2;27333:9;27329:18;27321:26;;27393:9;27387:4;27383:20;27379:1;27368:9;27364:17;27357:47;27421:131;27547:4;27421:131;:::i;:::-;27413:139;;27140:419;;;:::o;27565:::-;27731:4;27769:2;27758:9;27754:18;27746:26;;27818:9;27812:4;27808:20;27804:1;27793:9;27789:17;27782:47;27846:131;27972:4;27846:131;:::i;:::-;27838:139;;27565:419;;;:::o;27990:::-;28156:4;28194:2;28183:9;28179:18;28171:26;;28243:9;28237:4;28233:20;28229:1;28218:9;28214:17;28207:47;28271:131;28397:4;28271:131;:::i;:::-;28263:139;;27990:419;;;:::o;28415:::-;28581:4;28619:2;28608:9;28604:18;28596:26;;28668:9;28662:4;28658:20;28654:1;28643:9;28639:17;28632:47;28696:131;28822:4;28696:131;:::i;:::-;28688:139;;28415:419;;;:::o;28840:::-;29006:4;29044:2;29033:9;29029:18;29021:26;;29093:9;29087:4;29083:20;29079:1;29068:9;29064:17;29057:47;29121:131;29247:4;29121:131;:::i;:::-;29113:139;;28840:419;;;:::o;29265:222::-;29358:4;29396:2;29385:9;29381:18;29373:26;;29409:71;29477:1;29466:9;29462:17;29453:6;29409:71;:::i;:::-;29265:222;;;;:::o;29493:442::-;29642:4;29680:2;29669:9;29665:18;29657:26;;29693:71;29761:1;29750:9;29746:17;29737:6;29693:71;:::i;:::-;29774:72;29842:2;29831:9;29827:18;29818:6;29774:72;:::i;:::-;29856;29924:2;29913:9;29909:18;29900:6;29856:72;:::i;:::-;29493:442;;;;;;:::o;29941:129::-;29975:6;30002:20;;:::i;:::-;29992:30;;30031:33;30059:4;30051:6;30031:33;:::i;:::-;29941:129;;;:::o;30076:75::-;30109:6;30142:2;30136:9;30126:19;;30076:75;:::o;30157:307::-;30218:4;30308:18;30300:6;30297:30;30294:56;;;30330:18;;:::i;:::-;30294:56;30368:29;30390:6;30368:29;:::i;:::-;30360:37;;30452:4;30446;30442:15;30434:23;;30157:307;;;:::o;30470:308::-;30532:4;30622:18;30614:6;30611:30;30608:56;;;30644:18;;:::i;:::-;30608:56;30682:29;30704:6;30682:29;:::i;:::-;30674:37;;30766:4;30760;30756:15;30748:23;;30470:308;;;:::o;30784:98::-;30835:6;30869:5;30863:12;30853:22;;30784:98;;;:::o;30888:99::-;30940:6;30974:5;30968:12;30958:22;;30888:99;;;:::o;30993:168::-;31076:11;31110:6;31105:3;31098:19;31150:4;31145:3;31141:14;31126:29;;30993:168;;;;:::o;31167:147::-;31268:11;31305:3;31290:18;;31167:147;;;;:::o;31320:169::-;31404:11;31438:6;31433:3;31426:19;31478:4;31473:3;31469:14;31454:29;;31320:169;;;;:::o;31495:148::-;31597:11;31634:3;31619:18;;31495:148;;;;:::o;31649:305::-;31689:3;31708:20;31726:1;31708:20;:::i;:::-;31703:25;;31742:20;31760:1;31742:20;:::i;:::-;31737:25;;31896:1;31828:66;31824:74;31821:1;31818:81;31815:107;;;31902:18;;:::i;:::-;31815:107;31946:1;31943;31939:9;31932:16;;31649:305;;;;:::o;31960:185::-;32000:1;32017:20;32035:1;32017:20;:::i;:::-;32012:25;;32051:20;32069:1;32051:20;:::i;:::-;32046:25;;32090:1;32080:35;;32095:18;;:::i;:::-;32080:35;32137:1;32134;32130:9;32125:14;;31960:185;;;;:::o;32151:191::-;32191:4;32211:20;32229:1;32211:20;:::i;:::-;32206:25;;32245:20;32263:1;32245:20;:::i;:::-;32240:25;;32284:1;32281;32278:8;32275:34;;;32289:18;;:::i;:::-;32275:34;32334:1;32331;32327:9;32319:17;;32151:191;;;;:::o;32348:96::-;32385:7;32414:24;32432:5;32414:24;:::i;:::-;32403:35;;32348:96;;;:::o;32450:104::-;32495:7;32524:24;32542:5;32524:24;:::i;:::-;32513:35;;32450:104;;;:::o;32560:90::-;32594:7;32637:5;32630:13;32623:21;32612:32;;32560:90;;;:::o;32656:149::-;32692:7;32732:66;32725:5;32721:78;32710:89;;32656:149;;;:::o;32811:126::-;32848:7;32888:42;32881:5;32877:54;32866:65;;32811:126;;;:::o;32943:77::-;32980:7;33009:5;32998:16;;32943:77;;;:::o;33026:154::-;33110:6;33105:3;33100;33087:30;33172:1;33163:6;33158:3;33154:16;33147:27;33026:154;;;:::o;33186:307::-;33254:1;33264:113;33278:6;33275:1;33272:13;33264:113;;;33363:1;33358:3;33354:11;33348:18;33344:1;33339:3;33335:11;33328:39;33300:2;33297:1;33293:10;33288:15;;33264:113;;;33395:6;33392:1;33389:13;33386:101;;;33475:1;33466:6;33461:3;33457:16;33450:27;33386:101;33235:258;33186:307;;;:::o;33499:320::-;33543:6;33580:1;33574:4;33570:12;33560:22;;33627:1;33621:4;33617:12;33648:18;33638:81;;33704:4;33696:6;33692:17;33682:27;;33638:81;33766:2;33758:6;33755:14;33735:18;33732:38;33729:84;;;33785:18;;:::i;:::-;33729:84;33550:269;33499:320;;;:::o;33825:281::-;33908:27;33930:4;33908:27;:::i;:::-;33900:6;33896:40;34038:6;34026:10;34023:22;34002:18;33990:10;33987:34;33984:62;33981:88;;;34049:18;;:::i;:::-;33981:88;34089:10;34085:2;34078:22;33868:238;33825:281;;:::o;34112:233::-;34151:3;34174:24;34192:5;34174:24;:::i;:::-;34165:33;;34220:66;34213:5;34210:77;34207:103;;;34290:18;;:::i;:::-;34207:103;34337:1;34330:5;34326:13;34319:20;;34112:233;;;:::o;34351:176::-;34383:1;34400:20;34418:1;34400:20;:::i;:::-;34395:25;;34434:20;34452:1;34434:20;:::i;:::-;34429:25;;34473:1;34463:35;;34478:18;;:::i;:::-;34463:35;34519:1;34516;34512:9;34507:14;;34351:176;;;;:::o;34533:180::-;34581:77;34578:1;34571:88;34678:4;34675:1;34668:15;34702:4;34699:1;34692:15;34719:180;34767:77;34764:1;34757:88;34864:4;34861:1;34854:15;34888:4;34885:1;34878:15;34905:180;34953:77;34950:1;34943:88;35050:4;35047:1;35040:15;35074:4;35071:1;35064:15;35091:180;35139:77;35136:1;35129:88;35236:4;35233:1;35226:15;35260:4;35257:1;35250:15;35277:180;35325:77;35322:1;35315:88;35422:4;35419:1;35412:15;35446:4;35443:1;35436:15;35463:180;35511:77;35508:1;35501:88;35608:4;35605:1;35598:15;35632:4;35629:1;35622:15;35649:117;35758:1;35755;35748:12;35772:117;35881:1;35878;35871:12;35895:117;36004:1;36001;35994:12;36018:117;36127:1;36124;36117:12;36141:102;36182:6;36233:2;36229:7;36224:2;36217:5;36213:14;36209:28;36199:38;;36141:102;;;:::o;36249:177::-;36389:29;36385:1;36377:6;36373:14;36366:53;36249:177;:::o;36432:230::-;36572:34;36568:1;36560:6;36556:14;36549:58;36641:13;36636:2;36628:6;36624:15;36617:38;36432:230;:::o;36668:237::-;36808:34;36804:1;36796:6;36792:14;36785:58;36877:20;36872:2;36864:6;36860:15;36853:45;36668:237;:::o;36911:225::-;37051:34;37047:1;37039:6;37035:14;37028:58;37120:8;37115:2;37107:6;37103:15;37096:33;36911:225;:::o;37142:165::-;37282:17;37278:1;37270:6;37266:14;37259:41;37142:165;:::o;37313:178::-;37453:30;37449:1;37441:6;37437:14;37430:54;37313:178;:::o;37497:223::-;37637:34;37633:1;37625:6;37621:14;37614:58;37706:6;37701:2;37693:6;37689:15;37682:31;37497:223;:::o;37726:175::-;37866:27;37862:1;37854:6;37850:14;37843:51;37726:175;:::o;37907:231::-;38047:34;38043:1;38035:6;38031:14;38024:58;38116:14;38111:2;38103:6;38099:15;38092:39;37907:231;:::o;38144:243::-;38284:34;38280:1;38272:6;38268:14;38261:58;38353:26;38348:2;38340:6;38336:15;38329:51;38144:243;:::o;38393:229::-;38533:34;38529:1;38521:6;38517:14;38510:58;38602:12;38597:2;38589:6;38585:15;38578:37;38393:229;:::o;38628:228::-;38768:34;38764:1;38756:6;38752:14;38745:58;38837:11;38832:2;38824:6;38820:15;38813:36;38628:228;:::o;38862:182::-;39002:34;38998:1;38990:6;38986:14;38979:58;38862:182;:::o;39050:161::-;39190:13;39186:1;39178:6;39174:14;39167:37;39050:161;:::o;39217:231::-;39357:34;39353:1;39345:6;39341:14;39334:58;39426:14;39421:2;39413:6;39409:15;39402:39;39217:231;:::o;39454:182::-;39594:34;39590:1;39582:6;39578:14;39571:58;39454:182;:::o;39642:228::-;39782:34;39778:1;39770:6;39766:14;39759:58;39851:11;39846:2;39838:6;39834:15;39827:36;39642:228;:::o;39876:234::-;40016:34;40012:1;40004:6;40000:14;39993:58;40085:17;40080:2;40072:6;40068:15;40061:42;39876:234;:::o;40116:220::-;40256:34;40252:1;40244:6;40240:14;40233:58;40325:3;40320:2;40312:6;40308:15;40301:28;40116:220;:::o;40342:114::-;;:::o;40462:236::-;40602:34;40598:1;40590:6;40586:14;40579:58;40671:19;40666:2;40658:6;40654:15;40647:44;40462:236;:::o;40704:231::-;40844:34;40840:1;40832:6;40828:14;40821:58;40913:14;40908:2;40900:6;40896:15;40889:39;40704:231;:::o;40941:122::-;41014:24;41032:5;41014:24;:::i;:::-;41007:5;41004:35;40994:63;;41053:1;41050;41043:12;40994:63;40941:122;:::o;41069:138::-;41150:32;41176:5;41150:32;:::i;:::-;41143:5;41140:43;41130:71;;41197:1;41194;41187:12;41130:71;41069:138;:::o;41213:116::-;41283:21;41298:5;41283:21;:::i;:::-;41276:5;41273:32;41263:60;;41319:1;41316;41309:12;41263:60;41213:116;:::o;41335:120::-;41407:23;41424:5;41407:23;:::i;:::-;41400:5;41397:34;41387:62;;41445:1;41442;41435:12;41387:62;41335:120;:::o;41461:122::-;41534:24;41552:5;41534:24;:::i;:::-;41527:5;41524:35;41514:63;;41573:1;41570;41563:12;41514:63;41461:122;:::o
Swarm Source
ipfs://9fccb33de240e95cb53f487837ba43d5385f686e3c6a99357dfd3bcdc01bdaa7
[ 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.