Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
2,496 SnoD
Holders
860
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SnoDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Companion
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-19 */ /** *Submitted for verification at Etherscan.io on 2021-10-19 */ // File from: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.7; /* * @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 from: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.7; /** * @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 from: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.7; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File from: contracts/Companion.sol pragma solidity ^0.8.7; abstract contract SUYT { function balanceOf(address owner) external virtual view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256); function ownerOf(uint256 tokenId) public virtual view returns (address); } contract Companion is ERC721Enumerable, Ownable { SUYT private suyt; bool public _is_sale_active = false; string private baseURI; string public _provenance = ""; uint public _max_mint; uint256 public _saleStarttime; uint256 public _saleEndtime; constructor( string memory name, string memory symbol, uint maxMint, uint256 saleStartTime, address dependentContractAddress ) ERC721(name, symbol) { _max_mint = maxMint; _saleStarttime = saleStartTime; _saleEndtime = saleStartTime + (86400 * 15); suyt = SUYT(dependentContractAddress); } // change max mint if necessary function setMaxMint(uint maxMint) public onlyOwner { _max_mint = maxMint; } function setProvenanceHash(string memory provenanceHash) public onlyOwner { _provenance = provenanceHash; } function isMinted(uint256 tokenId) external view returns (bool) { return _exists(tokenId); } function _baseURI() internal view override returns (string memory) { return baseURI; } function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } function mintCompanion(uint256 suytTokenId) public { require(block.timestamp > _saleStarttime, "Sale must start!"); require(block.timestamp < _saleEndtime, "Sale has ended!"); require(suyt.ownerOf(suytTokenId) == msg.sender, "Superyeti and Sno Demon ID doesn't match"); _safeMint(msg.sender, suytTokenId); } function mintCompanions(uint[] memory tokenIDs) public { require(block.timestamp > _saleStarttime, "Sale must start!"); require(block.timestamp < _saleEndtime, "Sale has Ended!"); require(tokenIDs.length <= _max_mint, "Max Mint Exceeded"); for (uint i=0; i < tokenIDs.length; i++) { require(suyt.ownerOf(tokenIDs[i]) == msg.sender, "Superyeti and Sno Demon ID doesn't match"); _safeMint(msg.sender, tokenIDs[i]); } } }
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":"uint256","name":"maxMint","type":"uint256"},{"internalType":"uint256","name":"saleStartTime","type":"uint256"},{"internalType":"address","name":"dependentContractAddress","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":"_is_sale_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_max_mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleEndtime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleStarttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"suytTokenId","type":"uint256"}],"name":"mintCompanion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"}],"name":"mintCompanions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","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"}]
Contract Creation Code
60806040526000600b60146101000a81548160ff02191690831515021790555060405180602001604052806000815250600d9080519060200190620000469291906200020f565b503480156200005457600080fd5b50604051620047543803806200475483398181016040528101906200007a91906200036b565b84848160009080519060200190620000949291906200020f565b508060019080519060200190620000ad9291906200020f565b505050620000d0620000c46200014160201b60201c565b6200014960201b60201c565b82600e8190555081600f819055506213c68082620000ef919062000490565b60108190555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620006b3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021d9062000561565b90600052602060002090601f0160209004810192826200024157600085556200028d565b82601f106200025c57805160ff19168380011785556200028d565b828001600101855582156200028d579182015b828111156200028c5782518255916020019190600101906200026f565b5b5090506200029c9190620002a0565b5090565b5b80821115620002bb576000816000905550600101620002a1565b5090565b6000620002d6620002d0846200045a565b62000431565b905082815260208101848484011115620002f557620002f46200065f565b5b620003028482856200052b565b509392505050565b6000815190506200031b816200067f565b92915050565b600082601f8301126200033957620003386200065a565b5b81516200034b848260208601620002bf565b91505092915050565b600081519050620003658162000699565b92915050565b600080600080600060a086880312156200038a576200038962000669565b5b600086015167ffffffffffffffff811115620003ab57620003aa62000664565b5b620003b98882890162000321565b955050602086015167ffffffffffffffff811115620003dd57620003dc62000664565b5b620003eb8882890162000321565b9450506040620003fe8882890162000354565b9350506060620004118882890162000354565b925050608062000424888289016200030a565b9150509295509295909350565b60006200043d62000450565b90506200044b828262000597565b919050565b6000604051905090565b600067ffffffffffffffff8211156200047857620004776200062b565b5b62000483826200066e565b9050602081019050919050565b60006200049d8262000521565b9150620004aa8362000521565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004e257620004e1620005cd565b5b828201905092915050565b6000620004fa8262000501565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200054b5780820151818401526020810190506200052e565b838111156200055b576000848401525b50505050565b600060028204905060018216806200057a57607f821691505b60208210811415620005915762000590620005fc565b5b50919050565b620005a2826200066e565b810181811067ffffffffffffffff82111715620005c457620005c36200062b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200068a81620004ed565b81146200069657600080fd5b50565b620006a48162000521565b8114620006b057600080fd5b50565b61409180620006c36000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063715018a611610104578063be55d898116100a2578063e265a54111610071578063e265a54114610557578063e7c06b8214610573578063e985e9c51461058f578063f2fde38b146105bf576101da565b8063be55d898146104cd578063bf90d913146104eb578063c87b56dd14610509578063d69714e714610539576101da565b806397be67cc116100de57806397be67cc14610459578063a22cb46514610477578063ae6b031114610493578063b88d4fde146104b1576101da565b8063715018a6146104135780638da5cb5b1461041d57806395d89b411461043b576101da565b80632f745c591161017c578063547520fe1161014b578063547520fe1461037b57806355f804b3146103975780636352211e146103b357806370a08231146103e3576101da565b80632f745c59146102cf57806333c41a90146102ff57806342842e0e1461032f5780634f6ccce71461034b576101da565b8063095ea7b3116101b8578063095ea7b31461025d578063109695231461027957806318160ddd1461029557806323b872dd146102b3576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612d06565b6105db565b6040516102069190613256565b60405180910390f35b610217610655565b6040516102249190613271565b60405180910390f35b61024760048036038101906102429190612da9565b6106e7565b60405161025491906131ef565b60405180910390f35b61027760048036038101906102729190612c7d565b61076c565b005b610293600480360381019061028e9190612d60565b610884565b005b61029d61091a565b6040516102aa9190613573565b60405180910390f35b6102cd60048036038101906102c89190612b67565b610927565b005b6102e960048036038101906102e49190612c7d565b610987565b6040516102f69190613573565b60405180910390f35b61031960048036038101906103149190612da9565b610a2c565b6040516103269190613256565b60405180910390f35b61034960048036038101906103449190612b67565b610a3e565b005b61036560048036038101906103609190612da9565b610a5e565b6040516103729190613573565b60405180910390f35b61039560048036038101906103909190612da9565b610acf565b005b6103b160048036038101906103ac9190612d60565b610b55565b005b6103cd60048036038101906103c89190612da9565b610beb565b6040516103da91906131ef565b60405180910390f35b6103fd60048036038101906103f89190612acd565b610c9d565b60405161040a9190613573565b60405180910390f35b61041b610d55565b005b610425610ddd565b60405161043291906131ef565b60405180910390f35b610443610e07565b6040516104509190613271565b60405180910390f35b610461610e99565b60405161046e9190613573565b60405180910390f35b610491600480360381019061048c9190612c3d565b610e9f565b005b61049b611020565b6040516104a89190613573565b60405180910390f35b6104cb60048036038101906104c69190612bba565b611026565b005b6104d5611088565b6040516104e29190613256565b60405180910390f35b6104f361109b565b6040516105009190613573565b60405180910390f35b610523600480360381019061051e9190612da9565b6110a1565b6040516105309190613271565b60405180910390f35b610541611148565b60405161054e9190613271565b60405180910390f35b610571600480360381019061056c9190612cbd565b6111d6565b005b61058d60048036038101906105889190612da9565b61141d565b005b6105a960048036038101906105a49190612b27565b6115ca565b6040516105b69190613256565b60405180910390f35b6105d960048036038101906105d49190612acd565b61165e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064e575061064d82611756565b5b9050919050565b606060008054610664906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610690906137f5565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b60006106f282611838565b610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072890613433565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061077782610beb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df906134b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108076118a4565b73ffffffffffffffffffffffffffffffffffffffff1614806108365750610835816108306118a4565b6115ca565b5b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c906133b3565b60405180910390fd5b61087f83836118ac565b505050565b61088c6118a4565b73ffffffffffffffffffffffffffffffffffffffff166108aa610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790613453565b60405180910390fd5b80600d908051906020019061091692919061282e565b5050565b6000600880549050905090565b6109386109326118a4565b82611965565b610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90613513565b60405180910390fd5b610982838383611a43565b505050565b600061099283610c9d565b82106109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906132b3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610a3782611838565b9050919050565b610a5983838360405180602001604052806000815250611026565b505050565b6000610a6861091a565b8210610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090613533565b60405180910390fd5b60088281548110610abd57610abc61398e565b5b90600052602060002001549050919050565b610ad76118a4565b73ffffffffffffffffffffffffffffffffffffffff16610af5610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613453565b60405180910390fd5b80600e8190555050565b610b5d6118a4565b73ffffffffffffffffffffffffffffffffffffffff16610b7b610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613453565b60405180910390fd5b80600c9080519060200190610be792919061282e565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b906133f3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d05906133d3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d5d6118a4565b73ffffffffffffffffffffffffffffffffffffffff16610d7b610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890613453565b60405180910390fd5b610ddb6000611c9f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e16906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906137f5565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b5050505050905090565b600f5481565b610ea76118a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90613353565b60405180910390fd5b8060056000610f226118a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fcf6118a4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110149190613256565b60405180910390a35050565b60105481565b6110376110316118a4565b83611965565b611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90613513565b60405180910390fd5b61108284848484611d65565b50505050565b600b60149054906101000a900460ff1681565b600e5481565b60606110ac82611838565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290613493565b60405180910390fd5b60006110f5611dc1565b905060008151116111155760405180602001604052806000815250611140565b8061111f84611e53565b6040516020016111309291906131cb565b6040516020818303038152906040525b915050919050565b600d8054611155906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611181906137f5565b80156111ce5780601f106111a3576101008083540402835291602001916111ce565b820191906000526020600020905b8154815290600101906020018083116111b157829003601f168201915b505050505081565b600f54421161121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190613293565b60405180910390fd5b601054421061125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906134d3565b60405180910390fd5b600e54815111156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b906134f3565b60405180910390fd5b60005b8151811015611419573373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106113185761131761398e565b5b60200260200101516040518263ffffffff1660e01b815260040161133c9190613573565b60206040518083038186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138c9190612afa565b73ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990613373565b60405180910390fd5b611406338383815181106113f9576113f861398e565b5b6020026020010151611fb4565b808061141190613858565b9150506112a7565b5050565b600f544211611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613293565b60405180910390fd5b60105442106114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613553565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016115179190613573565b60206040518083038186803b15801561152f57600080fd5b505afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190612afa565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613373565b60405180910390fd5b6115c73382611fb4565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116666118a4565b73ffffffffffffffffffffffffffffffffffffffff16611684610ddd565b73ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906132f3565b60405180910390fd5b61175381611c9f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061182157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611831575061183082611fd2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661191f83610beb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061197082611838565b6119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690613393565b60405180910390fd5b60006119ba83610beb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a2957508373ffffffffffffffffffffffffffffffffffffffff16611a11846106e7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a3a5750611a3981856115ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a6382610beb565b73ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090613473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613333565b60405180910390fd5b611b3483838361203c565b611b3f6000826118ac565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8f919061370b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611be69190613684565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d70848484611a43565b611d7c84848484612150565b611dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db2906132d3565b60405180910390fd5b50505050565b6060600c8054611dd0906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfc906137f5565b8015611e495780601f10611e1e57610100808354040283529160200191611e49565b820191906000526020600020905b815481529060010190602001808311611e2c57829003601f168201915b5050505050905090565b60606000821415611e9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611faf565b600082905060005b60008214611ecd578080611eb690613858565b915050600a82611ec691906136da565b9150611ea3565b60008167ffffffffffffffff811115611ee957611ee86139bd565b5b6040519080825280601f01601f191660200182016040528015611f1b5781602001600182028036833780820191505090505b5090505b60008514611fa857600182611f34919061370b565b9150600a85611f4391906138a1565b6030611f4f9190613684565b60f81b818381518110611f6557611f6461398e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fa191906136da565b9450611f1f565b8093505050505b919050565b611fce8282604051806020016040528060008152506122e7565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612047838383612342565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208a5761208581612347565b6120c9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120c8576120c78382612390565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210c57612107816124fd565b61214b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461214a5761214982826125ce565b5b5b505050565b60006121718473ffffffffffffffffffffffffffffffffffffffff1661264d565b156122da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261219a6118a4565b8786866040518563ffffffff1660e01b81526004016121bc949392919061320a565b602060405180830381600087803b1580156121d657600080fd5b505af192505050801561220757506040513d601f19601f820116820180604052508101906122049190612d33565b60015b61228a573d8060008114612237576040519150601f19603f3d011682016040523d82523d6000602084013e61223c565b606091505b50600081511415612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906132d3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506122df565b600190505b949350505050565b6122f18383612660565b6122fe6000848484612150565b61233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906132d3565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161239d84610c9d565b6123a7919061370b565b905060006007600084815260200190815260200160002054905081811461248c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612511919061370b565b90506000600960008481526020019081526020016000205490506000600883815481106125415761254061398e565b5b9060005260206000200154905080600883815481106125635761256261398e565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125b2576125b161395f565b5b6001900381819060005260206000200160009055905550505050565b60006125d983610c9d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790613413565b60405180910390fd5b6126d981611838565b15612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090613313565b60405180910390fd5b6127256000838361203c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127759190613684565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461283a906137f5565b90600052602060002090601f01602090048101928261285c57600085556128a3565b82601f1061287557805160ff19168380011785556128a3565b828001600101855582156128a3579182015b828111156128a2578251825591602001919060010190612887565b5b5090506128b091906128b4565b5090565b5b808211156128cd5760008160009055506001016128b5565b5090565b60006128e46128df846135b3565b61358e565b90508083825260208201905082856020860282011115612907576129066139f1565b5b60005b85811015612937578161291d8882612ab8565b84526020840193506020830192505060018101905061290a565b5050509392505050565b600061295461294f846135df565b61358e565b9050828152602081018484840111156129705761296f6139f6565b5b61297b8482856137b3565b509392505050565b600061299661299184613610565b61358e565b9050828152602081018484840111156129b2576129b16139f6565b5b6129bd8482856137b3565b509392505050565b6000813590506129d481613fff565b92915050565b6000815190506129e981613fff565b92915050565b600082601f830112612a0457612a036139ec565b5b8135612a148482602086016128d1565b91505092915050565b600081359050612a2c81614016565b92915050565b600081359050612a418161402d565b92915050565b600081519050612a568161402d565b92915050565b600082601f830112612a7157612a706139ec565b5b8135612a81848260208601612941565b91505092915050565b600082601f830112612a9f57612a9e6139ec565b5b8135612aaf848260208601612983565b91505092915050565b600081359050612ac781614044565b92915050565b600060208284031215612ae357612ae2613a00565b5b6000612af1848285016129c5565b91505092915050565b600060208284031215612b1057612b0f613a00565b5b6000612b1e848285016129da565b91505092915050565b60008060408385031215612b3e57612b3d613a00565b5b6000612b4c858286016129c5565b9250506020612b5d858286016129c5565b9150509250929050565b600080600060608486031215612b8057612b7f613a00565b5b6000612b8e868287016129c5565b9350506020612b9f868287016129c5565b9250506040612bb086828701612ab8565b9150509250925092565b60008060008060808587031215612bd457612bd3613a00565b5b6000612be2878288016129c5565b9450506020612bf3878288016129c5565b9350506040612c0487828801612ab8565b925050606085013567ffffffffffffffff811115612c2557612c246139fb565b5b612c3187828801612a5c565b91505092959194509250565b60008060408385031215612c5457612c53613a00565b5b6000612c62858286016129c5565b9250506020612c7385828601612a1d565b9150509250929050565b60008060408385031215612c9457612c93613a00565b5b6000612ca2858286016129c5565b9250506020612cb385828601612ab8565b9150509250929050565b600060208284031215612cd357612cd2613a00565b5b600082013567ffffffffffffffff811115612cf157612cf06139fb565b5b612cfd848285016129ef565b91505092915050565b600060208284031215612d1c57612d1b613a00565b5b6000612d2a84828501612a32565b91505092915050565b600060208284031215612d4957612d48613a00565b5b6000612d5784828501612a47565b91505092915050565b600060208284031215612d7657612d75613a00565b5b600082013567ffffffffffffffff811115612d9457612d936139fb565b5b612da084828501612a8a565b91505092915050565b600060208284031215612dbf57612dbe613a00565b5b6000612dcd84828501612ab8565b91505092915050565b612ddf8161373f565b82525050565b612dee81613751565b82525050565b6000612dff82613641565b612e098185613657565b9350612e198185602086016137c2565b612e2281613a05565b840191505092915050565b6000612e388261364c565b612e428185613668565b9350612e528185602086016137c2565b612e5b81613a05565b840191505092915050565b6000612e718261364c565b612e7b8185613679565b9350612e8b8185602086016137c2565b80840191505092915050565b6000612ea4601083613668565b9150612eaf82613a16565b602082019050919050565b6000612ec7602b83613668565b9150612ed282613a3f565b604082019050919050565b6000612eea603283613668565b9150612ef582613a8e565b604082019050919050565b6000612f0d602683613668565b9150612f1882613add565b604082019050919050565b6000612f30601c83613668565b9150612f3b82613b2c565b602082019050919050565b6000612f53602483613668565b9150612f5e82613b55565b604082019050919050565b6000612f76601983613668565b9150612f8182613ba4565b602082019050919050565b6000612f99602883613668565b9150612fa482613bcd565b604082019050919050565b6000612fbc602c83613668565b9150612fc782613c1c565b604082019050919050565b6000612fdf603883613668565b9150612fea82613c6b565b604082019050919050565b6000613002602a83613668565b915061300d82613cba565b604082019050919050565b6000613025602983613668565b915061303082613d09565b604082019050919050565b6000613048602083613668565b915061305382613d58565b602082019050919050565b600061306b602c83613668565b915061307682613d81565b604082019050919050565b600061308e602083613668565b915061309982613dd0565b602082019050919050565b60006130b1602983613668565b91506130bc82613df9565b604082019050919050565b60006130d4602f83613668565b91506130df82613e48565b604082019050919050565b60006130f7602183613668565b915061310282613e97565b604082019050919050565b600061311a600f83613668565b915061312582613ee6565b602082019050919050565b600061313d601183613668565b915061314882613f0f565b602082019050919050565b6000613160603183613668565b915061316b82613f38565b604082019050919050565b6000613183602c83613668565b915061318e82613f87565b604082019050919050565b60006131a6600f83613668565b91506131b182613fd6565b602082019050919050565b6131c5816137a9565b82525050565b60006131d78285612e66565b91506131e38284612e66565b91508190509392505050565b60006020820190506132046000830184612dd6565b92915050565b600060808201905061321f6000830187612dd6565b61322c6020830186612dd6565b61323960408301856131bc565b818103606083015261324b8184612df4565b905095945050505050565b600060208201905061326b6000830184612de5565b92915050565b6000602082019050818103600083015261328b8184612e2d565b905092915050565b600060208201905081810360008301526132ac81612e97565b9050919050565b600060208201905081810360008301526132cc81612eba565b9050919050565b600060208201905081810360008301526132ec81612edd565b9050919050565b6000602082019050818103600083015261330c81612f00565b9050919050565b6000602082019050818103600083015261332c81612f23565b9050919050565b6000602082019050818103600083015261334c81612f46565b9050919050565b6000602082019050818103600083015261336c81612f69565b9050919050565b6000602082019050818103600083015261338c81612f8c565b9050919050565b600060208201905081810360008301526133ac81612faf565b9050919050565b600060208201905081810360008301526133cc81612fd2565b9050919050565b600060208201905081810360008301526133ec81612ff5565b9050919050565b6000602082019050818103600083015261340c81613018565b9050919050565b6000602082019050818103600083015261342c8161303b565b9050919050565b6000602082019050818103600083015261344c8161305e565b9050919050565b6000602082019050818103600083015261346c81613081565b9050919050565b6000602082019050818103600083015261348c816130a4565b9050919050565b600060208201905081810360008301526134ac816130c7565b9050919050565b600060208201905081810360008301526134cc816130ea565b9050919050565b600060208201905081810360008301526134ec8161310d565b9050919050565b6000602082019050818103600083015261350c81613130565b9050919050565b6000602082019050818103600083015261352c81613153565b9050919050565b6000602082019050818103600083015261354c81613176565b9050919050565b6000602082019050818103600083015261356c81613199565b9050919050565b600060208201905061358860008301846131bc565b92915050565b60006135986135a9565b90506135a48282613827565b919050565b6000604051905090565b600067ffffffffffffffff8211156135ce576135cd6139bd565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135fa576135f96139bd565b5b61360382613a05565b9050602081019050919050565b600067ffffffffffffffff82111561362b5761362a6139bd565b5b61363482613a05565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061368f826137a9565b915061369a836137a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136cf576136ce6138d2565b5b828201905092915050565b60006136e5826137a9565b91506136f0836137a9565b925082613700576136ff613901565b5b828204905092915050565b6000613716826137a9565b9150613721836137a9565b925082821015613734576137336138d2565b5b828203905092915050565b600061374a82613789565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137e05780820151818401526020810190506137c5565b838111156137ef576000848401525b50505050565b6000600282049050600182168061380d57607f821691505b6020821081141561382157613820613930565b5b50919050565b61383082613a05565b810181811067ffffffffffffffff8211171561384f5761384e6139bd565b5b80604052505050565b6000613863826137a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613896576138956138d2565b5b600182019050919050565b60006138ac826137a9565b91506138b7836137a9565b9250826138c7576138c6613901565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206d7573742073746172742100000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53757065727965746920616e6420536e6f2044656d6f6e20494420646f65736e60008201527f2774206d61746368000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c652068617320456e646564210000000000000000000000000000000000600082015250565b7f4d6178204d696e74204578636565646564000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c652068617320656e646564210000000000000000000000000000000000600082015250565b6140088161373f565b811461401357600080fd5b50565b61401f81613751565b811461402a57600080fd5b50565b6140368161375d565b811461404157600080fd5b50565b61404d816137a9565b811461405857600080fd5b5056fea2646970667358221220ec991a1222b60722d9eb68faaf1bea0d319df15ee62144fc45492960486f4ca664736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000617083500000000000000000000000003f0785095a660fee131eebcd5aa243e529c217860000000000000000000000000000000000000000000000000000000000000009536e6f2044656d6f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004536e6f4400000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063715018a611610104578063be55d898116100a2578063e265a54111610071578063e265a54114610557578063e7c06b8214610573578063e985e9c51461058f578063f2fde38b146105bf576101da565b8063be55d898146104cd578063bf90d913146104eb578063c87b56dd14610509578063d69714e714610539576101da565b806397be67cc116100de57806397be67cc14610459578063a22cb46514610477578063ae6b031114610493578063b88d4fde146104b1576101da565b8063715018a6146104135780638da5cb5b1461041d57806395d89b411461043b576101da565b80632f745c591161017c578063547520fe1161014b578063547520fe1461037b57806355f804b3146103975780636352211e146103b357806370a08231146103e3576101da565b80632f745c59146102cf57806333c41a90146102ff57806342842e0e1461032f5780634f6ccce71461034b576101da565b8063095ea7b3116101b8578063095ea7b31461025d578063109695231461027957806318160ddd1461029557806323b872dd146102b3576101da565b806301ffc9a7146101df57806306fdde031461020f578063081812fc1461022d575b600080fd5b6101f960048036038101906101f49190612d06565b6105db565b6040516102069190613256565b60405180910390f35b610217610655565b6040516102249190613271565b60405180910390f35b61024760048036038101906102429190612da9565b6106e7565b60405161025491906131ef565b60405180910390f35b61027760048036038101906102729190612c7d565b61076c565b005b610293600480360381019061028e9190612d60565b610884565b005b61029d61091a565b6040516102aa9190613573565b60405180910390f35b6102cd60048036038101906102c89190612b67565b610927565b005b6102e960048036038101906102e49190612c7d565b610987565b6040516102f69190613573565b60405180910390f35b61031960048036038101906103149190612da9565b610a2c565b6040516103269190613256565b60405180910390f35b61034960048036038101906103449190612b67565b610a3e565b005b61036560048036038101906103609190612da9565b610a5e565b6040516103729190613573565b60405180910390f35b61039560048036038101906103909190612da9565b610acf565b005b6103b160048036038101906103ac9190612d60565b610b55565b005b6103cd60048036038101906103c89190612da9565b610beb565b6040516103da91906131ef565b60405180910390f35b6103fd60048036038101906103f89190612acd565b610c9d565b60405161040a9190613573565b60405180910390f35b61041b610d55565b005b610425610ddd565b60405161043291906131ef565b60405180910390f35b610443610e07565b6040516104509190613271565b60405180910390f35b610461610e99565b60405161046e9190613573565b60405180910390f35b610491600480360381019061048c9190612c3d565b610e9f565b005b61049b611020565b6040516104a89190613573565b60405180910390f35b6104cb60048036038101906104c69190612bba565b611026565b005b6104d5611088565b6040516104e29190613256565b60405180910390f35b6104f361109b565b6040516105009190613573565b60405180910390f35b610523600480360381019061051e9190612da9565b6110a1565b6040516105309190613271565b60405180910390f35b610541611148565b60405161054e9190613271565b60405180910390f35b610571600480360381019061056c9190612cbd565b6111d6565b005b61058d60048036038101906105889190612da9565b61141d565b005b6105a960048036038101906105a49190612b27565b6115ca565b6040516105b69190613256565b60405180910390f35b6105d960048036038101906105d49190612acd565b61165e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064e575061064d82611756565b5b9050919050565b606060008054610664906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610690906137f5565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b60006106f282611838565b610731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072890613433565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061077782610beb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107df906134b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108076118a4565b73ffffffffffffffffffffffffffffffffffffffff1614806108365750610835816108306118a4565b6115ca565b5b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c906133b3565b60405180910390fd5b61087f83836118ac565b505050565b61088c6118a4565b73ffffffffffffffffffffffffffffffffffffffff166108aa610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790613453565b60405180910390fd5b80600d908051906020019061091692919061282e565b5050565b6000600880549050905090565b6109386109326118a4565b82611965565b610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90613513565b60405180910390fd5b610982838383611a43565b505050565b600061099283610c9d565b82106109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906132b3565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610a3782611838565b9050919050565b610a5983838360405180602001604052806000815250611026565b505050565b6000610a6861091a565b8210610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090613533565b60405180910390fd5b60088281548110610abd57610abc61398e565b5b90600052602060002001549050919050565b610ad76118a4565b73ffffffffffffffffffffffffffffffffffffffff16610af5610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613453565b60405180910390fd5b80600e8190555050565b610b5d6118a4565b73ffffffffffffffffffffffffffffffffffffffff16610b7b610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc890613453565b60405180910390fd5b80600c9080519060200190610be792919061282e565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b906133f3565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d05906133d3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d5d6118a4565b73ffffffffffffffffffffffffffffffffffffffff16610d7b610ddd565b73ffffffffffffffffffffffffffffffffffffffff1614610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890613453565b60405180910390fd5b610ddb6000611c9f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e16906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e42906137f5565b8015610e8f5780601f10610e6457610100808354040283529160200191610e8f565b820191906000526020600020905b815481529060010190602001808311610e7257829003601f168201915b5050505050905090565b600f5481565b610ea76118a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90613353565b60405180910390fd5b8060056000610f226118a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fcf6118a4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110149190613256565b60405180910390a35050565b60105481565b6110376110316118a4565b83611965565b611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d90613513565b60405180910390fd5b61108284848484611d65565b50505050565b600b60149054906101000a900460ff1681565b600e5481565b60606110ac82611838565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290613493565b60405180910390fd5b60006110f5611dc1565b905060008151116111155760405180602001604052806000815250611140565b8061111f84611e53565b6040516020016111309291906131cb565b6040516020818303038152906040525b915050919050565b600d8054611155906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611181906137f5565b80156111ce5780601f106111a3576101008083540402835291602001916111ce565b820191906000526020600020905b8154815290600101906020018083116111b157829003601f168201915b505050505081565b600f54421161121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190613293565b60405180910390fd5b601054421061125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906134d3565b60405180910390fd5b600e54815111156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b906134f3565b60405180910390fd5b60005b8151811015611419573373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106113185761131761398e565b5b60200260200101516040518263ffffffff1660e01b815260040161133c9190613573565b60206040518083038186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138c9190612afa565b73ffffffffffffffffffffffffffffffffffffffff16146113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d990613373565b60405180910390fd5b611406338383815181106113f9576113f861398e565b5b6020026020010151611fb4565b808061141190613858565b9150506112a7565b5050565b600f544211611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613293565b60405180910390fd5b60105442106114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613553565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016115179190613573565b60206040518083038186803b15801561152f57600080fd5b505afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190612afa565b73ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613373565b60405180910390fd5b6115c73382611fb4565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116666118a4565b73ffffffffffffffffffffffffffffffffffffffff16611684610ddd565b73ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906132f3565b60405180910390fd5b61175381611c9f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061182157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611831575061183082611fd2565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661191f83610beb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061197082611838565b6119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690613393565b60405180910390fd5b60006119ba83610beb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a2957508373ffffffffffffffffffffffffffffffffffffffff16611a11846106e7565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a3a5750611a3981856115ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a6382610beb565b73ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090613473565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613333565b60405180910390fd5b611b3483838361203c565b611b3f6000826118ac565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8f919061370b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611be69190613684565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d70848484611a43565b611d7c84848484612150565b611dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db2906132d3565b60405180910390fd5b50505050565b6060600c8054611dd0906137f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfc906137f5565b8015611e495780601f10611e1e57610100808354040283529160200191611e49565b820191906000526020600020905b815481529060010190602001808311611e2c57829003601f168201915b5050505050905090565b60606000821415611e9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611faf565b600082905060005b60008214611ecd578080611eb690613858565b915050600a82611ec691906136da565b9150611ea3565b60008167ffffffffffffffff811115611ee957611ee86139bd565b5b6040519080825280601f01601f191660200182016040528015611f1b5781602001600182028036833780820191505090505b5090505b60008514611fa857600182611f34919061370b565b9150600a85611f4391906138a1565b6030611f4f9190613684565b60f81b818381518110611f6557611f6461398e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fa191906136da565b9450611f1f565b8093505050505b919050565b611fce8282604051806020016040528060008152506122e7565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612047838383612342565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208a5761208581612347565b6120c9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120c8576120c78382612390565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561210c57612107816124fd565b61214b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461214a5761214982826125ce565b5b5b505050565b60006121718473ffffffffffffffffffffffffffffffffffffffff1661264d565b156122da578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261219a6118a4565b8786866040518563ffffffff1660e01b81526004016121bc949392919061320a565b602060405180830381600087803b1580156121d657600080fd5b505af192505050801561220757506040513d601f19601f820116820180604052508101906122049190612d33565b60015b61228a573d8060008114612237576040519150601f19603f3d011682016040523d82523d6000602084013e61223c565b606091505b50600081511415612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906132d3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506122df565b600190505b949350505050565b6122f18383612660565b6122fe6000848484612150565b61233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906132d3565b60405180910390fd5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161239d84610c9d565b6123a7919061370b565b905060006007600084815260200190815260200160002054905081811461248c576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612511919061370b565b90506000600960008481526020019081526020016000205490506000600883815481106125415761254061398e565b5b9060005260206000200154905080600883815481106125635761256261398e565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125b2576125b161395f565b5b6001900381819060005260206000200160009055905550505050565b60006125d983610c9d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790613413565b60405180910390fd5b6126d981611838565b15612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090613313565b60405180910390fd5b6127256000838361203c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127759190613684565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461283a906137f5565b90600052602060002090601f01602090048101928261285c57600085556128a3565b82601f1061287557805160ff19168380011785556128a3565b828001600101855582156128a3579182015b828111156128a2578251825591602001919060010190612887565b5b5090506128b091906128b4565b5090565b5b808211156128cd5760008160009055506001016128b5565b5090565b60006128e46128df846135b3565b61358e565b90508083825260208201905082856020860282011115612907576129066139f1565b5b60005b85811015612937578161291d8882612ab8565b84526020840193506020830192505060018101905061290a565b5050509392505050565b600061295461294f846135df565b61358e565b9050828152602081018484840111156129705761296f6139f6565b5b61297b8482856137b3565b509392505050565b600061299661299184613610565b61358e565b9050828152602081018484840111156129b2576129b16139f6565b5b6129bd8482856137b3565b509392505050565b6000813590506129d481613fff565b92915050565b6000815190506129e981613fff565b92915050565b600082601f830112612a0457612a036139ec565b5b8135612a148482602086016128d1565b91505092915050565b600081359050612a2c81614016565b92915050565b600081359050612a418161402d565b92915050565b600081519050612a568161402d565b92915050565b600082601f830112612a7157612a706139ec565b5b8135612a81848260208601612941565b91505092915050565b600082601f830112612a9f57612a9e6139ec565b5b8135612aaf848260208601612983565b91505092915050565b600081359050612ac781614044565b92915050565b600060208284031215612ae357612ae2613a00565b5b6000612af1848285016129c5565b91505092915050565b600060208284031215612b1057612b0f613a00565b5b6000612b1e848285016129da565b91505092915050565b60008060408385031215612b3e57612b3d613a00565b5b6000612b4c858286016129c5565b9250506020612b5d858286016129c5565b9150509250929050565b600080600060608486031215612b8057612b7f613a00565b5b6000612b8e868287016129c5565b9350506020612b9f868287016129c5565b9250506040612bb086828701612ab8565b9150509250925092565b60008060008060808587031215612bd457612bd3613a00565b5b6000612be2878288016129c5565b9450506020612bf3878288016129c5565b9350506040612c0487828801612ab8565b925050606085013567ffffffffffffffff811115612c2557612c246139fb565b5b612c3187828801612a5c565b91505092959194509250565b60008060408385031215612c5457612c53613a00565b5b6000612c62858286016129c5565b9250506020612c7385828601612a1d565b9150509250929050565b60008060408385031215612c9457612c93613a00565b5b6000612ca2858286016129c5565b9250506020612cb385828601612ab8565b9150509250929050565b600060208284031215612cd357612cd2613a00565b5b600082013567ffffffffffffffff811115612cf157612cf06139fb565b5b612cfd848285016129ef565b91505092915050565b600060208284031215612d1c57612d1b613a00565b5b6000612d2a84828501612a32565b91505092915050565b600060208284031215612d4957612d48613a00565b5b6000612d5784828501612a47565b91505092915050565b600060208284031215612d7657612d75613a00565b5b600082013567ffffffffffffffff811115612d9457612d936139fb565b5b612da084828501612a8a565b91505092915050565b600060208284031215612dbf57612dbe613a00565b5b6000612dcd84828501612ab8565b91505092915050565b612ddf8161373f565b82525050565b612dee81613751565b82525050565b6000612dff82613641565b612e098185613657565b9350612e198185602086016137c2565b612e2281613a05565b840191505092915050565b6000612e388261364c565b612e428185613668565b9350612e528185602086016137c2565b612e5b81613a05565b840191505092915050565b6000612e718261364c565b612e7b8185613679565b9350612e8b8185602086016137c2565b80840191505092915050565b6000612ea4601083613668565b9150612eaf82613a16565b602082019050919050565b6000612ec7602b83613668565b9150612ed282613a3f565b604082019050919050565b6000612eea603283613668565b9150612ef582613a8e565b604082019050919050565b6000612f0d602683613668565b9150612f1882613add565b604082019050919050565b6000612f30601c83613668565b9150612f3b82613b2c565b602082019050919050565b6000612f53602483613668565b9150612f5e82613b55565b604082019050919050565b6000612f76601983613668565b9150612f8182613ba4565b602082019050919050565b6000612f99602883613668565b9150612fa482613bcd565b604082019050919050565b6000612fbc602c83613668565b9150612fc782613c1c565b604082019050919050565b6000612fdf603883613668565b9150612fea82613c6b565b604082019050919050565b6000613002602a83613668565b915061300d82613cba565b604082019050919050565b6000613025602983613668565b915061303082613d09565b604082019050919050565b6000613048602083613668565b915061305382613d58565b602082019050919050565b600061306b602c83613668565b915061307682613d81565b604082019050919050565b600061308e602083613668565b915061309982613dd0565b602082019050919050565b60006130b1602983613668565b91506130bc82613df9565b604082019050919050565b60006130d4602f83613668565b91506130df82613e48565b604082019050919050565b60006130f7602183613668565b915061310282613e97565b604082019050919050565b600061311a600f83613668565b915061312582613ee6565b602082019050919050565b600061313d601183613668565b915061314882613f0f565b602082019050919050565b6000613160603183613668565b915061316b82613f38565b604082019050919050565b6000613183602c83613668565b915061318e82613f87565b604082019050919050565b60006131a6600f83613668565b91506131b182613fd6565b602082019050919050565b6131c5816137a9565b82525050565b60006131d78285612e66565b91506131e38284612e66565b91508190509392505050565b60006020820190506132046000830184612dd6565b92915050565b600060808201905061321f6000830187612dd6565b61322c6020830186612dd6565b61323960408301856131bc565b818103606083015261324b8184612df4565b905095945050505050565b600060208201905061326b6000830184612de5565b92915050565b6000602082019050818103600083015261328b8184612e2d565b905092915050565b600060208201905081810360008301526132ac81612e97565b9050919050565b600060208201905081810360008301526132cc81612eba565b9050919050565b600060208201905081810360008301526132ec81612edd565b9050919050565b6000602082019050818103600083015261330c81612f00565b9050919050565b6000602082019050818103600083015261332c81612f23565b9050919050565b6000602082019050818103600083015261334c81612f46565b9050919050565b6000602082019050818103600083015261336c81612f69565b9050919050565b6000602082019050818103600083015261338c81612f8c565b9050919050565b600060208201905081810360008301526133ac81612faf565b9050919050565b600060208201905081810360008301526133cc81612fd2565b9050919050565b600060208201905081810360008301526133ec81612ff5565b9050919050565b6000602082019050818103600083015261340c81613018565b9050919050565b6000602082019050818103600083015261342c8161303b565b9050919050565b6000602082019050818103600083015261344c8161305e565b9050919050565b6000602082019050818103600083015261346c81613081565b9050919050565b6000602082019050818103600083015261348c816130a4565b9050919050565b600060208201905081810360008301526134ac816130c7565b9050919050565b600060208201905081810360008301526134cc816130ea565b9050919050565b600060208201905081810360008301526134ec8161310d565b9050919050565b6000602082019050818103600083015261350c81613130565b9050919050565b6000602082019050818103600083015261352c81613153565b9050919050565b6000602082019050818103600083015261354c81613176565b9050919050565b6000602082019050818103600083015261356c81613199565b9050919050565b600060208201905061358860008301846131bc565b92915050565b60006135986135a9565b90506135a48282613827565b919050565b6000604051905090565b600067ffffffffffffffff8211156135ce576135cd6139bd565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135fa576135f96139bd565b5b61360382613a05565b9050602081019050919050565b600067ffffffffffffffff82111561362b5761362a6139bd565b5b61363482613a05565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061368f826137a9565b915061369a836137a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136cf576136ce6138d2565b5b828201905092915050565b60006136e5826137a9565b91506136f0836137a9565b925082613700576136ff613901565b5b828204905092915050565b6000613716826137a9565b9150613721836137a9565b925082821015613734576137336138d2565b5b828203905092915050565b600061374a82613789565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137e05780820151818401526020810190506137c5565b838111156137ef576000848401525b50505050565b6000600282049050600182168061380d57607f821691505b6020821081141561382157613820613930565b5b50919050565b61383082613a05565b810181811067ffffffffffffffff8211171561384f5761384e6139bd565b5b80604052505050565b6000613863826137a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613896576138956138d2565b5b600182019050919050565b60006138ac826137a9565b91506138b7836137a9565b9250826138c7576138c6613901565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206d7573742073746172742100000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53757065727965746920616e6420536e6f2044656d6f6e20494420646f65736e60008201527f2774206d61746368000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f53616c652068617320456e646564210000000000000000000000000000000000600082015250565b7f4d6178204d696e74204578636565646564000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f53616c652068617320656e646564210000000000000000000000000000000000600082015250565b6140088161373f565b811461401357600080fd5b50565b61401f81613751565b811461402a57600080fd5b50565b6140368161375d565b811461404157600080fd5b50565b61404d816137a9565b811461405857600080fd5b5056fea2646970667358221220ec991a1222b60722d9eb68faaf1bea0d319df15ee62144fc45492960486f4ca664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000617083500000000000000000000000003f0785095a660fee131eebcd5aa243e529c217860000000000000000000000000000000000000000000000000000000000000009536e6f2044656d6f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004536e6f4400000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Sno Demon
Arg [1] : symbol (string): SnoD
Arg [2] : maxMint (uint256): 50
Arg [3] : saleStartTime (uint256): 1634763600
Arg [4] : dependentContractAddress (address): 0x3F0785095A660fEe131eEbcD5aa243e529C21786
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [3] : 0000000000000000000000000000000000000000000000000000000061708350
Arg [4] : 0000000000000000000000003f0785095a660fee131eebcd5aa243e529c21786
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [6] : 536e6f2044656d6f6e0000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 536e6f4400000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43803:2094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34809:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21700:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23259:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22782:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44607:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35449:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24149:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35117:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44734:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24559:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35639:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44512:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44952:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21394:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21124:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42616:103;;;:::i;:::-;;41965:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21869:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44018:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23552:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44054:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24815:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43882:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43990:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22044:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43953:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45402:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45046:348;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23918:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42874:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34809:224;34911:4;34950:35;34935:50;;;:11;:50;;;;:90;;;;34989:36;35013:11;34989:23;:36::i;:::-;34935:90;34928:97;;34809:224;;;:::o;21700:100::-;21754:13;21787:5;21780:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21700:100;:::o;23259:221::-;23335:7;23363:16;23371:7;23363;:16::i;:::-;23355:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23448:15;:24;23464:7;23448:24;;;;;;;;;;;;;;;;;;;;;23441:31;;23259:221;;;:::o;22782:411::-;22863:13;22879:23;22894:7;22879:14;:23::i;:::-;22863:39;;22927:5;22921:11;;:2;:11;;;;22913:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23021:5;23005:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23030:37;23047:5;23054:12;:10;:12::i;:::-;23030:16;:37::i;:::-;23005:62;22983:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23164:21;23173:2;23177:7;23164:8;:21::i;:::-;22852:341;22782:411;;:::o;44607:121::-;42196:12;:10;:12::i;:::-;42185:23;;:7;:5;:7::i;:::-;:23;;;42177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44706:14:::1;44692:11;:28;;;;;;;;;;;;:::i;:::-;;44607:121:::0;:::o;35449:113::-;35510:7;35537:10;:17;;;;35530:24;;35449:113;:::o;24149:339::-;24344:41;24363:12;:10;:12::i;:::-;24377:7;24344:18;:41::i;:::-;24336:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24452:28;24462:4;24468:2;24472:7;24452:9;:28::i;:::-;24149:339;;;:::o;35117:256::-;35214:7;35250:23;35267:5;35250:16;:23::i;:::-;35242:5;:31;35234:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35339:12;:19;35352:5;35339:19;;;;;;;;;;;;;;;:26;35359:5;35339:26;;;;;;;;;;;;35332:33;;35117:256;;;;:::o;44734:106::-;44792:4;44816:16;44824:7;44816;:16::i;:::-;44809:23;;44734:106;;;:::o;24559:185::-;24697:39;24714:4;24720:2;24724:7;24697:39;;;;;;;;;;;;:16;:39::i;:::-;24559:185;;;:::o;35639:233::-;35714:7;35750:30;:28;:30::i;:::-;35742:5;:38;35734:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35847:10;35858:5;35847:17;;;;;;;;:::i;:::-;;;;;;;;;;35840:24;;35639:233;;;:::o;44512:89::-;42196:12;:10;:12::i;:::-;42185:23;;:7;:5;:7::i;:::-;:23;;;42177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44586:7:::1;44574:9;:19;;;;44512:89:::0;:::o;44952:88::-;42196:12;:10;:12::i;:::-;42185:23;;:7;:5;:7::i;:::-;:23;;;42177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45029:3:::1;45019:7;:13;;;;;;;;;;;;:::i;:::-;;44952:88:::0;:::o;21394:239::-;21466:7;21486:13;21502:7;:16;21510:7;21502:16;;;;;;;;;;;;;;;;;;;;;21486:32;;21554:1;21537:19;;:5;:19;;;;21529:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21620:5;21613:12;;;21394:239;;;:::o;21124:208::-;21196:7;21241:1;21224:19;;:5;:19;;;;21216:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21308:9;:16;21318:5;21308:16;;;;;;;;;;;;;;;;21301:23;;21124:208;;;:::o;42616:103::-;42196:12;:10;:12::i;:::-;42185:23;;:7;:5;:7::i;:::-;:23;;;42177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42681:30:::1;42708:1;42681:18;:30::i;:::-;42616:103::o:0;41965:87::-;42011:7;42038:6;;;;;;;;;;;42031:13;;41965:87;:::o;21869:104::-;21925:13;21958:7;21951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21869:104;:::o;44018:29::-;;;;:::o;23552:295::-;23667:12;:10;:12::i;:::-;23655:24;;:8;:24;;;;23647:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23767:8;23722:18;:32;23741:12;:10;:12::i;:::-;23722:32;;;;;;;;;;;;;;;:42;23755:8;23722:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23820:8;23791:48;;23806:12;:10;:12::i;:::-;23791:48;;;23830:8;23791:48;;;;;;:::i;:::-;;;;;;;;23552:295;;:::o;44054:27::-;;;;:::o;24815:328::-;24990:41;25009:12;:10;:12::i;:::-;25023:7;24990:18;:41::i;:::-;24982:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25096:39;25110:4;25116:2;25120:7;25129:5;25096:13;:39::i;:::-;24815:328;;;;:::o;43882:35::-;;;;;;;;;;;;;:::o;43990:21::-;;;;:::o;22044:334::-;22117:13;22151:16;22159:7;22151;:16::i;:::-;22143:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22232:21;22256:10;:8;:10::i;:::-;22232:34;;22308:1;22290:7;22284:21;:25;:86;;;;;;;;;;;;;;;;;22336:7;22345:18;:7;:16;:18::i;:::-;22319:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22284:86;22277:93;;;22044:334;;;:::o;43953:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45402:492::-;45494:14;;45476:15;:32;45468:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45566:12;;45548:15;:30;45540:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45636:9;;45617:8;:15;:28;;45609:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45683:6;45678:209;45697:8;:15;45693:1;:19;45678:209;;;45771:10;45742:39;;:4;;;;;;;;;;;:12;;;45755:8;45764:1;45755:11;;;;;;;;:::i;:::-;;;;;;;;45742:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;45734:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45841:34;45851:10;45863:8;45872:1;45863:11;;;;;;;;:::i;:::-;;;;;;;;45841:9;:34::i;:::-;45714:3;;;;;:::i;:::-;;;;45678:209;;;;45402:492;:::o;45046:348::-;45134:14;;45116:15;:32;45108:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45206:12;;45188:15;:30;45180:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45286:10;45257:39;;:4;;;;;;;;;;;:12;;;45270:11;45257:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;45249:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;45352:34;45362:10;45374:11;45352:9;:34::i;:::-;45046:348;:::o;23918:164::-;24015:4;24039:18;:25;24058:5;24039:25;;;;;;;;;;;;;;;:35;24065:8;24039:35;;;;;;;;;;;;;;;;;;;;;;;;;24032:42;;23918:164;;;;:::o;42874:201::-;42196:12;:10;:12::i;:::-;42185:23;;:7;:5;:7::i;:::-;:23;;;42177:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42983:1:::1;42963:22;;:8;:22;;;;42955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43039:28;43058:8;43039:18;:28::i;:::-;42874:201:::0;:::o;20767:293::-;20869:4;20917:25;20902:40;;;:11;:40;;;;:101;;;;20970:33;20955:48;;;:11;:48;;;;20902:101;:150;;;;21016:36;21040:11;21016:23;:36::i;:::-;20902:150;20886:166;;20767:293;;;:::o;26653:127::-;26718:4;26770:1;26742:30;;:7;:16;26750:7;26742:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26735:37;;26653:127;;;:::o;16196:98::-;16249:7;16276:10;16269:17;;16196:98;:::o;30635:174::-;30737:2;30710:15;:24;30726:7;30710:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30793:7;30789:2;30755:46;;30764:23;30779:7;30764:14;:23::i;:::-;30755:46;;;;;;;;;;;;30635:174;;:::o;26947:348::-;27040:4;27065:16;27073:7;27065;:16::i;:::-;27057:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27141:13;27157:23;27172:7;27157:14;:23::i;:::-;27141:39;;27210:5;27199:16;;:7;:16;;;:51;;;;27243:7;27219:31;;:20;27231:7;27219:11;:20::i;:::-;:31;;;27199:51;:87;;;;27254:32;27271:5;27278:7;27254:16;:32::i;:::-;27199:87;27191:96;;;26947:348;;;;:::o;29939:578::-;30098:4;30071:31;;:23;30086:7;30071:14;:23::i;:::-;:31;;;30063:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30181:1;30167:16;;:2;:16;;;;30159:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:39;30258:4;30264:2;30268:7;30237:20;:39::i;:::-;30341:29;30358:1;30362:7;30341:8;:29::i;:::-;30402:1;30383:9;:15;30393:4;30383:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30431:1;30414:9;:13;30424:2;30414:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30462:2;30443:7;:16;30451:7;30443:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30501:7;30497:2;30482:27;;30491:4;30482:27;;;;;;;;;;;;29939:578;;;:::o;43235:191::-;43309:16;43328:6;;;;;;;;;;;43309:25;;43354:8;43345:6;;:17;;;;;;;;;;;;;;;;;;43409:8;43378:40;;43399:8;43378:40;;;;;;;;;;;;43298:128;43235:191;:::o;26025:315::-;26182:28;26192:4;26198:2;26202:7;26182:9;:28::i;:::-;26229:48;26252:4;26258:2;26262:7;26271:5;26229:22;:48::i;:::-;26221:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26025:315;;;;:::o;44846:100::-;44898:13;44931:7;44924:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44846:100;:::o;16726:723::-;16782:13;17012:1;17003:5;:10;16999:53;;;17030:10;;;;;;;;;;;;;;;;;;;;;16999:53;17062:12;17077:5;17062:20;;17093:14;17118:78;17133:1;17125:4;:9;17118:78;;17151:8;;;;;:::i;:::-;;;;17182:2;17174:10;;;;;:::i;:::-;;;17118:78;;;17206:19;17238:6;17228:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17206:39;;17256:154;17272:1;17263:5;:10;17256:154;;17300:1;17290:11;;;;;:::i;:::-;;;17367:2;17359:5;:10;;;;:::i;:::-;17346:2;:24;;;;:::i;:::-;17333:39;;17316:6;17323;17316:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17396:2;17387:11;;;;;:::i;:::-;;;17256:154;;;17434:6;17420:21;;;;;16726:723;;;;:::o;27637:110::-;27713:26;27723:2;27727:7;27713:26;;;;;;;;;;;;:9;:26::i;:::-;27637:110;;:::o;19284:157::-;19369:4;19408:25;19393:40;;;:11;:40;;;;19386:47;;19284:157;;;:::o;36485:589::-;36629:45;36656:4;36662:2;36666:7;36629:26;:45::i;:::-;36707:1;36691:18;;:4;:18;;;36687:187;;;36726:40;36758:7;36726:31;:40::i;:::-;36687:187;;;36796:2;36788:10;;:4;:10;;;36784:90;;36815:47;36848:4;36854:7;36815:32;:47::i;:::-;36784:90;36687:187;36902:1;36888:16;;:2;:16;;;36884:183;;;36921:45;36958:7;36921:36;:45::i;:::-;36884:183;;;36994:4;36988:10;;:2;:10;;;36984:83;;37015:40;37043:2;37047:7;37015:27;:40::i;:::-;36984:83;36884:183;36485:589;;;:::o;31374:799::-;31529:4;31550:15;:2;:13;;;:15::i;:::-;31546:620;;;31602:2;31586:36;;;31623:12;:10;:12::i;:::-;31637:4;31643:7;31652:5;31586:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31582:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31845:1;31828:6;:13;:18;31824:272;;;31871:60;;;;;;;;;;:::i;:::-;;;;;;;;31824:272;32046:6;32040:13;32031:6;32027:2;32023:15;32016:38;31582:529;31719:41;;;31709:51;;;:6;:51;;;;31702:58;;;;;31546:620;32150:4;32143:11;;31374:799;;;;;;;:::o;27974:321::-;28104:18;28110:2;28114:7;28104:5;:18::i;:::-;28155:54;28186:1;28190:2;28194:7;28203:5;28155:22;:54::i;:::-;28133:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27974:321;;;:::o;32745:126::-;;;;:::o;37797:164::-;37901:10;:17;;;;37874:15;:24;37890:7;37874:24;;;;;;;;;;;:44;;;;37929:10;37945:7;37929:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37797:164;:::o;38588:988::-;38854:22;38904:1;38879:22;38896:4;38879:16;:22::i;:::-;:26;;;;:::i;:::-;38854:51;;38916:18;38937:17;:26;38955:7;38937:26;;;;;;;;;;;;38916:47;;39084:14;39070:10;:28;39066:328;;39115:19;39137:12;:18;39150:4;39137:18;;;;;;;;;;;;;;;:34;39156:14;39137:34;;;;;;;;;;;;39115:56;;39221:11;39188:12;:18;39201:4;39188:18;;;;;;;;;;;;;;;:30;39207:10;39188:30;;;;;;;;;;;:44;;;;39338:10;39305:17;:30;39323:11;39305:30;;;;;;;;;;;:43;;;;39100:294;39066:328;39490:17;:26;39508:7;39490:26;;;;;;;;;;;39483:33;;;39534:12;:18;39547:4;39534:18;;;;;;;;;;;;;;;:34;39553:14;39534:34;;;;;;;;;;;39527:41;;;38669:907;;38588:988;;:::o;39871:1079::-;40124:22;40169:1;40149:10;:17;;;;:21;;;;:::i;:::-;40124:46;;40181:18;40202:15;:24;40218:7;40202:24;;;;;;;;;;;;40181:45;;40553:19;40575:10;40586:14;40575:26;;;;;;;;:::i;:::-;;;;;;;;;;40553:48;;40639:11;40614:10;40625;40614:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40750:10;40719:15;:28;40735:11;40719:28;;;;;;;;;;;:41;;;;40891:15;:24;40907:7;40891:24;;;;;;;;;;;40884:31;;;40926:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39942:1008;;;39871:1079;:::o;37375:221::-;37460:14;37477:20;37494:2;37477:16;:20::i;:::-;37460:37;;37535:7;37508:12;:16;37521:2;37508:16;;;;;;;;;;;;;;;:24;37525:6;37508:24;;;;;;;;;;;:34;;;;37582:6;37553:17;:26;37571:7;37553:26;;;;;;;;;;;:35;;;;37449:147;37375:221;;:::o;8236:387::-;8296:4;8504:12;8571:7;8559:20;8551:28;;8614:1;8607:4;:8;8600:15;;;8236:387;;;:::o;28631:382::-;28725:1;28711:16;;:2;:16;;;;28703:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28784:16;28792:7;28784;:16::i;:::-;28783:17;28775:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28846:45;28875:1;28879:2;28883:7;28846:20;:45::i;:::-;28921:1;28904:9;:13;28914:2;28904:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28952:2;28933:7;:16;28941:7;28933:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28997:7;28993:2;28972:33;;28989:1;28972:33;;;;;;;;;;;;28631:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:370::-;1968:5;2017:3;2010:4;2002:6;1998:17;1994:27;1984:122;;2025:79;;:::i;:::-;1984:122;2142:6;2129:20;2167:94;2257:3;2249:6;2242:4;2234:6;2230:17;2167:94;:::i;:::-;2158:103;;1974:293;1897:370;;;;:::o;2273:133::-;2316:5;2354:6;2341:20;2332:29;;2370:30;2394:5;2370:30;:::i;:::-;2273:133;;;;:::o;2412:137::-;2457:5;2495:6;2482:20;2473:29;;2511:32;2537:5;2511:32;:::i;:::-;2412:137;;;;:::o;2555:141::-;2611:5;2642:6;2636:13;2627:22;;2658:32;2684:5;2658:32;:::i;:::-;2555:141;;;;:::o;2715:338::-;2770:5;2819:3;2812:4;2804:6;2800:17;2796:27;2786:122;;2827:79;;:::i;:::-;2786:122;2944:6;2931:20;2969:78;3043:3;3035:6;3028:4;3020:6;3016:17;2969:78;:::i;:::-;2960:87;;2776:277;2715:338;;;;:::o;3073:340::-;3129:5;3178:3;3171:4;3163:6;3159:17;3155:27;3145:122;;3186:79;;:::i;:::-;3145:122;3303:6;3290:20;3328:79;3403:3;3395:6;3388:4;3380:6;3376:17;3328:79;:::i;:::-;3319:88;;3135:278;3073:340;;;;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:351::-;3969:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:119;;;4024:79;;:::i;:::-;3986:119;4144:1;4169:64;4225:7;4216:6;4205:9;4201:22;4169:64;:::i;:::-;4159:74;;4115:128;3899:351;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:619::-;4813:6;4821;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:119;;;4884:79;;:::i;:::-;4846:119;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4736:619;;;;;:::o;5361:943::-;5456:6;5464;5472;5480;5529:3;5517:9;5508:7;5504:23;5500:33;5497:120;;;5536:79;;:::i;:::-;5497:120;5656:1;5681:53;5726:7;5717:6;5706:9;5702:22;5681:53;:::i;:::-;5671:63;;5627:117;5783:2;5809:53;5854:7;5845:6;5834:9;5830:22;5809:53;:::i;:::-;5799:63;;5754:118;5911:2;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5882:118;6067:2;6056:9;6052:18;6039:32;6098:18;6090:6;6087:30;6084:117;;;6120:79;;:::i;:::-;6084:117;6225:62;6279:7;6270:6;6259:9;6255:22;6225:62;:::i;:::-;6215:72;;6010:287;5361:943;;;;;;;:::o;6310:468::-;6375:6;6383;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:53;6628:7;6619:6;6608:9;6604:22;6583:53;:::i;:::-;6573:63;;6529:117;6685:2;6711:50;6753:7;6744:6;6733:9;6729:22;6711:50;:::i;:::-;6701:60;;6656:115;6310:468;;;;;:::o;6784:474::-;6852:6;6860;6909:2;6897:9;6888:7;6884:23;6880:32;6877:119;;;6915:79;;:::i;:::-;6877:119;7035:1;7060:53;7105:7;7096:6;7085:9;7081:22;7060:53;:::i;:::-;7050:63;;7006:117;7162:2;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;:::i;:::-;7178:63;;7133:118;6784:474;;;;;:::o;7264:539::-;7348:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:119;;;7403:79;;:::i;:::-;7365:119;7551:1;7540:9;7536:17;7523:31;7581:18;7573:6;7570:30;7567:117;;;7603:79;;:::i;:::-;7567:117;7708:78;7778:7;7769:6;7758:9;7754:22;7708:78;:::i;:::-;7698:88;;7494:302;7264:539;;;;:::o;7809:327::-;7867:6;7916:2;7904:9;7895:7;7891:23;7887:32;7884:119;;;7922:79;;:::i;:::-;7884:119;8042:1;8067:52;8111:7;8102:6;8091:9;8087:22;8067:52;:::i;:::-;8057:62;;8013:116;7809:327;;;;:::o;8142:349::-;8211:6;8260:2;8248:9;8239:7;8235:23;8231:32;8228:119;;;8266:79;;:::i;:::-;8228:119;8386:1;8411:63;8466:7;8457:6;8446:9;8442:22;8411:63;:::i;:::-;8401:73;;8357:127;8142:349;;;;:::o;8497:509::-;8566:6;8615:2;8603:9;8594:7;8590:23;8586:32;8583:119;;;8621:79;;:::i;:::-;8583:119;8769:1;8758:9;8754:17;8741:31;8799:18;8791:6;8788:30;8785:117;;;8821:79;;:::i;:::-;8785:117;8926:63;8981:7;8972:6;8961:9;8957:22;8926:63;:::i;:::-;8916:73;;8712:287;8497:509;;;;:::o;9012:329::-;9071:6;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9246:1;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9217:117;9012:329;;;;:::o;9347:118::-;9434:24;9452:5;9434:24;:::i;:::-;9429:3;9422:37;9347:118;;:::o;9471:109::-;9552:21;9567:5;9552:21;:::i;:::-;9547:3;9540:34;9471:109;;:::o;9586:360::-;9672:3;9700:38;9732:5;9700:38;:::i;:::-;9754:70;9817:6;9812:3;9754:70;:::i;:::-;9747:77;;9833:52;9878:6;9873:3;9866:4;9859:5;9855:16;9833:52;:::i;:::-;9910:29;9932:6;9910:29;:::i;:::-;9905:3;9901:39;9894:46;;9676:270;9586:360;;;;:::o;9952:364::-;10040:3;10068:39;10101:5;10068:39;:::i;:::-;10123:71;10187:6;10182:3;10123:71;:::i;:::-;10116:78;;10203:52;10248:6;10243:3;10236:4;10229:5;10225:16;10203:52;:::i;:::-;10280:29;10302:6;10280:29;:::i;:::-;10275:3;10271:39;10264:46;;10044:272;9952:364;;;;:::o;10322:377::-;10428:3;10456:39;10489:5;10456:39;:::i;:::-;10511:89;10593:6;10588:3;10511:89;:::i;:::-;10504:96;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:6;10681:3;10677:16;10670:23;;10432:267;10322:377;;;;:::o;10705:366::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:::-;12335:3;12356:67;12420:2;12415:3;12356:67;:::i;:::-;12349:74;;12432:93;12521:3;12432:93;:::i;:::-;12550:2;12545:3;12541:12;12534:19;;12193:366;;;:::o;12565:::-;12707:3;12728:67;12792:2;12787:3;12728:67;:::i;:::-;12721:74;;12804:93;12893:3;12804:93;:::i;:::-;12922:2;12917:3;12913:12;12906:19;;12565:366;;;:::o;12937:::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:::-;13823:3;13844:67;13908:2;13903:3;13844:67;:::i;:::-;13837:74;;13920:93;14009:3;13920:93;:::i;:::-;14038:2;14033:3;14029:12;14022:19;;13681:366;;;:::o;14053:::-;14195:3;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14292:93;14381:3;14292:93;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14053:366;;;:::o;14425:::-;14567:3;14588:67;14652:2;14647:3;14588:67;:::i;:::-;14581:74;;14664:93;14753:3;14664:93;:::i;:::-;14782:2;14777:3;14773:12;14766:19;;14425:366;;;:::o;14797:::-;14939:3;14960:67;15024:2;15019:3;14960:67;:::i;:::-;14953:74;;15036:93;15125:3;15036:93;:::i;:::-;15154:2;15149:3;15145:12;15138:19;;14797:366;;;:::o;15169:::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15169:366;;;:::o;15541:::-;15683:3;15704:67;15768:2;15763:3;15704:67;:::i;:::-;15697:74;;15780:93;15869:3;15780:93;:::i;:::-;15898:2;15893:3;15889:12;15882:19;;15541:366;;;:::o;15913:::-;16055:3;16076:67;16140:2;16135:3;16076:67;:::i;:::-;16069:74;;16152:93;16241:3;16152:93;:::i;:::-;16270:2;16265:3;16261:12;16254:19;;15913:366;;;:::o;16285:::-;16427:3;16448:67;16512:2;16507:3;16448:67;:::i;:::-;16441:74;;16524:93;16613:3;16524:93;:::i;:::-;16642:2;16637:3;16633:12;16626:19;;16285:366;;;:::o;16657:::-;16799:3;16820:67;16884:2;16879:3;16820:67;:::i;:::-;16813:74;;16896:93;16985:3;16896:93;:::i;:::-;17014:2;17009:3;17005:12;16998:19;;16657:366;;;:::o;17029:::-;17171:3;17192:67;17256:2;17251:3;17192:67;:::i;:::-;17185:74;;17268:93;17357:3;17268:93;:::i;:::-;17386:2;17381:3;17377:12;17370:19;;17029:366;;;:::o;17401:::-;17543:3;17564:67;17628:2;17623:3;17564:67;:::i;:::-;17557:74;;17640:93;17729:3;17640:93;:::i;:::-;17758:2;17753:3;17749:12;17742:19;;17401:366;;;:::o;17773:::-;17915:3;17936:67;18000:2;17995:3;17936:67;:::i;:::-;17929:74;;18012:93;18101:3;18012:93;:::i;:::-;18130:2;18125:3;18121:12;18114:19;;17773:366;;;:::o;18145:::-;18287:3;18308:67;18372:2;18367:3;18308:67;:::i;:::-;18301:74;;18384:93;18473:3;18384:93;:::i;:::-;18502:2;18497:3;18493:12;18486:19;;18145:366;;;:::o;18517:::-;18659:3;18680:67;18744:2;18739:3;18680:67;:::i;:::-;18673:74;;18756:93;18845:3;18756:93;:::i;:::-;18874:2;18869:3;18865:12;18858:19;;18517:366;;;:::o;18889:::-;19031:3;19052:67;19116:2;19111:3;19052:67;:::i;:::-;19045:74;;19128:93;19217:3;19128:93;:::i;:::-;19246:2;19241:3;19237:12;19230:19;;18889:366;;;:::o;19261:118::-;19348:24;19366:5;19348:24;:::i;:::-;19343:3;19336:37;19261:118;;:::o;19385:435::-;19565:3;19587:95;19678:3;19669:6;19587:95;:::i;:::-;19580:102;;19699:95;19790:3;19781:6;19699:95;:::i;:::-;19692:102;;19811:3;19804:10;;19385:435;;;;;:::o;19826:222::-;19919:4;19957:2;19946:9;19942:18;19934:26;;19970:71;20038:1;20027:9;20023:17;20014:6;19970:71;:::i;:::-;19826:222;;;;:::o;20054:640::-;20249:4;20287:3;20276:9;20272:19;20264:27;;20301:71;20369:1;20358:9;20354:17;20345:6;20301:71;:::i;:::-;20382:72;20450:2;20439:9;20435:18;20426:6;20382:72;:::i;:::-;20464;20532:2;20521:9;20517:18;20508:6;20464:72;:::i;:::-;20583:9;20577:4;20573:20;20568:2;20557:9;20553:18;20546:48;20611:76;20682:4;20673:6;20611:76;:::i;:::-;20603:84;;20054:640;;;;;;;:::o;20700:210::-;20787:4;20825:2;20814:9;20810:18;20802:26;;20838:65;20900:1;20889:9;20885:17;20876:6;20838:65;:::i;:::-;20700:210;;;;:::o;20916:313::-;21029:4;21067:2;21056:9;21052:18;21044:26;;21116:9;21110:4;21106:20;21102:1;21091:9;21087:17;21080:47;21144:78;21217:4;21208:6;21144:78;:::i;:::-;21136:86;;20916:313;;;;:::o;21235:419::-;21401:4;21439:2;21428:9;21424:18;21416:26;;21488:9;21482:4;21478:20;21474:1;21463:9;21459:17;21452:47;21516:131;21642:4;21516:131;:::i;:::-;21508:139;;21235:419;;;:::o;21660:::-;21826:4;21864:2;21853:9;21849:18;21841:26;;21913:9;21907:4;21903:20;21899:1;21888:9;21884:17;21877:47;21941:131;22067:4;21941:131;:::i;:::-;21933:139;;21660:419;;;:::o;22085:::-;22251:4;22289:2;22278:9;22274:18;22266:26;;22338:9;22332:4;22328:20;22324:1;22313:9;22309:17;22302:47;22366:131;22492:4;22366:131;:::i;:::-;22358:139;;22085:419;;;:::o;22510:::-;22676:4;22714:2;22703:9;22699:18;22691:26;;22763:9;22757:4;22753:20;22749:1;22738:9;22734:17;22727:47;22791:131;22917:4;22791:131;:::i;:::-;22783:139;;22510:419;;;:::o;22935:::-;23101:4;23139:2;23128:9;23124:18;23116:26;;23188:9;23182:4;23178:20;23174:1;23163:9;23159:17;23152:47;23216:131;23342:4;23216:131;:::i;:::-;23208:139;;22935:419;;;:::o;23360:::-;23526:4;23564:2;23553:9;23549:18;23541:26;;23613:9;23607:4;23603:20;23599:1;23588:9;23584:17;23577:47;23641:131;23767:4;23641:131;:::i;:::-;23633:139;;23360:419;;;:::o;23785:::-;23951:4;23989:2;23978:9;23974:18;23966:26;;24038:9;24032:4;24028:20;24024:1;24013:9;24009:17;24002:47;24066:131;24192:4;24066:131;:::i;:::-;24058:139;;23785:419;;;:::o;24210:::-;24376:4;24414:2;24403:9;24399:18;24391:26;;24463:9;24457:4;24453:20;24449:1;24438:9;24434:17;24427:47;24491:131;24617:4;24491:131;:::i;:::-;24483:139;;24210:419;;;:::o;24635:::-;24801:4;24839:2;24828:9;24824:18;24816:26;;24888:9;24882:4;24878:20;24874:1;24863:9;24859:17;24852:47;24916:131;25042:4;24916:131;:::i;:::-;24908:139;;24635:419;;;:::o;25060:::-;25226:4;25264:2;25253:9;25249:18;25241:26;;25313:9;25307:4;25303:20;25299:1;25288:9;25284:17;25277:47;25341:131;25467:4;25341:131;:::i;:::-;25333:139;;25060:419;;;:::o;25485:::-;25651:4;25689:2;25678:9;25674:18;25666:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25766:131;25892:4;25766:131;:::i;:::-;25758:139;;25485:419;;;:::o;25910:::-;26076:4;26114:2;26103:9;26099:18;26091:26;;26163:9;26157:4;26153:20;26149:1;26138:9;26134:17;26127:47;26191:131;26317:4;26191:131;:::i;:::-;26183:139;;25910:419;;;:::o;26335:::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:::-;26926:4;26964:2;26953:9;26949:18;26941:26;;27013:9;27007:4;27003:20;26999:1;26988:9;26984:17;26977:47;27041:131;27167:4;27041:131;:::i;:::-;27033:139;;26760:419;;;:::o;27185:::-;27351:4;27389:2;27378:9;27374:18;27366:26;;27438:9;27432:4;27428:20;27424:1;27413:9;27409:17;27402:47;27466:131;27592:4;27466:131;:::i;:::-;27458:139;;27185:419;;;:::o;27610:::-;27776:4;27814:2;27803:9;27799:18;27791:26;;27863:9;27857:4;27853:20;27849:1;27838:9;27834:17;27827:47;27891:131;28017:4;27891:131;:::i;:::-;27883:139;;27610:419;;;:::o;28035:::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:131;28867:4;28741:131;:::i;:::-;28733:139;;28460:419;;;:::o;28885:::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:::-;29901:4;29939:2;29928:9;29924:18;29916:26;;29988:9;29982:4;29978:20;29974:1;29963:9;29959:17;29952:47;30016:131;30142:4;30016:131;:::i;:::-;30008:139;;29735:419;;;:::o;30160:::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:222::-;31103:4;31141:2;31130:9;31126:18;31118:26;;31154:71;31222:1;31211:9;31207:17;31198:6;31154:71;:::i;:::-;31010:222;;;;:::o;31238:129::-;31272:6;31299:20;;:::i;:::-;31289:30;;31328:33;31356:4;31348:6;31328:33;:::i;:::-;31238:129;;;:::o;31373:75::-;31406:6;31439:2;31433:9;31423:19;;31373:75;:::o;31454:311::-;31531:4;31621:18;31613:6;31610:30;31607:56;;;31643:18;;:::i;:::-;31607:56;31693:4;31685:6;31681:17;31673:25;;31753:4;31747;31743:15;31735:23;;31454:311;;;:::o;31771:307::-;31832:4;31922:18;31914:6;31911:30;31908:56;;;31944:18;;:::i;:::-;31908:56;31982:29;32004:6;31982:29;:::i;:::-;31974:37;;32066:4;32060;32056:15;32048:23;;31771:307;;;:::o;32084:308::-;32146:4;32236:18;32228:6;32225:30;32222:56;;;32258:18;;:::i;:::-;32222:56;32296:29;32318:6;32296:29;:::i;:::-;32288:37;;32380:4;32374;32370:15;32362:23;;32084:308;;;:::o;32398:98::-;32449:6;32483:5;32477:12;32467:22;;32398:98;;;:::o;32502:99::-;32554:6;32588:5;32582:12;32572:22;;32502:99;;;:::o;32607:168::-;32690:11;32724:6;32719:3;32712:19;32764:4;32759:3;32755:14;32740:29;;32607:168;;;;:::o;32781:169::-;32865:11;32899:6;32894:3;32887:19;32939:4;32934:3;32930:14;32915:29;;32781:169;;;;:::o;32956:148::-;33058:11;33095:3;33080:18;;32956:148;;;;:::o;33110:305::-;33150:3;33169:20;33187:1;33169:20;:::i;:::-;33164:25;;33203:20;33221:1;33203:20;:::i;:::-;33198:25;;33357:1;33289:66;33285:74;33282:1;33279:81;33276:107;;;33363:18;;:::i;:::-;33276:107;33407:1;33404;33400:9;33393:16;;33110:305;;;;:::o;33421:185::-;33461:1;33478:20;33496:1;33478:20;:::i;:::-;33473:25;;33512:20;33530:1;33512:20;:::i;:::-;33507:25;;33551:1;33541:35;;33556:18;;:::i;:::-;33541:35;33598:1;33595;33591:9;33586:14;;33421:185;;;;:::o;33612:191::-;33652:4;33672:20;33690:1;33672:20;:::i;:::-;33667:25;;33706:20;33724:1;33706:20;:::i;:::-;33701:25;;33745:1;33742;33739:8;33736:34;;;33750:18;;:::i;:::-;33736:34;33795:1;33792;33788:9;33780:17;;33612:191;;;;:::o;33809:96::-;33846:7;33875:24;33893:5;33875:24;:::i;:::-;33864:35;;33809:96;;;:::o;33911:90::-;33945:7;33988:5;33981:13;33974:21;33963:32;;33911:90;;;:::o;34007:149::-;34043:7;34083:66;34076:5;34072:78;34061:89;;34007:149;;;:::o;34162:126::-;34199:7;34239:42;34232:5;34228:54;34217:65;;34162:126;;;:::o;34294:77::-;34331:7;34360:5;34349:16;;34294:77;;;:::o;34377:154::-;34461:6;34456:3;34451;34438:30;34523:1;34514:6;34509:3;34505:16;34498:27;34377:154;;;:::o;34537:307::-;34605:1;34615:113;34629:6;34626:1;34623:13;34615:113;;;34714:1;34709:3;34705:11;34699:18;34695:1;34690:3;34686:11;34679:39;34651:2;34648:1;34644:10;34639:15;;34615:113;;;34746:6;34743:1;34740:13;34737:101;;;34826:1;34817:6;34812:3;34808:16;34801:27;34737:101;34586:258;34537:307;;;:::o;34850:320::-;34894:6;34931:1;34925:4;34921:12;34911:22;;34978:1;34972:4;34968:12;34999:18;34989:81;;35055:4;35047:6;35043:17;35033:27;;34989:81;35117:2;35109:6;35106:14;35086:18;35083:38;35080:84;;;35136:18;;:::i;:::-;35080:84;34901:269;34850:320;;;:::o;35176:281::-;35259:27;35281:4;35259:27;:::i;:::-;35251:6;35247:40;35389:6;35377:10;35374:22;35353:18;35341:10;35338:34;35335:62;35332:88;;;35400:18;;:::i;:::-;35332:88;35440:10;35436:2;35429:22;35219:238;35176:281;;:::o;35463:233::-;35502:3;35525:24;35543:5;35525:24;:::i;:::-;35516:33;;35571:66;35564:5;35561:77;35558:103;;;35641:18;;:::i;:::-;35558:103;35688:1;35681:5;35677:13;35670:20;;35463:233;;;:::o;35702:176::-;35734:1;35751:20;35769:1;35751:20;:::i;:::-;35746:25;;35785:20;35803:1;35785:20;:::i;:::-;35780:25;;35824:1;35814:35;;35829:18;;:::i;:::-;35814:35;35870:1;35867;35863:9;35858:14;;35702:176;;;;:::o;35884:180::-;35932:77;35929:1;35922:88;36029:4;36026:1;36019:15;36053:4;36050:1;36043:15;36070:180;36118:77;36115:1;36108:88;36215:4;36212:1;36205:15;36239:4;36236:1;36229:15;36256:180;36304:77;36301:1;36294:88;36401:4;36398:1;36391:15;36425:4;36422:1;36415:15;36442:180;36490:77;36487:1;36480:88;36587:4;36584:1;36577:15;36611:4;36608:1;36601:15;36628:180;36676:77;36673:1;36666:88;36773:4;36770:1;36763:15;36797:4;36794:1;36787:15;36814:180;36862:77;36859:1;36852:88;36959:4;36956:1;36949:15;36983:4;36980:1;36973:15;37000:117;37109:1;37106;37099:12;37123:117;37232:1;37229;37222:12;37246:117;37355:1;37352;37345:12;37369:117;37478:1;37475;37468:12;37492:117;37601:1;37598;37591:12;37615:102;37656:6;37707:2;37703:7;37698:2;37691:5;37687:14;37683:28;37673:38;;37615:102;;;:::o;37723:166::-;37863:18;37859:1;37851:6;37847:14;37840:42;37723:166;:::o;37895:230::-;38035:34;38031:1;38023:6;38019:14;38012:58;38104:13;38099:2;38091:6;38087:15;38080:38;37895:230;:::o;38131:237::-;38271:34;38267:1;38259:6;38255:14;38248:58;38340:20;38335:2;38327:6;38323:15;38316:45;38131:237;:::o;38374:225::-;38514:34;38510:1;38502:6;38498:14;38491:58;38583:8;38578:2;38570:6;38566:15;38559:33;38374:225;:::o;38605:178::-;38745:30;38741:1;38733:6;38729:14;38722:54;38605:178;:::o;38789:223::-;38929:34;38925:1;38917:6;38913:14;38906:58;38998:6;38993:2;38985:6;38981:15;38974:31;38789:223;:::o;39018:175::-;39158:27;39154:1;39146:6;39142:14;39135:51;39018:175;:::o;39199:227::-;39339:34;39335:1;39327:6;39323:14;39316:58;39408:10;39403:2;39395:6;39391:15;39384:35;39199:227;:::o;39432:231::-;39572:34;39568:1;39560:6;39556:14;39549:58;39641:14;39636:2;39628:6;39624:15;39617:39;39432:231;:::o;39669:243::-;39809:34;39805:1;39797:6;39793:14;39786:58;39878:26;39873:2;39865:6;39861:15;39854:51;39669:243;:::o;39918:229::-;40058:34;40054:1;40046:6;40042:14;40035:58;40127:12;40122:2;40114:6;40110:15;40103:37;39918:229;:::o;40153:228::-;40293:34;40289:1;40281:6;40277:14;40270:58;40362:11;40357:2;40349:6;40345:15;40338:36;40153:228;:::o;40387:182::-;40527:34;40523:1;40515:6;40511:14;40504:58;40387:182;:::o;40575:231::-;40715:34;40711:1;40703:6;40699:14;40692:58;40784:14;40779:2;40771:6;40767:15;40760:39;40575:231;:::o;40812:182::-;40952:34;40948:1;40940:6;40936:14;40929:58;40812:182;:::o;41000:228::-;41140:34;41136:1;41128:6;41124:14;41117:58;41209:11;41204:2;41196:6;41192:15;41185:36;41000:228;:::o;41234:234::-;41374:34;41370:1;41362:6;41358:14;41351:58;41443:17;41438:2;41430:6;41426:15;41419:42;41234:234;:::o;41474:220::-;41614:34;41610:1;41602:6;41598:14;41591:58;41683:3;41678:2;41670:6;41666:15;41659:28;41474:220;:::o;41700:165::-;41840:17;41836:1;41828:6;41824:14;41817:41;41700:165;:::o;41871:167::-;42011:19;42007:1;41999:6;41995:14;41988:43;41871:167;:::o;42044:236::-;42184:34;42180:1;42172:6;42168:14;42161:58;42253:19;42248:2;42240:6;42236:15;42229:44;42044:236;:::o;42286:231::-;42426:34;42422:1;42414:6;42410:14;42403:58;42495:14;42490:2;42482:6;42478:15;42471:39;42286:231;:::o;42523:165::-;42663:17;42659:1;42651:6;42647:14;42640:41;42523:165;:::o;42694:122::-;42767:24;42785:5;42767:24;:::i;:::-;42760:5;42757:35;42747:63;;42806:1;42803;42796:12;42747:63;42694:122;:::o;42822:116::-;42892:21;42907:5;42892:21;:::i;:::-;42885:5;42882:32;42872:60;;42928:1;42925;42918:12;42872:60;42822:116;:::o;42944:120::-;43016:23;43033:5;43016:23;:::i;:::-;43009:5;43006:34;42996:62;;43054:1;43051;43044:12;42996:62;42944:120;:::o;43070:122::-;43143:24;43161:5;43143:24;:::i;:::-;43136:5;43133:35;43123:63;;43182:1;43179;43172:12;43123:63;43070:122;:::o
Swarm Source
ipfs://ec991a1222b60722d9eb68faaf1bea0d319df15ee62144fc45492960486f4ca6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.