Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 HULLY
Holders
584
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 HULLYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
HULLYUniverse
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-03 */ // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity 0.8.2; contract HULLYUniverse is ERC721Enumerable, Ownable { using Strings for uint256; // STATE VARIABLES bool public paused = false; bool public matured = false; bool public whitelistSale = true; // SALES VARIABLES uint256 public maxSupply = 10000; uint256 public price = 150000000000000000; uint256 public mintLimit = 5; uint256 public holdLimit = 5; uint256 public holdCurrentLimit = 1; // URI VARIABLES string public baseURI; string public baseJSON = ".json"; string public notMaturedUri; // ADDRESS VARIABLES address public treasury; address[] public whitelists; mapping(address => uint256) public holdCurrent; constructor(string memory _name, string memory _symbol, string memory _initNotMaturedUri, address _treasury) ERC721(_name, _symbol) { setNotMaturedURI(_initNotMaturedUri); treasury = _treasury; } // PUBLIC FUNCTION function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "Paused"); require(_mintAmount > 0, "At least 1 nft"); require(_mintAmount <= mintLimit, "Exceeded mint limit"); require(holdCurrent[msg.sender] + _mintAmount <= holdLimit, "Exceeded hold limit"); require(supply + _mintAmount <= maxSupply, "Exceeded max supply"); if (msg.sender != owner()) { if(whitelistSale == true) { require(isWhitelisted(msg.sender), "Not whitelisted"); require(holdCurrent[msg.sender] < holdCurrentLimit, "Can only once mint whitelist period"); } require(msg.value >= price * _mintAmount, "Insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { holdCurrent[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelists.length; i++) { if (whitelists[i] == _user) { return true; } } return false; } function assetList(address _owner) public view returns (uint256[] memory) { uint256 assetCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](assetCount); for (uint256 i; i < assetCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { string memory currentBaseURI = _baseURI(); require(_exists(tokenId), "Invalid token ID"); if(matured == false) { return string(abi.encodePacked(notMaturedUri, tokenId.toString(), baseJSON)); } return string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseJSON)); } // OWNER FUNCTION function mintPrivate(address to, uint256 _mintAmount) public onlyOwner { uint256 supply = totalSupply(); require(!paused, "Paused"); require(_mintAmount > 0, "At least 1 nft"); require(supply + _mintAmount <= maxSupply, "Exceeded max supply"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(to, supply + i); } } function addWhitelistGroup(address[] calldata _insertArray) public onlyOwner{ for (uint256 i; i < _insertArray.length; i++) { bool isOvelap = false; address addAddress = _insertArray[i]; for (uint256 j; j < whitelists.length; j++) { if (whitelists[j] == addAddress) { isOvelap = true; break; } } if (!isOvelap) { whitelists.push(addAddress); } } } function setHoldLimit(uint256 _holdLimit) public onlyOwner { holdLimit = _holdLimit; } function setHoldCurrentLimit(uint256 _holdCurrentLimit) public onlyOwner { holdCurrentLimit = _holdCurrentLimit; } function setPrice(uint256 _setPrice) public onlyOwner { price = _setPrice; } function setTreasury(address _setTreasury) public onlyOwner { treasury = _setTreasury; } function setMintLimit(uint256 _mintLimit) public onlyOwner { mintLimit = _mintLimit; } function setBaseURI(string memory _setBaseURI) public onlyOwner { baseURI = _setBaseURI; } function setBaseJSON(string memory _setBaseJSON) public onlyOwner { baseJSON = _setBaseJSON; } function setNotMaturedURI(string memory _setNotMaturedURI) public onlyOwner { notMaturedUri = _setNotMaturedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function mature(bool _state) public onlyOwner { matured = _state; } function setWhitelistSale(bool _state) public onlyOwner { whitelistSale = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(treasury).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initNotMaturedUri","type":"string"},{"internalType":"address","name":"_treasury","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":[{"internalType":"address[]","name":"_insertArray","type":"address[]"}],"name":"addWhitelistGroup","outputs":[],"stateMutability":"nonpayable","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":"assetList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseJSON","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"","type":"address"}],"name":"holdCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdCurrentLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"mature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"matured","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintPrivate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notMaturedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_setBaseJSON","type":"string"}],"name":"setBaseJSON","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_setBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdCurrentLimit","type":"uint256"}],"name":"setHoldCurrentLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdLimit","type":"uint256"}],"name":"setHoldLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_setNotMaturedURI","type":"string"}],"name":"setNotMaturedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_setPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_setTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelists","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506001600a60166101000a81548160ff021916908315150217905550612710600b55670214e8348c4f0000600c556005600d556005600e556001600f556040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060119080519060200190620000c39291906200034c565b50348015620000d157600080fd5b5060405162005e0c38038062005e0c8339818101604052810190620000f7919062000485565b83838160009080519060200190620001119291906200034c565b5080600190805190602001906200012a9291906200034c565b5050506200014d62000141620001a960201b60201c565b620001b160201b60201c565b6200015e826200027760201b60201c565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050506200077d565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000287620001a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ad6200032260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000306576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fd9062000563565b60405180910390fd5b80601290805190602001906200031e9291906200034c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200035a906200065f565b90600052602060002090601f0160209004810192826200037e5760008555620003ca565b82601f106200039957805160ff1916838001178555620003ca565b82800160010185558215620003ca579182015b82811115620003c9578251825591602001919060010190620003ac565b5b509050620003d99190620003dd565b5090565b5b80821115620003f8576000816000905550600101620003de565b5090565b6000620004136200040d84620005ae565b62000585565b9050828152602081018484840111156200042c57600080fd5b6200043984828562000629565b509392505050565b600081519050620004528162000763565b92915050565b600082601f8301126200046a57600080fd5b81516200047c848260208601620003fc565b91505092915050565b600080600080608085870312156200049c57600080fd5b600085015167ffffffffffffffff811115620004b757600080fd5b620004c58782880162000458565b945050602085015167ffffffffffffffff811115620004e357600080fd5b620004f18782880162000458565b935050604085015167ffffffffffffffff8111156200050f57600080fd5b6200051d8782880162000458565b9250506060620005308782880162000441565b91505092959194509250565b60006200054b602083620005e4565b915062000558826200073a565b602082019050919050565b600060208201905081810360008301526200057e816200053c565b9050919050565b600062000591620005a4565b90506200059f828262000695565b919050565b6000604051905090565b600067ffffffffffffffff821115620005cc57620005cb620006fa565b5b620005d78262000729565b9050602081019050919050565b600082825260208201905092915050565b6000620006028262000609565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620006495780820151818401526020810190506200062c565b8381111562000659576000848401525b50505050565b600060028204905060018216806200067857607f821691505b602082108114156200068f576200068e620006cb565b5b50919050565b620006a08262000729565b810181811067ffffffffffffffff82111715620006c257620006c1620006fa565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200076e81620005f5565b81146200077a57600080fd5b50565b61567f806200078d6000396000f3fe6080604052600436106102c95760003560e01c80636c0360eb11610175578063a0712d68116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610ad6578063f0f4426014610b13578063f2fde38b14610b3c578063fe4d5add14610b65576102c9565b8063c87b56dd14610a45578063ca7ce3ec14610a82578063d5abeb0114610aab576102c9565b8063a0712d6814610932578063a22cb4651461094e578063a4b1f42f14610977578063ac4523a0146109b4578063ac67b020146109df578063b88d4fde14610a1c576102c9565b80638da5cb5b1161012e5780638da5cb5b1461083457806391b7f5ed1461085f57806395d89b4114610888578063996517cf146108b35780639e6a1d7d146108de578063a035b1fe14610907576102c9565b80636c0360eb146107385780636f68ebae146107635780636fd009e41461078e57806370a08231146107b7578063715018a6146107f45780637e2d050d1461080b576102c9565b806331ffd6f1116102345780634de906de116101ed578063573af956116101c7578063573af9561461067c5780635c975abb146106a557806361d027b3146106d05780636352211e146106fb576102c9565b80634de906de146105eb5780634f6ccce71461061657806355f804b314610653576102c9565b806331ffd6f1146104fc5780633627d3a1146105275780633af32abf146105505780633ccfd60b1461058d57806342842e0e14610597578063454c87b3146105c0576102c9565b806318160ddd1161028657806318160ddd146103ee5780631feaa80a1461041957806321fc4b8c14610442578063239111b11461046b57806323b872dd146104965780632f745c59146104bf576102c9565b8063019f9ed7146102ce57806301ffc9a7146102f757806302329a291461033457806306fdde031461035d578063081812fc14610388578063095ea7b3146103c5575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190614012565b610ba2565b005b34801561030357600080fd5b5061031e6004803603810190610319919061403b565b610c3b565b60405161032b919061477c565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190614012565b610cb5565b005b34801561036957600080fd5b50610372610d4e565b60405161037f9190614797565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa91906140ce565b610de0565b6040516103bc91906146f3565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e79190613f91565b610e65565b005b3480156103fa57600080fd5b50610403610f7d565b6040516104109190614af9565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613fcd565b610f8a565b005b34801561044e57600080fd5b506104696004803603810190610464919061408d565b6111af565b005b34801561047757600080fd5b50610480611245565b60405161048d9190614797565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e8b565b6112d3565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190613f91565b611333565b6040516104f39190614af9565b60405180910390f35b34801561050857600080fd5b506105116113d8565b60405161051e919061477c565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613f91565b6113eb565b005b34801561055c57600080fd5b5061057760048036038101906105729190613e26565b611592565b604051610584919061477c565b60405180910390f35b610595611667565b005b3480156105a357600080fd5b506105be60048036038101906105b99190613e8b565b61177e565b005b3480156105cc57600080fd5b506105d561179e565b6040516105e2919061477c565b60405180910390f35b3480156105f757600080fd5b506106006117b1565b60405161060d9190614af9565b60405180910390f35b34801561062257600080fd5b5061063d600480360381019061063891906140ce565b6117b7565b60405161064a9190614af9565b60405180910390f35b34801561065f57600080fd5b5061067a6004803603810190610675919061408d565b61184e565b005b34801561068857600080fd5b506106a3600480360381019061069e919061408d565b6118e4565b005b3480156106b157600080fd5b506106ba61197a565b6040516106c7919061477c565b60405180910390f35b3480156106dc57600080fd5b506106e561198d565b6040516106f291906146f3565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906140ce565b6119b3565b60405161072f91906146f3565b60405180910390f35b34801561074457600080fd5b5061074d611a65565b60405161075a9190614797565b60405180910390f35b34801561076f57600080fd5b50610778611af3565b6040516107859190614af9565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b091906140ce565b611af9565b005b3480156107c357600080fd5b506107de60048036038101906107d99190613e26565b611b7f565b6040516107eb9190614af9565b60405180910390f35b34801561080057600080fd5b50610809611c37565b005b34801561081757600080fd5b50610832600480360381019061082d91906140ce565b611cbf565b005b34801561084057600080fd5b50610849611d45565b60405161085691906146f3565b60405180910390f35b34801561086b57600080fd5b50610886600480360381019061088191906140ce565b611d6f565b005b34801561089457600080fd5b5061089d611df5565b6040516108aa9190614797565b60405180910390f35b3480156108bf57600080fd5b506108c8611e87565b6040516108d59190614af9565b60405180910390f35b3480156108ea57600080fd5b50610905600480360381019061090091906140ce565b611e8d565b005b34801561091357600080fd5b5061091c611f13565b6040516109299190614af9565b60405180910390f35b61094c600480360381019061094791906140ce565b611f19565b005b34801561095a57600080fd5b5061097560048036038101906109709190613f55565b6122df565b005b34801561098357600080fd5b5061099e60048036038101906109999190613e26565b612460565b6040516109ab919061475a565b60405180910390f35b3480156109c057600080fd5b506109c961255a565b6040516109d69190614797565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a019190613e26565b6125e8565b604051610a139190614af9565b60405180910390f35b348015610a2857600080fd5b50610a436004803603810190610a3e9190613eda565b612600565b005b348015610a5157600080fd5b50610a6c6004803603810190610a6791906140ce565b612662565b604051610a799190614797565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa49190614012565b612740565b005b348015610ab757600080fd5b50610ac06127d9565b604051610acd9190614af9565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613e4f565b6127df565b604051610b0a919061477c565b60405180910390f35b348015610b1f57600080fd5b50610b3a6004803603810190610b359190613e26565b612873565b005b348015610b4857600080fd5b50610b636004803603810190610b5e9190613e26565b612933565b005b348015610b7157600080fd5b50610b8c6004803603810190610b8791906140ce565b612a2b565b604051610b9991906146f3565b60405180910390f35b610baa612a6a565b73ffffffffffffffffffffffffffffffffffffffff16610bc8611d45565b73ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c15906149d9565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cae5750610cad82612a72565b5b9050919050565b610cbd612a6a565b73ffffffffffffffffffffffffffffffffffffffff16610cdb611d45565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906149d9565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b606060008054610d5d90614e02565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8990614e02565b8015610dd65780601f10610dab57610100808354040283529160200191610dd6565b820191906000526020600020905b815481529060010190602001808311610db957829003601f168201915b5050505050905090565b6000610deb82612b54565b610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906149b9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e70826119b3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890614a59565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f00612a6a565b73ffffffffffffffffffffffffffffffffffffffff161480610f2f5750610f2e81610f29612a6a565b6127df565b5b610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f65906148f9565b60405180910390fd5b610f788383612bc0565b505050565b6000600880549050905090565b610f92612a6a565b73ffffffffffffffffffffffffffffffffffffffff16610fb0611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd906149d9565b60405180910390fd5b60005b828290508110156111aa57600080848484818110611050577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906110659190613e26565b905060005b60148054905081101561112b578173ffffffffffffffffffffffffffffffffffffffff16601482815481106110c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611118576001925061112b565b808061112390614e65565b91505061106a565b5081611195576014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505080806111a290614e65565b915050611009565b505050565b6111b7612a6a565b73ffffffffffffffffffffffffffffffffffffffff166111d5611d45565b73ffffffffffffffffffffffffffffffffffffffff161461122b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611222906149d9565b60405180910390fd5b8060119080519060200190611241929190613c00565b5050565b6011805461125290614e02565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90614e02565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081565b6112e46112de612a6a565b82612c79565b611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90614a79565b60405180910390fd5b61132e838383612d57565b505050565b600061133e83611b7f565b821061137f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611376906147f9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60169054906101000a900460ff1681565b6113f3612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611411611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e906149d9565b60405180910390fd5b6000611471610f7d565b9050600a60149054906101000a900460ff16156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba906147b9565b60405180910390fd5b60008211611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614ab9565b60405180910390fd5b600b5482826115159190614c37565b1115611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614a19565b60405180910390fd5b6000600190505b82811161158c576115798482846115749190614c37565b612fb3565b808061158490614e65565b91505061155d565b50505050565b600080600090505b60148054905081101561165c578273ffffffffffffffffffffffffffffffffffffffff16601482815481106115f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611649576001915050611662565b808061165490614e65565b91505061159a565b50600090505b919050565b61166f612a6a565b73ffffffffffffffffffffffffffffffffffffffff1661168d611d45565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da906149d9565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161172b906146de565b60006040518083038185875af1925050503d8060008114611768576040519150601f19603f3d011682016040523d82523d6000602084013e61176d565b606091505b505090508061177b57600080fd5b50565b61179983838360405180602001604052806000815250612600565b505050565b600a60159054906101000a900460ff1681565b600f5481565b60006117c1610f7d565b8210611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990614a99565b60405180910390fd5b6008828154811061183c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611856612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611874611d45565b73ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906149d9565b60405180910390fd5b80601090805190602001906118e0929190613c00565b5050565b6118ec612a6a565b73ffffffffffffffffffffffffffffffffffffffff1661190a611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906149d9565b60405180910390fd5b8060129080519060200190611976929190613c00565b5050565b600a60149054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390614959565b60405180910390fd5b80915050919050565b60108054611a7290614e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9e90614e02565b8015611aeb5780601f10611ac057610100808354040283529160200191611aeb565b820191906000526020600020905b815481529060010190602001808311611ace57829003601f168201915b505050505081565b600e5481565b611b01612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611b1f611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906149d9565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614939565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c3f612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611c5d611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa906149d9565b60405180910390fd5b611cbd6000612fd1565b565b611cc7612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611ce5611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d32906149d9565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d77612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611d95611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de2906149d9565b60405180910390fd5b80600c8190555050565b606060018054611e0490614e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3090614e02565b8015611e7d5780601f10611e5257610100808354040283529160200191611e7d565b820191906000526020600020905b815481529060010190602001808311611e6057829003601f168201915b5050505050905090565b600d5481565b611e95612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611eb3611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906149d9565b60405180910390fd5b80600d8190555050565b600c5481565b6000611f23610f7d565b9050600a60149054906101000a900460ff1615611f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6c906147b9565b60405180910390fd5b60008211611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614ab9565b60405180910390fd5b600d54821115611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614979565b60405180910390fd5b600e5482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204b9190614c37565b111561208c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208390614ad9565b60405180910390fd5b600b54828261209b9190614c37565b11156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614a19565b60405180910390fd5b6120e4611d45565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461224f5760011515600a60169054906101000a900460ff16151514156121fe5761213b33611592565b61217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614919565b60405180910390fd5b600f54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f4906147d9565b60405180910390fd5b5b81600c5461220c9190614cbe565b34101561224e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612245906148d9565b60405180910390fd5b5b6000600190505b8281116122da57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906122ad90614e65565b91905055506122c73382846122c29190614c37565b612fb3565b80806122d290614e65565b915050612256565b505050565b6122e7612a6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614899565b60405180910390fd5b8060056000612362612a6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661240f612a6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612454919061477c565b60405180910390a35050565b6060600061246d83611b7f565b905060008167ffffffffffffffff8111156124b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124df5781602001602082028036833780820191505090505b50905060005b8281101561254f576124f78582611333565b828281518110612530577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061254790614e65565b9150506124e5565b508092505050919050565b6012805461256790614e02565b80601f016020809104026020016040519081016040528092919081815260200182805461259390614e02565b80156125e05780601f106125b5576101008083540402835291602001916125e0565b820191906000526020600020905b8154815290600101906020018083116125c357829003601f168201915b505050505081565b60156020528060005260406000206000915090505481565b61261161260b612a6a565b83612c79565b612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614a79565b60405180910390fd5b61265c84848484613097565b50505050565b6060600061266e6130f3565b905061267983612b54565b6126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af90614a39565b60405180910390fd5b60001515600a60159054906101000a900460ff161515141561270a5760126126df84613185565b60116040516020016126f3939291906146ad565b60405160208183030381529060405291505061273b565b8061271484613185565b60116040516020016127289392919061467c565b6040516020818303038152906040529150505b919050565b612748612a6a565b73ffffffffffffffffffffffffffffffffffffffff16612766611d45565b73ffffffffffffffffffffffffffffffffffffffff16146127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b3906149d9565b60405180910390fd5b80600a60166101000a81548160ff02191690831515021790555050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61287b612a6a565b73ffffffffffffffffffffffffffffffffffffffff16612899611d45565b73ffffffffffffffffffffffffffffffffffffffff16146128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e6906149d9565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61293b612a6a565b73ffffffffffffffffffffffffffffffffffffffff16612959611d45565b73ffffffffffffffffffffffffffffffffffffffff16146129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a6906149d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1690614839565b60405180910390fd5b612a2881612fd1565b50565b60148181548110612a3b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b3d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612b4d5750612b4c82613332565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c33836119b3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c8482612b54565b612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906148b9565b60405180910390fd5b6000612cce836119b3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d3d57508373ffffffffffffffffffffffffffffffffffffffff16612d2584610de0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d4e5750612d4d81856127df565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612d77826119b3565b73ffffffffffffffffffffffffffffffffffffffff1614612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc4906149f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3490614879565b60405180910390fd5b612e4883838361339c565b612e53600082612bc0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea39190614d18565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612efa9190614c37565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612fcd8282604051806020016040528060008152506134b0565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6130a2848484612d57565b6130ae8484848461350b565b6130ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e490614819565b60405180910390fd5b50505050565b60606010805461310290614e02565b80601f016020809104026020016040519081016040528092919081815260200182805461312e90614e02565b801561317b5780601f106131505761010080835404028352916020019161317b565b820191906000526020600020905b81548152906001019060200180831161315e57829003601f168201915b5050505050905090565b606060008214156131cd576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061332d565b600082905060005b600082146131ff5780806131e890614e65565b915050600a826131f89190614c8d565b91506131d5565b60008167ffffffffffffffff811115613241577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132735781602001600182028036833780820191505090505b5090505b600085146133265760018261328c9190614d18565b9150600a8561329b9190614eae565b60306132a79190614c37565b60f81b8183815181106132e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561331f9190614c8d565b9450613277565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133a78383836136a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ea576133e5816136a7565b613429565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134285761342783826136f0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561346c576134678161385d565b6134ab565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134aa576134a982826139a0565b5b5b505050565b6134ba8383613a1f565b6134c7600084848461350b565b613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614819565b60405180910390fd5b505050565b600061352c8473ffffffffffffffffffffffffffffffffffffffff16613bed565b15613695578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613555612a6a565b8786866040518563ffffffff1660e01b8152600401613577949392919061470e565b602060405180830381600087803b15801561359157600080fd5b505af19250505080156135c257506040513d601f19601f820116820180604052508101906135bf9190614064565b60015b613645573d80600081146135f2576040519150601f19603f3d011682016040523d82523d6000602084013e6135f7565b606091505b5060008151141561363d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363490614819565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061369a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136fd84611b7f565b6137079190614d18565b90506000600760008481526020019081526020016000205490508181146137ec576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138719190614d18565b90506000600960008481526020019081526020016000205490506000600883815481106138c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061390f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613984577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006139ab83611b7f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8690614999565b60405180910390fd5b613a9881612b54565b15613ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613acf90614859565b60405180910390fd5b613ae46000838361339c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b349190614c37565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613c0c90614e02565b90600052602060002090601f016020900481019282613c2e5760008555613c75565b82601f10613c4757805160ff1916838001178555613c75565b82800160010185558215613c75579182015b82811115613c74578251825591602001919060010190613c59565b5b509050613c829190613c86565b5090565b5b80821115613c9f576000816000905550600101613c87565b5090565b6000613cb6613cb184614b39565b614b14565b905082815260208101848484011115613cce57600080fd5b613cd9848285614dc0565b509392505050565b6000613cf4613cef84614b6a565b614b14565b905082815260208101848484011115613d0c57600080fd5b613d17848285614dc0565b509392505050565b600081359050613d2e816155ed565b92915050565b60008083601f840112613d4657600080fd5b8235905067ffffffffffffffff811115613d5f57600080fd5b602083019150836020820283011115613d7757600080fd5b9250929050565b600081359050613d8d81615604565b92915050565b600081359050613da28161561b565b92915050565b600081519050613db78161561b565b92915050565b600082601f830112613dce57600080fd5b8135613dde848260208601613ca3565b91505092915050565b600082601f830112613df857600080fd5b8135613e08848260208601613ce1565b91505092915050565b600081359050613e2081615632565b92915050565b600060208284031215613e3857600080fd5b6000613e4684828501613d1f565b91505092915050565b60008060408385031215613e6257600080fd5b6000613e7085828601613d1f565b9250506020613e8185828601613d1f565b9150509250929050565b600080600060608486031215613ea057600080fd5b6000613eae86828701613d1f565b9350506020613ebf86828701613d1f565b9250506040613ed086828701613e11565b9150509250925092565b60008060008060808587031215613ef057600080fd5b6000613efe87828801613d1f565b9450506020613f0f87828801613d1f565b9350506040613f2087828801613e11565b925050606085013567ffffffffffffffff811115613f3d57600080fd5b613f4987828801613dbd565b91505092959194509250565b60008060408385031215613f6857600080fd5b6000613f7685828601613d1f565b9250506020613f8785828601613d7e565b9150509250929050565b60008060408385031215613fa457600080fd5b6000613fb285828601613d1f565b9250506020613fc385828601613e11565b9150509250929050565b60008060208385031215613fe057600080fd5b600083013567ffffffffffffffff811115613ffa57600080fd5b61400685828601613d34565b92509250509250929050565b60006020828403121561402457600080fd5b600061403284828501613d7e565b91505092915050565b60006020828403121561404d57600080fd5b600061405b84828501613d93565b91505092915050565b60006020828403121561407657600080fd5b600061408484828501613da8565b91505092915050565b60006020828403121561409f57600080fd5b600082013567ffffffffffffffff8111156140b957600080fd5b6140c584828501613de7565b91505092915050565b6000602082840312156140e057600080fd5b60006140ee84828501613e11565b91505092915050565b6000614103838361465e565b60208301905092915050565b61411881614d4c565b82525050565b600061412982614bc0565b6141338185614bee565b935061413e83614b9b565b8060005b8381101561416f57815161415688826140f7565b975061416183614be1565b925050600181019050614142565b5085935050505092915050565b61418581614d5e565b82525050565b600061419682614bcb565b6141a08185614bff565b93506141b0818560208601614dcf565b6141b981614f9b565b840191505092915050565b60006141cf82614bd6565b6141d98185614c1b565b93506141e9818560208601614dcf565b6141f281614f9b565b840191505092915050565b600061420882614bd6565b6142128185614c2c565b9350614222818560208601614dcf565b80840191505092915050565b6000815461423b81614e02565b6142458186614c2c565b945060018216600081146142605760018114614271576142a4565b60ff198316865281860193506142a4565b61427a85614bab565b60005b8381101561429c5781548189015260018201915060208101905061427d565b838801955050505b50505092915050565b60006142ba600683614c1b565b91506142c582614fac565b602082019050919050565b60006142dd602383614c1b565b91506142e882614fd5565b604082019050919050565b6000614300602b83614c1b565b915061430b82615024565b604082019050919050565b6000614323603283614c1b565b915061432e82615073565b604082019050919050565b6000614346602683614c1b565b9150614351826150c2565b604082019050919050565b6000614369601c83614c1b565b915061437482615111565b602082019050919050565b600061438c602483614c1b565b91506143978261513a565b604082019050919050565b60006143af601983614c1b565b91506143ba82615189565b602082019050919050565b60006143d2602c83614c1b565b91506143dd826151b2565b604082019050919050565b60006143f5601283614c1b565b915061440082615201565b602082019050919050565b6000614418603883614c1b565b91506144238261522a565b604082019050919050565b600061443b600f83614c1b565b915061444682615279565b602082019050919050565b600061445e602a83614c1b565b9150614469826152a2565b604082019050919050565b6000614481602983614c1b565b915061448c826152f1565b604082019050919050565b60006144a4601383614c1b565b91506144af82615340565b602082019050919050565b60006144c7602083614c1b565b91506144d282615369565b602082019050919050565b60006144ea602c83614c1b565b91506144f582615392565b604082019050919050565b600061450d602083614c1b565b9150614518826153e1565b602082019050919050565b6000614530602983614c1b565b915061453b8261540a565b604082019050919050565b6000614553601383614c1b565b915061455e82615459565b602082019050919050565b6000614576601083614c1b565b915061458182615482565b602082019050919050565b6000614599602183614c1b565b91506145a4826154ab565b604082019050919050565b60006145bc600083614c10565b91506145c7826154fa565b600082019050919050565b60006145df603183614c1b565b91506145ea826154fd565b604082019050919050565b6000614602602c83614c1b565b915061460d8261554c565b604082019050919050565b6000614625600e83614c1b565b91506146308261559b565b602082019050919050565b6000614648601383614c1b565b9150614653826155c4565b602082019050919050565b61466781614db6565b82525050565b61467681614db6565b82525050565b600061468882866141fd565b915061469482856141fd565b91506146a0828461422e565b9150819050949350505050565b60006146b9828661422e565b91506146c582856141fd565b91506146d1828461422e565b9150819050949350505050565b60006146e9826145af565b9150819050919050565b6000602082019050614708600083018461410f565b92915050565b6000608082019050614723600083018761410f565b614730602083018661410f565b61473d604083018561466d565b818103606083015261474f818461418b565b905095945050505050565b60006020820190508181036000830152614774818461411e565b905092915050565b6000602082019050614791600083018461417c565b92915050565b600060208201905081810360008301526147b181846141c4565b905092915050565b600060208201905081810360008301526147d2816142ad565b9050919050565b600060208201905081810360008301526147f2816142d0565b9050919050565b60006020820190508181036000830152614812816142f3565b9050919050565b6000602082019050818103600083015261483281614316565b9050919050565b6000602082019050818103600083015261485281614339565b9050919050565b600060208201905081810360008301526148728161435c565b9050919050565b600060208201905081810360008301526148928161437f565b9050919050565b600060208201905081810360008301526148b2816143a2565b9050919050565b600060208201905081810360008301526148d2816143c5565b9050919050565b600060208201905081810360008301526148f2816143e8565b9050919050565b600060208201905081810360008301526149128161440b565b9050919050565b600060208201905081810360008301526149328161442e565b9050919050565b6000602082019050818103600083015261495281614451565b9050919050565b6000602082019050818103600083015261497281614474565b9050919050565b6000602082019050818103600083015261499281614497565b9050919050565b600060208201905081810360008301526149b2816144ba565b9050919050565b600060208201905081810360008301526149d2816144dd565b9050919050565b600060208201905081810360008301526149f281614500565b9050919050565b60006020820190508181036000830152614a1281614523565b9050919050565b60006020820190508181036000830152614a3281614546565b9050919050565b60006020820190508181036000830152614a5281614569565b9050919050565b60006020820190508181036000830152614a728161458c565b9050919050565b60006020820190508181036000830152614a92816145d2565b9050919050565b60006020820190508181036000830152614ab2816145f5565b9050919050565b60006020820190508181036000830152614ad281614618565b9050919050565b60006020820190508181036000830152614af28161463b565b9050919050565b6000602082019050614b0e600083018461466d565b92915050565b6000614b1e614b2f565b9050614b2a8282614e34565b919050565b6000604051905090565b600067ffffffffffffffff821115614b5457614b53614f6c565b5b614b5d82614f9b565b9050602081019050919050565b600067ffffffffffffffff821115614b8557614b84614f6c565b5b614b8e82614f9b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c4282614db6565b9150614c4d83614db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c8257614c81614edf565b5b828201905092915050565b6000614c9882614db6565b9150614ca383614db6565b925082614cb357614cb2614f0e565b5b828204905092915050565b6000614cc982614db6565b9150614cd483614db6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0d57614d0c614edf565b5b828202905092915050565b6000614d2382614db6565b9150614d2e83614db6565b925082821015614d4157614d40614edf565b5b828203905092915050565b6000614d5782614d96565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ded578082015181840152602081019050614dd2565b83811115614dfc576000848401525b50505050565b60006002820490506001821680614e1a57607f821691505b60208210811415614e2e57614e2d614f3d565b5b50919050565b614e3d82614f9b565b810181811067ffffffffffffffff82111715614e5c57614e5b614f6c565b5b80604052505050565b6000614e7082614db6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ea357614ea2614edf565b5b600182019050919050565b6000614eb982614db6565b9150614ec483614db6565b925082614ed457614ed3614f0e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f43616e206f6e6c79206f6e6365206d696e742077686974656c6973742070657260008201527f696f640000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d696e74206c696d697400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820737570706c7900000000000000000000000000600082015250565b7f496e76616c696420746f6b656e20494400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4174206c656173742031206e6674000000000000000000000000000000000000600082015250565b7f457863656564656420686f6c64206c696d697400000000000000000000000000600082015250565b6155f681614d4c565b811461560157600080fd5b50565b61560d81614d5e565b811461561857600080fd5b50565b61562481614d6a565b811461562f57600080fd5b50565b61563b81614db6565b811461564657600080fd5b5056fea264697066735822122063a839d769e8df113537bfa846ef0ad62356977dea75c67ae2c3f204ce88c5c864736f6c63430008020033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e27bd817b0eb81020239fae814b5f2317fa7e562000000000000000000000000000000000000000000000000000000000000000d48554c4c59556e69766572736500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000548554c4c590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d565a4a39367272375454774b68325244534d716148517a70426b6b5676566a683478547338313679337737632f00000000000000000000
Deployed Bytecode
0x6080604052600436106102c95760003560e01c80636c0360eb11610175578063a0712d68116100dc578063c87b56dd11610095578063e985e9c51161006f578063e985e9c514610ad6578063f0f4426014610b13578063f2fde38b14610b3c578063fe4d5add14610b65576102c9565b8063c87b56dd14610a45578063ca7ce3ec14610a82578063d5abeb0114610aab576102c9565b8063a0712d6814610932578063a22cb4651461094e578063a4b1f42f14610977578063ac4523a0146109b4578063ac67b020146109df578063b88d4fde14610a1c576102c9565b80638da5cb5b1161012e5780638da5cb5b1461083457806391b7f5ed1461085f57806395d89b4114610888578063996517cf146108b35780639e6a1d7d146108de578063a035b1fe14610907576102c9565b80636c0360eb146107385780636f68ebae146107635780636fd009e41461078e57806370a08231146107b7578063715018a6146107f45780637e2d050d1461080b576102c9565b806331ffd6f1116102345780634de906de116101ed578063573af956116101c7578063573af9561461067c5780635c975abb146106a557806361d027b3146106d05780636352211e146106fb576102c9565b80634de906de146105eb5780634f6ccce71461061657806355f804b314610653576102c9565b806331ffd6f1146104fc5780633627d3a1146105275780633af32abf146105505780633ccfd60b1461058d57806342842e0e14610597578063454c87b3146105c0576102c9565b806318160ddd1161028657806318160ddd146103ee5780631feaa80a1461041957806321fc4b8c14610442578063239111b11461046b57806323b872dd146104965780632f745c59146104bf576102c9565b8063019f9ed7146102ce57806301ffc9a7146102f757806302329a291461033457806306fdde031461035d578063081812fc14610388578063095ea7b3146103c5575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190614012565b610ba2565b005b34801561030357600080fd5b5061031e6004803603810190610319919061403b565b610c3b565b60405161032b919061477c565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190614012565b610cb5565b005b34801561036957600080fd5b50610372610d4e565b60405161037f9190614797565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa91906140ce565b610de0565b6040516103bc91906146f3565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e79190613f91565b610e65565b005b3480156103fa57600080fd5b50610403610f7d565b6040516104109190614af9565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613fcd565b610f8a565b005b34801561044e57600080fd5b506104696004803603810190610464919061408d565b6111af565b005b34801561047757600080fd5b50610480611245565b60405161048d9190614797565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190613e8b565b6112d3565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190613f91565b611333565b6040516104f39190614af9565b60405180910390f35b34801561050857600080fd5b506105116113d8565b60405161051e919061477c565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613f91565b6113eb565b005b34801561055c57600080fd5b5061057760048036038101906105729190613e26565b611592565b604051610584919061477c565b60405180910390f35b610595611667565b005b3480156105a357600080fd5b506105be60048036038101906105b99190613e8b565b61177e565b005b3480156105cc57600080fd5b506105d561179e565b6040516105e2919061477c565b60405180910390f35b3480156105f757600080fd5b506106006117b1565b60405161060d9190614af9565b60405180910390f35b34801561062257600080fd5b5061063d600480360381019061063891906140ce565b6117b7565b60405161064a9190614af9565b60405180910390f35b34801561065f57600080fd5b5061067a6004803603810190610675919061408d565b61184e565b005b34801561068857600080fd5b506106a3600480360381019061069e919061408d565b6118e4565b005b3480156106b157600080fd5b506106ba61197a565b6040516106c7919061477c565b60405180910390f35b3480156106dc57600080fd5b506106e561198d565b6040516106f291906146f3565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906140ce565b6119b3565b60405161072f91906146f3565b60405180910390f35b34801561074457600080fd5b5061074d611a65565b60405161075a9190614797565b60405180910390f35b34801561076f57600080fd5b50610778611af3565b6040516107859190614af9565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b091906140ce565b611af9565b005b3480156107c357600080fd5b506107de60048036038101906107d99190613e26565b611b7f565b6040516107eb9190614af9565b60405180910390f35b34801561080057600080fd5b50610809611c37565b005b34801561081757600080fd5b50610832600480360381019061082d91906140ce565b611cbf565b005b34801561084057600080fd5b50610849611d45565b60405161085691906146f3565b60405180910390f35b34801561086b57600080fd5b50610886600480360381019061088191906140ce565b611d6f565b005b34801561089457600080fd5b5061089d611df5565b6040516108aa9190614797565b60405180910390f35b3480156108bf57600080fd5b506108c8611e87565b6040516108d59190614af9565b60405180910390f35b3480156108ea57600080fd5b50610905600480360381019061090091906140ce565b611e8d565b005b34801561091357600080fd5b5061091c611f13565b6040516109299190614af9565b60405180910390f35b61094c600480360381019061094791906140ce565b611f19565b005b34801561095a57600080fd5b5061097560048036038101906109709190613f55565b6122df565b005b34801561098357600080fd5b5061099e60048036038101906109999190613e26565b612460565b6040516109ab919061475a565b60405180910390f35b3480156109c057600080fd5b506109c961255a565b6040516109d69190614797565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a019190613e26565b6125e8565b604051610a139190614af9565b60405180910390f35b348015610a2857600080fd5b50610a436004803603810190610a3e9190613eda565b612600565b005b348015610a5157600080fd5b50610a6c6004803603810190610a6791906140ce565b612662565b604051610a799190614797565b60405180910390f35b348015610a8e57600080fd5b50610aa96004803603810190610aa49190614012565b612740565b005b348015610ab757600080fd5b50610ac06127d9565b604051610acd9190614af9565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613e4f565b6127df565b604051610b0a919061477c565b60405180910390f35b348015610b1f57600080fd5b50610b3a6004803603810190610b359190613e26565b612873565b005b348015610b4857600080fd5b50610b636004803603810190610b5e9190613e26565b612933565b005b348015610b7157600080fd5b50610b8c6004803603810190610b8791906140ce565b612a2b565b604051610b9991906146f3565b60405180910390f35b610baa612a6a565b73ffffffffffffffffffffffffffffffffffffffff16610bc8611d45565b73ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c15906149d9565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cae5750610cad82612a72565b5b9050919050565b610cbd612a6a565b73ffffffffffffffffffffffffffffffffffffffff16610cdb611d45565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906149d9565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b606060008054610d5d90614e02565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8990614e02565b8015610dd65780601f10610dab57610100808354040283529160200191610dd6565b820191906000526020600020905b815481529060010190602001808311610db957829003601f168201915b5050505050905090565b6000610deb82612b54565b610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906149b9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e70826119b3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890614a59565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f00612a6a565b73ffffffffffffffffffffffffffffffffffffffff161480610f2f5750610f2e81610f29612a6a565b6127df565b5b610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f65906148f9565b60405180910390fd5b610f788383612bc0565b505050565b6000600880549050905090565b610f92612a6a565b73ffffffffffffffffffffffffffffffffffffffff16610fb0611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd906149d9565b60405180910390fd5b60005b828290508110156111aa57600080848484818110611050577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906110659190613e26565b905060005b60148054905081101561112b578173ffffffffffffffffffffffffffffffffffffffff16601482815481106110c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611118576001925061112b565b808061112390614e65565b91505061106a565b5081611195576014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505080806111a290614e65565b915050611009565b505050565b6111b7612a6a565b73ffffffffffffffffffffffffffffffffffffffff166111d5611d45565b73ffffffffffffffffffffffffffffffffffffffff161461122b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611222906149d9565b60405180910390fd5b8060119080519060200190611241929190613c00565b5050565b6011805461125290614e02565b80601f016020809104026020016040519081016040528092919081815260200182805461127e90614e02565b80156112cb5780601f106112a0576101008083540402835291602001916112cb565b820191906000526020600020905b8154815290600101906020018083116112ae57829003601f168201915b505050505081565b6112e46112de612a6a565b82612c79565b611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90614a79565b60405180910390fd5b61132e838383612d57565b505050565b600061133e83611b7f565b821061137f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611376906147f9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60169054906101000a900460ff1681565b6113f3612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611411611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e906149d9565b60405180910390fd5b6000611471610f7d565b9050600a60149054906101000a900460ff16156114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba906147b9565b60405180910390fd5b60008211611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614ab9565b60405180910390fd5b600b5482826115159190614c37565b1115611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614a19565b60405180910390fd5b6000600190505b82811161158c576115798482846115749190614c37565b612fb3565b808061158490614e65565b91505061155d565b50505050565b600080600090505b60148054905081101561165c578273ffffffffffffffffffffffffffffffffffffffff16601482815481106115f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611649576001915050611662565b808061165490614e65565b91505061159a565b50600090505b919050565b61166f612a6a565b73ffffffffffffffffffffffffffffffffffffffff1661168d611d45565b73ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da906149d9565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161172b906146de565b60006040518083038185875af1925050503d8060008114611768576040519150601f19603f3d011682016040523d82523d6000602084013e61176d565b606091505b505090508061177b57600080fd5b50565b61179983838360405180602001604052806000815250612600565b505050565b600a60159054906101000a900460ff1681565b600f5481565b60006117c1610f7d565b8210611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990614a99565b60405180910390fd5b6008828154811061183c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611856612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611874611d45565b73ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906149d9565b60405180910390fd5b80601090805190602001906118e0929190613c00565b5050565b6118ec612a6a565b73ffffffffffffffffffffffffffffffffffffffff1661190a611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611957906149d9565b60405180910390fd5b8060129080519060200190611976929190613c00565b5050565b600a60149054906101000a900460ff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390614959565b60405180910390fd5b80915050919050565b60108054611a7290614e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9e90614e02565b8015611aeb5780601f10611ac057610100808354040283529160200191611aeb565b820191906000526020600020905b815481529060010190602001808311611ace57829003601f168201915b505050505081565b600e5481565b611b01612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611b1f611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c906149d9565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614939565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c3f612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611c5d611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa906149d9565b60405180910390fd5b611cbd6000612fd1565b565b611cc7612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611ce5611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d32906149d9565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d77612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611d95611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de2906149d9565b60405180910390fd5b80600c8190555050565b606060018054611e0490614e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3090614e02565b8015611e7d5780601f10611e5257610100808354040283529160200191611e7d565b820191906000526020600020905b815481529060010190602001808311611e6057829003601f168201915b5050505050905090565b600d5481565b611e95612a6a565b73ffffffffffffffffffffffffffffffffffffffff16611eb3611d45565b73ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906149d9565b60405180910390fd5b80600d8190555050565b600c5481565b6000611f23610f7d565b9050600a60149054906101000a900460ff1615611f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6c906147b9565b60405180910390fd5b60008211611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614ab9565b60405180910390fd5b600d54821115611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614979565b60405180910390fd5b600e5482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204b9190614c37565b111561208c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208390614ad9565b60405180910390fd5b600b54828261209b9190614c37565b11156120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614a19565b60405180910390fd5b6120e4611d45565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461224f5760011515600a60169054906101000a900460ff16151514156121fe5761213b33611592565b61217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614919565b60405180910390fd5b600f54601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f4906147d9565b60405180910390fd5b5b81600c5461220c9190614cbe565b34101561224e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612245906148d9565b60405180910390fd5b5b6000600190505b8281116122da57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906122ad90614e65565b91905055506122c73382846122c29190614c37565b612fb3565b80806122d290614e65565b915050612256565b505050565b6122e7612a6a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614899565b60405180910390fd5b8060056000612362612a6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661240f612a6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612454919061477c565b60405180910390a35050565b6060600061246d83611b7f565b905060008167ffffffffffffffff8111156124b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124df5781602001602082028036833780820191505090505b50905060005b8281101561254f576124f78582611333565b828281518110612530577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061254790614e65565b9150506124e5565b508092505050919050565b6012805461256790614e02565b80601f016020809104026020016040519081016040528092919081815260200182805461259390614e02565b80156125e05780601f106125b5576101008083540402835291602001916125e0565b820191906000526020600020905b8154815290600101906020018083116125c357829003601f168201915b505050505081565b60156020528060005260406000206000915090505481565b61261161260b612a6a565b83612c79565b612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614a79565b60405180910390fd5b61265c84848484613097565b50505050565b6060600061266e6130f3565b905061267983612b54565b6126b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126af90614a39565b60405180910390fd5b60001515600a60159054906101000a900460ff161515141561270a5760126126df84613185565b60116040516020016126f3939291906146ad565b60405160208183030381529060405291505061273b565b8061271484613185565b60116040516020016127289392919061467c565b6040516020818303038152906040529150505b919050565b612748612a6a565b73ffffffffffffffffffffffffffffffffffffffff16612766611d45565b73ffffffffffffffffffffffffffffffffffffffff16146127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b3906149d9565b60405180910390fd5b80600a60166101000a81548160ff02191690831515021790555050565b600b5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61287b612a6a565b73ffffffffffffffffffffffffffffffffffffffff16612899611d45565b73ffffffffffffffffffffffffffffffffffffffff16146128ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e6906149d9565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61293b612a6a565b73ffffffffffffffffffffffffffffffffffffffff16612959611d45565b73ffffffffffffffffffffffffffffffffffffffff16146129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a6906149d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1690614839565b60405180910390fd5b612a2881612fd1565b50565b60148181548110612a3b57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b3d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612b4d5750612b4c82613332565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c33836119b3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c8482612b54565b612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906148b9565b60405180910390fd5b6000612cce836119b3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d3d57508373ffffffffffffffffffffffffffffffffffffffff16612d2584610de0565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d4e5750612d4d81856127df565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612d77826119b3565b73ffffffffffffffffffffffffffffffffffffffff1614612dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc4906149f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3490614879565b60405180910390fd5b612e4883838361339c565b612e53600082612bc0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea39190614d18565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612efa9190614c37565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612fcd8282604051806020016040528060008152506134b0565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6130a2848484612d57565b6130ae8484848461350b565b6130ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e490614819565b60405180910390fd5b50505050565b60606010805461310290614e02565b80601f016020809104026020016040519081016040528092919081815260200182805461312e90614e02565b801561317b5780601f106131505761010080835404028352916020019161317b565b820191906000526020600020905b81548152906001019060200180831161315e57829003601f168201915b5050505050905090565b606060008214156131cd576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061332d565b600082905060005b600082146131ff5780806131e890614e65565b915050600a826131f89190614c8d565b91506131d5565b60008167ffffffffffffffff811115613241577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156132735781602001600182028036833780820191505090505b5090505b600085146133265760018261328c9190614d18565b9150600a8561329b9190614eae565b60306132a79190614c37565b60f81b8183815181106132e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561331f9190614c8d565b9450613277565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133a78383836136a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ea576133e5816136a7565b613429565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146134285761342783826136f0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561346c576134678161385d565b6134ab565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146134aa576134a982826139a0565b5b5b505050565b6134ba8383613a1f565b6134c7600084848461350b565b613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614819565b60405180910390fd5b505050565b600061352c8473ffffffffffffffffffffffffffffffffffffffff16613bed565b15613695578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613555612a6a565b8786866040518563ffffffff1660e01b8152600401613577949392919061470e565b602060405180830381600087803b15801561359157600080fd5b505af19250505080156135c257506040513d601f19601f820116820180604052508101906135bf9190614064565b60015b613645573d80600081146135f2576040519150601f19603f3d011682016040523d82523d6000602084013e6135f7565b606091505b5060008151141561363d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363490614819565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061369a565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136fd84611b7f565b6137079190614d18565b90506000600760008481526020019081526020016000205490508181146137ec576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138719190614d18565b90506000600960008481526020019081526020016000205490506000600883815481106138c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811061390f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613984577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006139ab83611b7f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8690614999565b60405180910390fd5b613a9881612b54565b15613ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613acf90614859565b60405180910390fd5b613ae46000838361339c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b349190614c37565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613c0c90614e02565b90600052602060002090601f016020900481019282613c2e5760008555613c75565b82601f10613c4757805160ff1916838001178555613c75565b82800160010185558215613c75579182015b82811115613c74578251825591602001919060010190613c59565b5b509050613c829190613c86565b5090565b5b80821115613c9f576000816000905550600101613c87565b5090565b6000613cb6613cb184614b39565b614b14565b905082815260208101848484011115613cce57600080fd5b613cd9848285614dc0565b509392505050565b6000613cf4613cef84614b6a565b614b14565b905082815260208101848484011115613d0c57600080fd5b613d17848285614dc0565b509392505050565b600081359050613d2e816155ed565b92915050565b60008083601f840112613d4657600080fd5b8235905067ffffffffffffffff811115613d5f57600080fd5b602083019150836020820283011115613d7757600080fd5b9250929050565b600081359050613d8d81615604565b92915050565b600081359050613da28161561b565b92915050565b600081519050613db78161561b565b92915050565b600082601f830112613dce57600080fd5b8135613dde848260208601613ca3565b91505092915050565b600082601f830112613df857600080fd5b8135613e08848260208601613ce1565b91505092915050565b600081359050613e2081615632565b92915050565b600060208284031215613e3857600080fd5b6000613e4684828501613d1f565b91505092915050565b60008060408385031215613e6257600080fd5b6000613e7085828601613d1f565b9250506020613e8185828601613d1f565b9150509250929050565b600080600060608486031215613ea057600080fd5b6000613eae86828701613d1f565b9350506020613ebf86828701613d1f565b9250506040613ed086828701613e11565b9150509250925092565b60008060008060808587031215613ef057600080fd5b6000613efe87828801613d1f565b9450506020613f0f87828801613d1f565b9350506040613f2087828801613e11565b925050606085013567ffffffffffffffff811115613f3d57600080fd5b613f4987828801613dbd565b91505092959194509250565b60008060408385031215613f6857600080fd5b6000613f7685828601613d1f565b9250506020613f8785828601613d7e565b9150509250929050565b60008060408385031215613fa457600080fd5b6000613fb285828601613d1f565b9250506020613fc385828601613e11565b9150509250929050565b60008060208385031215613fe057600080fd5b600083013567ffffffffffffffff811115613ffa57600080fd5b61400685828601613d34565b92509250509250929050565b60006020828403121561402457600080fd5b600061403284828501613d7e565b91505092915050565b60006020828403121561404d57600080fd5b600061405b84828501613d93565b91505092915050565b60006020828403121561407657600080fd5b600061408484828501613da8565b91505092915050565b60006020828403121561409f57600080fd5b600082013567ffffffffffffffff8111156140b957600080fd5b6140c584828501613de7565b91505092915050565b6000602082840312156140e057600080fd5b60006140ee84828501613e11565b91505092915050565b6000614103838361465e565b60208301905092915050565b61411881614d4c565b82525050565b600061412982614bc0565b6141338185614bee565b935061413e83614b9b565b8060005b8381101561416f57815161415688826140f7565b975061416183614be1565b925050600181019050614142565b5085935050505092915050565b61418581614d5e565b82525050565b600061419682614bcb565b6141a08185614bff565b93506141b0818560208601614dcf565b6141b981614f9b565b840191505092915050565b60006141cf82614bd6565b6141d98185614c1b565b93506141e9818560208601614dcf565b6141f281614f9b565b840191505092915050565b600061420882614bd6565b6142128185614c2c565b9350614222818560208601614dcf565b80840191505092915050565b6000815461423b81614e02565b6142458186614c2c565b945060018216600081146142605760018114614271576142a4565b60ff198316865281860193506142a4565b61427a85614bab565b60005b8381101561429c5781548189015260018201915060208101905061427d565b838801955050505b50505092915050565b60006142ba600683614c1b565b91506142c582614fac565b602082019050919050565b60006142dd602383614c1b565b91506142e882614fd5565b604082019050919050565b6000614300602b83614c1b565b915061430b82615024565b604082019050919050565b6000614323603283614c1b565b915061432e82615073565b604082019050919050565b6000614346602683614c1b565b9150614351826150c2565b604082019050919050565b6000614369601c83614c1b565b915061437482615111565b602082019050919050565b600061438c602483614c1b565b91506143978261513a565b604082019050919050565b60006143af601983614c1b565b91506143ba82615189565b602082019050919050565b60006143d2602c83614c1b565b91506143dd826151b2565b604082019050919050565b60006143f5601283614c1b565b915061440082615201565b602082019050919050565b6000614418603883614c1b565b91506144238261522a565b604082019050919050565b600061443b600f83614c1b565b915061444682615279565b602082019050919050565b600061445e602a83614c1b565b9150614469826152a2565b604082019050919050565b6000614481602983614c1b565b915061448c826152f1565b604082019050919050565b60006144a4601383614c1b565b91506144af82615340565b602082019050919050565b60006144c7602083614c1b565b91506144d282615369565b602082019050919050565b60006144ea602c83614c1b565b91506144f582615392565b604082019050919050565b600061450d602083614c1b565b9150614518826153e1565b602082019050919050565b6000614530602983614c1b565b915061453b8261540a565b604082019050919050565b6000614553601383614c1b565b915061455e82615459565b602082019050919050565b6000614576601083614c1b565b915061458182615482565b602082019050919050565b6000614599602183614c1b565b91506145a4826154ab565b604082019050919050565b60006145bc600083614c10565b91506145c7826154fa565b600082019050919050565b60006145df603183614c1b565b91506145ea826154fd565b604082019050919050565b6000614602602c83614c1b565b915061460d8261554c565b604082019050919050565b6000614625600e83614c1b565b91506146308261559b565b602082019050919050565b6000614648601383614c1b565b9150614653826155c4565b602082019050919050565b61466781614db6565b82525050565b61467681614db6565b82525050565b600061468882866141fd565b915061469482856141fd565b91506146a0828461422e565b9150819050949350505050565b60006146b9828661422e565b91506146c582856141fd565b91506146d1828461422e565b9150819050949350505050565b60006146e9826145af565b9150819050919050565b6000602082019050614708600083018461410f565b92915050565b6000608082019050614723600083018761410f565b614730602083018661410f565b61473d604083018561466d565b818103606083015261474f818461418b565b905095945050505050565b60006020820190508181036000830152614774818461411e565b905092915050565b6000602082019050614791600083018461417c565b92915050565b600060208201905081810360008301526147b181846141c4565b905092915050565b600060208201905081810360008301526147d2816142ad565b9050919050565b600060208201905081810360008301526147f2816142d0565b9050919050565b60006020820190508181036000830152614812816142f3565b9050919050565b6000602082019050818103600083015261483281614316565b9050919050565b6000602082019050818103600083015261485281614339565b9050919050565b600060208201905081810360008301526148728161435c565b9050919050565b600060208201905081810360008301526148928161437f565b9050919050565b600060208201905081810360008301526148b2816143a2565b9050919050565b600060208201905081810360008301526148d2816143c5565b9050919050565b600060208201905081810360008301526148f2816143e8565b9050919050565b600060208201905081810360008301526149128161440b565b9050919050565b600060208201905081810360008301526149328161442e565b9050919050565b6000602082019050818103600083015261495281614451565b9050919050565b6000602082019050818103600083015261497281614474565b9050919050565b6000602082019050818103600083015261499281614497565b9050919050565b600060208201905081810360008301526149b2816144ba565b9050919050565b600060208201905081810360008301526149d2816144dd565b9050919050565b600060208201905081810360008301526149f281614500565b9050919050565b60006020820190508181036000830152614a1281614523565b9050919050565b60006020820190508181036000830152614a3281614546565b9050919050565b60006020820190508181036000830152614a5281614569565b9050919050565b60006020820190508181036000830152614a728161458c565b9050919050565b60006020820190508181036000830152614a92816145d2565b9050919050565b60006020820190508181036000830152614ab2816145f5565b9050919050565b60006020820190508181036000830152614ad281614618565b9050919050565b60006020820190508181036000830152614af28161463b565b9050919050565b6000602082019050614b0e600083018461466d565b92915050565b6000614b1e614b2f565b9050614b2a8282614e34565b919050565b6000604051905090565b600067ffffffffffffffff821115614b5457614b53614f6c565b5b614b5d82614f9b565b9050602081019050919050565b600067ffffffffffffffff821115614b8557614b84614f6c565b5b614b8e82614f9b565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c4282614db6565b9150614c4d83614db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c8257614c81614edf565b5b828201905092915050565b6000614c9882614db6565b9150614ca383614db6565b925082614cb357614cb2614f0e565b5b828204905092915050565b6000614cc982614db6565b9150614cd483614db6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0d57614d0c614edf565b5b828202905092915050565b6000614d2382614db6565b9150614d2e83614db6565b925082821015614d4157614d40614edf565b5b828203905092915050565b6000614d5782614d96565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ded578082015181840152602081019050614dd2565b83811115614dfc576000848401525b50505050565b60006002820490506001821680614e1a57607f821691505b60208210811415614e2e57614e2d614f3d565b5b50919050565b614e3d82614f9b565b810181811067ffffffffffffffff82111715614e5c57614e5b614f6c565b5b80604052505050565b6000614e7082614db6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ea357614ea2614edf565b5b600182019050919050565b6000614eb982614db6565b9150614ec483614db6565b925082614ed457614ed3614f0e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f43616e206f6e6c79206f6e6365206d696e742077686974656c6973742070657260008201527f696f640000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d696e74206c696d697400000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820737570706c7900000000000000000000000000600082015250565b7f496e76616c696420746f6b656e20494400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4174206c656173742031206e6674000000000000000000000000000000000000600082015250565b7f457863656564656420686f6c64206c696d697400000000000000000000000000600082015250565b6155f681614d4c565b811461560157600080fd5b50565b61560d81614d5e565b811461561857600080fd5b50565b61562481614d6a565b811461562f57600080fd5b50565b61563b81614db6565b811461564657600080fd5b5056fea264697066735822122063a839d769e8df113537bfa846ef0ad62356977dea75c67ae2c3f204ce88c5c864736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e27bd817b0eb81020239fae814b5f2317fa7e562000000000000000000000000000000000000000000000000000000000000000d48554c4c59556e69766572736500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000548554c4c590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d565a4a39367272375454774b68325244534d716148517a70426b6b5676566a683478547338313679337737632f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): HULLYUniverse
Arg [1] : _symbol (string): HULLY
Arg [2] : _initNotMaturedUri (string): ipfs://QmVZJ96rr7TTwKh2RDSMqaHQzpBkkVvVjh4xTs816y3w7c/
Arg [3] : _treasury (address): 0xE27bD817b0eb81020239FaE814B5f2317fa7E562
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000e27bd817b0eb81020239fae814b5f2317fa7e562
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 48554c4c59556e69766572736500000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 48554c4c59000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d565a4a39367272375454774b68325244534d716148517a
Arg [10] : 70426b6b5676566a683478547338313679337737632f00000000000000000000
Deployed Bytecode Sourcemap
43149:4997:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47819:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36967:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47738:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24859:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26418:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37607:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46382:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47500:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43615:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27308:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37275:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43321:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46015:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45042:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47997:146;;;:::i;:::-;;27718:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43289:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43529:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37797:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47396:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47610:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43258:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43708:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43589:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43496:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46875:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24283:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;;;;;;;;;;;:::i;:::-;;46976:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47104:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25028:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43463:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47296:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43417:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44165:871;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26711:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45267:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43652:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43768:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27974:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45584:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47900:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43380:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27077:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47194:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4807:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43736:27;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47819:75;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47882:6:::1;47872:7;;:16;;;;;;;;;;;;;;;;;;47819:75:::0;:::o;36967:224::-;37069:4;37108:35;37093:50;;;:11;:50;;;;:90;;;;37147:36;37171:11;37147:23;:36::i;:::-;37093:90;37086:97;;36967:224;;;:::o;47738:73::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47799:6:::1;47790;;:15;;;;;;;;;;;;;;;;;;47738:73:::0;:::o;24859:100::-;24913:13;24946:5;24939:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:100;:::o;26418:221::-;26494:7;26522:16;26530:7;26522;:16::i;:::-;26514:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26607:15;:24;26623:7;26607:24;;;;;;;;;;;;;;;;;;;;;26600:31;;26418:221;;;:::o;25941:411::-;26022:13;26038:23;26053:7;26038:14;:23::i;:::-;26022:39;;26086:5;26080:11;;:2;:11;;;;26072:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26180:5;26164:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26189:37;26206:5;26213:12;:10;:12::i;:::-;26189:16;:37::i;:::-;26164:62;26142:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26323:21;26332:2;26336:7;26323:8;:21::i;:::-;25941:411;;;:::o;37607:113::-;37668:7;37695:10;:17;;;;37688:24;;37607:113;:::o;46382:487::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46470:9:::1;46465:399;46485:12;;:19;;46481:1;:23;46465:399;;;46522:13;46554:18:::0;46575:12:::1;;46588:1;46575:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46554:36;;46606:9;46601:177;46621:10;:17;;;;46617:1;:21;46601:177;;;46681:10;46664:27;;:10;46675:1;46664:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;46660:107;;;46723:4;46712:15;;46746:5;;46660:107;46640:3;;;;;:::i;:::-;;;;46601:177;;;;46793:8;46788:69;;46818:10;46834;46818:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46788:69;46465:399;;46506:3;;;;;:::i;:::-;;;;46465:399;;;;46382:487:::0;;:::o;47500:102::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47584:12:::1;47573:8;:23;;;;;;;;;;;;:::i;:::-;;47500:102:::0;:::o;43615:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27308:339::-;27503:41;27522:12;:10;:12::i;:::-;27536:7;27503:18;:41::i;:::-;27495:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27611:28;27621:4;27627:2;27631:7;27611:9;:28::i;:::-;27308:339;;;:::o;37275:256::-;37372:7;37408:23;37425:5;37408:16;:23::i;:::-;37400:5;:31;37392:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37497:12;:19;37510:5;37497:19;;;;;;;;;;;;;;;:26;37517:5;37497:26;;;;;;;;;;;;37490:33;;37275:256;;;;:::o;43321:32::-;;;;;;;;;;;;;:::o;46015:361::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46093:14:::1;46110:13;:11;:13::i;:::-;46093:30;;46139:6;;;;;;;;;;;46138:7;46130:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;46185:1;46171:11;:15;46163:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46244:9;;46229:11;46220:6;:20;;;;:::i;:::-;:33;;46212:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46291:9;46303:1;46291:13;;46286:85;46311:11;46306:1;:16;46286:85;;46338:25;46348:2;46361:1;46352:6;:10;;;;:::i;:::-;46338:9;:25::i;:::-;46324:3;;;;;:::i;:::-;;;;46286:85;;;;4198:1;46015:361:::0;;:::o;45042:219::-;45101:4;45119:6;45128:1;45119:10;;45114:123;45135:10;:17;;;;45131:1;:21;45114:123;;;45189:5;45172:22;;:10;45183:1;45172:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;45168:62;;;45216:4;45209:11;;;;;45168:62;45154:3;;;;;:::i;:::-;;;;45114:123;;;;45250:5;45243:12;;45042:219;;;;:::o;47997:146::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48050:7:::1;48071:8;;;;;;;;;;;48063:22;;48093:21;48063:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48049:70;;;48134:2;48126:11;;;::::0;::::1;;4198:1;47997:146::o:0;27718:185::-;27856:39;27873:4;27879:2;27883:7;27856:39;;;;;;;;;;;;:16;:39::i;:::-;27718:185;;;:::o;43289:27::-;;;;;;;;;;;;;:::o;43529:35::-;;;;:::o;37797:233::-;37872:7;37908:30;:28;:30::i;:::-;37900:5;:38;37892:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38005:10;38016:5;38005:17;;;;;;;;;;;;;;;;;;;;;;;;37998:24;;37797:233;;;:::o;47396:98::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47477:11:::1;47467:7;:21;;;;;;;;;;;;:::i;:::-;;47396:98:::0;:::o;47610:122::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47709:17:::1;47693:13;:33;;;;;;;;;;;;:::i;:::-;;47610:122:::0;:::o;43258:26::-;;;;;;;;;;;;;:::o;43708:23::-;;;;;;;;;;;;;:::o;24553:239::-;24625:7;24645:13;24661:7;:16;24669:7;24661:16;;;;;;;;;;;;;;;;;;;;;24645:32;;24713:1;24696:19;;:5;:19;;;;24688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24779:5;24772:12;;;24553:239;;;:::o;43589:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43496:28::-;;;;:::o;46875:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46953:10:::1;46941:9;:22;;;;46875:94:::0;:::o;24283:208::-;24355:7;24400:1;24383:19;;:5;:19;;;;24375:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24467:9;:16;24477:5;24467:16;;;;;;;;;;;;;;;;24460:23;;24283:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;46976:122::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47075:17:::1;47056:16;:36;;;;46976:122:::0;:::o;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;47104:84::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47173:9:::1;47165:5;:17;;;;47104:84:::0;:::o;25028:104::-;25084:13;25117:7;25110:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25028:104;:::o;43463:28::-;;;;:::o;47296:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47374:10:::1;47362:9;:22;;;;47296:94:::0;:::o;43417:41::-;;;;:::o;44165:871::-;44222:14;44239:13;:11;:13::i;:::-;44222:30;;44268:6;;;;;;;;;;;44267:7;44259:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;44314:1;44300:11;:15;44292:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44364:9;;44349:11;:24;;44341:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44453:9;;44438:11;44412;:23;44424:10;44412:23;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:50;;44404:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44525:9;;44510:11;44501:6;:20;;;;:::i;:::-;:33;;44493:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44585:7;:5;:7::i;:::-;44571:21;;:10;:21;;;44567:331;;44626:4;44609:21;;:13;;;;;;;;;;;:21;;;44606:211;;;44655:25;44669:10;44655:13;:25::i;:::-;44647:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44749:16;;44723:11;:23;44735:10;44723:23;;;;;;;;;;;;;;;;:42;44715:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44606:211;44856:11;44848:5;;:19;;;;:::i;:::-;44835:9;:32;;44827:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44567:331;44909:9;44921:1;44909:13;;44904:127;44929:11;44924:1;:16;44904:127;;44956:11;:23;44968:10;44956:23;;;;;;;;;;;;;;;;:25;;;;;;;;;:::i;:::-;;;;;;44990:33;45000:10;45021:1;45012:6;:10;;;;:::i;:::-;44990:9;:33::i;:::-;44942:3;;;;;:::i;:::-;;;;44904:127;;;;44165:871;;:::o;26711:295::-;26826:12;:10;:12::i;:::-;26814:24;;:8;:24;;;;26806:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26926:8;26881:18;:32;26900:12;:10;:12::i;:::-;26881:32;;;;;;;;;;;;;;;:42;26914:8;26881:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26979:8;26950:48;;26965:12;:10;:12::i;:::-;26950:48;;;26989:8;26950:48;;;;;;:::i;:::-;;;;;;;;26711:295;;:::o;45267:311::-;45323:16;45348:18;45369:17;45379:6;45369:9;:17::i;:::-;45348:38;;45393:25;45435:10;45421:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45393:53;;45458:9;45453:98;45473:10;45469:1;:14;45453:98;;;45513:30;45533:6;45541:1;45513:19;:30::i;:::-;45499:8;45508:1;45499:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45485:3;;;;;:::i;:::-;;;;45453:98;;;;45564:8;45557:15;;;;45267:311;;;:::o;43652:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43768:46::-;;;;;;;;;;;;;;;;;:::o;27974:328::-;28149:41;28168:12;:10;:12::i;:::-;28182:7;28149:18;:41::i;:::-;28141:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28255:39;28269:4;28275:2;28279:7;28288:5;28255:13;:39::i;:::-;27974:328;;;;:::o;45584:406::-;45657:13;45679:28;45710:10;:8;:10::i;:::-;45679:41;;45735:16;45743:7;45735;:16::i;:::-;45727:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;45795:5;45784:16;;:7;;;;;;;;;;;:16;;;45781:118;;;45844:13;45859:18;:7;:16;:18::i;:::-;45879:8;45827:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45813:76;;;;;45781:118;45938:14;45954:18;:7;:16;:18::i;:::-;45974:8;45921:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45907:77;;;45584:406;;;;:::o;47900:91::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47979:6:::1;47963:13;;:22;;;;;;;;;;;;;;;;;;47900:91:::0;:::o;43380:32::-;;;;:::o;27077:164::-;27174:4;27198:18;:25;27217:5;27198:25;;;;;;;;;;;;;;;:35;27224:8;27198:35;;;;;;;;;;;;;;;;;;;;;;;;;27191:42;;27077:164;;;;:::o;47194:96::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47272:12:::1;47261:8;;:23;;;;;;;;;;;;;;;;;;47194:96:::0;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;;;4888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;43736:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;23914:305::-;24016:4;24068:25;24053:40;;;:11;:40;;;;:105;;;;24125:33;24110:48;;;:11;:48;;;;24053:105;:158;;;;24175:36;24199:11;24175:23;:36::i;:::-;24053:158;24033:178;;23914:305;;;:::o;29812:127::-;29877:4;29929:1;29901:30;;:7;:16;29909:7;29901:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29894:37;;29812:127;;;:::o;33794:174::-;33896:2;33869:15;:24;33885:7;33869:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33952:7;33948:2;33914:46;;33923:23;33938:7;33923:14;:23::i;:::-;33914:46;;;;;;;;;;;;33794:174;;:::o;30106:348::-;30199:4;30224:16;30232:7;30224;:16::i;:::-;30216:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30300:13;30316:23;30331:7;30316:14;:23::i;:::-;30300:39;;30369:5;30358:16;;:7;:16;;;:51;;;;30402:7;30378:31;;:20;30390:7;30378:11;:20::i;:::-;:31;;;30358:51;:87;;;;30413:32;30430:5;30437:7;30413:16;:32::i;:::-;30358:87;30350:96;;;30106:348;;;;:::o;33098:578::-;33257:4;33230:31;;:23;33245:7;33230:14;:23::i;:::-;:31;;;33222:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:1;33326:16;;:2;:16;;;;33318:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:39;33417:4;33423:2;33427:7;33396:20;:39::i;:::-;33500:29;33517:1;33521:7;33500:8;:29::i;:::-;33561:1;33542:9;:15;33552:4;33542:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33590:1;33573:9;:13;33583:2;33573:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33621:2;33602:7;:16;33610:7;33602:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33660:7;33656:2;33641:27;;33650:4;33641:27;;;;;;;;;;;;33098:578;;;:::o;30796:110::-;30872:26;30882:2;30886:7;30872:26;;;;;;;;;;;;:9;:26::i;:::-;30796:110;;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5007:173;;:::o;29184:315::-;29341:28;29351:4;29357:2;29361:7;29341:9;:28::i;:::-;29388:48;29411:4;29417:2;29421:7;29430:5;29388:22;:48::i;:::-;29380:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:315;;;;:::o;44057:102::-;44117:13;44146:7;44139:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44057:102;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;15893:157::-;15978:4;16017:25;16002:40;;;:11;:40;;;;15995:47;;15893:157;;;:::o;38643:589::-;38787:45;38814:4;38820:2;38824:7;38787:26;:45::i;:::-;38865:1;38849:18;;:4;:18;;;38845:187;;;38884:40;38916:7;38884:31;:40::i;:::-;38845:187;;;38954:2;38946:10;;:4;:10;;;38942:90;;38973:47;39006:4;39012:7;38973:32;:47::i;:::-;38942:90;38845:187;39060:1;39046:16;;:2;:16;;;39042:183;;;39079:45;39116:7;39079:36;:45::i;:::-;39042:183;;;39152:4;39146:10;;:2;:10;;;39142:83;;39173:40;39201:2;39205:7;39173:27;:40::i;:::-;39142:83;39042:183;38643:589;;;:::o;31133:321::-;31263:18;31269:2;31273:7;31263:5;:18::i;:::-;31314:54;31345:1;31349:2;31353:7;31362:5;31314:22;:54::i;:::-;31292:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31133:321;;;:::o;34533:799::-;34688:4;34709:15;:2;:13;;;:15::i;:::-;34705:620;;;34761:2;34745:36;;;34782:12;:10;:12::i;:::-;34796:4;34802:7;34811:5;34745:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34741:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35004:1;34987:6;:13;:18;34983:272;;;35030:60;;;;;;;;;;:::i;:::-;;;;;;;;34983:272;35205:6;35199:13;35190:6;35186:2;35182:15;35175:38;34741:529;34878:41;;;34868:51;;;:6;:51;;;;34861:58;;;;;34705:620;35309:4;35302:11;;34533:799;;;;;;;:::o;35904:126::-;;;;:::o;39955:164::-;40059:10;:17;;;;40032:15;:24;40048:7;40032:24;;;;;;;;;;;:44;;;;40087:10;40103:7;40087:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39955:164;:::o;40746:988::-;41012:22;41062:1;41037:22;41054:4;41037:16;:22::i;:::-;:26;;;;:::i;:::-;41012:51;;41074:18;41095:17;:26;41113:7;41095:26;;;;;;;;;;;;41074:47;;41242:14;41228:10;:28;41224:328;;41273:19;41295:12;:18;41308:4;41295:18;;;;;;;;;;;;;;;:34;41314:14;41295:34;;;;;;;;;;;;41273:56;;41379:11;41346:12;:18;41359:4;41346:18;;;;;;;;;;;;;;;:30;41365:10;41346:30;;;;;;;;;;;:44;;;;41496:10;41463:17;:30;41481:11;41463:30;;;;;;;;;;;:43;;;;41224:328;;41648:17;:26;41666:7;41648:26;;;;;;;;;;;41641:33;;;41692:12;:18;41705:4;41692:18;;;;;;;;;;;;;;;:34;41711:14;41692:34;;;;;;;;;;;41685:41;;;40746:988;;;;:::o;42029:1079::-;42282:22;42327:1;42307:10;:17;;;;:21;;;;:::i;:::-;42282:46;;42339:18;42360:15;:24;42376:7;42360:24;;;;;;;;;;;;42339:45;;42711:19;42733:10;42744:14;42733:26;;;;;;;;;;;;;;;;;;;;;;;;42711:48;;42797:11;42772:10;42783;42772:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42908:10;42877:15;:28;42893:11;42877:28;;;;;;;;;;;:41;;;;43049:15;:24;43065:7;43049:24;;;;;;;;;;;43042:31;;;43084:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42029:1079;;;;:::o;39533:221::-;39618:14;39635:20;39652:2;39635:16;:20::i;:::-;39618:37;;39693:7;39666:12;:16;39679:2;39666:16;;;;;;;;;;;;;;;:24;39683:6;39666:24;;;;;;;;;;;:34;;;;39740:6;39711:17;:26;39729:7;39711:26;;;;;;;;;;;:35;;;;39533:221;;;:::o;31790:382::-;31884:1;31870:16;;:2;:16;;;;31862:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31943:16;31951:7;31943;:16::i;:::-;31942:17;31934:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32005:45;32034:1;32038:2;32042:7;32005:20;:45::i;:::-;32080:1;32063:9;:13;32073:2;32063:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32111:2;32092:7;:16;32100:7;32092:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32156:7;32152:2;32131:33;;32148:1;32131:33;;;;;;;;;;;;31790:382;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;;;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;;1464:6;1451:20;1442:29;;1480:32;1506:5;1480:32;:::i;:::-;1432:86;;;;:::o;1524:141::-;;1611:6;1605:13;1596:22;;1627:32;1653:5;1627:32;:::i;:::-;1586:79;;;;:::o;1684:271::-;;1788:3;1781:4;1773:6;1769:17;1765:27;1755:2;;1806:1;1803;1796:12;1755:2;1846:6;1833:20;1871:78;1945:3;1937:6;1930:4;1922:6;1918:17;1871:78;:::i;:::-;1862:87;;1745:210;;;;;:::o;1975:273::-;;2080:3;2073:4;2065:6;2061:17;2057:27;2047:2;;2098:1;2095;2088:12;2047:2;2138:6;2125:20;2163:79;2238:3;2230:6;2223:4;2215:6;2211:17;2163:79;:::i;:::-;2154:88;;2037:211;;;;;:::o;2254:139::-;;2338:6;2325:20;2316:29;;2354:33;2381:5;2354:33;:::i;:::-;2306:87;;;;:::o;2399:262::-;;2507:2;2495:9;2486:7;2482:23;2478:32;2475:2;;;2523:1;2520;2513:12;2475:2;2566:1;2591:53;2636:7;2627:6;2616:9;2612:22;2591:53;:::i;:::-;2581:63;;2537:117;2465:196;;;;:::o;2667:407::-;;;2792:2;2780:9;2771:7;2767:23;2763:32;2760:2;;;2808:1;2805;2798:12;2760:2;2851:1;2876:53;2921:7;2912:6;2901:9;2897:22;2876:53;:::i;:::-;2866:63;;2822:117;2978:2;3004:53;3049:7;3040:6;3029:9;3025:22;3004:53;:::i;:::-;2994:63;;2949:118;2750:324;;;;;:::o;3080:552::-;;;;3222:2;3210:9;3201:7;3197:23;3193:32;3190:2;;;3238:1;3235;3228:12;3190:2;3281:1;3306:53;3351:7;3342:6;3331:9;3327:22;3306:53;:::i;:::-;3296:63;;3252:117;3408:2;3434:53;3479:7;3470:6;3459:9;3455:22;3434:53;:::i;:::-;3424:63;;3379:118;3536:2;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3507:118;3180:452;;;;;:::o;3638:809::-;;;;;3806:3;3794:9;3785:7;3781:23;3777:33;3774:2;;;3823:1;3820;3813:12;3774:2;3866:1;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3837:117;3993:2;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3964:118;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;4277:2;4266:9;4262:18;4249:32;4308:18;4300:6;4297:30;4294:2;;;4340:1;4337;4330:12;4294:2;4368:62;4422:7;4413:6;4402:9;4398:22;4368:62;:::i;:::-;4358:72;;4220:220;3764:683;;;;;;;:::o;4453:401::-;;;4575:2;4563:9;4554:7;4550:23;4546:32;4543:2;;;4591:1;4588;4581:12;4543:2;4634:1;4659:53;4704:7;4695:6;4684:9;4680:22;4659:53;:::i;:::-;4649:63;;4605:117;4761:2;4787:50;4829:7;4820:6;4809:9;4805:22;4787:50;:::i;:::-;4777:60;;4732:115;4533:321;;;;;:::o;4860:407::-;;;4985:2;4973:9;4964:7;4960:23;4956:32;4953:2;;;5001:1;4998;4991:12;4953:2;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4943:324;;;;;:::o;5273:425::-;;;5416:2;5404:9;5395:7;5391:23;5387:32;5384:2;;;5432:1;5429;5422:12;5384:2;5503:1;5492:9;5488:17;5475:31;5533:18;5525:6;5522:30;5519:2;;;5565:1;5562;5555:12;5519:2;5601:80;5673:7;5664:6;5653:9;5649:22;5601:80;:::i;:::-;5583:98;;;;5446:245;5374:324;;;;;:::o;5704:256::-;;5809:2;5797:9;5788:7;5784:23;5780:32;5777:2;;;5825:1;5822;5815:12;5777:2;5868:1;5893:50;5935:7;5926:6;5915:9;5911:22;5893:50;:::i;:::-;5883:60;;5839:114;5767:193;;;;:::o;5966:260::-;;6073:2;6061:9;6052:7;6048:23;6044:32;6041:2;;;6089:1;6086;6079:12;6041:2;6132:1;6157:52;6201:7;6192:6;6181:9;6177:22;6157:52;:::i;:::-;6147:62;;6103:116;6031:195;;;;:::o;6232:282::-;;6350:2;6338:9;6329:7;6325:23;6321:32;6318:2;;;6366:1;6363;6356:12;6318:2;6409:1;6434:63;6489:7;6480:6;6469:9;6465:22;6434:63;:::i;:::-;6424:73;;6380:127;6308:206;;;;:::o;6520:375::-;;6638:2;6626:9;6617:7;6613:23;6609:32;6606:2;;;6654:1;6651;6644:12;6606:2;6725:1;6714:9;6710:17;6697:31;6755:18;6747:6;6744:30;6741:2;;;6787:1;6784;6777:12;6741:2;6815:63;6870:7;6861:6;6850:9;6846:22;6815:63;:::i;:::-;6805:73;;6668:220;6596:299;;;;:::o;6901:262::-;;7009:2;6997:9;6988:7;6984:23;6980:32;6977:2;;;7025:1;7022;7015:12;6977:2;7068:1;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7039:117;6967:196;;;;:::o;7169:179::-;;7259:46;7301:3;7293:6;7259:46;:::i;:::-;7337:4;7332:3;7328:14;7314:28;;7249:99;;;;:::o;7354:118::-;7441:24;7459:5;7441:24;:::i;:::-;7436:3;7429:37;7419:53;;:::o;7508:732::-;;7656:54;7704:5;7656:54;:::i;:::-;7726:86;7805:6;7800:3;7726:86;:::i;:::-;7719:93;;7836:56;7886:5;7836:56;:::i;:::-;7915:7;7946:1;7931:284;7956:6;7953:1;7950:13;7931:284;;;8032:6;8026:13;8059:63;8118:3;8103:13;8059:63;:::i;:::-;8052:70;;8145:60;8198:6;8145:60;:::i;:::-;8135:70;;7991:224;7978:1;7975;7971:9;7966:14;;7931:284;;;7935:14;8231:3;8224:10;;7632:608;;;;;;;:::o;8246:109::-;8327:21;8342:5;8327:21;:::i;:::-;8322:3;8315:34;8305:50;;:::o;8361:360::-;;8475:38;8507:5;8475:38;:::i;:::-;8529:70;8592:6;8587:3;8529:70;:::i;:::-;8522:77;;8608:52;8653:6;8648:3;8641:4;8634:5;8630:16;8608:52;:::i;:::-;8685:29;8707:6;8685:29;:::i;:::-;8680:3;8676:39;8669:46;;8451:270;;;;;:::o;8727:364::-;;8843:39;8876:5;8843:39;:::i;:::-;8898:71;8962:6;8957:3;8898:71;:::i;:::-;8891:78;;8978:52;9023:6;9018:3;9011:4;9004:5;9000:16;8978:52;:::i;:::-;9055:29;9077:6;9055:29;:::i;:::-;9050:3;9046:39;9039:46;;8819:272;;;;;:::o;9097:377::-;;9231:39;9264:5;9231:39;:::i;:::-;9286:89;9368:6;9363:3;9286:89;:::i;:::-;9279:96;;9384:52;9429:6;9424:3;9417:4;9410:5;9406:16;9384:52;:::i;:::-;9461:6;9456:3;9452:16;9445:23;;9207:267;;;;;:::o;9504:845::-;;9644:5;9638:12;9673:36;9699:9;9673:36;:::i;:::-;9725:89;9807:6;9802:3;9725:89;:::i;:::-;9718:96;;9845:1;9834:9;9830:17;9861:1;9856:137;;;;10007:1;10002:341;;;;9823:520;;9856:137;9940:4;9936:9;9925;9921:25;9916:3;9909:38;9976:6;9971:3;9967:16;9960:23;;9856:137;;10002:341;10069:38;10101:5;10069:38;:::i;:::-;10129:1;10143:154;10157:6;10154:1;10151:13;10143:154;;;10231:7;10225:14;10221:1;10216:3;10212:11;10205:35;10281:1;10272:7;10268:15;10257:26;;10179:4;10176:1;10172:12;10167:17;;10143:154;;;10326:6;10321:3;10317:16;10310:23;;10009:334;;9823:520;;9611:738;;;;;;:::o;10355:365::-;;10518:66;10582:1;10577:3;10518:66;:::i;:::-;10511:73;;10593:93;10682:3;10593:93;:::i;:::-;10711:2;10706:3;10702:12;10695:19;;10501:219;;;:::o;10726:366::-;;10889:67;10953:2;10948:3;10889:67;:::i;:::-;10882:74;;10965:93;11054:3;10965:93;:::i;:::-;11083:2;11078:3;11074:12;11067:19;;10872:220;;;:::o;11098:366::-;;11261:67;11325:2;11320:3;11261:67;:::i;:::-;11254:74;;11337:93;11426:3;11337:93;:::i;:::-;11455:2;11450:3;11446:12;11439:19;;11244:220;;;:::o;11470:366::-;;11633:67;11697:2;11692:3;11633:67;:::i;:::-;11626:74;;11709:93;11798:3;11709:93;:::i;:::-;11827:2;11822:3;11818:12;11811:19;;11616:220;;;:::o;11842:366::-;;12005:67;12069:2;12064:3;12005:67;:::i;:::-;11998:74;;12081:93;12170:3;12081:93;:::i;:::-;12199:2;12194:3;12190:12;12183:19;;11988:220;;;:::o;12214:366::-;;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12360:220;;;:::o;12586:366::-;;12749:67;12813:2;12808:3;12749:67;:::i;:::-;12742:74;;12825:93;12914:3;12825:93;:::i;:::-;12943:2;12938:3;12934:12;12927:19;;12732:220;;;:::o;12958:366::-;;13121:67;13185:2;13180:3;13121:67;:::i;:::-;13114:74;;13197:93;13286:3;13197:93;:::i;:::-;13315:2;13310:3;13306:12;13299:19;;13104:220;;;:::o;13330:366::-;;13493:67;13557:2;13552:3;13493:67;:::i;:::-;13486:74;;13569:93;13658:3;13569:93;:::i;:::-;13687:2;13682:3;13678:12;13671:19;;13476:220;;;:::o;13702:366::-;;13865:67;13929:2;13924:3;13865:67;:::i;:::-;13858:74;;13941:93;14030:3;13941:93;:::i;:::-;14059:2;14054:3;14050:12;14043:19;;13848:220;;;:::o;14074:366::-;;14237:67;14301:2;14296:3;14237:67;:::i;:::-;14230:74;;14313:93;14402:3;14313:93;:::i;:::-;14431:2;14426:3;14422:12;14415:19;;14220:220;;;:::o;14446:366::-;;14609:67;14673:2;14668:3;14609:67;:::i;:::-;14602:74;;14685:93;14774:3;14685:93;:::i;:::-;14803:2;14798:3;14794:12;14787:19;;14592:220;;;:::o;14818:366::-;;14981:67;15045:2;15040:3;14981:67;:::i;:::-;14974:74;;15057:93;15146:3;15057:93;:::i;:::-;15175:2;15170:3;15166:12;15159:19;;14964:220;;;:::o;15190:366::-;;15353:67;15417:2;15412:3;15353:67;:::i;:::-;15346:74;;15429:93;15518:3;15429:93;:::i;:::-;15547:2;15542:3;15538:12;15531:19;;15336:220;;;:::o;15562:366::-;;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15708:220;;;:::o;15934:366::-;;16097:67;16161:2;16156:3;16097:67;:::i;:::-;16090:74;;16173:93;16262:3;16173:93;:::i;:::-;16291:2;16286:3;16282:12;16275:19;;16080:220;;;:::o;16306:366::-;;16469:67;16533:2;16528:3;16469:67;:::i;:::-;16462:74;;16545:93;16634:3;16545:93;:::i;:::-;16663:2;16658:3;16654:12;16647:19;;16452:220;;;:::o;16678:366::-;;16841:67;16905:2;16900:3;16841:67;:::i;:::-;16834:74;;16917:93;17006:3;16917:93;:::i;:::-;17035:2;17030:3;17026:12;17019:19;;16824:220;;;:::o;17050:366::-;;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17196:220;;;:::o;17422:366::-;;17585:67;17649:2;17644:3;17585:67;:::i;:::-;17578:74;;17661:93;17750:3;17661:93;:::i;:::-;17779:2;17774:3;17770:12;17763:19;;17568:220;;;:::o;17794:366::-;;17957:67;18021:2;18016:3;17957:67;:::i;:::-;17950:74;;18033:93;18122:3;18033:93;:::i;:::-;18151:2;18146:3;18142:12;18135:19;;17940:220;;;:::o;18166:366::-;;18329:67;18393:2;18388:3;18329:67;:::i;:::-;18322:74;;18405:93;18494:3;18405:93;:::i;:::-;18523:2;18518:3;18514:12;18507:19;;18312:220;;;:::o;18538:398::-;;18718:83;18799:1;18794:3;18718:83;:::i;:::-;18711:90;;18810:93;18899:3;18810:93;:::i;:::-;18928:1;18923:3;18919:11;18912:18;;18701:235;;;:::o;18942:366::-;;19105:67;19169:2;19164:3;19105:67;:::i;:::-;19098:74;;19181:93;19270:3;19181:93;:::i;:::-;19299:2;19294:3;19290:12;19283:19;;19088:220;;;:::o;19314:366::-;;19477:67;19541:2;19536:3;19477:67;:::i;:::-;19470:74;;19553:93;19642:3;19553:93;:::i;:::-;19671:2;19666:3;19662:12;19655:19;;19460:220;;;:::o;19686:366::-;;19849:67;19913:2;19908:3;19849:67;:::i;:::-;19842:74;;19925:93;20014:3;19925:93;:::i;:::-;20043:2;20038:3;20034:12;20027:19;;19832:220;;;:::o;20058:366::-;;20221:67;20285:2;20280:3;20221:67;:::i;:::-;20214:74;;20297:93;20386:3;20297:93;:::i;:::-;20415:2;20410:3;20406:12;20399:19;;20204:220;;;:::o;20430:108::-;20507:24;20525:5;20507:24;:::i;:::-;20502:3;20495:37;20485:53;;:::o;20544:118::-;20631:24;20649:5;20631:24;:::i;:::-;20626:3;20619:37;20609:53;;:::o;20668:589::-;;20915:95;21006:3;20997:6;20915:95;:::i;:::-;20908:102;;21027:95;21118:3;21109:6;21027:95;:::i;:::-;21020:102;;21139:92;21227:3;21218:6;21139:92;:::i;:::-;21132:99;;21248:3;21241:10;;20897:360;;;;;;:::o;21263:583::-;;21507:92;21595:3;21586:6;21507:92;:::i;:::-;21500:99;;21616:95;21707:3;21698:6;21616:95;:::i;:::-;21609:102;;21728:92;21816:3;21807:6;21728:92;:::i;:::-;21721:99;;21837:3;21830:10;;21489:357;;;;;;:::o;21852:379::-;;22058:147;22201:3;22058:147;:::i;:::-;22051:154;;22222:3;22215:10;;22040:191;;;:::o;22237:222::-;;22368:2;22357:9;22353:18;22345:26;;22381:71;22449:1;22438:9;22434:17;22425:6;22381:71;:::i;:::-;22335:124;;;;:::o;22465:640::-;;22698:3;22687:9;22683:19;22675:27;;22712:71;22780:1;22769:9;22765:17;22756:6;22712:71;:::i;:::-;22793:72;22861:2;22850:9;22846:18;22837:6;22793:72;:::i;:::-;22875;22943:2;22932:9;22928:18;22919:6;22875:72;:::i;:::-;22994:9;22988:4;22984:20;22979:2;22968:9;22964:18;22957:48;23022:76;23093:4;23084:6;23022:76;:::i;:::-;23014:84;;22665:440;;;;;;;:::o;23111:373::-;;23292:2;23281:9;23277:18;23269:26;;23341:9;23335:4;23331:20;23327:1;23316:9;23312:17;23305:47;23369:108;23472:4;23463:6;23369:108;:::i;:::-;23361:116;;23259:225;;;;:::o;23490:210::-;;23615:2;23604:9;23600:18;23592:26;;23628:65;23690:1;23679:9;23675:17;23666:6;23628:65;:::i;:::-;23582:118;;;;:::o;23706:313::-;;23857:2;23846:9;23842:18;23834:26;;23906:9;23900:4;23896:20;23892:1;23881:9;23877:17;23870:47;23934:78;24007:4;23998:6;23934:78;:::i;:::-;23926:86;;23824:195;;;;:::o;24025:419::-;;24229:2;24218:9;24214:18;24206:26;;24278:9;24272:4;24268:20;24264:1;24253:9;24249:17;24242:47;24306:131;24432:4;24306:131;:::i;:::-;24298:139;;24196:248;;;:::o;24450:419::-;;24654:2;24643:9;24639:18;24631:26;;24703:9;24697:4;24693:20;24689:1;24678:9;24674:17;24667:47;24731:131;24857:4;24731:131;:::i;:::-;24723:139;;24621:248;;;:::o;24875:419::-;;25079:2;25068:9;25064:18;25056:26;;25128:9;25122:4;25118:20;25114:1;25103:9;25099:17;25092:47;25156:131;25282:4;25156:131;:::i;:::-;25148:139;;25046:248;;;:::o;25300:419::-;;25504:2;25493:9;25489:18;25481:26;;25553:9;25547:4;25543:20;25539:1;25528:9;25524:17;25517:47;25581:131;25707:4;25581:131;:::i;:::-;25573:139;;25471:248;;;:::o;25725:419::-;;25929:2;25918:9;25914:18;25906:26;;25978:9;25972:4;25968:20;25964:1;25953:9;25949:17;25942:47;26006:131;26132:4;26006:131;:::i;:::-;25998:139;;25896:248;;;:::o;26150:419::-;;26354:2;26343:9;26339:18;26331:26;;26403:9;26397:4;26393:20;26389:1;26378:9;26374:17;26367:47;26431:131;26557:4;26431:131;:::i;:::-;26423:139;;26321:248;;;:::o;26575:419::-;;26779:2;26768:9;26764:18;26756:26;;26828:9;26822:4;26818:20;26814:1;26803:9;26799:17;26792:47;26856:131;26982:4;26856:131;:::i;:::-;26848:139;;26746:248;;;:::o;27000:419::-;;27204:2;27193:9;27189:18;27181:26;;27253:9;27247:4;27243:20;27239:1;27228:9;27224:17;27217:47;27281:131;27407:4;27281:131;:::i;:::-;27273:139;;27171:248;;;:::o;27425:419::-;;27629:2;27618:9;27614:18;27606:26;;27678:9;27672:4;27668:20;27664:1;27653:9;27649:17;27642:47;27706:131;27832:4;27706:131;:::i;:::-;27698:139;;27596:248;;;:::o;27850:419::-;;28054:2;28043:9;28039:18;28031:26;;28103:9;28097:4;28093:20;28089:1;28078:9;28074:17;28067:47;28131:131;28257:4;28131:131;:::i;:::-;28123:139;;28021:248;;;:::o;28275:419::-;;28479:2;28468:9;28464:18;28456:26;;28528:9;28522:4;28518:20;28514:1;28503:9;28499:17;28492:47;28556:131;28682:4;28556:131;:::i;:::-;28548:139;;28446:248;;;:::o;28700:419::-;;28904:2;28893:9;28889:18;28881:26;;28953:9;28947:4;28943:20;28939:1;28928:9;28924:17;28917:47;28981:131;29107:4;28981:131;:::i;:::-;28973:139;;28871:248;;;:::o;29125:419::-;;29329:2;29318:9;29314:18;29306:26;;29378:9;29372:4;29368:20;29364:1;29353:9;29349:17;29342:47;29406:131;29532:4;29406:131;:::i;:::-;29398:139;;29296:248;;;:::o;29550:419::-;;29754:2;29743:9;29739:18;29731:26;;29803:9;29797:4;29793:20;29789:1;29778:9;29774:17;29767:47;29831:131;29957:4;29831:131;:::i;:::-;29823:139;;29721:248;;;:::o;29975:419::-;;30179:2;30168:9;30164:18;30156:26;;30228:9;30222:4;30218:20;30214:1;30203:9;30199:17;30192:47;30256:131;30382:4;30256:131;:::i;:::-;30248:139;;30146:248;;;:::o;30400:419::-;;30604:2;30593:9;30589:18;30581:26;;30653:9;30647:4;30643:20;30639:1;30628:9;30624:17;30617:47;30681:131;30807:4;30681:131;:::i;:::-;30673:139;;30571:248;;;:::o;30825:419::-;;31029:2;31018:9;31014:18;31006:26;;31078:9;31072:4;31068:20;31064:1;31053:9;31049:17;31042:47;31106:131;31232:4;31106:131;:::i;:::-;31098:139;;30996:248;;;:::o;31250:419::-;;31454:2;31443:9;31439:18;31431:26;;31503:9;31497:4;31493:20;31489:1;31478:9;31474:17;31467:47;31531:131;31657:4;31531:131;:::i;:::-;31523:139;;31421:248;;;:::o;31675:419::-;;31879:2;31868:9;31864:18;31856:26;;31928:9;31922:4;31918:20;31914:1;31903:9;31899:17;31892:47;31956:131;32082:4;31956:131;:::i;:::-;31948:139;;31846:248;;;:::o;32100:419::-;;32304:2;32293:9;32289:18;32281:26;;32353:9;32347:4;32343:20;32339:1;32328:9;32324:17;32317:47;32381:131;32507:4;32381:131;:::i;:::-;32373:139;;32271:248;;;:::o;32525:419::-;;32729:2;32718:9;32714:18;32706:26;;32778:9;32772:4;32768:20;32764:1;32753:9;32749:17;32742:47;32806:131;32932:4;32806:131;:::i;:::-;32798:139;;32696:248;;;:::o;32950:419::-;;33154:2;33143:9;33139:18;33131:26;;33203:9;33197:4;33193:20;33189:1;33178:9;33174:17;33167:47;33231:131;33357:4;33231:131;:::i;:::-;33223:139;;33121:248;;;:::o;33375:419::-;;33579:2;33568:9;33564:18;33556:26;;33628:9;33622:4;33618:20;33614:1;33603:9;33599:17;33592:47;33656:131;33782:4;33656:131;:::i;:::-;33648:139;;33546:248;;;:::o;33800:419::-;;34004:2;33993:9;33989:18;33981:26;;34053:9;34047:4;34043:20;34039:1;34028:9;34024:17;34017:47;34081:131;34207:4;34081:131;:::i;:::-;34073:139;;33971:248;;;:::o;34225:419::-;;34429:2;34418:9;34414:18;34406:26;;34478:9;34472:4;34468:20;34464:1;34453:9;34449:17;34442:47;34506:131;34632:4;34506:131;:::i;:::-;34498:139;;34396:248;;;:::o;34650:419::-;;34854:2;34843:9;34839:18;34831:26;;34903:9;34897:4;34893:20;34889:1;34878:9;34874:17;34867:47;34931:131;35057:4;34931:131;:::i;:::-;34923:139;;34821:248;;;:::o;35075:222::-;;35206:2;35195:9;35191:18;35183:26;;35219:71;35287:1;35276:9;35272:17;35263:6;35219:71;:::i;:::-;35173:124;;;;:::o;35303:129::-;;35364:20;;:::i;:::-;35354:30;;35393:33;35421:4;35413:6;35393:33;:::i;:::-;35344:88;;;:::o;35438:75::-;;35504:2;35498:9;35488:19;;35478:35;:::o;35519:307::-;;35670:18;35662:6;35659:30;35656:2;;;35692:18;;:::i;:::-;35656:2;35730:29;35752:6;35730:29;:::i;:::-;35722:37;;35814:4;35808;35804:15;35796:23;;35585:241;;;:::o;35832:308::-;;35984:18;35976:6;35973:30;35970:2;;;36006:18;;:::i;:::-;35970:2;36044:29;36066:6;36044:29;:::i;:::-;36036:37;;36128:4;36122;36118:15;36110:23;;35899:241;;;:::o;36146:132::-;;36236:3;36228:11;;36266:4;36261:3;36257:14;36249:22;;36218:60;;;:::o;36284:141::-;;36356:3;36348:11;;36379:3;36376:1;36369:14;36413:4;36410:1;36400:18;36392:26;;36338:87;;;:::o;36431:114::-;;36532:5;36526:12;36516:22;;36505:40;;;:::o;36551:98::-;;36636:5;36630:12;36620:22;;36609:40;;;:::o;36655:99::-;;36741:5;36735:12;36725:22;;36714:40;;;:::o;36760:113::-;;36862:4;36857:3;36853:14;36845:22;;36835:38;;;:::o;36879:184::-;;37012:6;37007:3;37000:19;37052:4;37047:3;37043:14;37028:29;;36990:73;;;;:::o;37069:168::-;;37186:6;37181:3;37174:19;37226:4;37221:3;37217:14;37202:29;;37164:73;;;;:::o;37243:147::-;;37381:3;37366:18;;37356:34;;;;:::o;37396:169::-;;37514:6;37509:3;37502:19;37554:4;37549:3;37545:14;37530:29;;37492:73;;;;:::o;37571:148::-;;37710:3;37695:18;;37685:34;;;;:::o;37725:305::-;;37784:20;37802:1;37784:20;:::i;:::-;37779:25;;37818:20;37836:1;37818:20;:::i;:::-;37813:25;;37972:1;37904:66;37900:74;37897:1;37894:81;37891:2;;;37978:18;;:::i;:::-;37891:2;38022:1;38019;38015:9;38008:16;;37769:261;;;;:::o;38036:185::-;;38093:20;38111:1;38093:20;:::i;:::-;38088:25;;38127:20;38145:1;38127:20;:::i;:::-;38122:25;;38166:1;38156:2;;38171:18;;:::i;:::-;38156:2;38213:1;38210;38206:9;38201:14;;38078:143;;;;:::o;38227:348::-;;38290:20;38308:1;38290:20;:::i;:::-;38285:25;;38324:20;38342:1;38324:20;:::i;:::-;38319:25;;38512:1;38444:66;38440:74;38437:1;38434:81;38429:1;38422:9;38415:17;38411:105;38408:2;;;38519:18;;:::i;:::-;38408:2;38567:1;38564;38560:9;38549:20;;38275:300;;;;:::o;38581:191::-;;38641:20;38659:1;38641:20;:::i;:::-;38636:25;;38675:20;38693:1;38675:20;:::i;:::-;38670:25;;38714:1;38711;38708:8;38705:2;;;38719:18;;:::i;:::-;38705:2;38764:1;38761;38757:9;38749:17;;38626:146;;;;:::o;38778:96::-;;38844:24;38862:5;38844:24;:::i;:::-;38833:35;;38823:51;;;:::o;38880:90::-;;38957:5;38950:13;38943:21;38932:32;;38922:48;;;:::o;38976:149::-;;39052:66;39045:5;39041:78;39030:89;;39020:105;;;:::o;39131:126::-;;39208:42;39201:5;39197:54;39186:65;;39176:81;;;:::o;39263:77::-;;39329:5;39318:16;;39308:32;;;:::o;39346:154::-;39430:6;39425:3;39420;39407:30;39492:1;39483:6;39478:3;39474:16;39467:27;39397:103;;;:::o;39506:307::-;39574:1;39584:113;39598:6;39595:1;39592:13;39584:113;;;39683:1;39678:3;39674:11;39668:18;39664:1;39659:3;39655:11;39648:39;39620:2;39617:1;39613:10;39608:15;;39584:113;;;39715:6;39712:1;39709:13;39706:2;;;39795:1;39786:6;39781:3;39777:16;39770:27;39706:2;39555:258;;;;:::o;39819:320::-;;39900:1;39894:4;39890:12;39880:22;;39947:1;39941:4;39937:12;39968:18;39958:2;;40024:4;40016:6;40012:17;40002:27;;39958:2;40086;40078:6;40075:14;40055:18;40052:38;40049:2;;;40105:18;;:::i;:::-;40049:2;39870:269;;;;:::o;40145:281::-;40228:27;40250:4;40228:27;:::i;:::-;40220:6;40216:40;40358:6;40346:10;40343:22;40322:18;40310:10;40307:34;40304:62;40301:2;;;40369:18;;:::i;:::-;40301:2;40409:10;40405:2;40398:22;40188:238;;;:::o;40432:233::-;;40494:24;40512:5;40494:24;:::i;:::-;40485:33;;40540:66;40533:5;40530:77;40527:2;;;40610:18;;:::i;:::-;40527:2;40657:1;40650:5;40646:13;40639:20;;40475:190;;;:::o;40671:176::-;;40720:20;40738:1;40720:20;:::i;:::-;40715:25;;40754:20;40772:1;40754:20;:::i;:::-;40749:25;;40793:1;40783:2;;40798:18;;:::i;:::-;40783:2;40839:1;40836;40832:9;40827:14;;40705:142;;;;:::o;40853:180::-;40901:77;40898:1;40891:88;40998:4;40995:1;40988:15;41022:4;41019:1;41012:15;41039:180;41087:77;41084:1;41077:88;41184:4;41181:1;41174:15;41208:4;41205:1;41198:15;41225:180;41273:77;41270:1;41263:88;41370:4;41367:1;41360:15;41394:4;41391:1;41384:15;41411:180;41459:77;41456:1;41449:88;41556:4;41553:1;41546:15;41580:4;41577:1;41570:15;41597:102;;41689:2;41685:7;41680:2;41673:5;41669:14;41665:28;41655:38;;41645:54;;;:::o;41705:156::-;41845:8;41841:1;41833:6;41829:14;41822:32;41811:50;:::o;41867:222::-;42007:34;42003:1;41995:6;41991:14;41984:58;42076:5;42071:2;42063:6;42059:15;42052:30;41973:116;:::o;42095:230::-;42235:34;42231:1;42223:6;42219:14;42212:58;42304:13;42299:2;42291:6;42287:15;42280:38;42201:124;:::o;42331:237::-;42471:34;42467:1;42459:6;42455:14;42448:58;42540:20;42535:2;42527:6;42523:15;42516:45;42437:131;:::o;42574:225::-;42714:34;42710:1;42702:6;42698:14;42691:58;42783:8;42778:2;42770:6;42766:15;42759:33;42680:119;:::o;42805:178::-;42945:30;42941:1;42933:6;42929:14;42922:54;42911:72;:::o;42989:223::-;43129:34;43125:1;43117:6;43113:14;43106:58;43198:6;43193:2;43185:6;43181:15;43174:31;43095:117;:::o;43218:175::-;43358:27;43354:1;43346:6;43342:14;43335:51;43324:69;:::o;43399:231::-;43539:34;43535:1;43527:6;43523:14;43516:58;43608:14;43603:2;43595:6;43591:15;43584:39;43505:125;:::o;43636:168::-;43776:20;43772:1;43764:6;43760:14;43753:44;43742:62;:::o;43810:243::-;43950:34;43946:1;43938:6;43934:14;43927:58;44019:26;44014:2;44006:6;44002:15;43995:51;43916:137;:::o;44059:165::-;44199:17;44195:1;44187:6;44183:14;44176:41;44165:59;:::o;44230:229::-;44370:34;44366:1;44358:6;44354:14;44347:58;44439:12;44434:2;44426:6;44422:15;44415:37;44336:123;:::o;44465:228::-;44605:34;44601:1;44593:6;44589:14;44582:58;44674:11;44669:2;44661:6;44657:15;44650:36;44571:122;:::o;44699:169::-;44839:21;44835:1;44827:6;44823:14;44816:45;44805:63;:::o;44874:182::-;45014:34;45010:1;45002:6;44998:14;44991:58;44980:76;:::o;45062:231::-;45202:34;45198:1;45190:6;45186:14;45179:58;45271:14;45266:2;45258:6;45254:15;45247:39;45168:125;:::o;45299:182::-;45439:34;45435:1;45427:6;45423:14;45416:58;45405:76;:::o;45487:228::-;45627:34;45623:1;45615:6;45611:14;45604:58;45696:11;45691:2;45683:6;45679:15;45672:36;45593:122;:::o;45721:169::-;45861:21;45857:1;45849:6;45845:14;45838:45;45827:63;:::o;45896:166::-;46036:18;46032:1;46024:6;46020:14;46013:42;46002:60;:::o;46068:220::-;46208:34;46204:1;46196:6;46192:14;46185:58;46277:3;46272:2;46264:6;46260:15;46253:28;46174:114;:::o;46294:::-;46400:8;:::o;46414:236::-;46554:34;46550:1;46542:6;46538:14;46531:58;46623:19;46618:2;46610:6;46606:15;46599:44;46520:130;:::o;46656:231::-;46796:34;46792:1;46784:6;46780:14;46773:58;46865:14;46860:2;46852:6;46848:15;46841:39;46762:125;:::o;46893:164::-;47033:16;47029:1;47021:6;47017:14;47010:40;46999:58;:::o;47063:169::-;47203:21;47199:1;47191:6;47187:14;47180:45;47169:63;:::o;47238:122::-;47311:24;47329:5;47311:24;:::i;:::-;47304:5;47301:35;47291:2;;47350:1;47347;47340:12;47291:2;47281:79;:::o;47366:116::-;47436:21;47451:5;47436:21;:::i;:::-;47429:5;47426:32;47416:2;;47472:1;47469;47462:12;47416:2;47406:76;:::o;47488:120::-;47560:23;47577:5;47560:23;:::i;:::-;47553:5;47550:34;47540:2;;47598:1;47595;47588:12;47540:2;47530:78;:::o;47614:122::-;47687:24;47705:5;47687:24;:::i;:::-;47680:5;47677:35;47667:2;;47726:1;47723;47716:12;47667:2;47657:79;:::o
Swarm Source
ipfs://63a839d769e8df113537bfa846ef0ad62356977dea75c67ae2c3f204ce88c5c8
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.