Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
9,999 RROO
Holders
3,499
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RROOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RowdyRoos
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-09 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) 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); } } } } // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be 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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); } // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } pragma solidity ^0.8.0; contract RowdyRoos is ERC721Enumerable, Ownable { using Strings for uint256; uint256 public constant MAX_ROOS = 9999; uint256 public constant PRESALE_PRICE = 0.06 ether; uint256 public constant PRICE = 0.07 ether; uint256 public constant MAX_PER_MINT = 10; uint256 public constant PRESALE_MAX_MINT = 3; uint256 public constant MAX_ROOS_MINT = 100; uint256 public constant RESERVED_ROOS = 123; uint256 public reservedClaimed; uint256 public numRoosMinted; string public baseTokenURI; bool public publicSaleStarted; bool public presaleStarted; mapping(address => bool) private _presaleEligible; mapping(address => uint256) private _totalClaimed; event BaseURIChanged(string baseURI); event PresaleMint(address minter, uint256 amountOfRoos); event PublicSaleMint(address minter, uint256 amountOfRoos); modifier whenPresaleStarted() { require(presaleStarted, "Presale has not started"); _; } modifier whenPublicSaleStarted() { require(publicSaleStarted, "Public sale has not started"); _; } constructor(string memory baseURI) ERC721("Rowdy Roos", "RROO") { baseTokenURI = baseURI; } function claimReserved(address recipient, uint256 amount) external onlyOwner { require(reservedClaimed != RESERVED_ROOS, "Already have claimed all reserved roos"); require(reservedClaimed + amount <= RESERVED_ROOS, "Minting would exceed max reserved roos"); require(recipient != address(0), "Cannot add null address"); require(totalSupply() < MAX_ROOS, "All tokens have been minted"); require(totalSupply() + amount <= MAX_ROOS, "Minting would exceed max supply"); uint256 _nextTokenId = numRoosMinted + 1; for (uint256 i = 0; i < amount; i++) { _safeMint(recipient, _nextTokenId + i); } numRoosMinted += amount; reservedClaimed += amount; } function addToPresale(address[] calldata addresses) external onlyOwner { for (uint256 i = 0; i < addresses.length; i++) { require(addresses[i] != address(0), "Cannot add null address"); _presaleEligible[addresses[i]] = true; _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0; } } function checkPresaleEligibility(address addr) external view returns (bool) { return _presaleEligible[addr]; } function amountClaimedBy(address owner) external view returns (uint256) { require(owner != address(0), "Cannot add null address"); return _totalClaimed[owner]; } function mintPresale(uint256 amountOfRoos) external payable whenPresaleStarted { require(_presaleEligible[msg.sender], "You are not eligible for the presale"); require(totalSupply() < MAX_ROOS, "All tokens have been minted"); require(amountOfRoos <= PRESALE_MAX_MINT, "Cannot purchase this many tokens during presale"); require(totalSupply() + amountOfRoos <= MAX_ROOS, "Minting would exceed max supply"); require(_totalClaimed[msg.sender] + amountOfRoos <= PRESALE_MAX_MINT, "Purchase exceeds max allowed"); require(amountOfRoos > 0, "Must mint at least one roo"); require(PRESALE_PRICE * amountOfRoos == msg.value, "ETH amount is incorrect"); for (uint256 i = 0; i < amountOfRoos; i++) { uint256 tokenId = numRoosMinted + 1; numRoosMinted += 1; _totalClaimed[msg.sender] += 1; _safeMint(msg.sender, tokenId); } emit PresaleMint(msg.sender, amountOfRoos); } function mint(uint256 amountOfRoos) external payable whenPublicSaleStarted { require(totalSupply() < MAX_ROOS, "All tokens have been minted"); require(amountOfRoos <= MAX_PER_MINT, "Cannot purchase this many tokens in a transaction"); require(totalSupply() + amountOfRoos <= MAX_ROOS, "Minting would exceed max supply"); require(_totalClaimed[msg.sender] + amountOfRoos <= MAX_ROOS_MINT, "Purchase exceeds max allowed per address"); require(amountOfRoos > 0, "Must mint at least one roo"); require(PRICE * amountOfRoos == msg.value, "ETH amount is incorrect"); for (uint256 i = 0; i < amountOfRoos; i++) { uint256 tokenId = numRoosMinted + 1; numRoosMinted += 1; _totalClaimed[msg.sender] += 1; _safeMint(msg.sender, tokenId); } emit PublicSaleMint(msg.sender, amountOfRoos); } function togglePresaleStarted() external onlyOwner { presaleStarted = !presaleStarted; } function togglePublicSaleStarted() external onlyOwner { publicSaleStarted = !publicSaleStarted; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; emit BaseURIChanged(baseURI); } function withdrawAll() public onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "Insufficent balance"); address[7] memory addresses = [ 0x563e1da5a345E30d82d3fa0364fBb8B2fF98909A, 0xfF9329A4801151500E6143082D62814fE06f68B4, 0xfb60A7A524964A8a194e7c50D3fa450259D6dcC4, 0x9E2Ae5480ca4933149E6E1D834b3a880c4fC90Db, 0x280164C04F712d05038F999C4ae89b008531AB8e, 0xeAe304949e57d913254c38d5f593e49C3f042092, 0x894cCe3C3E0318e1B3E9809a89610DF2F24a23A4 ]; uint32[7] memory shares = [ uint32(2216), uint32(1584), uint32(1584), uint32(1584), uint32(1584), uint32(950), uint32(498) ]; for (uint32 i = 0; i < addresses.length; i++) { uint256 amount = i == addresses.length - 1 ? address(this).balance : balance * shares[i] / 10000; _widthdraw(addresses[i], amount); } } function _widthdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{ value: _amount }(""); require(success, "Failed to withdraw Ether"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfRoos","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfRoos","type":"uint256"}],"name":"PublicSaleMint","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_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ROOS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ROOS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_ROOS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfRoos","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfRoos","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numRoosMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","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":"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":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005d7438038062005d74833981810160405281019062000037919062000432565b6040518060400160405280600a81526020017f526f77647920526f6f73000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f52524f4f000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620001e5565b508060019080519060200190620000d4929190620001e5565b505050620000f7620000eb6200011760201b60201c565b6200011f60201b60201c565b80600d90805190602001906200010f929190620001e5565b5050620004e8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f390620004b2565b90600052602060002090601f01602090048101928262000217576000855562000263565b82601f106200023257805160ff191683800117855562000263565b8280016001018555821562000263579182015b828111156200026257825182559160200191906001019062000245565b5b50905062000272919062000276565b5090565b5b808211156200029157600081600090555060010162000277565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002fe82620002b3565b810181811067ffffffffffffffff8211171562000320576200031f620002c4565b5b80604052505050565b60006200033562000295565b9050620003438282620002f3565b919050565b600067ffffffffffffffff821115620003665762000365620002c4565b5b6200037182620002b3565b9050602081019050919050565b60005b838110156200039e57808201518184015260208101905062000381565b83811115620003ae576000848401525b50505050565b6000620003cb620003c58462000348565b62000329565b905082815260208101848484011115620003ea57620003e9620002ae565b5b620003f78482856200037e565b509392505050565b600082601f830112620004175762000416620002a9565b5b815162000429848260208601620003b4565b91505092915050565b6000602082840312156200044b576200044a6200029f565b5b600082015167ffffffffffffffff8111156200046c576200046b620002a4565b5b6200047a84828501620003ff565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004cb57607f821691505b60208210811415620004e257620004e162000483565b5b50919050565b61587c80620004f86000396000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063a425e257116100b6578063cb5c6fb91161007a578063cb5c6fb914610873578063d547cfb71461089e578063e985e9c5146108c9578063ed1fc2a214610906578063f2fde38b1461091d578063f759867a1461094657610246565b8063a425e2571461077c578063a9ee7eda146107b9578063aef6ee1f146107e4578063b88d4fde1461080d578063c87b56dd1461083657610246565b80638da5cb5b116100fd5780638da5cb5b146106b657806395d89b41146106e1578063a0712d681461070c578063a22cb46514610728578063a2e914771461075157610246565b806370a08231146105f5578063715018a614610632578063853828b614610649578063872441a5146106605780638d859f3e1461068b57610246565b806323b872dd116101c75780634f6ccce71161018b5780634f6ccce7146104fc578063549527c31461053957806355f804b31461056457806362dc6e211461058d5780636352211e146105b857610246565b806323b872dd1461042b57806324510043146104545780632f745c591461047f5780632f814575146104bc57806342842e0e146104d357610246565b806309d42b301161020e57806309d42b301461034457806318160ddd1461036f5780631978f4691461039a5780631b5757f2146103d75780631eab8f4e1461040057610246565b806301ffc9a71461024b57806304549d6f1461028857806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b6d565b610962565b60405161027f9190613bb5565b60405180910390f35b34801561029457600080fd5b5061029d6109dc565b6040516102aa9190613bb5565b60405180910390f35b3480156102bf57600080fd5b506102c86109ef565b6040516102d59190613c69565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613cc1565b610a81565b6040516103129190613d2f565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613d76565b610b06565b005b34801561035057600080fd5b50610359610c1e565b6040516103669190613dc5565b60405180910390f35b34801561037b57600080fd5b50610384610c23565b6040516103919190613dc5565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190613de0565b610c30565b6040516103ce9190613dc5565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613d76565b610ce8565b005b34801561040c57600080fd5b50610415610f8b565b6040516104229190613dc5565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190613e0d565b610f90565b005b34801561046057600080fd5b50610469610ff0565b6040516104769190613dc5565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190613d76565b610ff6565b6040516104b39190613dc5565b60405180910390f35b3480156104c857600080fd5b506104d161109b565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613e0d565b611143565b005b34801561050857600080fd5b50610523600480360381019061051e9190613cc1565b611163565b6040516105309190613dc5565b60405180910390f35b34801561054557600080fd5b5061054e6111d4565b60405161055b9190613dc5565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190613f95565b6111d9565b005b34801561059957600080fd5b506105a26112a6565b6040516105af9190613dc5565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613cc1565b6112b1565b6040516105ec9190613d2f565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613de0565b611363565b6040516106299190613dc5565b60405180910390f35b34801561063e57600080fd5b5061064761141b565b005b34801561065557600080fd5b5061065e6114a3565b005b34801561066c57600080fd5b506106756118ab565b6040516106829190613dc5565b60405180910390f35b34801561069757600080fd5b506106a06118b1565b6040516106ad9190613dc5565b60405180910390f35b3480156106c257600080fd5b506106cb6118bc565b6040516106d89190613d2f565b60405180910390f35b3480156106ed57600080fd5b506106f66118e6565b6040516107039190613c69565b60405180910390f35b61072660048036038101906107219190613cc1565b611978565b005b34801561073457600080fd5b5061074f600480360381019061074a919061400a565b611cbc565b005b34801561075d57600080fd5b50610766611cd2565b6040516107739190613bb5565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613de0565b611ce5565b6040516107b09190613bb5565b60405180910390f35b3480156107c557600080fd5b506107ce611d3b565b6040516107db9190613dc5565b60405180910390f35b3480156107f057600080fd5b5061080b600480360381019061080691906140aa565b611d40565b005b34801561081957600080fd5b50610834600480360381019061082f9190614198565b611fd6565b005b34801561084257600080fd5b5061085d60048036038101906108589190613cc1565b612038565b60405161086a9190613c69565b60405180910390f35b34801561087f57600080fd5b506108886120df565b6040516108959190613dc5565b60405180910390f35b3480156108aa57600080fd5b506108b36120e5565b6040516108c09190613c69565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb919061421b565b612173565b6040516108fd9190613bb5565b60405180910390f35b34801561091257600080fd5b5061091b612207565b005b34801561092957600080fd5b50610944600480360381019061093f9190613de0565b6122af565b005b610960600480360381019061095b9190613cc1565b6123a7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d557506109d482612777565b5b9050919050565b600e60019054906101000a900460ff1681565b6060600080546109fe9061428a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a9061428a565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82612859565b610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac29061432e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b11826112b1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906143c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba16128c5565b73ffffffffffffffffffffffffffffffffffffffff161480610bd05750610bcf81610bca6128c5565b612173565b5b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690614452565b60405180910390fd5b610c1983836128cd565b505050565b600a81565b6000600880549050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c98906144be565b60405180910390fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf06128c5565b73ffffffffffffffffffffffffffffffffffffffff16610d0e6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b9061452a565b60405180910390fd5b607b600b541415610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906145bc565b60405180910390fd5b607b81600b54610dba919061460b565b1115610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df2906146d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906144be565b60405180910390fd5b61270f610e76610c23565b10610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061473f565b60405180910390fd5b61270f81610ec2610c23565b610ecc919061460b565b1115610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906147ab565b60405180910390fd5b60006001600c54610f1e919061460b565b905060005b82811015610f5357610f40848284610f3b919061460b565b612986565b8080610f4b906147cb565b915050610f23565b5081600c6000828254610f66919061460b565b9250508190555081600b6000828254610f7f919061460b565b92505081905550505050565b606481565b610fa1610f9b6128c5565b826129a4565b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790614886565b60405180910390fd5b610feb838383612a82565b505050565b600b5481565b600061100183611363565b8210611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614918565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110a36128c5565b73ffffffffffffffffffffffffffffffffffffffff166110c16118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e9061452a565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b61115e83838360405180602001604052806000815250611fd6565b505050565b600061116d610c23565b82106111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a5906149aa565b60405180910390fd5b600882815481106111c2576111c16149ca565b5b90600052602060002001549050919050565b600381565b6111e16128c5565b73ffffffffffffffffffffffffffffffffffffffff166111ff6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c9061452a565b60405180910390fd5b80600d908051906020019061126b929190613a5e565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161129b9190613c69565b60405180910390a150565b66d529ae9e86000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561135a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135190614a6b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614afd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114236128c5565b73ffffffffffffffffffffffffffffffffffffffff166114416118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e9061452a565b60405180910390fd5b6114a16000612cde565b565b6114ab6128c5565b73ffffffffffffffffffffffffffffffffffffffff166114c96118bc565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115169061452a565b60405180910390fd5b600047905060008111611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614b69565b60405180910390fd5b60006040518060e0016040528073563e1da5a345e30d82d3fa0364fbb8b2ff98909a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173ff9329a4801151500e6143082d62814fe06f68b473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173fb60a7a524964a8a194e7c50d3fa450259d6dcc473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001739e2ae5480ca4933149e6e1d834b3a880c4fc90db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173280164c04f712d05038f999c4ae89b008531ab8e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173eae304949e57d913254c38d5f593e49c3f04209273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173894cce3c3e0318e1b3e9809a89610df2f24a23a473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060e001604052806108a863ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff1681526020016103b663ffffffff1663ffffffff1681526020016101f263ffffffff1663ffffffff16815250905060005b60078163ffffffff1610156118a5576000600160076118199190614b89565b8263ffffffff161461186657612710838363ffffffff1660078110611841576118406149ca565b5b602002015163ffffffff16866118579190614bbd565b6118619190614c46565b611868565b475b9050611891848363ffffffff1660078110611886576118856149ca565b5b602002015182612da4565b50808061189d90614c87565b9150506117fa565b50505050565b61270f81565b66f8b0a10e47000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118f59061428a565b80601f01602080910402602001604051908101604052809291908181526020018280546119219061428a565b801561196e5780601f106119435761010080835404028352916020019161196e565b820191906000526020600020905b81548152906001019060200180831161195157829003601f168201915b5050505050905090565b600e60009054906101000a900460ff166119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614d00565b60405180910390fd5b61270f6119d2610c23565b10611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a099061473f565b60405180910390fd5b600a811115611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614d92565b60405180910390fd5b61270f81611a62610c23565b611a6c919061460b565b1115611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa4906147ab565b60405180910390fd5b606481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa919061460b565b1115611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290614e24565b60405180910390fd5b60008111611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7590614e90565b60405180910390fd5b348166f8b0a10e470000611b929190614bbd565b14611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990614efc565b60405180910390fd5b60005b81811015611c7f5760006001600c54611bee919061460b565b90506001600c6000828254611c03919061460b565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5a919061460b565b92505081905550611c6b3382612986565b508080611c77906147cb565b915050611bd5565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b53382604051611cb1929190614f1c565b60405180910390a150565b611cce611cc76128c5565b8383612e55565b5050565b600e60009054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b607b81565b611d486128c5565b73ffffffffffffffffffffffffffffffffffffffff16611d666118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db39061452a565b60405180910390fd5b60005b82829050811015611fd157600073ffffffffffffffffffffffffffffffffffffffff16838383818110611df557611df46149ca565b5b9050602002016020810190611e0a9190613de0565b73ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906144be565b60405180910390fd5b6001600f6000858585818110611e7a57611e796149ca565b5b9050602002016020810190611e8f9190613de0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060106000858585818110611ef957611ef86149ca565b5b9050602002016020810190611f0e9190613de0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611f55576000611fbd565b60106000848484818110611f6c57611f6b6149ca565b5b9050602002016020810190611f819190613de0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b508080611fc9906147cb565b915050611dbf565b505050565b611fe7611fe16128c5565b836129a4565b612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90614886565b60405180910390fd5b61203284848484612fc2565b50505050565b606061204382612859565b612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990614fb7565b60405180910390fd5b600061208c61301e565b905060008151116120ac57604051806020016040528060008152506120d7565b806120b6846130b0565b6040516020016120c7929190615013565b6040516020818303038152906040525b915050919050565b600c5481565b600d80546120f29061428a565b80601f016020809104026020016040519081016040528092919081815260200182805461211e9061428a565b801561216b5780601f106121405761010080835404028352916020019161216b565b820191906000526020600020905b81548152906001019060200180831161214e57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61220f6128c5565b73ffffffffffffffffffffffffffffffffffffffff1661222d6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a9061452a565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6122b76128c5565b73ffffffffffffffffffffffffffffffffffffffff166122d56118bc565b73ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123229061452a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612392906150a9565b60405180910390fd5b6123a481612cde565b50565b600e60019054906101000a900460ff166123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90615115565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612479906151a7565b60405180910390fd5b61270f61248d610c23565b106124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c49061473f565b60405180910390fd5b6003811115612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890615239565b60405180910390fd5b61270f8161251d610c23565b612527919061460b565b1115612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f906147ab565b60405180910390fd5b600381601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b5919061460b565b11156125f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ed906152a5565b60405180910390fd5b60008111612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614e90565b60405180910390fd5b348166d529ae9e86000061264d9190614bbd565b1461268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490614efc565b60405180910390fd5b60005b8181101561273a5760006001600c546126a9919061460b565b90506001600c60008282546126be919061460b565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612715919061460b565b925050819055506127263382612986565b508080612732906147cb565b915050612690565b507ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a3338260405161276c929190614f1c565b60405180910390a150565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061284257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612852575061285182613211565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612940836112b1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6129a082826040518060200160405280600081525061327b565b5050565b60006129af82612859565b6129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590615337565b60405180910390fd5b60006129f9836112b1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a6857508373ffffffffffffffffffffffffffffffffffffffff16612a5084610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a795750612a788185612173565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aa2826112b1565b73ffffffffffffffffffffffffffffffffffffffff1614612af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aef906153c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f9061545b565b60405180910390fd5b612b738383836132d6565b612b7e6000826128cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bce9190614b89565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c25919061460b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612dca906154ac565b60006040518083038185875af1925050503d8060008114612e07576040519150601f19603f3d011682016040523d82523d6000602084013e612e0c565b606091505b5050905080612e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e479061550d565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebb90615579565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612fb59190613bb5565b60405180910390a3505050565b612fcd848484612a82565b612fd9848484846133ea565b613018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300f9061560b565b60405180910390fd5b50505050565b6060600d805461302d9061428a565b80601f01602080910402602001604051908101604052809291908181526020018280546130599061428a565b80156130a65780601f1061307b576101008083540402835291602001916130a6565b820191906000526020600020905b81548152906001019060200180831161308957829003601f168201915b5050505050905090565b606060008214156130f8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061320c565b600082905060005b6000821461312a578080613113906147cb565b915050600a826131239190614c46565b9150613100565b60008167ffffffffffffffff81111561314657613145613e6a565b5b6040519080825280601f01601f1916602001820160405280156131785781602001600182028036833780820191505090505b5090505b60008514613205576001826131919190614b89565b9150600a856131a0919061562b565b60306131ac919061460b565b60f81b8183815181106131c2576131c16149ca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131fe9190614c46565b945061317c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132858383613572565b61329260008484846133ea565b6132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c89061560b565b60405180910390fd5b505050565b6132e1838383613740565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133245761331f81613745565b613363565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461336257613361838261378e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a6576133a1816138fb565b6133e5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133e4576133e382826139cc565b5b5b505050565b600061340b8473ffffffffffffffffffffffffffffffffffffffff16613a4b565b15613565578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134346128c5565b8786866040518563ffffffff1660e01b815260040161345694939291906156b1565b6020604051808303816000875af192505050801561349257506040513d601f19601f8201168201806040525081019061348f9190615712565b60015b613515573d80600081146134c2576040519150601f19603f3d011682016040523d82523d6000602084013e6134c7565b606091505b5060008151141561350d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135049061560b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061356a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d99061578b565b60405180910390fd5b6135eb81612859565b1561362b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613622906157f7565b60405180910390fd5b613637600083836132d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613687919061460b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161379b84611363565b6137a59190614b89565b905060006007600084815260200190815260200160002054905081811461388a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061390f9190614b89565b905060006009600084815260200190815260200160002054905060006008838154811061393f5761393e6149ca565b5b906000526020600020015490508060088381548110613961576139606149ca565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139b0576139af615817565b5b6001900381819060005260206000200160009055905550505050565b60006139d783611363565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613a6a9061428a565b90600052602060002090601f016020900481019282613a8c5760008555613ad3565b82601f10613aa557805160ff1916838001178555613ad3565b82800160010185558215613ad3579182015b82811115613ad2578251825591602001919060010190613ab7565b5b509050613ae09190613ae4565b5090565b5b80821115613afd576000816000905550600101613ae5565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b4a81613b15565b8114613b5557600080fd5b50565b600081359050613b6781613b41565b92915050565b600060208284031215613b8357613b82613b0b565b5b6000613b9184828501613b58565b91505092915050565b60008115159050919050565b613baf81613b9a565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c0a578082015181840152602081019050613bef565b83811115613c19576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c3b82613bd0565b613c458185613bdb565b9350613c55818560208601613bec565b613c5e81613c1f565b840191505092915050565b60006020820190508181036000830152613c838184613c30565b905092915050565b6000819050919050565b613c9e81613c8b565b8114613ca957600080fd5b50565b600081359050613cbb81613c95565b92915050565b600060208284031215613cd757613cd6613b0b565b5b6000613ce584828501613cac565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1982613cee565b9050919050565b613d2981613d0e565b82525050565b6000602082019050613d446000830184613d20565b92915050565b613d5381613d0e565b8114613d5e57600080fd5b50565b600081359050613d7081613d4a565b92915050565b60008060408385031215613d8d57613d8c613b0b565b5b6000613d9b85828601613d61565b9250506020613dac85828601613cac565b9150509250929050565b613dbf81613c8b565b82525050565b6000602082019050613dda6000830184613db6565b92915050565b600060208284031215613df657613df5613b0b565b5b6000613e0484828501613d61565b91505092915050565b600080600060608486031215613e2657613e25613b0b565b5b6000613e3486828701613d61565b9350506020613e4586828701613d61565b9250506040613e5686828701613cac565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ea282613c1f565b810181811067ffffffffffffffff82111715613ec157613ec0613e6a565b5b80604052505050565b6000613ed4613b01565b9050613ee08282613e99565b919050565b600067ffffffffffffffff821115613f0057613eff613e6a565b5b613f0982613c1f565b9050602081019050919050565b82818337600083830152505050565b6000613f38613f3384613ee5565b613eca565b905082815260208101848484011115613f5457613f53613e65565b5b613f5f848285613f16565b509392505050565b600082601f830112613f7c57613f7b613e60565b5b8135613f8c848260208601613f25565b91505092915050565b600060208284031215613fab57613faa613b0b565b5b600082013567ffffffffffffffff811115613fc957613fc8613b10565b5b613fd584828501613f67565b91505092915050565b613fe781613b9a565b8114613ff257600080fd5b50565b60008135905061400481613fde565b92915050565b6000806040838503121561402157614020613b0b565b5b600061402f85828601613d61565b925050602061404085828601613ff5565b9150509250929050565b600080fd5b600080fd5b60008083601f84011261406a57614069613e60565b5b8235905067ffffffffffffffff8111156140875761408661404a565b5b6020830191508360208202830111156140a3576140a261404f565b5b9250929050565b600080602083850312156140c1576140c0613b0b565b5b600083013567ffffffffffffffff8111156140df576140de613b10565b5b6140eb85828601614054565b92509250509250929050565b600067ffffffffffffffff82111561411257614111613e6a565b5b61411b82613c1f565b9050602081019050919050565b600061413b614136846140f7565b613eca565b90508281526020810184848401111561415757614156613e65565b5b614162848285613f16565b509392505050565b600082601f83011261417f5761417e613e60565b5b813561418f848260208601614128565b91505092915050565b600080600080608085870312156141b2576141b1613b0b565b5b60006141c087828801613d61565b94505060206141d187828801613d61565b93505060406141e287828801613cac565b925050606085013567ffffffffffffffff81111561420357614202613b10565b5b61420f8782880161416a565b91505092959194509250565b6000806040838503121561423257614231613b0b565b5b600061424085828601613d61565b925050602061425185828601613d61565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142a257607f821691505b602082108114156142b6576142b561425b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614318602c83613bdb565b9150614323826142bc565b604082019050919050565b600060208201905081810360008301526143478161430b565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006143aa602183613bdb565b91506143b58261434e565b604082019050919050565b600060208201905081810360008301526143d98161439d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061443c603883613bdb565b9150614447826143e0565b604082019050919050565b6000602082019050818103600083015261446b8161442f565b9050919050565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b60006144a8601783613bdb565b91506144b382614472565b602082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614514602083613bdb565b915061451f826144de565b602082019050919050565b6000602082019050818103600083015261454381614507565b9050919050565b7f416c7265616479206861766520636c61696d656420616c6c207265736572766560008201527f6420726f6f730000000000000000000000000000000000000000000000000000602082015250565b60006145a6602683613bdb565b91506145b18261454a565b604082019050919050565b600060208201905081810360008301526145d581614599565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061461682613c8b565b915061462183613c8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614656576146556145dc565b5b828201905092915050565b7f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560008201527f6420726f6f730000000000000000000000000000000000000000000000000000602082015250565b60006146bd602683613bdb565b91506146c882614661565b604082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614729601b83613bdb565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b6000614795601f83613bdb565b91506147a08261475f565b602082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b60006147d682613c8b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614809576148086145dc565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614870603183613bdb565b915061487b82614814565b604082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614902602b83613bdb565b915061490d826148a6565b604082019050919050565b60006020820190508181036000830152614931816148f5565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614994602c83613bdb565b915061499f82614938565b604082019050919050565b600060208201905081810360008301526149c381614987565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614a55602983613bdb565b9150614a60826149f9565b604082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614ae7602a83613bdb565b9150614af282614a8b565b604082019050919050565b60006020820190508181036000830152614b1681614ada565b9050919050565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b6000614b53601383613bdb565b9150614b5e82614b1d565b602082019050919050565b60006020820190508181036000830152614b8281614b46565b9050919050565b6000614b9482613c8b565b9150614b9f83613c8b565b925082821015614bb257614bb16145dc565b5b828203905092915050565b6000614bc882613c8b565b9150614bd383613c8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0c57614c0b6145dc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c5182613c8b565b9150614c5c83613c8b565b925082614c6c57614c6b614c17565b5b828204905092915050565b600063ffffffff82169050919050565b6000614c9282614c77565b915063ffffffff821415614ca957614ca86145dc565b5b600182019050919050565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b6000614cea601b83613bdb565b9150614cf582614cb4565b602082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b6000614d7c603183613bdb565b9150614d8782614d20565b604082019050919050565b60006020820190508181036000830152614dab81614d6f565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000614e0e602883613bdb565b9150614e1982614db2565b604082019050919050565b60006020820190508181036000830152614e3d81614e01565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e6520726f6f000000000000600082015250565b6000614e7a601a83613bdb565b9150614e8582614e44565b602082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b6000614ee6601783613bdb565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b6000604082019050614f316000830185613d20565b614f3e6020830184613db6565b9392505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614fa1602f83613bdb565b9150614fac82614f45565b604082019050919050565b60006020820190508181036000830152614fd081614f94565b9050919050565b600081905092915050565b6000614fed82613bd0565b614ff78185614fd7565b9350615007818560208601613bec565b80840191505092915050565b600061501f8285614fe2565b915061502b8284614fe2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615093602683613bdb565b915061509e82615037565b604082019050919050565b600060208201905081810360008301526150c281615086565b9050919050565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b60006150ff601783613bdb565b915061510a826150c9565b602082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6500000000000000000000000000000000000000000000000000000000602082015250565b6000615191602483613bdb565b915061519c82615135565b604082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20647572696e672070726573616c650000000000000000000000000000000000602082015250565b6000615223602f83613bdb565b915061522e826151c7565b604082019050919050565b6000602082019050818103600083015261525281615216565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b600061528f601c83613bdb565b915061529a82615259565b602082019050919050565b600060208201905081810360008301526152be81615282565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615321602c83613bdb565b915061532c826152c5565b604082019050919050565b6000602082019050818103600083015261535081615314565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006153b3602983613bdb565b91506153be82615357565b604082019050919050565b600060208201905081810360008301526153e2816153a6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615445602483613bdb565b9150615450826153e9565b604082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b600081905092915050565b50565b600061549660008361547b565b91506154a182615486565b600082019050919050565b60006154b782615489565b9150819050919050565b7f4661696c656420746f2077697468647261772045746865720000000000000000600082015250565b60006154f7601883613bdb565b9150615502826154c1565b602082019050919050565b60006020820190508181036000830152615526816154ea565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615563601983613bdb565b915061556e8261552d565b602082019050919050565b6000602082019050818103600083015261559281615556565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006155f5603283613bdb565b915061560082615599565b604082019050919050565b60006020820190508181036000830152615624816155e8565b9050919050565b600061563682613c8b565b915061564183613c8b565b92508261565157615650614c17565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006156838261565c565b61568d8185615667565b935061569d818560208601613bec565b6156a681613c1f565b840191505092915050565b60006080820190506156c66000830187613d20565b6156d36020830186613d20565b6156e06040830185613db6565b81810360608301526156f28184615678565b905095945050505050565b60008151905061570c81613b41565b92915050565b60006020828403121561572857615727613b0b565b5b6000615736848285016156fd565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615775602083613bdb565b91506157808261573f565b602082019050919050565b600060208201905081810360008301526157a481615768565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006157e1601c83613bdb565b91506157ec826157ab565b602082019050919050565b60006020820190508181036000830152615810816157d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212209fba4d9e2084523d3c70e41e0aa0e272df0c9bda31c22a041e3e3c641c88f80864736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001c68747470733a2f2f7777772e626f626c6e66742e636f6d2f6170692f00000000
Deployed Bytecode
0x6080604052600436106102465760003560e01c806370a0823111610139578063a425e257116100b6578063cb5c6fb91161007a578063cb5c6fb914610873578063d547cfb71461089e578063e985e9c5146108c9578063ed1fc2a214610906578063f2fde38b1461091d578063f759867a1461094657610246565b8063a425e2571461077c578063a9ee7eda146107b9578063aef6ee1f146107e4578063b88d4fde1461080d578063c87b56dd1461083657610246565b80638da5cb5b116100fd5780638da5cb5b146106b657806395d89b41146106e1578063a0712d681461070c578063a22cb46514610728578063a2e914771461075157610246565b806370a08231146105f5578063715018a614610632578063853828b614610649578063872441a5146106605780638d859f3e1461068b57610246565b806323b872dd116101c75780634f6ccce71161018b5780634f6ccce7146104fc578063549527c31461053957806355f804b31461056457806362dc6e211461058d5780636352211e146105b857610246565b806323b872dd1461042b57806324510043146104545780632f745c591461047f5780632f814575146104bc57806342842e0e146104d357610246565b806309d42b301161020e57806309d42b301461034457806318160ddd1461036f5780631978f4691461039a5780631b5757f2146103d75780631eab8f4e1461040057610246565b806301ffc9a71461024b57806304549d6f1461028857806306fdde03146102b3578063081812fc146102de578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613b6d565b610962565b60405161027f9190613bb5565b60405180910390f35b34801561029457600080fd5b5061029d6109dc565b6040516102aa9190613bb5565b60405180910390f35b3480156102bf57600080fd5b506102c86109ef565b6040516102d59190613c69565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613cc1565b610a81565b6040516103129190613d2f565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613d76565b610b06565b005b34801561035057600080fd5b50610359610c1e565b6040516103669190613dc5565b60405180910390f35b34801561037b57600080fd5b50610384610c23565b6040516103919190613dc5565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190613de0565b610c30565b6040516103ce9190613dc5565b60405180910390f35b3480156103e357600080fd5b506103fe60048036038101906103f99190613d76565b610ce8565b005b34801561040c57600080fd5b50610415610f8b565b6040516104229190613dc5565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190613e0d565b610f90565b005b34801561046057600080fd5b50610469610ff0565b6040516104769190613dc5565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190613d76565b610ff6565b6040516104b39190613dc5565b60405180910390f35b3480156104c857600080fd5b506104d161109b565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613e0d565b611143565b005b34801561050857600080fd5b50610523600480360381019061051e9190613cc1565b611163565b6040516105309190613dc5565b60405180910390f35b34801561054557600080fd5b5061054e6111d4565b60405161055b9190613dc5565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190613f95565b6111d9565b005b34801561059957600080fd5b506105a26112a6565b6040516105af9190613dc5565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613cc1565b6112b1565b6040516105ec9190613d2f565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613de0565b611363565b6040516106299190613dc5565b60405180910390f35b34801561063e57600080fd5b5061064761141b565b005b34801561065557600080fd5b5061065e6114a3565b005b34801561066c57600080fd5b506106756118ab565b6040516106829190613dc5565b60405180910390f35b34801561069757600080fd5b506106a06118b1565b6040516106ad9190613dc5565b60405180910390f35b3480156106c257600080fd5b506106cb6118bc565b6040516106d89190613d2f565b60405180910390f35b3480156106ed57600080fd5b506106f66118e6565b6040516107039190613c69565b60405180910390f35b61072660048036038101906107219190613cc1565b611978565b005b34801561073457600080fd5b5061074f600480360381019061074a919061400a565b611cbc565b005b34801561075d57600080fd5b50610766611cd2565b6040516107739190613bb5565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613de0565b611ce5565b6040516107b09190613bb5565b60405180910390f35b3480156107c557600080fd5b506107ce611d3b565b6040516107db9190613dc5565b60405180910390f35b3480156107f057600080fd5b5061080b600480360381019061080691906140aa565b611d40565b005b34801561081957600080fd5b50610834600480360381019061082f9190614198565b611fd6565b005b34801561084257600080fd5b5061085d60048036038101906108589190613cc1565b612038565b60405161086a9190613c69565b60405180910390f35b34801561087f57600080fd5b506108886120df565b6040516108959190613dc5565b60405180910390f35b3480156108aa57600080fd5b506108b36120e5565b6040516108c09190613c69565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb919061421b565b612173565b6040516108fd9190613bb5565b60405180910390f35b34801561091257600080fd5b5061091b612207565b005b34801561092957600080fd5b50610944600480360381019061093f9190613de0565b6122af565b005b610960600480360381019061095b9190613cc1565b6123a7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d557506109d482612777565b5b9050919050565b600e60019054906101000a900460ff1681565b6060600080546109fe9061428a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2a9061428a565b8015610a775780601f10610a4c57610100808354040283529160200191610a77565b820191906000526020600020905b815481529060010190602001808311610a5a57829003601f168201915b5050505050905090565b6000610a8c82612859565b610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac29061432e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b11826112b1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906143c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ba16128c5565b73ffffffffffffffffffffffffffffffffffffffff161480610bd05750610bcf81610bca6128c5565b612173565b5b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690614452565b60405180910390fd5b610c1983836128cd565b505050565b600a81565b6000600880549050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c98906144be565b60405180910390fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf06128c5565b73ffffffffffffffffffffffffffffffffffffffff16610d0e6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b9061452a565b60405180910390fd5b607b600b541415610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da1906145bc565b60405180910390fd5b607b81600b54610dba919061460b565b1115610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df2906146d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e62906144be565b60405180910390fd5b61270f610e76610c23565b10610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061473f565b60405180910390fd5b61270f81610ec2610c23565b610ecc919061460b565b1115610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906147ab565b60405180910390fd5b60006001600c54610f1e919061460b565b905060005b82811015610f5357610f40848284610f3b919061460b565b612986565b8080610f4b906147cb565b915050610f23565b5081600c6000828254610f66919061460b565b9250508190555081600b6000828254610f7f919061460b565b92505081905550505050565b606481565b610fa1610f9b6128c5565b826129a4565b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790614886565b60405180910390fd5b610feb838383612a82565b505050565b600b5481565b600061100183611363565b8210611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614918565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6110a36128c5565b73ffffffffffffffffffffffffffffffffffffffff166110c16118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e9061452a565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b61115e83838360405180602001604052806000815250611fd6565b505050565b600061116d610c23565b82106111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a5906149aa565b60405180910390fd5b600882815481106111c2576111c16149ca565b5b90600052602060002001549050919050565b600381565b6111e16128c5565b73ffffffffffffffffffffffffffffffffffffffff166111ff6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c9061452a565b60405180910390fd5b80600d908051906020019061126b929190613a5e565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68160405161129b9190613c69565b60405180910390a150565b66d529ae9e86000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561135a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135190614a6b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90614afd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114236128c5565b73ffffffffffffffffffffffffffffffffffffffff166114416118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e9061452a565b60405180910390fd5b6114a16000612cde565b565b6114ab6128c5565b73ffffffffffffffffffffffffffffffffffffffff166114c96118bc565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115169061452a565b60405180910390fd5b600047905060008111611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614b69565b60405180910390fd5b60006040518060e0016040528073563e1da5a345e30d82d3fa0364fbb8b2ff98909a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173ff9329a4801151500e6143082d62814fe06f68b473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173fb60a7a524964a8a194e7c50d3fa450259d6dcc473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001739e2ae5480ca4933149e6e1d834b3a880c4fc90db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173280164c04f712d05038f999c4ae89b008531ab8e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173eae304949e57d913254c38d5f593e49c3f04209273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173894cce3c3e0318e1b3e9809a89610df2f24a23a473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060e001604052806108a863ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff16815260200161063063ffffffff1663ffffffff1681526020016103b663ffffffff1663ffffffff1681526020016101f263ffffffff1663ffffffff16815250905060005b60078163ffffffff1610156118a5576000600160076118199190614b89565b8263ffffffff161461186657612710838363ffffffff1660078110611841576118406149ca565b5b602002015163ffffffff16866118579190614bbd565b6118619190614c46565b611868565b475b9050611891848363ffffffff1660078110611886576118856149ca565b5b602002015182612da4565b50808061189d90614c87565b9150506117fa565b50505050565b61270f81565b66f8b0a10e47000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546118f59061428a565b80601f01602080910402602001604051908101604052809291908181526020018280546119219061428a565b801561196e5780601f106119435761010080835404028352916020019161196e565b820191906000526020600020905b81548152906001019060200180831161195157829003601f168201915b5050505050905090565b600e60009054906101000a900460ff166119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614d00565b60405180910390fd5b61270f6119d2610c23565b10611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a099061473f565b60405180910390fd5b600a811115611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614d92565b60405180910390fd5b61270f81611a62610c23565b611a6c919061460b565b1115611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa4906147ab565b60405180910390fd5b606481601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611afa919061460b565b1115611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290614e24565b60405180910390fd5b60008111611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7590614e90565b60405180910390fd5b348166f8b0a10e470000611b929190614bbd565b14611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990614efc565b60405180910390fd5b60005b81811015611c7f5760006001600c54611bee919061460b565b90506001600c6000828254611c03919061460b565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5a919061460b565b92505081905550611c6b3382612986565b508080611c77906147cb565b915050611bd5565b507f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b53382604051611cb1929190614f1c565b60405180910390a150565b611cce611cc76128c5565b8383612e55565b5050565b600e60009054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b607b81565b611d486128c5565b73ffffffffffffffffffffffffffffffffffffffff16611d666118bc565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db39061452a565b60405180910390fd5b60005b82829050811015611fd157600073ffffffffffffffffffffffffffffffffffffffff16838383818110611df557611df46149ca565b5b9050602002016020810190611e0a9190613de0565b73ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e58906144be565b60405180910390fd5b6001600f6000858585818110611e7a57611e796149ca565b5b9050602002016020810190611e8f9190613de0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060106000858585818110611ef957611ef86149ca565b5b9050602002016020810190611f0e9190613de0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611f55576000611fbd565b60106000848484818110611f6c57611f6b6149ca565b5b9050602002016020810190611f819190613de0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b508080611fc9906147cb565b915050611dbf565b505050565b611fe7611fe16128c5565b836129a4565b612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90614886565b60405180910390fd5b61203284848484612fc2565b50505050565b606061204382612859565b612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990614fb7565b60405180910390fd5b600061208c61301e565b905060008151116120ac57604051806020016040528060008152506120d7565b806120b6846130b0565b6040516020016120c7929190615013565b6040516020818303038152906040525b915050919050565b600c5481565b600d80546120f29061428a565b80601f016020809104026020016040519081016040528092919081815260200182805461211e9061428a565b801561216b5780601f106121405761010080835404028352916020019161216b565b820191906000526020600020905b81548152906001019060200180831161214e57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61220f6128c5565b73ffffffffffffffffffffffffffffffffffffffff1661222d6118bc565b73ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a9061452a565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6122b76128c5565b73ffffffffffffffffffffffffffffffffffffffff166122d56118bc565b73ffffffffffffffffffffffffffffffffffffffff161461232b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123229061452a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561239b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612392906150a9565b60405180910390fd5b6123a481612cde565b50565b600e60019054906101000a900460ff166123f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ed90615115565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612479906151a7565b60405180910390fd5b61270f61248d610c23565b106124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c49061473f565b60405180910390fd5b6003811115612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890615239565b60405180910390fd5b61270f8161251d610c23565b612527919061460b565b1115612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f906147ab565b60405180910390fd5b600381601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125b5919061460b565b11156125f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ed906152a5565b60405180910390fd5b60008111612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614e90565b60405180910390fd5b348166d529ae9e86000061264d9190614bbd565b1461268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490614efc565b60405180910390fd5b60005b8181101561273a5760006001600c546126a9919061460b565b90506001600c60008282546126be919061460b565b925050819055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612715919061460b565b925050819055506127263382612986565b508080612732906147cb565b915050612690565b507ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a3338260405161276c929190614f1c565b60405180910390a150565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061284257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612852575061285182613211565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612940836112b1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6129a082826040518060200160405280600081525061327b565b5050565b60006129af82612859565b6129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e590615337565b60405180910390fd5b60006129f9836112b1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a6857508373ffffffffffffffffffffffffffffffffffffffff16612a5084610a81565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a795750612a788185612173565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612aa2826112b1565b73ffffffffffffffffffffffffffffffffffffffff1614612af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aef906153c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f9061545b565b60405180910390fd5b612b738383836132d6565b612b7e6000826128cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bce9190614b89565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c25919061460b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612dca906154ac565b60006040518083038185875af1925050503d8060008114612e07576040519150601f19603f3d011682016040523d82523d6000602084013e612e0c565b606091505b5050905080612e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e479061550d565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebb90615579565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612fb59190613bb5565b60405180910390a3505050565b612fcd848484612a82565b612fd9848484846133ea565b613018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300f9061560b565b60405180910390fd5b50505050565b6060600d805461302d9061428a565b80601f01602080910402602001604051908101604052809291908181526020018280546130599061428a565b80156130a65780601f1061307b576101008083540402835291602001916130a6565b820191906000526020600020905b81548152906001019060200180831161308957829003601f168201915b5050505050905090565b606060008214156130f8576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061320c565b600082905060005b6000821461312a578080613113906147cb565b915050600a826131239190614c46565b9150613100565b60008167ffffffffffffffff81111561314657613145613e6a565b5b6040519080825280601f01601f1916602001820160405280156131785781602001600182028036833780820191505090505b5090505b60008514613205576001826131919190614b89565b9150600a856131a0919061562b565b60306131ac919061460b565b60f81b8183815181106131c2576131c16149ca565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131fe9190614c46565b945061317c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132858383613572565b61329260008484846133ea565b6132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c89061560b565b60405180910390fd5b505050565b6132e1838383613740565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133245761331f81613745565b613363565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461336257613361838261378e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133a6576133a1816138fb565b6133e5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133e4576133e382826139cc565b5b5b505050565b600061340b8473ffffffffffffffffffffffffffffffffffffffff16613a4b565b15613565578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134346128c5565b8786866040518563ffffffff1660e01b815260040161345694939291906156b1565b6020604051808303816000875af192505050801561349257506040513d601f19601f8201168201806040525081019061348f9190615712565b60015b613515573d80600081146134c2576040519150601f19603f3d011682016040523d82523d6000602084013e6134c7565b606091505b5060008151141561350d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135049061560b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061356a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d99061578b565b60405180910390fd5b6135eb81612859565b1561362b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613622906157f7565b60405180910390fd5b613637600083836132d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613687919061460b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161379b84611363565b6137a59190614b89565b905060006007600084815260200190815260200160002054905081811461388a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061390f9190614b89565b905060006009600084815260200190815260200160002054905060006008838154811061393f5761393e6149ca565b5b906000526020600020015490508060088381548110613961576139606149ca565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806139b0576139af615817565b5b6001900381819060005260206000200160009055905550505050565b60006139d783611363565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054613a6a9061428a565b90600052602060002090601f016020900481019282613a8c5760008555613ad3565b82601f10613aa557805160ff1916838001178555613ad3565b82800160010185558215613ad3579182015b82811115613ad2578251825591602001919060010190613ab7565b5b509050613ae09190613ae4565b5090565b5b80821115613afd576000816000905550600101613ae5565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b4a81613b15565b8114613b5557600080fd5b50565b600081359050613b6781613b41565b92915050565b600060208284031215613b8357613b82613b0b565b5b6000613b9184828501613b58565b91505092915050565b60008115159050919050565b613baf81613b9a565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c0a578082015181840152602081019050613bef565b83811115613c19576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c3b82613bd0565b613c458185613bdb565b9350613c55818560208601613bec565b613c5e81613c1f565b840191505092915050565b60006020820190508181036000830152613c838184613c30565b905092915050565b6000819050919050565b613c9e81613c8b565b8114613ca957600080fd5b50565b600081359050613cbb81613c95565b92915050565b600060208284031215613cd757613cd6613b0b565b5b6000613ce584828501613cac565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d1982613cee565b9050919050565b613d2981613d0e565b82525050565b6000602082019050613d446000830184613d20565b92915050565b613d5381613d0e565b8114613d5e57600080fd5b50565b600081359050613d7081613d4a565b92915050565b60008060408385031215613d8d57613d8c613b0b565b5b6000613d9b85828601613d61565b9250506020613dac85828601613cac565b9150509250929050565b613dbf81613c8b565b82525050565b6000602082019050613dda6000830184613db6565b92915050565b600060208284031215613df657613df5613b0b565b5b6000613e0484828501613d61565b91505092915050565b600080600060608486031215613e2657613e25613b0b565b5b6000613e3486828701613d61565b9350506020613e4586828701613d61565b9250506040613e5686828701613cac565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ea282613c1f565b810181811067ffffffffffffffff82111715613ec157613ec0613e6a565b5b80604052505050565b6000613ed4613b01565b9050613ee08282613e99565b919050565b600067ffffffffffffffff821115613f0057613eff613e6a565b5b613f0982613c1f565b9050602081019050919050565b82818337600083830152505050565b6000613f38613f3384613ee5565b613eca565b905082815260208101848484011115613f5457613f53613e65565b5b613f5f848285613f16565b509392505050565b600082601f830112613f7c57613f7b613e60565b5b8135613f8c848260208601613f25565b91505092915050565b600060208284031215613fab57613faa613b0b565b5b600082013567ffffffffffffffff811115613fc957613fc8613b10565b5b613fd584828501613f67565b91505092915050565b613fe781613b9a565b8114613ff257600080fd5b50565b60008135905061400481613fde565b92915050565b6000806040838503121561402157614020613b0b565b5b600061402f85828601613d61565b925050602061404085828601613ff5565b9150509250929050565b600080fd5b600080fd5b60008083601f84011261406a57614069613e60565b5b8235905067ffffffffffffffff8111156140875761408661404a565b5b6020830191508360208202830111156140a3576140a261404f565b5b9250929050565b600080602083850312156140c1576140c0613b0b565b5b600083013567ffffffffffffffff8111156140df576140de613b10565b5b6140eb85828601614054565b92509250509250929050565b600067ffffffffffffffff82111561411257614111613e6a565b5b61411b82613c1f565b9050602081019050919050565b600061413b614136846140f7565b613eca565b90508281526020810184848401111561415757614156613e65565b5b614162848285613f16565b509392505050565b600082601f83011261417f5761417e613e60565b5b813561418f848260208601614128565b91505092915050565b600080600080608085870312156141b2576141b1613b0b565b5b60006141c087828801613d61565b94505060206141d187828801613d61565b93505060406141e287828801613cac565b925050606085013567ffffffffffffffff81111561420357614202613b10565b5b61420f8782880161416a565b91505092959194509250565b6000806040838503121561423257614231613b0b565b5b600061424085828601613d61565b925050602061425185828601613d61565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142a257607f821691505b602082108114156142b6576142b561425b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614318602c83613bdb565b9150614323826142bc565b604082019050919050565b600060208201905081810360008301526143478161430b565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006143aa602183613bdb565b91506143b58261434e565b604082019050919050565b600060208201905081810360008301526143d98161439d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061443c603883613bdb565b9150614447826143e0565b604082019050919050565b6000602082019050818103600083015261446b8161442f565b9050919050565b7f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000600082015250565b60006144a8601783613bdb565b91506144b382614472565b602082019050919050565b600060208201905081810360008301526144d78161449b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614514602083613bdb565b915061451f826144de565b602082019050919050565b6000602082019050818103600083015261454381614507565b9050919050565b7f416c7265616479206861766520636c61696d656420616c6c207265736572766560008201527f6420726f6f730000000000000000000000000000000000000000000000000000602082015250565b60006145a6602683613bdb565b91506145b18261454a565b604082019050919050565b600060208201905081810360008301526145d581614599565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061461682613c8b565b915061462183613c8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614656576146556145dc565b5b828201905092915050565b7f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560008201527f6420726f6f730000000000000000000000000000000000000000000000000000602082015250565b60006146bd602683613bdb565b91506146c882614661565b604082019050919050565b600060208201905081810360008301526146ec816146b0565b9050919050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000614729601b83613bdb565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b6000614795601f83613bdb565b91506147a08261475f565b602082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b60006147d682613c8b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614809576148086145dc565b5b600182019050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000614870603183613bdb565b915061487b82614814565b604082019050919050565b6000602082019050818103600083015261489f81614863565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614902602b83613bdb565b915061490d826148a6565b604082019050919050565b60006020820190508181036000830152614931816148f5565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614994602c83613bdb565b915061499f82614938565b604082019050919050565b600060208201905081810360008301526149c381614987565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614a55602983613bdb565b9150614a60826149f9565b604082019050919050565b60006020820190508181036000830152614a8481614a48565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614ae7602a83613bdb565b9150614af282614a8b565b604082019050919050565b60006020820190508181036000830152614b1681614ada565b9050919050565b7f496e737566666963656e742062616c616e636500000000000000000000000000600082015250565b6000614b53601383613bdb565b9150614b5e82614b1d565b602082019050919050565b60006020820190508181036000830152614b8281614b46565b9050919050565b6000614b9482613c8b565b9150614b9f83613c8b565b925082821015614bb257614bb16145dc565b5b828203905092915050565b6000614bc882613c8b565b9150614bd383613c8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c0c57614c0b6145dc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c5182613c8b565b9150614c5c83613c8b565b925082614c6c57614c6b614c17565b5b828204905092915050565b600063ffffffff82169050919050565b6000614c9282614c77565b915063ffffffff821415614ca957614ca86145dc565b5b600182019050919050565b7f5075626c69632073616c6520686173206e6f7420737461727465640000000000600082015250565b6000614cea601b83613bdb565b9150614cf582614cb4565b602082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b6000614d7c603183613bdb565b9150614d8782614d20565b604082019050919050565b60006020820190508181036000830152614dab81614d6f565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f7765642070657260008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b6000614e0e602883613bdb565b9150614e1982614db2565b604082019050919050565b60006020820190508181036000830152614e3d81614e01565b9050919050565b7f4d757374206d696e74206174206c65617374206f6e6520726f6f000000000000600082015250565b6000614e7a601a83613bdb565b9150614e8582614e44565b602082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b6000614ee6601783613bdb565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b6000604082019050614f316000830185613d20565b614f3e6020830184613db6565b9392505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614fa1602f83613bdb565b9150614fac82614f45565b604082019050919050565b60006020820190508181036000830152614fd081614f94565b9050919050565b600081905092915050565b6000614fed82613bd0565b614ff78185614fd7565b9350615007818560208601613bec565b80840191505092915050565b600061501f8285614fe2565b915061502b8284614fe2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615093602683613bdb565b915061509e82615037565b604082019050919050565b600060208201905081810360008301526150c281615086565b9050919050565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b60006150ff601783613bdb565b915061510a826150c9565b602082019050919050565b6000602082019050818103600083015261512e816150f2565b9050919050565b7f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560008201527f73616c6500000000000000000000000000000000000000000000000000000000602082015250565b6000615191602483613bdb565b915061519c82615135565b604082019050919050565b600060208201905081810360008301526151c081615184565b9050919050565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20647572696e672070726573616c650000000000000000000000000000000000602082015250565b6000615223602f83613bdb565b915061522e826151c7565b604082019050919050565b6000602082019050818103600083015261525281615216565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b600061528f601c83613bdb565b915061529a82615259565b602082019050919050565b600060208201905081810360008301526152be81615282565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615321602c83613bdb565b915061532c826152c5565b604082019050919050565b6000602082019050818103600083015261535081615314565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006153b3602983613bdb565b91506153be82615357565b604082019050919050565b600060208201905081810360008301526153e2816153a6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615445602483613bdb565b9150615450826153e9565b604082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b600081905092915050565b50565b600061549660008361547b565b91506154a182615486565b600082019050919050565b60006154b782615489565b9150819050919050565b7f4661696c656420746f2077697468647261772045746865720000000000000000600082015250565b60006154f7601883613bdb565b9150615502826154c1565b602082019050919050565b60006020820190508181036000830152615526816154ea565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615563601983613bdb565b915061556e8261552d565b602082019050919050565b6000602082019050818103600083015261559281615556565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006155f5603283613bdb565b915061560082615599565b604082019050919050565b60006020820190508181036000830152615624816155e8565b9050919050565b600061563682613c8b565b915061564183613c8b565b92508261565157615650614c17565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006156838261565c565b61568d8185615667565b935061569d818560208601613bec565b6156a681613c1f565b840191505092915050565b60006080820190506156c66000830187613d20565b6156d36020830186613d20565b6156e06040830185613db6565b81810360608301526156f28184615678565b905095945050505050565b60008151905061570c81613b41565b92915050565b60006020828403121561572857615727613b0b565b5b6000615736848285016156fd565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615775602083613bdb565b91506157808261573f565b602082019050919050565b600060208201905081810360008301526157a481615768565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006157e1601c83613bdb565b91506157ec826157ab565b602082019050919050565b60006020820190508181036000830152615810816157d4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212209fba4d9e2084523d3c70e41e0aa0e272df0c9bda31c22a041e3e3c641c88f80864736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001c68747470733a2f2f7777772e626f626c6e66742e636f6d2f6170692f00000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://www.boblnft.com/api/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [2] : 68747470733a2f2f7777772e626f626c6e66742e636f6d2f6170692f00000000
Deployed Bytecode Sourcemap
45937:6453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35025:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46526:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21609:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23168:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22691:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46178:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35665:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48470:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47208:753;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46277:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23918:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46379:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35333:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50722:111;;;;;;;;;;;;;:::i;:::-;;24328:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35855:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46226:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50962:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46072:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21303:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42831:103;;;;;;;;;;;;;:::i;:::-;;51110:1078;;;;;;;;;;;;;:::i;:::-;;46026:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46129:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42180:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21778:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49683:921;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23461:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46490:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48338:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46327:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47969:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24584:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21953:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46418:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46455:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23687:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50612:102;;;;;;;;;;;;;:::i;:::-;;43089:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48664:1011;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35025:224;35127:4;35166:35;35151:50;;;:11;:50;;;;:90;;;;35205:36;35229:11;35205:23;:36::i;:::-;35151:90;35144:97;;35025:224;;;:::o;46526:26::-;;;;;;;;;;;;;:::o;21609:100::-;21663:13;21696:5;21689:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21609:100;:::o;23168:221::-;23244:7;23272:16;23280:7;23272;:16::i;:::-;23264:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23357:15;:24;23373:7;23357:24;;;;;;;;;;;;;;;;;;;;;23350:31;;23168:221;;;:::o;22691:411::-;22772:13;22788:23;22803:7;22788:14;:23::i;:::-;22772:39;;22836:5;22830:11;;:2;:11;;;;22822:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22930:5;22914:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22939:37;22956:5;22963:12;:10;:12::i;:::-;22939:16;:37::i;:::-;22914:62;22892:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23073:21;23082:2;23086:7;23073:8;:21::i;:::-;22761:341;22691:411;;:::o;46178:41::-;46217:2;46178:41;:::o;35665:113::-;35726:7;35753:10;:17;;;;35746:24;;35665:113;:::o;48470:186::-;48533:7;48578:1;48561:19;;:5;:19;;;;48553:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48628:13;:20;48642:5;48628:20;;;;;;;;;;;;;;;;48621:27;;48470:186;;;:::o;47208:753::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46367:3:::1;47304:15;;:32;;47296:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46367:3;47416:6;47398:15;;:24;;;;:::i;:::-;:41;;47390:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;47522:1;47501:23;;:9;:23;;;;47493:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46061:4;47571:13;:11;:13::i;:::-;:24;47563:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46061:4;47662:6;47646:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:34;;47638:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47729:20;47768:1;47752:13;;:17;;;;:::i;:::-;47729:40;;47787:9;47782:102;47806:6;47802:1;:10;47782:102;;;47834:38;47844:9;47870:1;47855:12;:16;;;;:::i;:::-;47834:9;:38::i;:::-;47814:3;;;;;:::i;:::-;;;;47782:102;;;;47911:6;47894:13;;:23;;;;;;;:::i;:::-;;;;;;;;47947:6;47928:15;;:25;;;;;;;:::i;:::-;;;;;;;;47285:676;47208:753:::0;;:::o;46277:43::-;46317:3;46277:43;:::o;23918:339::-;24113:41;24132:12;:10;:12::i;:::-;24146:7;24113:18;:41::i;:::-;24105:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24221:28;24231:4;24237:2;24241:7;24221:9;:28::i;:::-;23918:339;;;:::o;46379:30::-;;;;:::o;35333:256::-;35430:7;35466:23;35483:5;35466:16;:23::i;:::-;35458:5;:31;35450:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35555:12;:19;35568:5;35555:19;;;;;;;;;;;;;;;:26;35575:5;35555:26;;;;;;;;;;;;35548:33;;35333:256;;;;:::o;50722:111::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50808:17:::1;;;;;;;;;;;50807:18;50787:17;;:38;;;;;;;;;;;;;;;;;;50722:111::o:0;24328:185::-;24466:39;24483:4;24489:2;24493:7;24466:39;;;;;;;;;;;;:16;:39::i;:::-;24328:185;;;:::o;35855:233::-;35930:7;35966:30;:28;:30::i;:::-;35958:5;:38;35950:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36063:10;36074:5;36063:17;;;;;;;;:::i;:::-;;;;;;;;;;36056:24;;35855:233;;;:::o;46226:44::-;46269:1;46226:44;:::o;50962:140::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51048:7:::1;51033:12;:22;;;;;;;;;;;;:::i;:::-;;51071:23;51086:7;51071:23;;;;;;:::i;:::-;;;;;;;;50962:140:::0;:::o;46072:50::-;46112:10;46072:50;:::o;21303:239::-;21375:7;21395:13;21411:7;:16;21419:7;21411:16;;;;;;;;;;;;;;;;;;;;;21395:32;;21463:1;21446:19;;:5;:19;;;;21438:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21529:5;21522:12;;;21303:239;;;:::o;21033:208::-;21105:7;21150:1;21133:19;;:5;:19;;;;21125:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21217:9;:16;21227:5;21217:16;;;;;;;;;;;;;;;;21210:23;;21033:208;;;:::o;42831:103::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42896:30:::1;42923:1;42896:18;:30::i;:::-;42831:103::o:0;51110:1078::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51161:15:::1;51179:21;51161:39;;51229:1;51219:7;:11;51211:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51275:27;:440;;;;;;;;51320:42;51275:440;;;;;;;;51377:42;51275:440;;;;;;;;51434:42;51275:440;;;;;;;;51491:42;51275:440;;;;;;;;51548:42;51275:440;;;;;;;;51605:42;51275:440;;;;;;;;51662:42;51275:440;;;;;;::::0;::::1;;51728:23;:224;;;;;;;;51776:4;51728:224;;;;;;;;51803:4;51728:224;;;;;;;;51830:4;51728:224;;;;;;;;51857:4;51728:224;;;;;;;;51884:4;51728:224;;;;;;;;51911:3;51728:224;;;;;;;;51937:3;51728:224;;;;;;::::0;::::1;;51970:8;51965:216;51988:16;51984:1;:20;;;51965:216;;;52026:14;52067:1;52048:16;:20;;;;:::i;:::-;52043:1;:25;;;:79;;52117:5;52105:6;52112:1;52105:9;;;;;;;;;:::i;:::-;;;;;;52095:19;;:7;:19;;;;:::i;:::-;:27;;;;:::i;:::-;52043:79;;;52071:21;52043:79;52026:96;;52137:32;52148:9;52158:1;52148:12;;;;;;;;;:::i;:::-;;;;;;52162:6;52137:10;:32::i;:::-;52011:170;52006:3;;;;;:::i;:::-;;;;51965:216;;;;51150:1038;;;51110:1078::o:0;46026:39::-;46061:4;46026:39;:::o;46129:42::-;46161:10;46129:42;:::o;42180:87::-;42226:7;42253:6;;;;;;;;;;;42246:13;;42180:87;:::o;21778:104::-;21834:13;21867:7;21860:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21778:104;:::o;49683:921::-;47018:17;;;;;;;;;;;47010:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;46061:4:::1;49777:13;:11;:13::i;:::-;:24;49769:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46217:2;49852:12;:28;;49844:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;46061:4;49969:12;49953:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:40;;49945:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46317:3;50076:12;50048:13;:25;50062:10;50048:25;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:57;;50040:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;50184:1;50169:12;:16;50161:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50259:9;50243:12;46161:10;50235:20;;;;:::i;:::-;:33;50227:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50314:9;50309:230;50333:12;50329:1;:16;50309:230;;;50367:15;50401:1;50385:13;;:17;;;;:::i;:::-;50367:35;;50436:1;50419:13;;:18;;;;;;;:::i;:::-;;;;;;;;50481:1;50452:13;:25;50466:10;50452:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;50497;50507:10;50519:7;50497:9;:30::i;:::-;50352:187;50347:3;;;;;:::i;:::-;;;;50309:230;;;;50556:40;50571:10;50583:12;50556:40;;;;;;;:::i;:::-;;;;;;;;49683:921:::0;:::o;23461:155::-;23556:52;23575:12;:10;:12::i;:::-;23589:8;23599;23556:18;:52::i;:::-;23461:155;;:::o;46490:29::-;;;;;;;;;;;;;:::o;48338:124::-;48408:4;48432:16;:22;48449:4;48432:22;;;;;;;;;;;;;;;;;;;;;;;;;48425:29;;48338:124;;;:::o;46327:43::-;46367:3;46327:43;:::o;47969:361::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48056:9:::1;48051:272;48075:9;;:16;;48071:1;:20;48051:272;;;48145:1;48121:26;;:9;;48131:1;48121:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;48113:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48225:4;48192:16;:30;48209:9;;48219:1;48209:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48192:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;48276:1;48246:13;:27;48260:9;;48270:1;48260:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48246:27;;;;;;;;;;;;;;;;:31;:65;;48310:1;48246:65;;;48280:13;:27;48294:9;;48304:1;48294:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48280:27;;;;;;;;;;;;;;;;48246:65;;48093:3;;;;;:::i;:::-;;;;48051:272;;;;47969:361:::0;;:::o;24584:328::-;24759:41;24778:12;:10;:12::i;:::-;24792:7;24759:18;:41::i;:::-;24751:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24865:39;24879:4;24885:2;24889:7;24898:5;24865:13;:39::i;:::-;24584:328;;;;:::o;21953:334::-;22026:13;22060:16;22068:7;22060;:16::i;:::-;22052:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22141:21;22165:10;:8;:10::i;:::-;22141:34;;22217:1;22199:7;22193:21;:25;:86;;;;;;;;;;;;;;;;;22245:7;22254:18;:7;:16;:18::i;:::-;22228:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22193:86;22186:93;;;21953:334;;;:::o;46418:28::-;;;;:::o;46455:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23687:164::-;23784:4;23808:18;:25;23827:5;23808:25;;;;;;;;;;;;;;;:35;23834:8;23808:35;;;;;;;;;;;;;;;;;;;;;;;;;23801:42;;23687:164;;;;:::o;50612:102::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50692:14:::1;;;;;;;;;;;50691:15;50674:14;;:32;;;;;;;;;;;;;;;;;;50612:102::o:0;43089:201::-;42411:12;:10;:12::i;:::-;42400:23;;:7;:5;:7::i;:::-;:23;;;42392:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43198:1:::1;43178:22;;:8;:22;;;;43170:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43254:28;43273:8;43254:18;:28::i;:::-;43089:201:::0;:::o;48664:1011::-;46896:14;;;;;;;;;;;46888:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48762:16:::1;:28;48779:10;48762:28;;;;;;;;;;;;;;;;;;;;;;;;;48754:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;46061:4;48850:13;:11;:13::i;:::-;:24;48842:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46269:1;48925:12;:32;;48917:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;46061:4;49044:12;49028:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:40;;49020:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46269:1;49151:12;49123:13;:25;49137:10;49123:25;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;:60;;49115:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;49250:1;49235:12;:16;49227:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49333:9;49317:12;46112:10;49301:28;;;;:::i;:::-;:41;49293:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49388:9;49383:230;49407:12;49403:1;:16;49383:230;;;49441:15;49475:1;49459:13;;:17;;;;:::i;:::-;49441:35;;49510:1;49493:13;;:18;;;;;;;:::i;:::-;;;;;;;;49555:1;49526:13;:25;49540:10;49526:25;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;49571;49581:10;49593:7;49571:9;:30::i;:::-;49426:187;49421:3;;;;;:::i;:::-;;;;49383:230;;;;49630:37;49642:10;49654:12;49630:37;;;;;;;:::i;:::-;;;;;;;;48664:1011:::0;:::o;20664:305::-;20766:4;20818:25;20803:40;;;:11;:40;;;;:105;;;;20875:33;20860:48;;;:11;:48;;;;20803:105;:158;;;;20925:36;20949:11;20925:23;:36::i;:::-;20803:158;20783:178;;20664:305;;;:::o;26422:127::-;26487:4;26539:1;26511:30;;:7;:16;26519:7;26511:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26504:37;;26422:127;;;:::o;16098:98::-;16151:7;16178:10;16171:17;;16098:98;:::o;30404:174::-;30506:2;30479:15;:24;30495:7;30479:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30562:7;30558:2;30524:46;;30533:23;30548:7;30533:14;:23::i;:::-;30524:46;;;;;;;;;;;;30404:174;;:::o;27406:110::-;27482:26;27492:2;27496:7;27482:26;;;;;;;;;;;;:9;:26::i;:::-;27406:110;;:::o;26716:348::-;26809:4;26834:16;26842:7;26834;:16::i;:::-;26826:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26910:13;26926:23;26941:7;26926:14;:23::i;:::-;26910:39;;26979:5;26968:16;;:7;:16;;;:51;;;;27012:7;26988:31;;:20;27000:7;26988:11;:20::i;:::-;:31;;;26968:51;:87;;;;27023:32;27040:5;27047:7;27023:16;:32::i;:::-;26968:87;26960:96;;;26716:348;;;;:::o;29708:578::-;29867:4;29840:31;;:23;29855:7;29840:14;:23::i;:::-;:31;;;29832:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29950:1;29936:16;;:2;:16;;;;29928:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30006:39;30027:4;30033:2;30037:7;30006:20;:39::i;:::-;30110:29;30127:1;30131:7;30110:8;:29::i;:::-;30171:1;30152:9;:15;30162:4;30152:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30200:1;30183:9;:13;30193:2;30183:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30231:2;30212:7;:16;30220:7;30212:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30270:7;30266:2;30251:27;;30260:4;30251:27;;;;;;;;;;;;29708:578;;;:::o;43450:191::-;43524:16;43543:6;;;;;;;;;;;43524:25;;43569:8;43560:6;;:17;;;;;;;;;;;;;;;;;;43624:8;43593:40;;43614:8;43593:40;;;;;;;;;;;;43513:128;43450:191;:::o;52196:::-;52271:12;52289:8;:13;;52311:7;52289:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52270:54;;;52343:7;52335:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;52259:128;52196:191;;:::o;30720:315::-;30875:8;30866:17;;:5;:17;;;;30858:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30962:8;30924:18;:25;30943:5;30924:25;;;;;;;;;;;;;;;:35;30950:8;30924:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31008:8;30986:41;;31001:5;30986:41;;;31018:8;30986:41;;;;;;:::i;:::-;;;;;;;;30720:315;;;:::o;25794:::-;25951:28;25961:4;25967:2;25971:7;25951:9;:28::i;:::-;25998:48;26021:4;26027:2;26031:7;26040:5;25998:22;:48::i;:::-;25990:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25794:315;;;;:::o;50841:113::-;50901:13;50934:12;50927:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50841:113;:::o;16623:723::-;16679:13;16909:1;16900:5;:10;16896:53;;;16927:10;;;;;;;;;;;;;;;;;;;;;16896:53;16959:12;16974:5;16959:20;;16990:14;17015:78;17030:1;17022:4;:9;17015:78;;17048:8;;;;;:::i;:::-;;;;17079:2;17071:10;;;;;:::i;:::-;;;17015:78;;;17103:19;17135:6;17125:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17103:39;;17153:154;17169:1;17160:5;:10;17153:154;;17197:1;17187:11;;;;;:::i;:::-;;;17264:2;17256:5;:10;;;;:::i;:::-;17243:2;:24;;;;:::i;:::-;17230:39;;17213:6;17220;17213:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17293:2;17284:11;;;;;:::i;:::-;;;17153:154;;;17331:6;17317:21;;;;;16623:723;;;;:::o;19180:157::-;19265:4;19304:25;19289:40;;;:11;:40;;;;19282:47;;19180:157;;;:::o;27743:321::-;27873:18;27879:2;27883:7;27873:5;:18::i;:::-;27924:54;27955:1;27959:2;27963:7;27972:5;27924:22;:54::i;:::-;27902:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27743:321;;;:::o;36701:589::-;36845:45;36872:4;36878:2;36882:7;36845:26;:45::i;:::-;36923:1;36907:18;;:4;:18;;;36903:187;;;36942:40;36974:7;36942:31;:40::i;:::-;36903:187;;;37012:2;37004:10;;:4;:10;;;37000:90;;37031:47;37064:4;37070:7;37031:32;:47::i;:::-;37000:90;36903:187;37118:1;37104:16;;:2;:16;;;37100:183;;;37137:45;37174:7;37137:36;:45::i;:::-;37100:183;;;37210:4;37204:10;;:2;:10;;;37200:83;;37231:40;37259:2;37263:7;37231:27;:40::i;:::-;37200:83;37100:183;36701:589;;;:::o;31600:799::-;31755:4;31776:15;:2;:13;;;:15::i;:::-;31772:620;;;31828:2;31812:36;;;31849:12;:10;:12::i;:::-;31863:4;31869:7;31878:5;31812:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31808:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32071:1;32054:6;:13;:18;32050:272;;;32097:60;;;;;;;;;;:::i;:::-;;;;;;;;32050:272;32272:6;32266:13;32257:6;32253:2;32249:15;32242:38;31808:529;31945:41;;;31935:51;;;:6;:51;;;;31928:58;;;;;31772:620;32376:4;32369:11;;31600:799;;;;;;;:::o;28400:382::-;28494:1;28480:16;;:2;:16;;;;28472:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28553:16;28561:7;28553;:16::i;:::-;28552:17;28544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28615:45;28644:1;28648:2;28652:7;28615:20;:45::i;:::-;28690:1;28673:9;:13;28683:2;28673:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28721:2;28702:7;:16;28710:7;28702:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28766:7;28762:2;28741:33;;28758:1;28741:33;;;;;;;;;;;;28400:382;;:::o;32971:126::-;;;;:::o;38013:164::-;38117:10;:17;;;;38090:15;:24;38106:7;38090:24;;;;;;;;;;;:44;;;;38145:10;38161:7;38145:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38013:164;:::o;38804:988::-;39070:22;39120:1;39095:22;39112:4;39095:16;:22::i;:::-;:26;;;;:::i;:::-;39070:51;;39132:18;39153:17;:26;39171:7;39153:26;;;;;;;;;;;;39132:47;;39300:14;39286:10;:28;39282:328;;39331:19;39353:12;:18;39366:4;39353:18;;;;;;;;;;;;;;;:34;39372:14;39353:34;;;;;;;;;;;;39331:56;;39437:11;39404:12;:18;39417:4;39404:18;;;;;;;;;;;;;;;:30;39423:10;39404:30;;;;;;;;;;;:44;;;;39554:10;39521:17;:30;39539:11;39521:30;;;;;;;;;;;:43;;;;39316:294;39282:328;39706:17;:26;39724:7;39706:26;;;;;;;;;;;39699:33;;;39750:12;:18;39763:4;39750:18;;;;;;;;;;;;;;;:34;39769:14;39750:34;;;;;;;;;;;39743:41;;;38885:907;;38804:988;;:::o;40087:1079::-;40340:22;40385:1;40365:10;:17;;;;:21;;;;:::i;:::-;40340:46;;40397:18;40418:15;:24;40434:7;40418:24;;;;;;;;;;;;40397:45;;40769:19;40791:10;40802:14;40791:26;;;;;;;;:::i;:::-;;;;;;;;;;40769:48;;40855:11;40830:10;40841;40830:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40966:10;40935:15;:28;40951:11;40935:28;;;;;;;;;;;:41;;;;41107:15;:24;41123:7;41107:24;;;;;;;;;;;41100:31;;;41142:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40158:1008;;;40087:1079;:::o;37591:221::-;37676:14;37693:20;37710:2;37693:16;:20::i;:::-;37676:37;;37751:7;37724:12;:16;37737:2;37724:16;;;;;;;;;;;;;;;:24;37741:6;37724:24;;;;;;;;;;;:34;;;;37798:6;37769:17;:26;37787:7;37769:26;;;;;;;;;;;:35;;;;37665:147;37591:221;;:::o;8142:387::-;8202:4;8410:12;8477:7;8465:20;8457:28;;8520:1;8513:4;:8;8506:15;;;8142:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:329::-;5349:6;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5290:329;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:117::-;9715:1;9712;9705:12;9729:117;9838:1;9835;9828:12;9869:568;9942:8;9952:6;10002:3;9995:4;9987:6;9983:17;9979:27;9969:122;;10010:79;;:::i;:::-;9969:122;10123:6;10110:20;10100:30;;10153:18;10145:6;10142:30;10139:117;;;10175:79;;:::i;:::-;10139:117;10289:4;10281:6;10277:17;10265:29;;10343:3;10335:4;10327:6;10323:17;10313:8;10309:32;10306:41;10303:128;;;10350:79;;:::i;:::-;10303:128;9869:568;;;;;:::o;10443:559::-;10529:6;10537;10586:2;10574:9;10565:7;10561:23;10557:32;10554:119;;;10592:79;;:::i;:::-;10554:119;10740:1;10729:9;10725:17;10712:31;10770:18;10762:6;10759:30;10756:117;;;10792:79;;:::i;:::-;10756:117;10905:80;10977:7;10968:6;10957:9;10953:22;10905:80;:::i;:::-;10887:98;;;;10683:312;10443:559;;;;;:::o;11008:307::-;11069:4;11159:18;11151:6;11148:30;11145:56;;;11181:18;;:::i;:::-;11145:56;11219:29;11241:6;11219:29;:::i;:::-;11211:37;;11303:4;11297;11293:15;11285:23;;11008:307;;;:::o;11321:410::-;11398:5;11423:65;11439:48;11480:6;11439:48;:::i;:::-;11423:65;:::i;:::-;11414:74;;11511:6;11504:5;11497:21;11549:4;11542:5;11538:16;11587:3;11578:6;11573:3;11569:16;11566:25;11563:112;;;11594:79;;:::i;:::-;11563:112;11684:41;11718:6;11713:3;11708;11684:41;:::i;:::-;11404:327;11321:410;;;;;:::o;11750:338::-;11805:5;11854:3;11847:4;11839:6;11835:17;11831:27;11821:122;;11862:79;;:::i;:::-;11821:122;11979:6;11966:20;12004:78;12078:3;12070:6;12063:4;12055:6;12051:17;12004:78;:::i;:::-;11995:87;;11811:277;11750:338;;;;:::o;12094:943::-;12189:6;12197;12205;12213;12262:3;12250:9;12241:7;12237:23;12233:33;12230:120;;;12269:79;;:::i;:::-;12230:120;12389:1;12414:53;12459:7;12450:6;12439:9;12435:22;12414:53;:::i;:::-;12404:63;;12360:117;12516:2;12542:53;12587:7;12578:6;12567:9;12563:22;12542:53;:::i;:::-;12532:63;;12487:118;12644:2;12670:53;12715:7;12706:6;12695:9;12691:22;12670:53;:::i;:::-;12660:63;;12615:118;12800:2;12789:9;12785:18;12772:32;12831:18;12823:6;12820:30;12817:117;;;12853:79;;:::i;:::-;12817:117;12958:62;13012:7;13003:6;12992:9;12988:22;12958:62;:::i;:::-;12948:72;;12743:287;12094:943;;;;;;;:::o;13043:474::-;13111:6;13119;13168:2;13156:9;13147:7;13143:23;13139:32;13136:119;;;13174:79;;:::i;:::-;13136:119;13294:1;13319:53;13364:7;13355:6;13344:9;13340:22;13319:53;:::i;:::-;13309:63;;13265:117;13421:2;13447:53;13492:7;13483:6;13472:9;13468:22;13447:53;:::i;:::-;13437:63;;13392:118;13043:474;;;;;:::o;13523:180::-;13571:77;13568:1;13561:88;13668:4;13665:1;13658:15;13692:4;13689:1;13682:15;13709:320;13753:6;13790:1;13784:4;13780:12;13770:22;;13837:1;13831:4;13827:12;13858:18;13848:81;;13914:4;13906:6;13902:17;13892:27;;13848:81;13976:2;13968:6;13965:14;13945:18;13942:38;13939:84;;;13995:18;;:::i;:::-;13939:84;13760:269;13709:320;;;:::o;14035:231::-;14175:34;14171:1;14163:6;14159:14;14152:58;14244:14;14239:2;14231:6;14227:15;14220:39;14035:231;:::o;14272:366::-;14414:3;14435:67;14499:2;14494:3;14435:67;:::i;:::-;14428:74;;14511:93;14600:3;14511:93;:::i;:::-;14629:2;14624:3;14620:12;14613:19;;14272:366;;;:::o;14644:419::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:220::-;15209:34;15205:1;15197:6;15193:14;15186:58;15278:3;15273:2;15265:6;15261:15;15254:28;15069:220;:::o;15295:366::-;15437:3;15458:67;15522:2;15517:3;15458:67;:::i;:::-;15451:74;;15534:93;15623:3;15534:93;:::i;:::-;15652:2;15647:3;15643:12;15636:19;;15295:366;;;:::o;15667:419::-;15833:4;15871:2;15860:9;15856:18;15848:26;;15920:9;15914:4;15910:20;15906:1;15895:9;15891:17;15884:47;15948:131;16074:4;15948:131;:::i;:::-;15940:139;;15667:419;;;:::o;16092:243::-;16232:34;16228:1;16220:6;16216:14;16209:58;16301:26;16296:2;16288:6;16284:15;16277:51;16092:243;:::o;16341:366::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:419::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16994:131;17120:4;16994:131;:::i;:::-;16986:139;;16713:419;;;:::o;17138:173::-;17278:25;17274:1;17266:6;17262:14;17255:49;17138:173;:::o;17317:366::-;17459:3;17480:67;17544:2;17539:3;17480:67;:::i;:::-;17473:74;;17556:93;17645:3;17556:93;:::i;:::-;17674:2;17669:3;17665:12;17658:19;;17317:366;;;:::o;17689:419::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17689:419;;;:::o;18114:182::-;18254:34;18250:1;18242:6;18238:14;18231:58;18114:182;:::o;18302:366::-;18444:3;18465:67;18529:2;18524:3;18465:67;:::i;:::-;18458:74;;18541:93;18630:3;18541:93;:::i;:::-;18659:2;18654:3;18650:12;18643:19;;18302:366;;;:::o;18674:419::-;18840:4;18878:2;18867:9;18863:18;18855:26;;18927:9;18921:4;18917:20;18913:1;18902:9;18898:17;18891:47;18955:131;19081:4;18955:131;:::i;:::-;18947:139;;18674:419;;;:::o;19099:225::-;19239:34;19235:1;19227:6;19223:14;19216:58;19308:8;19303:2;19295:6;19291:15;19284:33;19099:225;:::o;19330:366::-;19472:3;19493:67;19557:2;19552:3;19493:67;:::i;:::-;19486:74;;19569:93;19658:3;19569:93;:::i;:::-;19687:2;19682:3;19678:12;19671:19;;19330:366;;;:::o;19702:419::-;19868:4;19906:2;19895:9;19891:18;19883:26;;19955:9;19949:4;19945:20;19941:1;19930:9;19926:17;19919:47;19983:131;20109:4;19983:131;:::i;:::-;19975:139;;19702:419;;;:::o;20127:180::-;20175:77;20172:1;20165:88;20272:4;20269:1;20262:15;20296:4;20293:1;20286:15;20313:305;20353:3;20372:20;20390:1;20372:20;:::i;:::-;20367:25;;20406:20;20424:1;20406:20;:::i;:::-;20401:25;;20560:1;20492:66;20488:74;20485:1;20482:81;20479:107;;;20566:18;;:::i;:::-;20479:107;20610:1;20607;20603:9;20596:16;;20313:305;;;;:::o;20624:225::-;20764:34;20760:1;20752:6;20748:14;20741:58;20833:8;20828:2;20820:6;20816:15;20809:33;20624:225;:::o;20855:366::-;20997:3;21018:67;21082:2;21077:3;21018:67;:::i;:::-;21011:74;;21094:93;21183:3;21094:93;:::i;:::-;21212:2;21207:3;21203:12;21196:19;;20855:366;;;:::o;21227:419::-;21393:4;21431:2;21420:9;21416:18;21408:26;;21480:9;21474:4;21470:20;21466:1;21455:9;21451:17;21444:47;21508:131;21634:4;21508:131;:::i;:::-;21500:139;;21227:419;;;:::o;21652:177::-;21792:29;21788:1;21780:6;21776:14;21769:53;21652:177;:::o;21835:366::-;21977:3;21998:67;22062:2;22057:3;21998:67;:::i;:::-;21991:74;;22074:93;22163:3;22074:93;:::i;:::-;22192:2;22187:3;22183:12;22176:19;;21835:366;;;:::o;22207:419::-;22373:4;22411:2;22400:9;22396:18;22388:26;;22460:9;22454:4;22450:20;22446:1;22435:9;22431:17;22424:47;22488:131;22614:4;22488:131;:::i;:::-;22480:139;;22207:419;;;:::o;22632:181::-;22772:33;22768:1;22760:6;22756:14;22749:57;22632:181;:::o;22819:366::-;22961:3;22982:67;23046:2;23041:3;22982:67;:::i;:::-;22975:74;;23058:93;23147:3;23058:93;:::i;:::-;23176:2;23171:3;23167:12;23160:19;;22819:366;;;:::o;23191:419::-;23357:4;23395:2;23384:9;23380:18;23372:26;;23444:9;23438:4;23434:20;23430:1;23419:9;23415:17;23408:47;23472:131;23598:4;23472:131;:::i;:::-;23464:139;;23191:419;;;:::o;23616:233::-;23655:3;23678:24;23696:5;23678:24;:::i;:::-;23669:33;;23724:66;23717:5;23714:77;23711:103;;;23794:18;;:::i;:::-;23711:103;23841:1;23834:5;23830:13;23823:20;;23616:233;;;:::o;23855:236::-;23995:34;23991:1;23983:6;23979:14;23972:58;24064:19;24059:2;24051:6;24047:15;24040:44;23855:236;:::o;24097:366::-;24239:3;24260:67;24324:2;24319:3;24260:67;:::i;:::-;24253:74;;24336:93;24425:3;24336:93;:::i;:::-;24454:2;24449:3;24445:12;24438:19;;24097:366;;;:::o;24469:419::-;24635:4;24673:2;24662:9;24658:18;24650:26;;24722:9;24716:4;24712:20;24708:1;24697:9;24693:17;24686:47;24750:131;24876:4;24750:131;:::i;:::-;24742:139;;24469:419;;;:::o;24894:230::-;25034:34;25030:1;25022:6;25018:14;25011:58;25103:13;25098:2;25090:6;25086:15;25079:38;24894:230;:::o;25130:366::-;25272:3;25293:67;25357:2;25352:3;25293:67;:::i;:::-;25286:74;;25369:93;25458:3;25369:93;:::i;:::-;25487:2;25482:3;25478:12;25471:19;;25130:366;;;:::o;25502:419::-;25668:4;25706:2;25695:9;25691:18;25683:26;;25755:9;25749:4;25745:20;25741:1;25730:9;25726:17;25719:47;25783:131;25909:4;25783:131;:::i;:::-;25775:139;;25502:419;;;:::o;25927:231::-;26067:34;26063:1;26055:6;26051:14;26044:58;26136:14;26131:2;26123:6;26119:15;26112:39;25927:231;:::o;26164:366::-;26306:3;26327:67;26391:2;26386:3;26327:67;:::i;:::-;26320:74;;26403:93;26492:3;26403:93;:::i;:::-;26521:2;26516:3;26512:12;26505:19;;26164:366;;;:::o;26536:419::-;26702:4;26740:2;26729:9;26725:18;26717:26;;26789:9;26783:4;26779:20;26775:1;26764:9;26760:17;26753:47;26817:131;26943:4;26817:131;:::i;:::-;26809:139;;26536:419;;;:::o;26961:180::-;27009:77;27006:1;26999:88;27106:4;27103:1;27096:15;27130:4;27127:1;27120:15;27147:228;27287:34;27283:1;27275:6;27271:14;27264:58;27356:11;27351:2;27343:6;27339:15;27332:36;27147:228;:::o;27381:366::-;27523:3;27544:67;27608:2;27603:3;27544:67;:::i;:::-;27537:74;;27620:93;27709:3;27620:93;:::i;:::-;27738:2;27733:3;27729:12;27722:19;;27381:366;;;:::o;27753:419::-;27919:4;27957:2;27946:9;27942:18;27934:26;;28006:9;28000:4;27996:20;27992:1;27981:9;27977:17;27970:47;28034:131;28160:4;28034:131;:::i;:::-;28026:139;;27753:419;;;:::o;28178:229::-;28318:34;28314:1;28306:6;28302:14;28295:58;28387:12;28382:2;28374:6;28370:15;28363:37;28178:229;:::o;28413:366::-;28555:3;28576:67;28640:2;28635:3;28576:67;:::i;:::-;28569:74;;28652:93;28741:3;28652:93;:::i;:::-;28770:2;28765:3;28761:12;28754:19;;28413:366;;;:::o;28785:419::-;28951:4;28989:2;28978:9;28974:18;28966:26;;29038:9;29032:4;29028:20;29024:1;29013:9;29009:17;29002:47;29066:131;29192:4;29066:131;:::i;:::-;29058:139;;28785:419;;;:::o;29210:169::-;29350:21;29346:1;29338:6;29334:14;29327:45;29210:169;:::o;29385:366::-;29527:3;29548:67;29612:2;29607:3;29548:67;:::i;:::-;29541:74;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29385:366;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:191::-;30222:4;30242:20;30260:1;30242:20;:::i;:::-;30237:25;;30276:20;30294:1;30276:20;:::i;:::-;30271:25;;30315:1;30312;30309:8;30306:34;;;30320:18;;:::i;:::-;30306:34;30365:1;30362;30358:9;30350:17;;30182:191;;;;:::o;30379:348::-;30419:7;30442:20;30460:1;30442:20;:::i;:::-;30437:25;;30476:20;30494:1;30476:20;:::i;:::-;30471:25;;30664:1;30596:66;30592:74;30589:1;30586:81;30581:1;30574:9;30567:17;30563:105;30560:131;;;30671:18;;:::i;:::-;30560:131;30719:1;30716;30712:9;30701:20;;30379:348;;;;:::o;30733:180::-;30781:77;30778:1;30771:88;30878:4;30875:1;30868:15;30902:4;30899:1;30892:15;30919:185;30959:1;30976:20;30994:1;30976:20;:::i;:::-;30971:25;;31010:20;31028:1;31010:20;:::i;:::-;31005:25;;31049:1;31039:35;;31054:18;;:::i;:::-;31039:35;31096:1;31093;31089:9;31084:14;;30919:185;;;;:::o;31110:93::-;31146:7;31186:10;31179:5;31175:22;31164:33;;31110:93;;;:::o;31209:175::-;31247:3;31270:23;31287:5;31270:23;:::i;:::-;31261:32;;31315:10;31308:5;31305:21;31302:47;;;31329:18;;:::i;:::-;31302:47;31376:1;31369:5;31365:13;31358:20;;31209:175;;;:::o;31390:177::-;31530:29;31526:1;31518:6;31514:14;31507:53;31390:177;:::o;31573:366::-;31715:3;31736:67;31800:2;31795:3;31736:67;:::i;:::-;31729:74;;31812:93;31901:3;31812:93;:::i;:::-;31930:2;31925:3;31921:12;31914:19;;31573:366;;;:::o;31945:419::-;32111:4;32149:2;32138:9;32134:18;32126:26;;32198:9;32192:4;32188:20;32184:1;32173:9;32169:17;32162:47;32226:131;32352:4;32226:131;:::i;:::-;32218:139;;31945:419;;;:::o;32370:236::-;32510:34;32506:1;32498:6;32494:14;32487:58;32579:19;32574:2;32566:6;32562:15;32555:44;32370:236;:::o;32612:366::-;32754:3;32775:67;32839:2;32834:3;32775:67;:::i;:::-;32768:74;;32851:93;32940:3;32851:93;:::i;:::-;32969:2;32964:3;32960:12;32953:19;;32612:366;;;:::o;32984:419::-;33150:4;33188:2;33177:9;33173:18;33165:26;;33237:9;33231:4;33227:20;33223:1;33212:9;33208:17;33201:47;33265:131;33391:4;33265:131;:::i;:::-;33257:139;;32984:419;;;:::o;33409:227::-;33549:34;33545:1;33537:6;33533:14;33526:58;33618:10;33613:2;33605:6;33601:15;33594:35;33409:227;:::o;33642:366::-;33784:3;33805:67;33869:2;33864:3;33805:67;:::i;:::-;33798:74;;33881:93;33970:3;33881:93;:::i;:::-;33999:2;33994:3;33990:12;33983:19;;33642:366;;;:::o;34014:419::-;34180:4;34218:2;34207:9;34203:18;34195:26;;34267:9;34261:4;34257:20;34253:1;34242:9;34238:17;34231:47;34295:131;34421:4;34295:131;:::i;:::-;34287:139;;34014:419;;;:::o;34439:176::-;34579:28;34575:1;34567:6;34563:14;34556:52;34439:176;:::o;34621:366::-;34763:3;34784:67;34848:2;34843:3;34784:67;:::i;:::-;34777:74;;34860:93;34949:3;34860:93;:::i;:::-;34978:2;34973:3;34969:12;34962:19;;34621:366;;;:::o;34993:419::-;35159:4;35197:2;35186:9;35182:18;35174:26;;35246:9;35240:4;35236:20;35232:1;35221:9;35217:17;35210:47;35274:131;35400:4;35274:131;:::i;:::-;35266:139;;34993:419;;;:::o;35418:173::-;35558:25;35554:1;35546:6;35542:14;35535:49;35418:173;:::o;35597:366::-;35739:3;35760:67;35824:2;35819:3;35760:67;:::i;:::-;35753:74;;35836:93;35925:3;35836:93;:::i;:::-;35954:2;35949:3;35945:12;35938:19;;35597:366;;;:::o;35969:419::-;36135:4;36173:2;36162:9;36158:18;36150:26;;36222:9;36216:4;36212:20;36208:1;36197:9;36193:17;36186:47;36250:131;36376:4;36250:131;:::i;:::-;36242:139;;35969:419;;;:::o;36394:332::-;36515:4;36553:2;36542:9;36538:18;36530:26;;36566:71;36634:1;36623:9;36619:17;36610:6;36566:71;:::i;:::-;36647:72;36715:2;36704:9;36700:18;36691:6;36647:72;:::i;:::-;36394:332;;;;;:::o;36732:234::-;36872:34;36868:1;36860:6;36856:14;36849:58;36941:17;36936:2;36928:6;36924:15;36917:42;36732:234;:::o;36972:366::-;37114:3;37135:67;37199:2;37194:3;37135:67;:::i;:::-;37128:74;;37211:93;37300:3;37211:93;:::i;:::-;37329:2;37324:3;37320:12;37313:19;;36972:366;;;:::o;37344:419::-;37510:4;37548:2;37537:9;37533:18;37525:26;;37597:9;37591:4;37587:20;37583:1;37572:9;37568:17;37561:47;37625:131;37751:4;37625:131;:::i;:::-;37617:139;;37344:419;;;:::o;37769:148::-;37871:11;37908:3;37893:18;;37769:148;;;;:::o;37923:377::-;38029:3;38057:39;38090:5;38057:39;:::i;:::-;38112:89;38194:6;38189:3;38112:89;:::i;:::-;38105:96;;38210:52;38255:6;38250:3;38243:4;38236:5;38232:16;38210:52;:::i;:::-;38287:6;38282:3;38278:16;38271:23;;38033:267;37923:377;;;;:::o;38306:435::-;38486:3;38508:95;38599:3;38590:6;38508:95;:::i;:::-;38501:102;;38620:95;38711:3;38702:6;38620:95;:::i;:::-;38613:102;;38732:3;38725:10;;38306:435;;;;;:::o;38747:225::-;38887:34;38883:1;38875:6;38871:14;38864:58;38956:8;38951:2;38943:6;38939:15;38932:33;38747:225;:::o;38978:366::-;39120:3;39141:67;39205:2;39200:3;39141:67;:::i;:::-;39134:74;;39217:93;39306:3;39217:93;:::i;:::-;39335:2;39330:3;39326:12;39319:19;;38978:366;;;:::o;39350:419::-;39516:4;39554:2;39543:9;39539:18;39531:26;;39603:9;39597:4;39593:20;39589:1;39578:9;39574:17;39567:47;39631:131;39757:4;39631:131;:::i;:::-;39623:139;;39350:419;;;:::o;39775:173::-;39915:25;39911:1;39903:6;39899:14;39892:49;39775:173;:::o;39954:366::-;40096:3;40117:67;40181:2;40176:3;40117:67;:::i;:::-;40110:74;;40193:93;40282:3;40193:93;:::i;:::-;40311:2;40306:3;40302:12;40295:19;;39954:366;;;:::o;40326:419::-;40492:4;40530:2;40519:9;40515:18;40507:26;;40579:9;40573:4;40569:20;40565:1;40554:9;40550:17;40543:47;40607:131;40733:4;40607:131;:::i;:::-;40599:139;;40326:419;;;:::o;40751:223::-;40891:34;40887:1;40879:6;40875:14;40868:58;40960:6;40955:2;40947:6;40943:15;40936:31;40751:223;:::o;40980:366::-;41122:3;41143:67;41207:2;41202:3;41143:67;:::i;:::-;41136:74;;41219:93;41308:3;41219:93;:::i;:::-;41337:2;41332:3;41328:12;41321:19;;40980:366;;;:::o;41352:419::-;41518:4;41556:2;41545:9;41541:18;41533:26;;41605:9;41599:4;41595:20;41591:1;41580:9;41576:17;41569:47;41633:131;41759:4;41633:131;:::i;:::-;41625:139;;41352:419;;;:::o;41777:234::-;41917:34;41913:1;41905:6;41901:14;41894:58;41986:17;41981:2;41973:6;41969:15;41962:42;41777:234;:::o;42017:366::-;42159:3;42180:67;42244:2;42239:3;42180:67;:::i;:::-;42173:74;;42256:93;42345:3;42256:93;:::i;:::-;42374:2;42369:3;42365:12;42358:19;;42017:366;;;:::o;42389:419::-;42555:4;42593:2;42582:9;42578:18;42570:26;;42642:9;42636:4;42632:20;42628:1;42617:9;42613:17;42606:47;42670:131;42796:4;42670:131;:::i;:::-;42662:139;;42389:419;;;:::o;42814:178::-;42954:30;42950:1;42942:6;42938:14;42931:54;42814:178;:::o;42998:366::-;43140:3;43161:67;43225:2;43220:3;43161:67;:::i;:::-;43154:74;;43237:93;43326:3;43237:93;:::i;:::-;43355:2;43350:3;43346:12;43339:19;;42998:366;;;:::o;43370:419::-;43536:4;43574:2;43563:9;43559:18;43551:26;;43623:9;43617:4;43613:20;43609:1;43598:9;43594:17;43587:47;43651:131;43777:4;43651:131;:::i;:::-;43643:139;;43370:419;;;:::o;43795:231::-;43935:34;43931:1;43923:6;43919:14;43912:58;44004:14;43999:2;43991:6;43987:15;43980:39;43795:231;:::o;44032:366::-;44174:3;44195:67;44259:2;44254:3;44195:67;:::i;:::-;44188:74;;44271:93;44360:3;44271:93;:::i;:::-;44389:2;44384:3;44380:12;44373:19;;44032:366;;;:::o;44404:419::-;44570:4;44608:2;44597:9;44593:18;44585:26;;44657:9;44651:4;44647:20;44643:1;44632:9;44628:17;44621:47;44685:131;44811:4;44685:131;:::i;:::-;44677:139;;44404:419;;;:::o;44829:228::-;44969:34;44965:1;44957:6;44953:14;44946:58;45038:11;45033:2;45025:6;45021:15;45014:36;44829:228;:::o;45063:366::-;45205:3;45226:67;45290:2;45285:3;45226:67;:::i;:::-;45219:74;;45302:93;45391:3;45302:93;:::i;:::-;45420:2;45415:3;45411:12;45404:19;;45063:366;;;:::o;45435:419::-;45601:4;45639:2;45628:9;45624:18;45616:26;;45688:9;45682:4;45678:20;45674:1;45663:9;45659:17;45652:47;45716:131;45842:4;45716:131;:::i;:::-;45708:139;;45435:419;;;:::o;45860:223::-;46000:34;45996:1;45988:6;45984:14;45977:58;46069:6;46064:2;46056:6;46052:15;46045:31;45860:223;:::o;46089:366::-;46231:3;46252:67;46316:2;46311:3;46252:67;:::i;:::-;46245:74;;46328:93;46417:3;46328:93;:::i;:::-;46446:2;46441:3;46437:12;46430:19;;46089:366;;;:::o;46461:419::-;46627:4;46665:2;46654:9;46650:18;46642:26;;46714:9;46708:4;46704:20;46700:1;46689:9;46685:17;46678:47;46742:131;46868:4;46742:131;:::i;:::-;46734:139;;46461:419;;;:::o;46886:147::-;46987:11;47024:3;47009:18;;46886:147;;;;:::o;47039:114::-;;:::o;47159:398::-;47318:3;47339:83;47420:1;47415:3;47339:83;:::i;:::-;47332:90;;47431:93;47520:3;47431:93;:::i;:::-;47549:1;47544:3;47540:11;47533:18;;47159:398;;;:::o;47563:379::-;47747:3;47769:147;47912:3;47769:147;:::i;:::-;47762:154;;47933:3;47926:10;;47563:379;;;:::o;47948:174::-;48088:26;48084:1;48076:6;48072:14;48065:50;47948:174;:::o;48128:366::-;48270:3;48291:67;48355:2;48350:3;48291:67;:::i;:::-;48284:74;;48367:93;48456:3;48367:93;:::i;:::-;48485:2;48480:3;48476:12;48469:19;;48128:366;;;:::o;48500:419::-;48666:4;48704:2;48693:9;48689:18;48681:26;;48753:9;48747:4;48743:20;48739:1;48728:9;48724:17;48717:47;48781:131;48907:4;48781:131;:::i;:::-;48773:139;;48500:419;;;:::o;48925:175::-;49065:27;49061:1;49053:6;49049:14;49042:51;48925:175;:::o;49106:366::-;49248:3;49269:67;49333:2;49328:3;49269:67;:::i;:::-;49262:74;;49345:93;49434:3;49345:93;:::i;:::-;49463:2;49458:3;49454:12;49447:19;;49106:366;;;:::o;49478:419::-;49644:4;49682:2;49671:9;49667:18;49659:26;;49731:9;49725:4;49721:20;49717:1;49706:9;49702:17;49695:47;49759:131;49885:4;49759:131;:::i;:::-;49751:139;;49478:419;;;:::o;49903:237::-;50043:34;50039:1;50031:6;50027:14;50020:58;50112:20;50107:2;50099:6;50095:15;50088:45;49903:237;:::o;50146:366::-;50288:3;50309:67;50373:2;50368:3;50309:67;:::i;:::-;50302:74;;50385:93;50474:3;50385:93;:::i;:::-;50503:2;50498:3;50494:12;50487:19;;50146:366;;;:::o;50518:419::-;50684:4;50722:2;50711:9;50707:18;50699:26;;50771:9;50765:4;50761:20;50757:1;50746:9;50742:17;50735:47;50799:131;50925:4;50799:131;:::i;:::-;50791:139;;50518:419;;;:::o;50943:176::-;50975:1;50992:20;51010:1;50992:20;:::i;:::-;50987:25;;51026:20;51044:1;51026:20;:::i;:::-;51021:25;;51065:1;51055:35;;51070:18;;:::i;:::-;51055:35;51111:1;51108;51104:9;51099:14;;50943:176;;;;:::o;51125:98::-;51176:6;51210:5;51204:12;51194:22;;51125:98;;;:::o;51229:168::-;51312:11;51346:6;51341:3;51334:19;51386:4;51381:3;51377:14;51362:29;;51229:168;;;;:::o;51403:360::-;51489:3;51517:38;51549:5;51517:38;:::i;:::-;51571:70;51634:6;51629:3;51571:70;:::i;:::-;51564:77;;51650:52;51695:6;51690:3;51683:4;51676:5;51672:16;51650:52;:::i;:::-;51727:29;51749:6;51727:29;:::i;:::-;51722:3;51718:39;51711:46;;51493:270;51403:360;;;;:::o;51769:640::-;51964:4;52002:3;51991:9;51987:19;51979:27;;52016:71;52084:1;52073:9;52069:17;52060:6;52016:71;:::i;:::-;52097:72;52165:2;52154:9;52150:18;52141:6;52097:72;:::i;:::-;52179;52247:2;52236:9;52232:18;52223:6;52179:72;:::i;:::-;52298:9;52292:4;52288:20;52283:2;52272:9;52268:18;52261:48;52326:76;52397:4;52388:6;52326:76;:::i;:::-;52318:84;;51769:640;;;;;;;:::o;52415:141::-;52471:5;52502:6;52496:13;52487:22;;52518:32;52544:5;52518:32;:::i;:::-;52415:141;;;;:::o;52562:349::-;52631:6;52680:2;52668:9;52659:7;52655:23;52651:32;52648:119;;;52686:79;;:::i;:::-;52648:119;52806:1;52831:63;52886:7;52877:6;52866:9;52862:22;52831:63;:::i;:::-;52821:73;;52777:127;52562:349;;;;:::o;52917:182::-;53057:34;53053:1;53045:6;53041:14;53034:58;52917:182;:::o;53105:366::-;53247:3;53268:67;53332:2;53327:3;53268:67;:::i;:::-;53261:74;;53344:93;53433:3;53344:93;:::i;:::-;53462:2;53457:3;53453:12;53446:19;;53105:366;;;:::o;53477:419::-;53643:4;53681:2;53670:9;53666:18;53658:26;;53730:9;53724:4;53720:20;53716:1;53705:9;53701:17;53694:47;53758:131;53884:4;53758:131;:::i;:::-;53750:139;;53477:419;;;:::o;53902:178::-;54042:30;54038:1;54030:6;54026:14;54019:54;53902:178;:::o;54086:366::-;54228:3;54249:67;54313:2;54308:3;54249:67;:::i;:::-;54242:74;;54325:93;54414:3;54325:93;:::i;:::-;54443:2;54438:3;54434:12;54427:19;;54086:366;;;:::o;54458:419::-;54624:4;54662:2;54651:9;54647:18;54639:26;;54711:9;54705:4;54701:20;54697:1;54686:9;54682:17;54675:47;54739:131;54865:4;54739:131;:::i;:::-;54731:139;;54458:419;;;:::o;54883:180::-;54931:77;54928:1;54921:88;55028:4;55025:1;55018:15;55052:4;55049:1;55042:15
Swarm Source
ipfs://9fba4d9e2084523d3c70e41e0aa0e272df0c9bda31c22a041e3e3c641c88f808
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.