Polygon Sponsored slots available. Book your slot here!
ERC-721
Overview
Max Total Supply
6 CHRNC
Holders
4
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CHRNCLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CthulhuRisin
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-29 */ /** *Submitted for verification at Etherscan.io on 2021-11-28 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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; } // File: @openzeppelin/contracts/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); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/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); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/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); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.7.0 <0.9.0; contract CthulhuRisin is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; uint256 public requiredAmount = 1; uint256 public maxCharLimit = 200; string public baseExtension = ".json"; uint256 public cost = 0.010 ether; uint256 public maxSupply = 7500; uint256 public maxMintAmount = 350; bool public paused = false; bool public revealed = true; string public notRevealedUri; address public CrAddress; struct Mantra { string message; } mapping (uint256 => Mantra) public pages; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri, address _initCrAddress ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); setCrAddress(_initCrAddress); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function claim() public { require(!paused, "Contract is paused"); IERC721 token = IERC721(CrAddress); uint256 ownedAmount = token.balanceOf(msg.sender); require(ownedAmount >= requiredAmount, "You don't own enough Cthulhu Rising NFTs"); uint256 supply = totalSupply(); require(supply + 1 <= 7500, "Max supply reached"); Mantra memory newPage = Mantra(""); pages[supply + 1] = newPage; _safeMint(msg.sender, supply + 1); } function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token"); Mantra memory currentPage = pages[_tokenId]; if(bytes(currentPage.message).length > 0) { return _baseURI(); } else { return notRevealedUri; } } function setMessage(uint256 _tokenId, string memory _newMessage) public { require(msg.sender == ownerOf(_tokenId), "You are not the owner of this NFT."); bytes memory strBytes = bytes(_newMessage); require(strBytes.length <= maxCharLimit, "Mantra is too long."); Mantra storage currentPage = pages[_tokenId]; currentPage.message = _newMessage; } function readMessage(uint256 _tokenId) public view returns (string memory message){ Mantra memory currentPage = pages[_tokenId]; return currentPage.message; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setCrAddress(address _newAddress) public onlyOwner { CrAddress = _newAddress; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setRequiredAmount(uint256 _newValue) public onlyOwner { requiredAmount = _newValue; } function setMaxCharLimit(uint256 _newValue) public onlyOwner { maxCharLimit = _newValue; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"address","name":"_initCrAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CrAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCharLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pages","outputs":[{"internalType":"string","name":"message","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"readMessage","outputs":[{"internalType":"string","name":"message","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setCrAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxCharLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_newMessage","type":"string"}],"name":"setMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setRequiredAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526001600c5560c8600d556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90805190602001906200005b92919062000491565b50662386f26fc10000600f55611d4c60105561015e6011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff021916908315150217905550348015620000b657600080fd5b5060405162005570380380620055708339818101604052810190620000dc9190620005d6565b84848160009080519060200190620000f692919062000491565b5080600190805190602001906200010f92919062000491565b50505062000132620001266200017060201b60201c565b6200017860201b60201c565b62000143836200023e60201b60201c565b6200015482620002e960201b60201c565b62000165816200039460201b60201c565b50505050506200092f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024e6200017060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002746200046760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c49062000701565b60405180910390fd5b80600b9080519060200190620002e592919062000491565b5050565b620002f96200017060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031f6200046760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036f9062000701565b60405180910390fd5b80601390805190602001906200039092919062000491565b5050565b620003a46200017060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003ca6200046760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000423576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041a9062000701565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200049f90620007fd565b90600052602060002090601f016020900481019282620004c357600085556200050f565b82601f10620004de57805160ff19168380011785556200050f565b828001600101855582156200050f579182015b828111156200050e578251825591602001919060010190620004f1565b5b5090506200051e919062000522565b5090565b5b808211156200053d57600081600090555060010162000523565b5090565b60006200055862000552846200074c565b62000723565b905082815260208101848484011115620005775762000576620008cc565b5b62000584848285620007c7565b509392505050565b6000815190506200059d8162000915565b92915050565b600082601f830112620005bb57620005ba620008c7565b5b8151620005cd84826020860162000541565b91505092915050565b600080600080600060a08688031215620005f557620005f4620008d6565b5b600086015167ffffffffffffffff811115620006165762000615620008d1565b5b6200062488828901620005a3565b955050602086015167ffffffffffffffff811115620006485762000647620008d1565b5b6200065688828901620005a3565b945050604086015167ffffffffffffffff8111156200067a5762000679620008d1565b5b6200068888828901620005a3565b935050606086015167ffffffffffffffff811115620006ac57620006ab620008d1565b5b620006ba88828901620005a3565b9250506080620006cd888289016200058c565b9150509295509295909350565b6000620006e960208362000782565b9150620006f682620008ec565b602082019050919050565b600060208201905081810360008301526200071c81620006da565b9050919050565b60006200072f62000742565b90506200073d828262000833565b919050565b6000604051905090565b600067ffffffffffffffff8211156200076a576200076962000898565b5b6200077582620008db565b9050602081019050919050565b600082825260208201905092915050565b6000620007a082620007a7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620007e7578082015181840152602081019050620007ca565b83811115620007f7576000848401525b50505050565b600060028204905060018216806200081657607f821691505b602082108114156200082d576200082c62000869565b5b50919050565b6200083e82620008db565b810181811067ffffffffffffffff8211171562000860576200085f62000898565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620009208162000793565b81146200092c57600080fd5b50565b614c31806200093f6000396000f3fe6080604052600436106102725760003560e01c8063518302271161014f578063a0712d68116100c1578063c87b56dd1161007a578063c87b56dd14610922578063d5abeb011461095f578063e80beaa11461098a578063e985e9c5146109b3578063f2c4ce1e146109f0578063f2fde38b14610a1957610272565b8063a0712d6814610835578063a22cb46514610851578063a475b5dd1461087a578063a7d2705614610891578063b88d4fde146108ce578063c6682862146108f757610272565b8063648345c811610113578063648345c81461073957806370a0823114610762578063715018a61461079f5780637f00c7a6146107b65780638da5cb5b146107df57806395d89b411461080a57610272565b8063518302271461064057806355f804b31461066b5780635c3e9cc2146106945780635c975abb146106d15780636352211e146106fc57610272565b80632442c59b116101e8578063438b6300116101ac578063438b63001461053257806344a0d68a1461056f578063464d40e11461059857806348b9ef40146105c15780634e71d92d146105ec5780634f6ccce71461060357610272565b80632442c59b1461046e5780632f745c591461049757806338e7c260146104d45780633ccfd60b146104ff57806342842e0e1461050957610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede614610399578063150320bc146103c457806318160ddd146103ef578063239c70ae1461041a57806323b872dd1461044557610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613799565b610a42565b6040516102ab9190613dfc565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d6919061376c565b610abc565b005b3480156102e957600080fd5b506102f2610b55565b6040516102ff9190613e17565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a919061383c565b610be7565b60405161033c9190613d73565b60405180910390f35b34801561035157600080fd5b5061035a610c6c565b6040516103679190613e17565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061372c565b610cfa565b005b3480156103a557600080fd5b506103ae610e12565b6040516103bb9190614119565b60405180910390f35b3480156103d057600080fd5b506103d9610e18565b6040516103e69190613d73565b60405180910390f35b3480156103fb57600080fd5b50610404610e3e565b6040516104119190614119565b60405180910390f35b34801561042657600080fd5b5061042f610e4b565b60405161043c9190614119565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613616565b610e51565b005b34801561047a57600080fd5b50610495600480360381019061049091906135a9565b610eb1565b005b3480156104a357600080fd5b506104be60048036038101906104b9919061372c565b610f71565b6040516104cb9190614119565b60405180910390f35b3480156104e057600080fd5b506104e9611016565b6040516104f69190614119565b60405180910390f35b61050761101c565b005b34801561051557600080fd5b50610530600480360381019061052b9190613616565b611118565b005b34801561053e57600080fd5b50610559600480360381019061055491906135a9565b611138565b6040516105669190613dda565b60405180910390f35b34801561057b57600080fd5b506105966004803603810190610591919061383c565b6111e6565b005b3480156105a457600080fd5b506105bf60048036038101906105ba919061383c565b61126c565b005b3480156105cd57600080fd5b506105d66112f2565b6040516105e39190614119565b60405180910390f35b3480156105f857600080fd5b506106016112f8565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061383c565b61151c565b6040516106379190614119565b60405180910390f35b34801561064c57600080fd5b5061065561158d565b6040516106629190613dfc565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d91906137f3565b6115a0565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061383c565b611636565b6040516106c89190613e17565b60405180910390f35b3480156106dd57600080fd5b506106e66116dc565b6040516106f39190613dfc565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e919061383c565b6116ef565b6040516107309190613d73565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190613896565b6117a1565b005b34801561076e57600080fd5b50610789600480360381019061078491906135a9565b611898565b6040516107969190614119565b60405180910390f35b3480156107ab57600080fd5b506107b4611950565b005b3480156107c257600080fd5b506107dd60048036038101906107d8919061383c565b6119d8565b005b3480156107eb57600080fd5b506107f4611a5e565b6040516108019190613d73565b60405180910390f35b34801561081657600080fd5b5061081f611a88565b60405161082c9190613e17565b60405180910390f35b61084f600480360381019061084a919061383c565b611b1a565b005b34801561085d57600080fd5b50610878600480360381019061087391906136ec565b611c06565b005b34801561088657600080fd5b5061088f611d87565b005b34801561089d57600080fd5b506108b860048036038101906108b3919061383c565b611e20565b6040516108c59190613e17565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190613669565b611ee3565b005b34801561090357600080fd5b5061090c611f45565b6040516109199190613e17565b60405180910390f35b34801561092e57600080fd5b506109496004803603810190610944919061383c565b611fd3565b6040516109569190613e17565b60405180910390f35b34801561096b57600080fd5b50610974612183565b6040516109819190614119565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac919061383c565b612189565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906135d6565b61220f565b6040516109e79190613dfc565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a1291906137f3565b6122a3565b005b348015610a2557600080fd5b50610a406004803603810190610a3b91906135a9565b612339565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab55750610ab482612431565b5b9050919050565b610ac4612513565b73ffffffffffffffffffffffffffffffffffffffff16610ae2611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613fd9565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b64906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b90906143d1565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050905090565b6000610bf28261251b565b610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890613fb9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60138054610c79906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca5906143d1565b8015610cf25780601f10610cc757610100808354040283529160200191610cf2565b820191906000526020600020905b815481529060010190602001808311610cd557829003601f168201915b505050505081565b6000610d05826116ef565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614059565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d95612513565b73ffffffffffffffffffffffffffffffffffffffff161480610dc45750610dc381610dbe612513565b61220f565b5b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90613f39565b60405180910390fd5b610e0d8383612587565b505050565b600f5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b60115481565b610e62610e5c612513565b82612640565b610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890614079565b60405180910390fd5b610eac83838361271e565b505050565b610eb9612513565b73ffffffffffffffffffffffffffffffffffffffff16610ed7611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490613fd9565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610f7c83611898565b8210610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490613e39565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d5481565b611024612513565b73ffffffffffffffffffffffffffffffffffffffff16611042611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613fd9565b60405180910390fd5b60006110a2611a5e565b73ffffffffffffffffffffffffffffffffffffffff16476040516110c590613d5e565b60006040518083038185875af1925050503d8060008114611102576040519150601f19603f3d011682016040523d82523d6000602084013e611107565b606091505b505090508061111557600080fd5b50565b61113383838360405180602001604052806000815250611ee3565b505050565b6060600061114583611898565b905060008167ffffffffffffffff81111561116357611162614539565b5b6040519080825280602002602001820160405280156111915781602001602082028036833780820191505090505b50905060005b828110156111db576111a98582610f71565b8282815181106111bc576111bb61450a565b5b60200260200101818152505080806111d390614434565b915050611197565b508092505050919050565b6111ee612513565b73ffffffffffffffffffffffffffffffffffffffff1661120c611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990613fd9565b60405180910390fd5b80600f8190555050565b611274612513565b73ffffffffffffffffffffffffffffffffffffffff16611292611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90613fd9565b60405180910390fd5b80600d8190555050565b600c5481565b601260009054906101000a900460ff1615611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f906140d9565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016113aa9190613d73565b60206040518083038186803b1580156113c257600080fd5b505afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190613869565b9050600c54811015611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613e79565b60405180910390fd5b600061144b610e3e565b9050611d4c60018261145d9190614237565b111561149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149590614099565b60405180910390fd5b6000604051806020016040528060405180602001604052806000815250815250905080601560006001856114d29190614237565b815260200190815260200160002060008201518160000190805190602001906114fc9291906133a8565b50905050611516336001846115119190614237565b61297a565b50505050565b6000611526610e3e565b8210611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e906140b9565b60405180910390fd5b6008828154811061157b5761157a61450a565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6115a8612513565b73ffffffffffffffffffffffffffffffffffffffff166115c6611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390613fd9565b60405180910390fd5b80600b90805190602001906116329291906133a8565b5050565b6015602052806000526040600020600091509050806000018054611659906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611685906143d1565b80156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b5050505050905081565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613f79565b60405180910390fd5b80915050919050565b6117aa826116ef565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90614039565b60405180910390fd5b6000819050600d5481511115611862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611859906140f9565b60405180910390fd5b6000601560008581526020019081526020016000209050828160000190805190602001906118919291906133a8565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190090613f59565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611958612513565b73ffffffffffffffffffffffffffffffffffffffff16611976611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390613fd9565b60405180910390fd5b6119d66000612998565b565b6119e0612513565b73ffffffffffffffffffffffffffffffffffffffff166119fe611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90613fd9565b60405180910390fd5b8060118190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a97906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac3906143d1565b8015611b105780601f10611ae557610100808354040283529160200191611b10565b820191906000526020600020905b815481529060010190602001808311611af357829003601f168201915b5050505050905090565b6000611b24610e3e565b9050601260009054906101000a900460ff1615611b4057600080fd5b60008211611b4d57600080fd5b601154821115611b5c57600080fd5b6010548282611b6b9190614237565b1115611b7657600080fd5b611b7e611a5e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bcb5781600f54611bbe919061428d565b341015611bca57600080fd5b5b6000600190505b828111611c0157611bee338284611be99190614237565b61297a565b8080611bf990614434565b915050611bd2565b505050565b611c0e612513565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613ef9565b60405180910390fd5b8060056000611c89612513565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d36612513565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d7b9190613dfc565b60405180910390a35050565b611d8f612513565b73ffffffffffffffffffffffffffffffffffffffff16611dad611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90613fd9565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b6060600060156000848152602001908152602001600020604051806020016040529081600082018054611e52906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7e906143d1565b8015611ecb5780601f10611ea057610100808354040283529160200191611ecb565b820191906000526020600020905b815481529060010190602001808311611eae57829003601f168201915b50505050508152505090508060000151915050919050565b611ef4611eee612513565b83612640565b611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614079565b60405180910390fd5b611f3f84848484612a5e565b50505050565b600e8054611f52906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7e906143d1565b8015611fcb5780601f10611fa057610100808354040283529160200191611fcb565b820191906000526020600020905b815481529060010190602001808311611fae57829003601f168201915b505050505081565b6060611fde8261251b565b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614019565b60405180910390fd5b60006015600084815260200190815260200160002060405180602001604052908160008201805461204d906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612079906143d1565b80156120c65780601f1061209b576101008083540402835291602001916120c6565b820191906000526020600020905b8154815290600101906020018083116120a957829003601f168201915b5050505050815250509050600081600001515111156120ef576120e7612aba565b91505061217e565b601380546120fc906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612128906143d1565b80156121755780601f1061214a57610100808354040283529160200191612175565b820191906000526020600020905b81548152906001019060200180831161215857829003601f168201915b50505050509150505b919050565b60105481565b612191612513565b73ffffffffffffffffffffffffffffffffffffffff166121af611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc90613fd9565b60405180910390fd5b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ab612513565b73ffffffffffffffffffffffffffffffffffffffff166122c9611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690613fd9565b60405180910390fd5b80601390805190602001906123359291906133a8565b5050565b612341612513565b73ffffffffffffffffffffffffffffffffffffffff1661235f611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90613e99565b60405180910390fd5b61242e81612998565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124fc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061250c575061250b82612b4c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125fa836116ef565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061264b8261251b565b61268a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268190613f19565b60405180910390fd5b6000612695836116ef565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270457508373ffffffffffffffffffffffffffffffffffffffff166126ec84610be7565b73ffffffffffffffffffffffffffffffffffffffff16145b806127155750612714818561220f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661273e826116ef565b73ffffffffffffffffffffffffffffffffffffffff1614612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b90613ff9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90613ed9565b60405180910390fd5b61280f838383612bb6565b61281a600082612587565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286a91906142e7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128c19190614237565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612994828260405180602001604052806000815250612cca565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a6984848461271e565b612a7584848484612d25565b612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90613e59565b60405180910390fd5b50505050565b6060600b8054612ac9906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612af5906143d1565b8015612b425780601f10612b1757610100808354040283529160200191612b42565b820191906000526020600020905b815481529060010190602001808311612b2557829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bc1838383612ebc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c0457612bff81612ec1565b612c43565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c4257612c418382612f0a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c8657612c8181613077565b612cc5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cc457612cc38282613148565b5b5b505050565b612cd483836131c7565b612ce16000848484612d25565b612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790613e59565b60405180910390fd5b505050565b6000612d468473ffffffffffffffffffffffffffffffffffffffff16613395565b15612eaf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d6f612513565b8786866040518563ffffffff1660e01b8152600401612d919493929190613d8e565b602060405180830381600087803b158015612dab57600080fd5b505af1925050508015612ddc57506040513d601f19601f82011682018060405250810190612dd991906137c6565b60015b612e5f573d8060008114612e0c576040519150601f19603f3d011682016040523d82523d6000602084013e612e11565b606091505b50600081511415612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e90613e59565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eb4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f1784611898565b612f2191906142e7565b9050600060076000848152602001908152602001600020549050818114613006576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061308b91906142e7565b90506000600960008481526020019081526020016000205490506000600883815481106130bb576130ba61450a565b5b9060005260206000200154905080600883815481106130dd576130dc61450a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061312c5761312b6144db565b5b6001900381819060005260206000200160009055905550505050565b600061315383611898565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322e90613f99565b60405180910390fd5b6132408161251b565b15613280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327790613eb9565b60405180910390fd5b61328c60008383612bb6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132dc9190614237565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546133b4906143d1565b90600052602060002090601f0160209004810192826133d6576000855561341d565b82601f106133ef57805160ff191683800117855561341d565b8280016001018555821561341d579182015b8281111561341c578251825591602001919060010190613401565b5b50905061342a919061342e565b5090565b5b8082111561344757600081600090555060010161342f565b5090565b600061345e61345984614159565b614134565b90508281526020810184848401111561347a5761347961456d565b5b61348584828561438f565b509392505050565b60006134a061349b8461418a565b614134565b9050828152602081018484840111156134bc576134bb61456d565b5b6134c784828561438f565b509392505050565b6000813590506134de81614b9f565b92915050565b6000813590506134f381614bb6565b92915050565b60008135905061350881614bcd565b92915050565b60008151905061351d81614bcd565b92915050565b600082601f83011261353857613537614568565b5b813561354884826020860161344b565b91505092915050565b600082601f83011261356657613565614568565b5b813561357684826020860161348d565b91505092915050565b60008135905061358e81614be4565b92915050565b6000815190506135a381614be4565b92915050565b6000602082840312156135bf576135be614577565b5b60006135cd848285016134cf565b91505092915050565b600080604083850312156135ed576135ec614577565b5b60006135fb858286016134cf565b925050602061360c858286016134cf565b9150509250929050565b60008060006060848603121561362f5761362e614577565b5b600061363d868287016134cf565b935050602061364e868287016134cf565b925050604061365f8682870161357f565b9150509250925092565b6000806000806080858703121561368357613682614577565b5b6000613691878288016134cf565b94505060206136a2878288016134cf565b93505060406136b38782880161357f565b925050606085013567ffffffffffffffff8111156136d4576136d3614572565b5b6136e087828801613523565b91505092959194509250565b6000806040838503121561370357613702614577565b5b6000613711858286016134cf565b9250506020613722858286016134e4565b9150509250929050565b6000806040838503121561374357613742614577565b5b6000613751858286016134cf565b92505060206137628582860161357f565b9150509250929050565b60006020828403121561378257613781614577565b5b6000613790848285016134e4565b91505092915050565b6000602082840312156137af576137ae614577565b5b60006137bd848285016134f9565b91505092915050565b6000602082840312156137dc576137db614577565b5b60006137ea8482850161350e565b91505092915050565b60006020828403121561380957613808614577565b5b600082013567ffffffffffffffff81111561382757613826614572565b5b61383384828501613551565b91505092915050565b60006020828403121561385257613851614577565b5b60006138608482850161357f565b91505092915050565b60006020828403121561387f5761387e614577565b5b600061388d84828501613594565b91505092915050565b600080604083850312156138ad576138ac614577565b5b60006138bb8582860161357f565b925050602083013567ffffffffffffffff8111156138dc576138db614572565b5b6138e885828601613551565b9150509250929050565b60006138fe8383613d40565b60208301905092915050565b6139138161431b565b82525050565b6000613924826141cb565b61392e81856141f9565b9350613939836141bb565b8060005b8381101561396a57815161395188826138f2565b975061395c836141ec565b92505060018101905061393d565b5085935050505092915050565b6139808161432d565b82525050565b6000613991826141d6565b61399b818561420a565b93506139ab81856020860161439e565b6139b48161457c565b840191505092915050565b60006139ca826141e1565b6139d48185614226565b93506139e481856020860161439e565b6139ed8161457c565b840191505092915050565b6000613a05602b83614226565b9150613a108261458d565b604082019050919050565b6000613a28603283614226565b9150613a33826145dc565b604082019050919050565b6000613a4b602883614226565b9150613a568261462b565b604082019050919050565b6000613a6e602683614226565b9150613a798261467a565b604082019050919050565b6000613a91601c83614226565b9150613a9c826146c9565b602082019050919050565b6000613ab4602483614226565b9150613abf826146f2565b604082019050919050565b6000613ad7601983614226565b9150613ae282614741565b602082019050919050565b6000613afa602c83614226565b9150613b058261476a565b604082019050919050565b6000613b1d603883614226565b9150613b28826147b9565b604082019050919050565b6000613b40602a83614226565b9150613b4b82614808565b604082019050919050565b6000613b63602983614226565b9150613b6e82614857565b604082019050919050565b6000613b86602083614226565b9150613b91826148a6565b602082019050919050565b6000613ba9602c83614226565b9150613bb4826148cf565b604082019050919050565b6000613bcc602083614226565b9150613bd78261491e565b602082019050919050565b6000613bef602983614226565b9150613bfa82614947565b604082019050919050565b6000613c12602f83614226565b9150613c1d82614996565b604082019050919050565b6000613c35602283614226565b9150613c40826149e5565b604082019050919050565b6000613c58602183614226565b9150613c6382614a34565b604082019050919050565b6000613c7b60008361421b565b9150613c8682614a83565b600082019050919050565b6000613c9e603183614226565b9150613ca982614a86565b604082019050919050565b6000613cc1601283614226565b9150613ccc82614ad5565b602082019050919050565b6000613ce4602c83614226565b9150613cef82614afe565b604082019050919050565b6000613d07601283614226565b9150613d1282614b4d565b602082019050919050565b6000613d2a601383614226565b9150613d3582614b76565b602082019050919050565b613d4981614385565b82525050565b613d5881614385565b82525050565b6000613d6982613c6e565b9150819050919050565b6000602082019050613d88600083018461390a565b92915050565b6000608082019050613da3600083018761390a565b613db0602083018661390a565b613dbd6040830185613d4f565b8181036060830152613dcf8184613986565b905095945050505050565b60006020820190508181036000830152613df48184613919565b905092915050565b6000602082019050613e116000830184613977565b92915050565b60006020820190508181036000830152613e3181846139bf565b905092915050565b60006020820190508181036000830152613e52816139f8565b9050919050565b60006020820190508181036000830152613e7281613a1b565b9050919050565b60006020820190508181036000830152613e9281613a3e565b9050919050565b60006020820190508181036000830152613eb281613a61565b9050919050565b60006020820190508181036000830152613ed281613a84565b9050919050565b60006020820190508181036000830152613ef281613aa7565b9050919050565b60006020820190508181036000830152613f1281613aca565b9050919050565b60006020820190508181036000830152613f3281613aed565b9050919050565b60006020820190508181036000830152613f5281613b10565b9050919050565b60006020820190508181036000830152613f7281613b33565b9050919050565b60006020820190508181036000830152613f9281613b56565b9050919050565b60006020820190508181036000830152613fb281613b79565b9050919050565b60006020820190508181036000830152613fd281613b9c565b9050919050565b60006020820190508181036000830152613ff281613bbf565b9050919050565b6000602082019050818103600083015261401281613be2565b9050919050565b6000602082019050818103600083015261403281613c05565b9050919050565b6000602082019050818103600083015261405281613c28565b9050919050565b6000602082019050818103600083015261407281613c4b565b9050919050565b6000602082019050818103600083015261409281613c91565b9050919050565b600060208201905081810360008301526140b281613cb4565b9050919050565b600060208201905081810360008301526140d281613cd7565b9050919050565b600060208201905081810360008301526140f281613cfa565b9050919050565b6000602082019050818103600083015261411281613d1d565b9050919050565b600060208201905061412e6000830184613d4f565b92915050565b600061413e61414f565b905061414a8282614403565b919050565b6000604051905090565b600067ffffffffffffffff82111561417457614173614539565b5b61417d8261457c565b9050602081019050919050565b600067ffffffffffffffff8211156141a5576141a4614539565b5b6141ae8261457c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061424282614385565b915061424d83614385565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142825761428161447d565b5b828201905092915050565b600061429882614385565b91506142a383614385565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142dc576142db61447d565b5b828202905092915050565b60006142f282614385565b91506142fd83614385565b9250828210156143105761430f61447d565b5b828203905092915050565b600061432682614365565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143bc5780820151818401526020810190506143a1565b838111156143cb576000848401525b50505050565b600060028204905060018216806143e957607f821691505b602082108114156143fd576143fc6144ac565b5b50919050565b61440c8261457c565b810181811067ffffffffffffffff8211171561442b5761442a614539565b5b80604052505050565b600061443f82614385565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144725761447161447d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e20656e6f75676820437468756c68752052697360008201527f696e67204e465473000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420746865206f776e6572206f662074686973204e4660008201527f542e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617820737570706c7920726561636865640000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b7f4d616e74726120697320746f6f206c6f6e672e00000000000000000000000000600082015250565b614ba88161431b565b8114614bb357600080fd5b50565b614bbf8161432d565b8114614bca57600080fd5b50565b614bd681614339565b8114614be157600080fd5b50565b614bed81614385565b8114614bf857600080fd5b5056fea2646970667358221220482526c15d66f5d9f848acdfd2170d78e99aff53a79a89a828427333597bec2464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000002501e4758bd558dccac77fb8791d544fed33240000000000000000000000000000000000000000000000000000000000000001243617468756c68752048617320526973696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054348524e430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d554b4b4e5348556b4532687533526a745143436d46374542385046414778695866565644464e644543797a312f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063518302271161014f578063a0712d68116100c1578063c87b56dd1161007a578063c87b56dd14610922578063d5abeb011461095f578063e80beaa11461098a578063e985e9c5146109b3578063f2c4ce1e146109f0578063f2fde38b14610a1957610272565b8063a0712d6814610835578063a22cb46514610851578063a475b5dd1461087a578063a7d2705614610891578063b88d4fde146108ce578063c6682862146108f757610272565b8063648345c811610113578063648345c81461073957806370a0823114610762578063715018a61461079f5780637f00c7a6146107b65780638da5cb5b146107df57806395d89b411461080a57610272565b8063518302271461064057806355f804b31461066b5780635c3e9cc2146106945780635c975abb146106d15780636352211e146106fc57610272565b80632442c59b116101e8578063438b6300116101ac578063438b63001461053257806344a0d68a1461056f578063464d40e11461059857806348b9ef40146105c15780634e71d92d146105ec5780634f6ccce71461060357610272565b80632442c59b1461046e5780632f745c591461049757806338e7c260146104d45780633ccfd60b146104ff57806342842e0e1461050957610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede614610399578063150320bc146103c457806318160ddd146103ef578063239c70ae1461041a57806323b872dd1461044557610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613799565b610a42565b6040516102ab9190613dfc565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d6919061376c565b610abc565b005b3480156102e957600080fd5b506102f2610b55565b6040516102ff9190613e17565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a919061383c565b610be7565b60405161033c9190613d73565b60405180910390f35b34801561035157600080fd5b5061035a610c6c565b6040516103679190613e17565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061372c565b610cfa565b005b3480156103a557600080fd5b506103ae610e12565b6040516103bb9190614119565b60405180910390f35b3480156103d057600080fd5b506103d9610e18565b6040516103e69190613d73565b60405180910390f35b3480156103fb57600080fd5b50610404610e3e565b6040516104119190614119565b60405180910390f35b34801561042657600080fd5b5061042f610e4b565b60405161043c9190614119565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613616565b610e51565b005b34801561047a57600080fd5b50610495600480360381019061049091906135a9565b610eb1565b005b3480156104a357600080fd5b506104be60048036038101906104b9919061372c565b610f71565b6040516104cb9190614119565b60405180910390f35b3480156104e057600080fd5b506104e9611016565b6040516104f69190614119565b60405180910390f35b61050761101c565b005b34801561051557600080fd5b50610530600480360381019061052b9190613616565b611118565b005b34801561053e57600080fd5b50610559600480360381019061055491906135a9565b611138565b6040516105669190613dda565b60405180910390f35b34801561057b57600080fd5b506105966004803603810190610591919061383c565b6111e6565b005b3480156105a457600080fd5b506105bf60048036038101906105ba919061383c565b61126c565b005b3480156105cd57600080fd5b506105d66112f2565b6040516105e39190614119565b60405180910390f35b3480156105f857600080fd5b506106016112f8565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061383c565b61151c565b6040516106379190614119565b60405180910390f35b34801561064c57600080fd5b5061065561158d565b6040516106629190613dfc565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d91906137f3565b6115a0565b005b3480156106a057600080fd5b506106bb60048036038101906106b6919061383c565b611636565b6040516106c89190613e17565b60405180910390f35b3480156106dd57600080fd5b506106e66116dc565b6040516106f39190613dfc565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e919061383c565b6116ef565b6040516107309190613d73565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190613896565b6117a1565b005b34801561076e57600080fd5b50610789600480360381019061078491906135a9565b611898565b6040516107969190614119565b60405180910390f35b3480156107ab57600080fd5b506107b4611950565b005b3480156107c257600080fd5b506107dd60048036038101906107d8919061383c565b6119d8565b005b3480156107eb57600080fd5b506107f4611a5e565b6040516108019190613d73565b60405180910390f35b34801561081657600080fd5b5061081f611a88565b60405161082c9190613e17565b60405180910390f35b61084f600480360381019061084a919061383c565b611b1a565b005b34801561085d57600080fd5b50610878600480360381019061087391906136ec565b611c06565b005b34801561088657600080fd5b5061088f611d87565b005b34801561089d57600080fd5b506108b860048036038101906108b3919061383c565b611e20565b6040516108c59190613e17565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190613669565b611ee3565b005b34801561090357600080fd5b5061090c611f45565b6040516109199190613e17565b60405180910390f35b34801561092e57600080fd5b506109496004803603810190610944919061383c565b611fd3565b6040516109569190613e17565b60405180910390f35b34801561096b57600080fd5b50610974612183565b6040516109819190614119565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac919061383c565b612189565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906135d6565b61220f565b6040516109e79190613dfc565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a1291906137f3565b6122a3565b005b348015610a2557600080fd5b50610a406004803603810190610a3b91906135a9565b612339565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab55750610ab482612431565b5b9050919050565b610ac4612513565b73ffffffffffffffffffffffffffffffffffffffff16610ae2611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90613fd9565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b64906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b90906143d1565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050905090565b6000610bf28261251b565b610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890613fb9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60138054610c79906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca5906143d1565b8015610cf25780601f10610cc757610100808354040283529160200191610cf2565b820191906000526020600020905b815481529060010190602001808311610cd557829003601f168201915b505050505081565b6000610d05826116ef565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614059565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d95612513565b73ffffffffffffffffffffffffffffffffffffffff161480610dc45750610dc381610dbe612513565b61220f565b5b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90613f39565b60405180910390fd5b610e0d8383612587565b505050565b600f5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b60115481565b610e62610e5c612513565b82612640565b610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9890614079565b60405180910390fd5b610eac83838361271e565b505050565b610eb9612513565b73ffffffffffffffffffffffffffffffffffffffff16610ed7611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490613fd9565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610f7c83611898565b8210610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490613e39565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d5481565b611024612513565b73ffffffffffffffffffffffffffffffffffffffff16611042611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613fd9565b60405180910390fd5b60006110a2611a5e565b73ffffffffffffffffffffffffffffffffffffffff16476040516110c590613d5e565b60006040518083038185875af1925050503d8060008114611102576040519150601f19603f3d011682016040523d82523d6000602084013e611107565b606091505b505090508061111557600080fd5b50565b61113383838360405180602001604052806000815250611ee3565b505050565b6060600061114583611898565b905060008167ffffffffffffffff81111561116357611162614539565b5b6040519080825280602002602001820160405280156111915781602001602082028036833780820191505090505b50905060005b828110156111db576111a98582610f71565b8282815181106111bc576111bb61450a565b5b60200260200101818152505080806111d390614434565b915050611197565b508092505050919050565b6111ee612513565b73ffffffffffffffffffffffffffffffffffffffff1661120c611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990613fd9565b60405180910390fd5b80600f8190555050565b611274612513565b73ffffffffffffffffffffffffffffffffffffffff16611292611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90613fd9565b60405180910390fd5b80600d8190555050565b600c5481565b601260009054906101000a900460ff1615611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133f906140d9565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016113aa9190613d73565b60206040518083038186803b1580156113c257600080fd5b505afa1580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190613869565b9050600c54811015611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890613e79565b60405180910390fd5b600061144b610e3e565b9050611d4c60018261145d9190614237565b111561149e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149590614099565b60405180910390fd5b6000604051806020016040528060405180602001604052806000815250815250905080601560006001856114d29190614237565b815260200190815260200160002060008201518160000190805190602001906114fc9291906133a8565b50905050611516336001846115119190614237565b61297a565b50505050565b6000611526610e3e565b8210611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e906140b9565b60405180910390fd5b6008828154811061157b5761157a61450a565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6115a8612513565b73ffffffffffffffffffffffffffffffffffffffff166115c6611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390613fd9565b60405180910390fd5b80600b90805190602001906116329291906133a8565b5050565b6015602052806000526040600020600091509050806000018054611659906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611685906143d1565b80156116d25780601f106116a7576101008083540402835291602001916116d2565b820191906000526020600020905b8154815290600101906020018083116116b557829003601f168201915b5050505050905081565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613f79565b60405180910390fd5b80915050919050565b6117aa826116ef565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e90614039565b60405180910390fd5b6000819050600d5481511115611862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611859906140f9565b60405180910390fd5b6000601560008581526020019081526020016000209050828160000190805190602001906118919291906133a8565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190090613f59565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611958612513565b73ffffffffffffffffffffffffffffffffffffffff16611976611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390613fd9565b60405180910390fd5b6119d66000612998565b565b6119e0612513565b73ffffffffffffffffffffffffffffffffffffffff166119fe611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90613fd9565b60405180910390fd5b8060118190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a97906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac3906143d1565b8015611b105780601f10611ae557610100808354040283529160200191611b10565b820191906000526020600020905b815481529060010190602001808311611af357829003601f168201915b5050505050905090565b6000611b24610e3e565b9050601260009054906101000a900460ff1615611b4057600080fd5b60008211611b4d57600080fd5b601154821115611b5c57600080fd5b6010548282611b6b9190614237565b1115611b7657600080fd5b611b7e611a5e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bcb5781600f54611bbe919061428d565b341015611bca57600080fd5b5b6000600190505b828111611c0157611bee338284611be99190614237565b61297a565b8080611bf990614434565b915050611bd2565b505050565b611c0e612513565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613ef9565b60405180910390fd5b8060056000611c89612513565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d36612513565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d7b9190613dfc565b60405180910390a35050565b611d8f612513565b73ffffffffffffffffffffffffffffffffffffffff16611dad611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa90613fd9565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b6060600060156000848152602001908152602001600020604051806020016040529081600082018054611e52906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7e906143d1565b8015611ecb5780601f10611ea057610100808354040283529160200191611ecb565b820191906000526020600020905b815481529060010190602001808311611eae57829003601f168201915b50505050508152505090508060000151915050919050565b611ef4611eee612513565b83612640565b611f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2a90614079565b60405180910390fd5b611f3f84848484612a5e565b50505050565b600e8054611f52906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7e906143d1565b8015611fcb5780601f10611fa057610100808354040283529160200191611fcb565b820191906000526020600020905b815481529060010190602001808311611fae57829003601f168201915b505050505081565b6060611fde8261251b565b61201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614019565b60405180910390fd5b60006015600084815260200190815260200160002060405180602001604052908160008201805461204d906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612079906143d1565b80156120c65780601f1061209b576101008083540402835291602001916120c6565b820191906000526020600020905b8154815290600101906020018083116120a957829003601f168201915b5050505050815250509050600081600001515111156120ef576120e7612aba565b91505061217e565b601380546120fc906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612128906143d1565b80156121755780601f1061214a57610100808354040283529160200191612175565b820191906000526020600020905b81548152906001019060200180831161215857829003601f168201915b50505050509150505b919050565b60105481565b612191612513565b73ffffffffffffffffffffffffffffffffffffffff166121af611a5e565b73ffffffffffffffffffffffffffffffffffffffff1614612205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fc90613fd9565b60405180910390fd5b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122ab612513565b73ffffffffffffffffffffffffffffffffffffffff166122c9611a5e565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690613fd9565b60405180910390fd5b80601390805190602001906123359291906133a8565b5050565b612341612513565b73ffffffffffffffffffffffffffffffffffffffff1661235f611a5e565b73ffffffffffffffffffffffffffffffffffffffff16146123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90613fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90613e99565b60405180910390fd5b61242e81612998565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124fc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061250c575061250b82612b4c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125fa836116ef565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061264b8261251b565b61268a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268190613f19565b60405180910390fd5b6000612695836116ef565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270457508373ffffffffffffffffffffffffffffffffffffffff166126ec84610be7565b73ffffffffffffffffffffffffffffffffffffffff16145b806127155750612714818561220f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661273e826116ef565b73ffffffffffffffffffffffffffffffffffffffff1614612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b90613ff9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90613ed9565b60405180910390fd5b61280f838383612bb6565b61281a600082612587565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286a91906142e7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128c19190614237565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612994828260405180602001604052806000815250612cca565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a6984848461271e565b612a7584848484612d25565b612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90613e59565b60405180910390fd5b50505050565b6060600b8054612ac9906143d1565b80601f0160208091040260200160405190810160405280929190818152602001828054612af5906143d1565b8015612b425780601f10612b1757610100808354040283529160200191612b42565b820191906000526020600020905b815481529060010190602001808311612b2557829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bc1838383612ebc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c0457612bff81612ec1565b612c43565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c4257612c418382612f0a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c8657612c8181613077565b612cc5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cc457612cc38282613148565b5b5b505050565b612cd483836131c7565b612ce16000848484612d25565b612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790613e59565b60405180910390fd5b505050565b6000612d468473ffffffffffffffffffffffffffffffffffffffff16613395565b15612eaf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d6f612513565b8786866040518563ffffffff1660e01b8152600401612d919493929190613d8e565b602060405180830381600087803b158015612dab57600080fd5b505af1925050508015612ddc57506040513d601f19601f82011682018060405250810190612dd991906137c6565b60015b612e5f573d8060008114612e0c576040519150601f19603f3d011682016040523d82523d6000602084013e612e11565b606091505b50600081511415612e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4e90613e59565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eb4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f1784611898565b612f2191906142e7565b9050600060076000848152602001908152602001600020549050818114613006576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061308b91906142e7565b90506000600960008481526020019081526020016000205490506000600883815481106130bb576130ba61450a565b5b9060005260206000200154905080600883815481106130dd576130dc61450a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061312c5761312b6144db565b5b6001900381819060005260206000200160009055905550505050565b600061315383611898565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322e90613f99565b60405180910390fd5b6132408161251b565b15613280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327790613eb9565b60405180910390fd5b61328c60008383612bb6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132dc9190614237565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546133b4906143d1565b90600052602060002090601f0160209004810192826133d6576000855561341d565b82601f106133ef57805160ff191683800117855561341d565b8280016001018555821561341d579182015b8281111561341c578251825591602001919060010190613401565b5b50905061342a919061342e565b5090565b5b8082111561344757600081600090555060010161342f565b5090565b600061345e61345984614159565b614134565b90508281526020810184848401111561347a5761347961456d565b5b61348584828561438f565b509392505050565b60006134a061349b8461418a565b614134565b9050828152602081018484840111156134bc576134bb61456d565b5b6134c784828561438f565b509392505050565b6000813590506134de81614b9f565b92915050565b6000813590506134f381614bb6565b92915050565b60008135905061350881614bcd565b92915050565b60008151905061351d81614bcd565b92915050565b600082601f83011261353857613537614568565b5b813561354884826020860161344b565b91505092915050565b600082601f83011261356657613565614568565b5b813561357684826020860161348d565b91505092915050565b60008135905061358e81614be4565b92915050565b6000815190506135a381614be4565b92915050565b6000602082840312156135bf576135be614577565b5b60006135cd848285016134cf565b91505092915050565b600080604083850312156135ed576135ec614577565b5b60006135fb858286016134cf565b925050602061360c858286016134cf565b9150509250929050565b60008060006060848603121561362f5761362e614577565b5b600061363d868287016134cf565b935050602061364e868287016134cf565b925050604061365f8682870161357f565b9150509250925092565b6000806000806080858703121561368357613682614577565b5b6000613691878288016134cf565b94505060206136a2878288016134cf565b93505060406136b38782880161357f565b925050606085013567ffffffffffffffff8111156136d4576136d3614572565b5b6136e087828801613523565b91505092959194509250565b6000806040838503121561370357613702614577565b5b6000613711858286016134cf565b9250506020613722858286016134e4565b9150509250929050565b6000806040838503121561374357613742614577565b5b6000613751858286016134cf565b92505060206137628582860161357f565b9150509250929050565b60006020828403121561378257613781614577565b5b6000613790848285016134e4565b91505092915050565b6000602082840312156137af576137ae614577565b5b60006137bd848285016134f9565b91505092915050565b6000602082840312156137dc576137db614577565b5b60006137ea8482850161350e565b91505092915050565b60006020828403121561380957613808614577565b5b600082013567ffffffffffffffff81111561382757613826614572565b5b61383384828501613551565b91505092915050565b60006020828403121561385257613851614577565b5b60006138608482850161357f565b91505092915050565b60006020828403121561387f5761387e614577565b5b600061388d84828501613594565b91505092915050565b600080604083850312156138ad576138ac614577565b5b60006138bb8582860161357f565b925050602083013567ffffffffffffffff8111156138dc576138db614572565b5b6138e885828601613551565b9150509250929050565b60006138fe8383613d40565b60208301905092915050565b6139138161431b565b82525050565b6000613924826141cb565b61392e81856141f9565b9350613939836141bb565b8060005b8381101561396a57815161395188826138f2565b975061395c836141ec565b92505060018101905061393d565b5085935050505092915050565b6139808161432d565b82525050565b6000613991826141d6565b61399b818561420a565b93506139ab81856020860161439e565b6139b48161457c565b840191505092915050565b60006139ca826141e1565b6139d48185614226565b93506139e481856020860161439e565b6139ed8161457c565b840191505092915050565b6000613a05602b83614226565b9150613a108261458d565b604082019050919050565b6000613a28603283614226565b9150613a33826145dc565b604082019050919050565b6000613a4b602883614226565b9150613a568261462b565b604082019050919050565b6000613a6e602683614226565b9150613a798261467a565b604082019050919050565b6000613a91601c83614226565b9150613a9c826146c9565b602082019050919050565b6000613ab4602483614226565b9150613abf826146f2565b604082019050919050565b6000613ad7601983614226565b9150613ae282614741565b602082019050919050565b6000613afa602c83614226565b9150613b058261476a565b604082019050919050565b6000613b1d603883614226565b9150613b28826147b9565b604082019050919050565b6000613b40602a83614226565b9150613b4b82614808565b604082019050919050565b6000613b63602983614226565b9150613b6e82614857565b604082019050919050565b6000613b86602083614226565b9150613b91826148a6565b602082019050919050565b6000613ba9602c83614226565b9150613bb4826148cf565b604082019050919050565b6000613bcc602083614226565b9150613bd78261491e565b602082019050919050565b6000613bef602983614226565b9150613bfa82614947565b604082019050919050565b6000613c12602f83614226565b9150613c1d82614996565b604082019050919050565b6000613c35602283614226565b9150613c40826149e5565b604082019050919050565b6000613c58602183614226565b9150613c6382614a34565b604082019050919050565b6000613c7b60008361421b565b9150613c8682614a83565b600082019050919050565b6000613c9e603183614226565b9150613ca982614a86565b604082019050919050565b6000613cc1601283614226565b9150613ccc82614ad5565b602082019050919050565b6000613ce4602c83614226565b9150613cef82614afe565b604082019050919050565b6000613d07601283614226565b9150613d1282614b4d565b602082019050919050565b6000613d2a601383614226565b9150613d3582614b76565b602082019050919050565b613d4981614385565b82525050565b613d5881614385565b82525050565b6000613d6982613c6e565b9150819050919050565b6000602082019050613d88600083018461390a565b92915050565b6000608082019050613da3600083018761390a565b613db0602083018661390a565b613dbd6040830185613d4f565b8181036060830152613dcf8184613986565b905095945050505050565b60006020820190508181036000830152613df48184613919565b905092915050565b6000602082019050613e116000830184613977565b92915050565b60006020820190508181036000830152613e3181846139bf565b905092915050565b60006020820190508181036000830152613e52816139f8565b9050919050565b60006020820190508181036000830152613e7281613a1b565b9050919050565b60006020820190508181036000830152613e9281613a3e565b9050919050565b60006020820190508181036000830152613eb281613a61565b9050919050565b60006020820190508181036000830152613ed281613a84565b9050919050565b60006020820190508181036000830152613ef281613aa7565b9050919050565b60006020820190508181036000830152613f1281613aca565b9050919050565b60006020820190508181036000830152613f3281613aed565b9050919050565b60006020820190508181036000830152613f5281613b10565b9050919050565b60006020820190508181036000830152613f7281613b33565b9050919050565b60006020820190508181036000830152613f9281613b56565b9050919050565b60006020820190508181036000830152613fb281613b79565b9050919050565b60006020820190508181036000830152613fd281613b9c565b9050919050565b60006020820190508181036000830152613ff281613bbf565b9050919050565b6000602082019050818103600083015261401281613be2565b9050919050565b6000602082019050818103600083015261403281613c05565b9050919050565b6000602082019050818103600083015261405281613c28565b9050919050565b6000602082019050818103600083015261407281613c4b565b9050919050565b6000602082019050818103600083015261409281613c91565b9050919050565b600060208201905081810360008301526140b281613cb4565b9050919050565b600060208201905081810360008301526140d281613cd7565b9050919050565b600060208201905081810360008301526140f281613cfa565b9050919050565b6000602082019050818103600083015261411281613d1d565b9050919050565b600060208201905061412e6000830184613d4f565b92915050565b600061413e61414f565b905061414a8282614403565b919050565b6000604051905090565b600067ffffffffffffffff82111561417457614173614539565b5b61417d8261457c565b9050602081019050919050565b600067ffffffffffffffff8211156141a5576141a4614539565b5b6141ae8261457c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061424282614385565b915061424d83614385565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142825761428161447d565b5b828201905092915050565b600061429882614385565b91506142a383614385565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142dc576142db61447d565b5b828202905092915050565b60006142f282614385565b91506142fd83614385565b9250828210156143105761430f61447d565b5b828203905092915050565b600061432682614365565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143bc5780820151818401526020810190506143a1565b838111156143cb576000848401525b50505050565b600060028204905060018216806143e957607f821691505b602082108114156143fd576143fc6144ac565b5b50919050565b61440c8261457c565b810181811067ffffffffffffffff8211171561442b5761442a614539565b5b80604052505050565b600061443f82614385565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144725761447161447d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f596f7520646f6e2774206f776e20656e6f75676820437468756c68752052697360008201527f696e67204e465473000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420746865206f776e6572206f662074686973204e4660008201527f542e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617820737570706c7920726561636865640000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b7f4d616e74726120697320746f6f206c6f6e672e00000000000000000000000000600082015250565b614ba88161431b565b8114614bb357600080fd5b50565b614bbf8161432d565b8114614bca57600080fd5b50565b614bd681614339565b8114614be157600080fd5b50565b614bed81614385565b8114614bf857600080fd5b5056fea2646970667358221220482526c15d66f5d9f848acdfd2170d78e99aff53a79a89a828427333597bec2464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000002501e4758bd558dccac77fb8791d544fed33240000000000000000000000000000000000000000000000000000000000000001243617468756c68752048617320526973696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054348524e430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d554b4b4e5348556b4532687533526a745143436d46374542385046414778695866565644464e644543797a312f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Cathulhu Has Risin
Arg [1] : _symbol (string): CHRNC
Arg [2] : _initBaseURI (string): ipfs://QmUKKNSHUkE2hu3RjtQCCmF7EB8PFAGxiXfVVDFNdECyz1/
Arg [3] : _initNotRevealedUri (string):
Arg [4] : _initCrAddress (address): 0x02501E4758bD558dcCaC77fb8791d544FeD33240
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 00000000000000000000000002501e4758bd558dccac77fb8791d544fed33240
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [6] : 43617468756c68752048617320526973696e0000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 4348524e43000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d554b4b4e5348556b4532687533526a745143436d463745
Arg [11] : 42385046414778695866565644464e644543797a312f00000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43186:4315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34733:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47273:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22625:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24184:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43587:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23707:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43411:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43620:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35373:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43485:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25074:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46727:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35041:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43331:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47353:145;;;:::i;:::-;;25484:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45116:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46517:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47065:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43293:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44204:469;;;;;;;;;;;;;:::i;:::-;;35563:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43555:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47169:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43702:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43524:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22319:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45871:373;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22049:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42522:94;;;;;;;;;;;;;:::i;:::-;;46603:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22794:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44677:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24477:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46444:65;;;;;;;;;;;;;:::i;:::-;;46251:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25740:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43369:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45470:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43449:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46957:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24843:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46831:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42771:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34733:224;34835:4;34874:35;34859:50;;;:11;:50;;;;:90;;;;34913:36;34937:11;34913:23;:36::i;:::-;34859:90;34852:97;;34733:224;;;:::o;47273:73::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47334:6:::1;47325;;:15;;;;;;;;;;;;;;;;;;47273:73:::0;:::o;22625:100::-;22679:13;22712:5;22705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22625:100;:::o;24184:221::-;24260:7;24288:16;24296:7;24288;:16::i;:::-;24280:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24373:15;:24;24389:7;24373:24;;;;;;;;;;;;;;;;;;;;;24366:31;;24184:221;;;:::o;43587:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23707:411::-;23788:13;23804:23;23819:7;23804:14;:23::i;:::-;23788:39;;23852:5;23846:11;;:2;:11;;;;23838:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23946:5;23930:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23955:37;23972:5;23979:12;:10;:12::i;:::-;23955:16;:37::i;:::-;23930:62;23908:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24089:21;24098:2;24102:7;24089:8;:21::i;:::-;23777:341;23707:411;;:::o;43411:33::-;;;;:::o;43620:24::-;;;;;;;;;;;;;:::o;35373:113::-;35434:7;35461:10;:17;;;;35454:24;;35373:113;:::o;43485:34::-;;;;:::o;25074:339::-;25269:41;25288:12;:10;:12::i;:::-;25302:7;25269:18;:41::i;:::-;25261:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25377:28;25387:4;25393:2;25397:7;25377:9;:28::i;:::-;25074:339;;;:::o;46727:96::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46806:11:::1;46794:9;;:23;;;;;;;;;;;;;;;;;;46727:96:::0;:::o;35041:256::-;35138:7;35174:23;35191:5;35174:16;:23::i;:::-;35166:5;:31;35158:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35263:12;:19;35276:5;35263:19;;;;;;;;;;;;;;;:26;35283:5;35263:26;;;;;;;;;;;;35256:33;;35041:256;;;;:::o;43331:33::-;;;;:::o;47353:145::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47406:7:::1;47427;:5;:7::i;:::-;47419:21;;47448;47419:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47405:69;;;47489:2;47481:11;;;::::0;::::1;;47398:100;47353:145::o:0;25484:185::-;25622:39;25639:4;25645:2;25649:7;25622:39;;;;;;;;;;;;:16;:39::i;:::-;25484:185;;;:::o;45116:348::-;45191:16;45219:23;45245:17;45255:6;45245:9;:17::i;:::-;45219:43;;45269:25;45311:15;45297:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45269:58;;45339:9;45334:103;45354:15;45350:1;:19;45334:103;;;45399:30;45419:6;45427:1;45399:19;:30::i;:::-;45385:8;45394:1;45385:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45371:3;;;;;:::i;:::-;;;;45334:103;;;;45450:8;45443:15;;;;45116:348;;;:::o;46517:80::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46583:8:::1;46576:4;:15;;;;46517:80:::0;:::o;47065:98::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47148:9:::1;47133:12;:24;;;;47065:98:::0;:::o;43293:33::-;;;;:::o;44204:469::-;44244:6;;;;;;;;;;;44243:7;44235:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44280:13;44304:9;;;;;;;;;;;44280:34;;44321:19;44343:5;:15;;;44359:10;44343:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44321:49;;44400:14;;44385:11;:29;;44377:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44466:14;44483:13;:11;:13::i;:::-;44466:30;;44525:4;44520:1;44511:6;:10;;;;:::i;:::-;:18;;44503:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44559:21;44583:10;;;;;;;;;;;;;;;;;;;;;;;44559:34;;44620:7;44600:5;:17;44615:1;44606:6;:10;;;;:::i;:::-;44600:17;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;44634:33;44644:10;44665:1;44656:6;:10;;;;:::i;:::-;44634:9;:33::i;:::-;44228:445;;;;44204:469::o;35563:233::-;35638:7;35674:30;:28;:30::i;:::-;35666:5;:38;35658:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35771:10;35782:5;35771:17;;;;;;;;:::i;:::-;;;;;;;;;;35764:24;;35563:233;;;:::o;43555:27::-;;;;;;;;;;;;;:::o;47169:98::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47250:11:::1;47240:7;:21;;;;;;;;;;;;:::i;:::-;;47169:98:::0;:::o;43702:40::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43524:26::-;;;;;;;;;;;;;:::o;22319:239::-;22391:7;22411:13;22427:7;:16;22435:7;22427:16;;;;;;;;;;;;;;;;;;;;;22411:32;;22479:1;22462:19;;:5;:19;;;;22454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22545:5;22538:12;;;22319:239;;;:::o;45871:373::-;45972:17;45980:8;45972:7;:17::i;:::-;45958:31;;:10;:31;;;45950:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46035:21;46065:11;46035:42;;46111:12;;46092:8;:15;:31;;46084:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46154:26;46183:5;:15;46189:8;46183:15;;;;;;;;;;;46154:44;;46227:11;46205;:19;;:33;;;;;;;;;;;;:::i;:::-;;45943:301;;45871:373;;:::o;22049:208::-;22121:7;22166:1;22149:19;;:5;:19;;;;22141:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22233:9;:16;22243:5;22233:16;;;;;;;;;;;;;;;;22226:23;;22049:208;;;:::o;42522:94::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42587:21:::1;42605:1;42587:9;:21::i;:::-;42522:94::o:0;46603:116::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46696:17:::1;46680:13;:33;;;;46603:116:::0;:::o;41871:87::-;41917:7;41944:6;;;;;;;;;;;41937:13;;41871:87;:::o;22794:104::-;22850:13;22883:7;22876:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22794:104;:::o;44677:433::-;44734:14;44751:13;:11;:13::i;:::-;44734:30;;44780:6;;;;;;;;;;;44779:7;44771:16;;;;;;44816:1;44802:11;:15;44794:24;;;;;;44848:13;;44833:11;:28;;44825:37;;;;;;44901:9;;44886:11;44877:6;:20;;;;:::i;:::-;:33;;44869:42;;;;;;44938:7;:5;:7::i;:::-;44924:21;;:10;:21;;;44920:84;;44984:11;44977:4;;:18;;;;:::i;:::-;44964:9;:31;;44956:40;;;;;;44920:84;45017:9;45029:1;45017:13;;45012:93;45037:11;45032:1;:16;45012:93;;45064:33;45074:10;45095:1;45086:6;:10;;;;:::i;:::-;45064:9;:33::i;:::-;45050:3;;;;;:::i;:::-;;;;45012:93;;;;44727:383;44677:433;:::o;24477:295::-;24592:12;:10;:12::i;:::-;24580:24;;:8;:24;;;;24572:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24692:8;24647:18;:32;24666:12;:10;:12::i;:::-;24647:32;;;;;;;;;;;;;;;:42;24680:8;24647:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24745:8;24716:48;;24731:12;:10;:12::i;:::-;24716:48;;;24755:8;24716:48;;;;;;:::i;:::-;;;;;;;;24477:295;;:::o;46444:65::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46499:4:::1;46488:8;;:15;;;;;;;;;;;;;;;;;;46444:65::o:0;46251:171::-;46311:21;46340:25;46368:5;:15;46374:8;46368:15;;;;;;;;;;;46340:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46397:11;:19;;;46390:26;;;46251:171;;;:::o;25740:328::-;25915:41;25934:12;:10;:12::i;:::-;25948:7;25915:18;:41::i;:::-;25907:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26021:39;26035:4;26041:2;26045:7;26054:5;26021:13;:39::i;:::-;25740:328;;;;:::o;43369:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45470:395::-;45544:13;45576:17;45584:8;45576:7;:17::i;:::-;45568:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45655:25;45683:5;:15;45689:8;45683:15;;;;;;;;;;;45655:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45748:1;45718:11;:19;;;45712:33;:37;45709:151;;;45773:10;:8;:10::i;:::-;45766:17;;;;;45709:151;45834:14;45827:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45470:395;;;;:::o;43449:31::-;;;;:::o;46957:102::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47044:9:::1;47027:14;:26;;;;46957:102:::0;:::o;24843:164::-;24940:4;24964:18;:25;24983:5;24964:25;;;;;;;;;;;;;;;:35;24990:8;24964:35;;;;;;;;;;;;;;;;;;;;;;;;;24957:42;;24843:164;;;;:::o;46831:120::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46930:15:::1;46913:14;:32;;;;;;;;;;;;:::i;:::-;;46831:120:::0;:::o;42771:192::-;42102:12;:10;:12::i;:::-;42091:23;;:7;:5;:7::i;:::-;:23;;;42083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42880:1:::1;42860:22;;:8;:22;;;;42852:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42936:19;42946:8;42936:9;:19::i;:::-;42771:192:::0;:::o;21680:305::-;21782:4;21834:25;21819:40;;;:11;:40;;;;:105;;;;21891:33;21876:48;;;:11;:48;;;;21819:105;:158;;;;21941:36;21965:11;21941:23;:36::i;:::-;21819:158;21799:178;;21680:305;;;:::o;20154:98::-;20207:7;20234:10;20227:17;;20154:98;:::o;27578:127::-;27643:4;27695:1;27667:30;;:7;:16;27675:7;27667:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27660:37;;27578:127;;;:::o;31560:174::-;31662:2;31635:15;:24;31651:7;31635:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31718:7;31714:2;31680:46;;31689:23;31704:7;31689:14;:23::i;:::-;31680:46;;;;;;;;;;;;31560:174;;:::o;27872:348::-;27965:4;27990:16;27998:7;27990;:16::i;:::-;27982:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28066:13;28082:23;28097:7;28082:14;:23::i;:::-;28066:39;;28135:5;28124:16;;:7;:16;;;:51;;;;28168:7;28144:31;;:20;28156:7;28144:11;:20::i;:::-;:31;;;28124:51;:87;;;;28179:32;28196:5;28203:7;28179:16;:32::i;:::-;28124:87;28116:96;;;27872:348;;;;:::o;30864:578::-;31023:4;30996:31;;:23;31011:7;30996:14;:23::i;:::-;:31;;;30988:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31106:1;31092:16;;:2;:16;;;;31084:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31162:39;31183:4;31189:2;31193:7;31162:20;:39::i;:::-;31266:29;31283:1;31287:7;31266:8;:29::i;:::-;31327:1;31308:9;:15;31318:4;31308:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31356:1;31339:9;:13;31349:2;31339:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31387:2;31368:7;:16;31376:7;31368:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31426:7;31422:2;31407:27;;31416:4;31407:27;;;;;;;;;;;;30864:578;;;:::o;28562:110::-;28638:26;28648:2;28652:7;28638:26;;;;;;;;;;;;:9;:26::i;:::-;28562:110;;:::o;42971:173::-;43027:16;43046:6;;;;;;;;;;;43027:25;;43072:8;43063:6;;:17;;;;;;;;;;;;;;;;;;43127:8;43096:40;;43117:8;43096:40;;;;;;;;;;;;43016:128;42971:173;:::o;26950:315::-;27107:28;27117:4;27123:2;27127:7;27107:9;:28::i;:::-;27154:48;27177:4;27183:2;27187:7;27196:5;27154:22;:48::i;:::-;27146:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26950:315;;;;:::o;44083:102::-;44143:13;44172:7;44165:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44083:102;:::o;7511:157::-;7596:4;7635:25;7620:40;;;:11;:40;;;;7613:47;;7511:157;;;:::o;36409:589::-;36553:45;36580:4;36586:2;36590:7;36553:26;:45::i;:::-;36631:1;36615:18;;:4;:18;;;36611:187;;;36650:40;36682:7;36650:31;:40::i;:::-;36611:187;;;36720:2;36712:10;;:4;:10;;;36708:90;;36739:47;36772:4;36778:7;36739:32;:47::i;:::-;36708:90;36611:187;36826:1;36812:16;;:2;:16;;;36808:183;;;36845:45;36882:7;36845:36;:45::i;:::-;36808:183;;;36918:4;36912:10;;:2;:10;;;36908:83;;36939:40;36967:2;36971:7;36939:27;:40::i;:::-;36908:83;36808:183;36409:589;;;:::o;28899:321::-;29029:18;29035:2;29039:7;29029:5;:18::i;:::-;29080:54;29111:1;29115:2;29119:7;29128:5;29080:22;:54::i;:::-;29058:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28899:321;;;:::o;32299:799::-;32454:4;32475:15;:2;:13;;;:15::i;:::-;32471:620;;;32527:2;32511:36;;;32548:12;:10;:12::i;:::-;32562:4;32568:7;32577:5;32511:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32507:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32770:1;32753:6;:13;:18;32749:272;;;32796:60;;;;;;;;;;:::i;:::-;;;;;;;;32749:272;32971:6;32965:13;32956:6;32952:2;32948:15;32941:38;32507:529;32644:41;;;32634:51;;;:6;:51;;;;32627:58;;;;;32471:620;33075:4;33068:11;;32299:799;;;;;;;:::o;33670:126::-;;;;:::o;37721:164::-;37825:10;:17;;;;37798:15;:24;37814:7;37798:24;;;;;;;;;;;:44;;;;37853:10;37869:7;37853:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37721:164;:::o;38512:988::-;38778:22;38828:1;38803:22;38820:4;38803:16;:22::i;:::-;:26;;;;:::i;:::-;38778:51;;38840:18;38861:17;:26;38879:7;38861:26;;;;;;;;;;;;38840:47;;39008:14;38994:10;:28;38990:328;;39039:19;39061:12;:18;39074:4;39061:18;;;;;;;;;;;;;;;:34;39080:14;39061:34;;;;;;;;;;;;39039:56;;39145:11;39112:12;:18;39125:4;39112:18;;;;;;;;;;;;;;;:30;39131:10;39112:30;;;;;;;;;;;:44;;;;39262:10;39229:17;:30;39247:11;39229:30;;;;;;;;;;;:43;;;;39024:294;38990:328;39414:17;:26;39432:7;39414:26;;;;;;;;;;;39407:33;;;39458:12;:18;39471:4;39458:18;;;;;;;;;;;;;;;:34;39477:14;39458:34;;;;;;;;;;;39451:41;;;38593:907;;38512:988;;:::o;39795:1079::-;40048:22;40093:1;40073:10;:17;;;;:21;;;;:::i;:::-;40048:46;;40105:18;40126:15;:24;40142:7;40126:24;;;;;;;;;;;;40105:45;;40477:19;40499:10;40510:14;40499:26;;;;;;;;:::i;:::-;;;;;;;;;;40477:48;;40563:11;40538:10;40549;40538:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40674:10;40643:15;:28;40659:11;40643:28;;;;;;;;;;;:41;;;;40815:15;:24;40831:7;40815:24;;;;;;;;;;;40808:31;;;40850:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39866:1008;;;39795:1079;:::o;37299:221::-;37384:14;37401:20;37418:2;37401:16;:20::i;:::-;37384:37;;37459:7;37432:12;:16;37445:2;37432:16;;;;;;;;;;;;;;;:24;37449:6;37432:24;;;;;;;;;;;:34;;;;37506:6;37477:17;:26;37495:7;37477:26;;;;;;;;;;;:35;;;;37373:147;37299:221;;:::o;29556:382::-;29650:1;29636:16;;:2;:16;;;;29628:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29709:16;29717:7;29709;:16::i;:::-;29708:17;29700:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29771:45;29800:1;29804:2;29808:7;29771:20;:45::i;:::-;29846:1;29829:9;:13;29839:2;29829:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29877:2;29858:7;:16;29866:7;29858:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29922:7;29918:2;29897:33;;29914:1;29897:33;;;;;;;;;;;;29556:382;;:::o;10511:387::-;10571:4;10779:12;10846:7;10834:20;10826:28;;10889:1;10882:4;:8;10875:15;;;10511:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:323::-;5825:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:119;;;5880:79;;:::i;:::-;5842:119;6000:1;6025:50;6067:7;6058:6;6047:9;6043:22;6025:50;:::i;:::-;6015:60;;5971:114;5769:323;;;;:::o;6098:327::-;6156:6;6205:2;6193:9;6184:7;6180:23;6176:32;6173:119;;;6211:79;;:::i;:::-;6173:119;6331:1;6356:52;6400:7;6391:6;6380:9;6376:22;6356:52;:::i;:::-;6346:62;;6302:116;6098:327;;;;:::o;6431:349::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:119;;;6555:79;;:::i;:::-;6517:119;6675:1;6700:63;6755:7;6746:6;6735:9;6731:22;6700:63;:::i;:::-;6690:73;;6646:127;6431:349;;;;:::o;6786:509::-;6855:6;6904:2;6892:9;6883:7;6879:23;6875:32;6872:119;;;6910:79;;:::i;:::-;6872:119;7058:1;7047:9;7043:17;7030:31;7088:18;7080:6;7077:30;7074:117;;;7110:79;;:::i;:::-;7074:117;7215:63;7270:7;7261:6;7250:9;7246:22;7215:63;:::i;:::-;7205:73;;7001:287;6786:509;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:119;;;7415:79;;:::i;:::-;7377:119;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7301:329;;;;:::o;7636:351::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:64;7962:7;7953:6;7942:9;7938:22;7906:64;:::i;:::-;7896:74;;7852:128;7636:351;;;;:::o;7993:654::-;8071:6;8079;8128:2;8116:9;8107:7;8103:23;8099:32;8096:119;;;8134:79;;:::i;:::-;8096:119;8254:1;8279:53;8324:7;8315:6;8304:9;8300:22;8279:53;:::i;:::-;8269:63;;8225:117;8409:2;8398:9;8394:18;8381:32;8440:18;8432:6;8429:30;8426:117;;;8462:79;;:::i;:::-;8426:117;8567:63;8622:7;8613:6;8602:9;8598:22;8567:63;:::i;:::-;8557:73;;8352:288;7993:654;;;;;:::o;8653:179::-;8722:10;8743:46;8785:3;8777:6;8743:46;:::i;:::-;8821:4;8816:3;8812:14;8798:28;;8653:179;;;;:::o;8838:118::-;8925:24;8943:5;8925:24;:::i;:::-;8920:3;8913:37;8838:118;;:::o;8992:732::-;9111:3;9140:54;9188:5;9140:54;:::i;:::-;9210:86;9289:6;9284:3;9210:86;:::i;:::-;9203:93;;9320:56;9370:5;9320:56;:::i;:::-;9399:7;9430:1;9415:284;9440:6;9437:1;9434:13;9415:284;;;9516:6;9510:13;9543:63;9602:3;9587:13;9543:63;:::i;:::-;9536:70;;9629:60;9682:6;9629:60;:::i;:::-;9619:70;;9475:224;9462:1;9459;9455:9;9450:14;;9415:284;;;9419:14;9715:3;9708:10;;9116:608;;;8992:732;;;;:::o;9730:109::-;9811:21;9826:5;9811:21;:::i;:::-;9806:3;9799:34;9730:109;;:::o;9845:360::-;9931:3;9959:38;9991:5;9959:38;:::i;:::-;10013:70;10076:6;10071:3;10013:70;:::i;:::-;10006:77;;10092:52;10137:6;10132:3;10125:4;10118:5;10114:16;10092:52;:::i;:::-;10169:29;10191:6;10169:29;:::i;:::-;10164:3;10160:39;10153:46;;9935:270;9845:360;;;;:::o;10211:364::-;10299:3;10327:39;10360:5;10327:39;:::i;:::-;10382:71;10446:6;10441:3;10382:71;:::i;:::-;10375:78;;10462:52;10507:6;10502:3;10495:4;10488:5;10484:16;10462:52;:::i;:::-;10539:29;10561:6;10539:29;:::i;:::-;10534:3;10530:39;10523:46;;10303:272;10211:364;;;;:::o;10581:366::-;10723:3;10744:67;10808:2;10803:3;10744:67;:::i;:::-;10737:74;;10820:93;10909:3;10820:93;:::i;:::-;10938:2;10933:3;10929:12;10922:19;;10581:366;;;:::o;10953:::-;11095:3;11116:67;11180:2;11175:3;11116:67;:::i;:::-;11109:74;;11192:93;11281:3;11192:93;:::i;:::-;11310:2;11305:3;11301:12;11294:19;;10953:366;;;:::o;11325:::-;11467:3;11488:67;11552:2;11547:3;11488:67;:::i;:::-;11481:74;;11564:93;11653:3;11564:93;:::i;:::-;11682:2;11677:3;11673:12;11666:19;;11325:366;;;:::o;11697:::-;11839:3;11860:67;11924:2;11919:3;11860:67;:::i;:::-;11853:74;;11936:93;12025:3;11936:93;:::i;:::-;12054:2;12049:3;12045:12;12038:19;;11697:366;;;:::o;12069:::-;12211:3;12232:67;12296:2;12291:3;12232:67;:::i;:::-;12225:74;;12308:93;12397:3;12308:93;:::i;:::-;12426:2;12421:3;12417:12;12410:19;;12069:366;;;:::o;12441:::-;12583:3;12604:67;12668:2;12663:3;12604:67;:::i;:::-;12597:74;;12680:93;12769:3;12680:93;:::i;:::-;12798:2;12793:3;12789:12;12782:19;;12441:366;;;:::o;12813:::-;12955:3;12976:67;13040:2;13035:3;12976:67;:::i;:::-;12969:74;;13052:93;13141:3;13052:93;:::i;:::-;13170:2;13165:3;13161:12;13154:19;;12813:366;;;:::o;13185:::-;13327:3;13348:67;13412:2;13407:3;13348:67;:::i;:::-;13341:74;;13424:93;13513:3;13424:93;:::i;:::-;13542:2;13537:3;13533:12;13526:19;;13185:366;;;:::o;13557:::-;13699:3;13720:67;13784:2;13779:3;13720:67;:::i;:::-;13713:74;;13796:93;13885:3;13796:93;:::i;:::-;13914:2;13909:3;13905:12;13898:19;;13557:366;;;:::o;13929:::-;14071:3;14092:67;14156:2;14151:3;14092:67;:::i;:::-;14085:74;;14168:93;14257:3;14168:93;:::i;:::-;14286:2;14281:3;14277:12;14270:19;;13929:366;;;:::o;14301:::-;14443:3;14464:67;14528:2;14523:3;14464:67;:::i;:::-;14457:74;;14540:93;14629:3;14540:93;:::i;:::-;14658:2;14653:3;14649:12;14642:19;;14301:366;;;:::o;14673:::-;14815:3;14836:67;14900:2;14895:3;14836:67;:::i;:::-;14829:74;;14912:93;15001:3;14912:93;:::i;:::-;15030:2;15025:3;15021:12;15014:19;;14673:366;;;:::o;15045:::-;15187:3;15208:67;15272:2;15267:3;15208:67;:::i;:::-;15201:74;;15284:93;15373:3;15284:93;:::i;:::-;15402:2;15397:3;15393:12;15386:19;;15045:366;;;:::o;15417:::-;15559:3;15580:67;15644:2;15639:3;15580:67;:::i;:::-;15573:74;;15656:93;15745:3;15656:93;:::i;:::-;15774:2;15769:3;15765:12;15758:19;;15417:366;;;:::o;15789:::-;15931:3;15952:67;16016:2;16011:3;15952:67;:::i;:::-;15945:74;;16028:93;16117:3;16028:93;:::i;:::-;16146:2;16141:3;16137:12;16130:19;;15789:366;;;:::o;16161:::-;16303:3;16324:67;16388:2;16383:3;16324:67;:::i;:::-;16317:74;;16400:93;16489:3;16400:93;:::i;:::-;16518:2;16513:3;16509:12;16502:19;;16161:366;;;:::o;16533:::-;16675:3;16696:67;16760:2;16755:3;16696:67;:::i;:::-;16689:74;;16772:93;16861:3;16772:93;:::i;:::-;16890:2;16885:3;16881:12;16874:19;;16533:366;;;:::o;16905:::-;17047:3;17068:67;17132:2;17127:3;17068:67;:::i;:::-;17061:74;;17144:93;17233:3;17144:93;:::i;:::-;17262:2;17257:3;17253:12;17246:19;;16905:366;;;:::o;17277:398::-;17436:3;17457:83;17538:1;17533:3;17457:83;:::i;:::-;17450:90;;17549:93;17638:3;17549:93;:::i;:::-;17667:1;17662:3;17658:11;17651:18;;17277:398;;;:::o;17681:366::-;17823:3;17844:67;17908:2;17903:3;17844:67;:::i;:::-;17837:74;;17920:93;18009:3;17920:93;:::i;:::-;18038:2;18033:3;18029:12;18022:19;;17681:366;;;:::o;18053:::-;18195:3;18216:67;18280:2;18275:3;18216:67;:::i;:::-;18209:74;;18292:93;18381:3;18292:93;:::i;:::-;18410:2;18405:3;18401:12;18394:19;;18053:366;;;:::o;18425:::-;18567:3;18588:67;18652:2;18647:3;18588:67;:::i;:::-;18581:74;;18664:93;18753:3;18664:93;:::i;:::-;18782:2;18777:3;18773:12;18766:19;;18425:366;;;:::o;18797:::-;18939:3;18960:67;19024:2;19019:3;18960:67;:::i;:::-;18953:74;;19036:93;19125:3;19036:93;:::i;:::-;19154:2;19149:3;19145:12;19138:19;;18797:366;;;:::o;19169:::-;19311:3;19332:67;19396:2;19391:3;19332:67;:::i;:::-;19325:74;;19408:93;19497:3;19408:93;:::i;:::-;19526:2;19521:3;19517:12;19510:19;;19169:366;;;:::o;19541:108::-;19618:24;19636:5;19618:24;:::i;:::-;19613:3;19606:37;19541:108;;:::o;19655:118::-;19742:24;19760:5;19742:24;:::i;:::-;19737:3;19730:37;19655:118;;:::o;19779:379::-;19963:3;19985:147;20128:3;19985:147;:::i;:::-;19978:154;;20149:3;20142:10;;19779:379;;;:::o;20164:222::-;20257:4;20295:2;20284:9;20280:18;20272:26;;20308:71;20376:1;20365:9;20361:17;20352:6;20308:71;:::i;:::-;20164:222;;;;:::o;20392:640::-;20587:4;20625:3;20614:9;20610:19;20602:27;;20639:71;20707:1;20696:9;20692:17;20683:6;20639:71;:::i;:::-;20720:72;20788:2;20777:9;20773:18;20764:6;20720:72;:::i;:::-;20802;20870:2;20859:9;20855:18;20846:6;20802:72;:::i;:::-;20921:9;20915:4;20911:20;20906:2;20895:9;20891:18;20884:48;20949:76;21020:4;21011:6;20949:76;:::i;:::-;20941:84;;20392:640;;;;;;;:::o;21038:373::-;21181:4;21219:2;21208:9;21204:18;21196:26;;21268:9;21262:4;21258:20;21254:1;21243:9;21239:17;21232:47;21296:108;21399:4;21390:6;21296:108;:::i;:::-;21288:116;;21038:373;;;;:::o;21417:210::-;21504:4;21542:2;21531:9;21527:18;21519:26;;21555:65;21617:1;21606:9;21602:17;21593:6;21555:65;:::i;:::-;21417:210;;;;:::o;21633:313::-;21746:4;21784:2;21773:9;21769:18;21761:26;;21833:9;21827:4;21823:20;21819:1;21808:9;21804:17;21797:47;21861:78;21934:4;21925:6;21861:78;:::i;:::-;21853:86;;21633:313;;;;:::o;21952:419::-;22118:4;22156:2;22145:9;22141:18;22133:26;;22205:9;22199:4;22195:20;22191:1;22180:9;22176:17;22169:47;22233:131;22359:4;22233:131;:::i;:::-;22225:139;;21952:419;;;:::o;22377:::-;22543:4;22581:2;22570:9;22566:18;22558:26;;22630:9;22624:4;22620:20;22616:1;22605:9;22601:17;22594:47;22658:131;22784:4;22658:131;:::i;:::-;22650:139;;22377:419;;;:::o;22802:::-;22968:4;23006:2;22995:9;22991:18;22983:26;;23055:9;23049:4;23045:20;23041:1;23030:9;23026:17;23019:47;23083:131;23209:4;23083:131;:::i;:::-;23075:139;;22802:419;;;:::o;23227:::-;23393:4;23431:2;23420:9;23416:18;23408:26;;23480:9;23474:4;23470:20;23466:1;23455:9;23451:17;23444:47;23508:131;23634:4;23508:131;:::i;:::-;23500:139;;23227:419;;;:::o;23652:::-;23818:4;23856:2;23845:9;23841:18;23833:26;;23905:9;23899:4;23895:20;23891:1;23880:9;23876:17;23869:47;23933:131;24059:4;23933:131;:::i;:::-;23925:139;;23652:419;;;:::o;24077:::-;24243:4;24281:2;24270:9;24266:18;24258:26;;24330:9;24324:4;24320:20;24316:1;24305:9;24301:17;24294:47;24358:131;24484:4;24358:131;:::i;:::-;24350:139;;24077:419;;;:::o;24502:::-;24668:4;24706:2;24695:9;24691:18;24683:26;;24755:9;24749:4;24745:20;24741:1;24730:9;24726:17;24719:47;24783:131;24909:4;24783:131;:::i;:::-;24775:139;;24502:419;;;:::o;24927:::-;25093:4;25131:2;25120:9;25116:18;25108:26;;25180:9;25174:4;25170:20;25166:1;25155:9;25151:17;25144:47;25208:131;25334:4;25208:131;:::i;:::-;25200:139;;24927:419;;;:::o;25352:::-;25518:4;25556:2;25545:9;25541:18;25533:26;;25605:9;25599:4;25595:20;25591:1;25580:9;25576:17;25569:47;25633:131;25759:4;25633:131;:::i;:::-;25625:139;;25352:419;;;:::o;25777:::-;25943:4;25981:2;25970:9;25966:18;25958:26;;26030:9;26024:4;26020:20;26016:1;26005:9;26001:17;25994:47;26058:131;26184:4;26058:131;:::i;:::-;26050:139;;25777:419;;;:::o;26202:::-;26368:4;26406:2;26395:9;26391:18;26383:26;;26455:9;26449:4;26445:20;26441:1;26430:9;26426:17;26419:47;26483:131;26609:4;26483:131;:::i;:::-;26475:139;;26202:419;;;:::o;26627:::-;26793:4;26831:2;26820:9;26816:18;26808:26;;26880:9;26874:4;26870:20;26866:1;26855:9;26851:17;26844:47;26908:131;27034:4;26908:131;:::i;:::-;26900:139;;26627:419;;;:::o;27052:::-;27218:4;27256:2;27245:9;27241:18;27233:26;;27305:9;27299:4;27295:20;27291:1;27280:9;27276:17;27269:47;27333:131;27459:4;27333:131;:::i;:::-;27325:139;;27052:419;;;:::o;27477:::-;27643:4;27681:2;27670:9;27666:18;27658:26;;27730:9;27724:4;27720:20;27716:1;27705:9;27701:17;27694:47;27758:131;27884:4;27758:131;:::i;:::-;27750:139;;27477:419;;;:::o;27902:::-;28068:4;28106:2;28095:9;28091:18;28083:26;;28155:9;28149:4;28145:20;28141:1;28130:9;28126:17;28119:47;28183:131;28309:4;28183:131;:::i;:::-;28175:139;;27902:419;;;:::o;28327:::-;28493:4;28531:2;28520:9;28516:18;28508:26;;28580:9;28574:4;28570:20;28566:1;28555:9;28551:17;28544:47;28608:131;28734:4;28608:131;:::i;:::-;28600:139;;28327:419;;;:::o;28752:::-;28918:4;28956:2;28945:9;28941:18;28933:26;;29005:9;28999:4;28995:20;28991:1;28980:9;28976:17;28969:47;29033:131;29159:4;29033:131;:::i;:::-;29025:139;;28752:419;;;:::o;29177:::-;29343:4;29381:2;29370:9;29366:18;29358:26;;29430:9;29424:4;29420:20;29416:1;29405:9;29401:17;29394:47;29458:131;29584:4;29458:131;:::i;:::-;29450:139;;29177:419;;;:::o;29602:::-;29768:4;29806:2;29795:9;29791:18;29783:26;;29855:9;29849:4;29845:20;29841:1;29830:9;29826:17;29819:47;29883:131;30009:4;29883:131;:::i;:::-;29875:139;;29602:419;;;:::o;30027:::-;30193:4;30231:2;30220:9;30216:18;30208:26;;30280:9;30274:4;30270:20;30266:1;30255:9;30251:17;30244:47;30308:131;30434:4;30308:131;:::i;:::-;30300:139;;30027:419;;;:::o;30452:::-;30618:4;30656:2;30645:9;30641:18;30633:26;;30705:9;30699:4;30695:20;30691:1;30680:9;30676:17;30669:47;30733:131;30859:4;30733:131;:::i;:::-;30725:139;;30452:419;;;:::o;30877:::-;31043:4;31081:2;31070:9;31066:18;31058:26;;31130:9;31124:4;31120:20;31116:1;31105:9;31101:17;31094:47;31158:131;31284:4;31158:131;:::i;:::-;31150:139;;30877:419;;;:::o;31302:::-;31468:4;31506:2;31495:9;31491:18;31483:26;;31555:9;31549:4;31545:20;31541:1;31530:9;31526:17;31519:47;31583:131;31709:4;31583:131;:::i;:::-;31575:139;;31302:419;;;:::o;31727:222::-;31820:4;31858:2;31847:9;31843:18;31835:26;;31871:71;31939:1;31928:9;31924:17;31915:6;31871:71;:::i;:::-;31727:222;;;;:::o;31955:129::-;31989:6;32016:20;;:::i;:::-;32006:30;;32045:33;32073:4;32065:6;32045:33;:::i;:::-;31955:129;;;:::o;32090:75::-;32123:6;32156:2;32150:9;32140:19;;32090:75;:::o;32171:307::-;32232:4;32322:18;32314:6;32311:30;32308:56;;;32344:18;;:::i;:::-;32308:56;32382:29;32404:6;32382:29;:::i;:::-;32374:37;;32466:4;32460;32456:15;32448:23;;32171:307;;;:::o;32484:308::-;32546:4;32636:18;32628:6;32625:30;32622:56;;;32658:18;;:::i;:::-;32622:56;32696:29;32718:6;32696:29;:::i;:::-;32688:37;;32780:4;32774;32770:15;32762:23;;32484:308;;;:::o;32798:132::-;32865:4;32888:3;32880:11;;32918:4;32913:3;32909:14;32901:22;;32798:132;;;:::o;32936:114::-;33003:6;33037:5;33031:12;33021:22;;32936:114;;;:::o;33056:98::-;33107:6;33141:5;33135:12;33125:22;;33056:98;;;:::o;33160:99::-;33212:6;33246:5;33240:12;33230:22;;33160:99;;;:::o;33265:113::-;33335:4;33367;33362:3;33358:14;33350:22;;33265:113;;;:::o;33384:184::-;33483:11;33517:6;33512:3;33505:19;33557:4;33552:3;33548:14;33533:29;;33384:184;;;;:::o;33574:168::-;33657:11;33691:6;33686:3;33679:19;33731:4;33726:3;33722:14;33707:29;;33574:168;;;;:::o;33748:147::-;33849:11;33886:3;33871:18;;33748:147;;;;:::o;33901:169::-;33985:11;34019:6;34014:3;34007:19;34059:4;34054:3;34050:14;34035:29;;33901:169;;;;:::o;34076:305::-;34116:3;34135:20;34153:1;34135:20;:::i;:::-;34130:25;;34169:20;34187:1;34169:20;:::i;:::-;34164:25;;34323:1;34255:66;34251:74;34248:1;34245:81;34242:107;;;34329:18;;:::i;:::-;34242:107;34373:1;34370;34366:9;34359:16;;34076:305;;;;:::o;34387:348::-;34427:7;34450:20;34468:1;34450:20;:::i;:::-;34445:25;;34484:20;34502:1;34484:20;:::i;:::-;34479:25;;34672:1;34604:66;34600:74;34597:1;34594:81;34589:1;34582:9;34575:17;34571:105;34568:131;;;34679:18;;:::i;:::-;34568:131;34727:1;34724;34720:9;34709:20;;34387:348;;;;:::o;34741:191::-;34781:4;34801:20;34819:1;34801:20;:::i;:::-;34796:25;;34835:20;34853:1;34835:20;:::i;:::-;34830:25;;34874:1;34871;34868:8;34865:34;;;34879:18;;:::i;:::-;34865:34;34924:1;34921;34917:9;34909:17;;34741:191;;;;:::o;34938:96::-;34975:7;35004:24;35022:5;35004:24;:::i;:::-;34993:35;;34938:96;;;:::o;35040:90::-;35074:7;35117:5;35110:13;35103:21;35092:32;;35040:90;;;:::o;35136:149::-;35172:7;35212:66;35205:5;35201:78;35190:89;;35136:149;;;:::o;35291:126::-;35328:7;35368:42;35361:5;35357:54;35346:65;;35291:126;;;:::o;35423:77::-;35460:7;35489:5;35478:16;;35423:77;;;:::o;35506:154::-;35590:6;35585:3;35580;35567:30;35652:1;35643:6;35638:3;35634:16;35627:27;35506:154;;;:::o;35666:307::-;35734:1;35744:113;35758:6;35755:1;35752:13;35744:113;;;35843:1;35838:3;35834:11;35828:18;35824:1;35819:3;35815:11;35808:39;35780:2;35777:1;35773:10;35768:15;;35744:113;;;35875:6;35872:1;35869:13;35866:101;;;35955:1;35946:6;35941:3;35937:16;35930:27;35866:101;35715:258;35666:307;;;:::o;35979:320::-;36023:6;36060:1;36054:4;36050:12;36040:22;;36107:1;36101:4;36097:12;36128:18;36118:81;;36184:4;36176:6;36172:17;36162:27;;36118:81;36246:2;36238:6;36235:14;36215:18;36212:38;36209:84;;;36265:18;;:::i;:::-;36209:84;36030:269;35979:320;;;:::o;36305:281::-;36388:27;36410:4;36388:27;:::i;:::-;36380:6;36376:40;36518:6;36506:10;36503:22;36482:18;36470:10;36467:34;36464:62;36461:88;;;36529:18;;:::i;:::-;36461:88;36569:10;36565:2;36558:22;36348:238;36305:281;;:::o;36592:233::-;36631:3;36654:24;36672:5;36654:24;:::i;:::-;36645:33;;36700:66;36693:5;36690:77;36687:103;;;36770:18;;:::i;:::-;36687:103;36817:1;36810:5;36806:13;36799:20;;36592:233;;;:::o;36831:180::-;36879:77;36876:1;36869:88;36976:4;36973:1;36966:15;37000:4;36997:1;36990:15;37017:180;37065:77;37062:1;37055:88;37162:4;37159:1;37152:15;37186:4;37183:1;37176:15;37203:180;37251:77;37248:1;37241:88;37348:4;37345:1;37338:15;37372:4;37369:1;37362:15;37389:180;37437:77;37434:1;37427:88;37534:4;37531:1;37524:15;37558:4;37555:1;37548:15;37575:180;37623:77;37620:1;37613:88;37720:4;37717:1;37710:15;37744:4;37741:1;37734:15;37761:117;37870:1;37867;37860:12;37884:117;37993:1;37990;37983:12;38007:117;38116:1;38113;38106:12;38130:117;38239:1;38236;38229:12;38253:102;38294:6;38345:2;38341:7;38336:2;38329:5;38325:14;38321:28;38311:38;;38253:102;;;:::o;38361:230::-;38501:34;38497:1;38489:6;38485:14;38478:58;38570:13;38565:2;38557:6;38553:15;38546:38;38361:230;:::o;38597:237::-;38737:34;38733:1;38725:6;38721:14;38714:58;38806:20;38801:2;38793:6;38789:15;38782:45;38597:237;:::o;38840:227::-;38980:34;38976:1;38968:6;38964:14;38957:58;39049:10;39044:2;39036:6;39032:15;39025:35;38840:227;:::o;39073:225::-;39213:34;39209:1;39201:6;39197:14;39190:58;39282:8;39277:2;39269:6;39265:15;39258:33;39073:225;:::o;39304:178::-;39444:30;39440:1;39432:6;39428:14;39421:54;39304:178;:::o;39488:223::-;39628:34;39624:1;39616:6;39612:14;39605:58;39697:6;39692:2;39684:6;39680:15;39673:31;39488:223;:::o;39717:175::-;39857:27;39853:1;39845:6;39841:14;39834:51;39717:175;:::o;39898:231::-;40038:34;40034:1;40026:6;40022:14;40015:58;40107:14;40102:2;40094:6;40090:15;40083:39;39898:231;:::o;40135:243::-;40275:34;40271:1;40263:6;40259:14;40252:58;40344:26;40339:2;40331:6;40327:15;40320:51;40135:243;:::o;40384:229::-;40524:34;40520:1;40512:6;40508:14;40501:58;40593:12;40588:2;40580:6;40576:15;40569:37;40384:229;:::o;40619:228::-;40759:34;40755:1;40747:6;40743:14;40736:58;40828:11;40823:2;40815:6;40811:15;40804:36;40619:228;:::o;40853:182::-;40993:34;40989:1;40981:6;40977:14;40970:58;40853:182;:::o;41041:231::-;41181:34;41177:1;41169:6;41165:14;41158:58;41250:14;41245:2;41237:6;41233:15;41226:39;41041:231;:::o;41278:182::-;41418:34;41414:1;41406:6;41402:14;41395:58;41278:182;:::o;41466:228::-;41606:34;41602:1;41594:6;41590:14;41583:58;41675:11;41670:2;41662:6;41658:15;41651:36;41466:228;:::o;41700:234::-;41840:34;41836:1;41828:6;41824:14;41817:58;41909:17;41904:2;41896:6;41892:15;41885:42;41700:234;:::o;41940:221::-;42080:34;42076:1;42068:6;42064:14;42057:58;42149:4;42144:2;42136:6;42132:15;42125:29;41940:221;:::o;42167:220::-;42307:34;42303:1;42295:6;42291:14;42284:58;42376:3;42371:2;42363:6;42359:15;42352:28;42167:220;:::o;42393:114::-;;:::o;42513:236::-;42653:34;42649:1;42641:6;42637:14;42630:58;42722:19;42717:2;42709:6;42705:15;42698:44;42513:236;:::o;42755:168::-;42895:20;42891:1;42883:6;42879:14;42872:44;42755:168;:::o;42929:231::-;43069:34;43065:1;43057:6;43053:14;43046:58;43138:14;43133:2;43125:6;43121:15;43114:39;42929:231;:::o;43166:168::-;43306:20;43302:1;43294:6;43290:14;43283:44;43166:168;:::o;43340:169::-;43480:21;43476:1;43468:6;43464:14;43457:45;43340:169;:::o;43515:122::-;43588:24;43606:5;43588:24;:::i;:::-;43581:5;43578:35;43568:63;;43627:1;43624;43617:12;43568:63;43515:122;:::o;43643:116::-;43713:21;43728:5;43713:21;:::i;:::-;43706:5;43703:32;43693:60;;43749:1;43746;43739:12;43693:60;43643:116;:::o;43765:120::-;43837:23;43854:5;43837:23;:::i;:::-;43830:5;43827:34;43817:62;;43875:1;43872;43865:12;43817:62;43765:120;:::o;43891:122::-;43964:24;43982:5;43964:24;:::i;:::-;43957:5;43954:35;43944:63;;44003:1;44000;43993:12;43944:63;43891:122;:::o
Swarm Source
ipfs://482526c15d66f5d9f848acdfd2170d78e99aff53a79a89a828427333597bec24
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.