ETH Price: $3,077.82 (+0.95%)
Gas: 3 Gwei

Token

thelilguys (LILGUYS)
 

Overview

Max Total Supply

790 LILGUYS

Holders

519

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 LILGUYS
0x4dD0D2b69ef1208F9AEbd10Ad53665B420D15e3f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
thelilguys

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-11
*/

// SPDX-License-Identifier: MIT
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);
	}
}

/**
 * @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);
}

/**
 * @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);
			}
		}
	}
}

/**
 * @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;
	}
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	/**
	 * @dev Initializes the contract setting the deployer as the initial owner.
	 */
	constructor() {
		_transferOwnership(_msgSender());
	}

	/**
	 * @dev Returns the address of the current owner.
	 */
	function owner() public view virtual returns (address) {
		return _owner;
	}

	/**
	 * @dev Throws if called by any account other than the owner.
	 */
	modifier onlyOwner() {
		require(owner() == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	/**
	 * @dev Leaves the contract without owner. It will not be possible to call
	 * `onlyOwner` functions anymore. Can only be called by the current owner.
	 *
	 * NOTE: Renouncing ownership will leave the contract without an owner,
	 * thereby removing any functionality that is only available to the owner.
	 */
	function renounceOwnership() public virtual onlyOwner {
		_transferOwnership(address(0));
	}

	/**
	 * @dev Transfers ownership of the contract to a new account (`newOwner`).
	 * Can only be called by the current owner.
	 */
	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		_transferOwnership(newOwner);
	}

	/**
	 * @dev Transfers ownership of the contract to a new account (`newOwner`).
	 * Internal function without access restriction.
	 */
	function _transferOwnership(address newOwner) internal virtual {
		address oldOwner = _owner;
		_owner = newOwner;
		emit OwnershipTransferred(oldOwner, newOwner);
	}
}


/**
 * @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);
}

/**
 * @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;
	}
}


/**
 * @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;
}

/**
 * @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);
}

/**
 * @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);
}


/**
 * @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 {}
}

/**
 * @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();
	}
}

contract thelilguys is ERC721Enumerable, Ownable {

	using Strings for uint256;

	string _baseTokenURI;
	uint256 private _reserved = 50;
	uint256 private _price = 0.045 ether;
	bool public _paused = true;

	string private _passPhrase;
	bool public _claimPaused = true;

	// withdraw address
	address t1;

	constructor(string memory baseURI, string memory passPhrase) ERC721("thelilguys", "LILGUYS")  {
		setBaseURI(baseURI);
		_passPhrase = passPhrase;
		t1 = msg.sender;

		// team gets the first lilguy
		_safeMint(t1, 0);
	}

	function mintLilguys(uint256 num) public payable {
		uint256 supply = totalSupply();
		require( !_paused, "Sale paused" );
		require( supply + num < 8501 - _reserved, "Exceeds maximum lilguys supply" );
		require( msg.value >= _price * num, "Incorrect ether amount" );

		for(uint256 i; i < num; i++){
			_safeMint(msg.sender, supply + i);
		}
	}

	function claimLilguy(string memory passCode) public {
		require( !_claimPaused, "OG free mint is over");
		uint256 supply = totalSupply();
		require( supply < 501, "OG freemint sold out");
		require( keccak256(bytes(passCode)) == keccak256(bytes(_passPhrase)), "Wrong passcode");
		address sender = msg.sender;
		require( balanceOf(sender) < 1, "OGs can only claim 1 lilguy");
		_safeMint(sender, supply);
	}

	function walletOfOwner(address _owner) public view returns(uint256[] memory) {
		uint256 tokenCount = balanceOf(_owner);

		uint256[] memory tokensId = new uint256[](tokenCount);
		for(uint256 i; i < tokenCount; i++){
			tokensId[i] = tokenOfOwnerByIndex(_owner, i);
		}
		return tokensId;
	}

	// Just in case Eth does some crazy stuff
	function setPrice(uint256 _newPrice) public onlyOwner {
		_price = _newPrice;
	}

	function _baseURI() internal view virtual override returns (string memory) {
		return _baseTokenURI;
	}

	function setBaseURI(string memory baseURI) public onlyOwner {
		_baseTokenURI = baseURI;
	}

	function getPrice() public view returns (uint256) {
		return _price;
	}

	function giveAway(address _to, uint256 _amount) external onlyOwner {
		require( _amount <= _reserved, "Exceeds reserved lilguy supply" );

		uint256 supply = totalSupply();
		for(uint256 i; i < _amount; i++){
			_safeMint( _to, supply + i );
		}

		_reserved -= _amount;
	}

	function pause(bool val) public onlyOwner {
		_paused = val;
	}

	function pauseClaim(bool val) public onlyOwner {
		_claimPaused = val;
	}

	function setPassPhrase(string memory newPass) public onlyOwner {
		_passPhrase = newPass;
	}

	function withdrawAll() public onlyOwner {
		address payable _to = payable(t1);
		uint256 _balance = address(this).balance;
		_to.transfer(_balance);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"passPhrase","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"passCode","type":"string"}],"name":"claimLilguy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mintLilguys","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pauseClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newPass","type":"string"}],"name":"setPassPhrase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526032600c55669fdf42f6e48000600d556001600e60006101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055503480156200005757600080fd5b5060405162005ac738038062005ac783398181016040528101906200007d919062000f41565b6040518060400160405280600a81526020017f7468656c696c67757973000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4c494c475559530000000000000000000000000000000000000000000000000081525081600090805190602001906200010192919062000ddc565b5080600190805190602001906200011a92919062000ddc565b5050506200013d62000131620001e560201b60201c565b620001ed60201b60201c565b6200014e82620002b360201b60201c565b80600f90805190602001906200016692919062000ddc565b5033601060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001dd601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006200035e60201b60201c565b505062001565565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c3620001e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e96200038460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003399062001289565b60405180910390fd5b80600b90805190602001906200035a92919062000ddc565b5050565b62000380828260405180602001604052806000815250620003ae60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003c083836200041c60201b60201c565b620003d560008484846200060260201b60201c565b62000417576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040e9062001201565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200048f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004869062001267565b60405180910390fd5b620004a081620007bc60201b60201c565b15620004e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004da9062001223565b60405180910390fd5b620004f7600083836200082860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054991906200133f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006308473ffffffffffffffffffffffffffffffffffffffff166200096f60201b62001b8d1760201c565b15620007af578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000662620001e560201b60201c565b8786866040518563ffffffff1660e01b8152600401620006869493929190620011ad565b602060405180830381600087803b158015620006a157600080fd5b505af1925050508015620006d557506040513d601f19601f82011682018060405250810190620006d2919062000f15565b60015b6200075e573d806000811462000708576040519150601f19603f3d011682016040523d82523d6000602084013e6200070d565b606091505b5060008151141562000756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074d9062001201565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007b4565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008408383836200098260201b62001ba01760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200088d5762000887816200098760201b60201c565b620008d5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008d457620008d38382620009d060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000922576200091c8162000b4d60201b60201c565b6200096a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009695762000968828262000c9560201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009ea8462000d2160201b62000ef91760201c565b620009f691906200139c565b905060006007600084815260200190815260200160002054905081811462000adc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b6391906200139c565b905060006009600084815260200190815260200160002054905060006008838154811062000bba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000c03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000cad8362000d2160201b62000ef91760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d8c9062001245565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000dea9062001477565b90600052602060002090601f01602090048101928262000e0e576000855562000e5a565b82601f1062000e2957805160ff191683800117855562000e5a565b8280016001018555821562000e5a579182015b8281111562000e5957825182559160200191906001019062000e3c565b5b50905062000e69919062000e6d565b5090565b5b8082111562000e8857600081600090555060010162000e6e565b5090565b600062000ea362000e9d84620012df565b620012ab565b90508281526020810184848401111562000ebc57600080fd5b62000ec984828562001441565b509392505050565b60008151905062000ee2816200154b565b92915050565b600082601f83011262000efa57600080fd5b815162000f0c84826020860162000e8c565b91505092915050565b60006020828403121562000f2857600080fd5b600062000f388482850162000ed1565b91505092915050565b6000806040838503121562000f5557600080fd5b600083015167ffffffffffffffff81111562000f7057600080fd5b62000f7e8582860162000ee8565b925050602083015167ffffffffffffffff81111562000f9c57600080fd5b62000faa8582860162000ee8565b9150509250929050565b62000fbf81620013d7565b82525050565b600062000fd28262001312565b62000fde81856200131d565b935062000ff081856020860162001441565b62000ffb816200153a565b840191505092915050565b6000620010156032836200132e565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006200107d601c836200132e565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000620010bf602a836200132e565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000620011276020836200132e565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000620011696020836200132e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b620011a78162001437565b82525050565b6000608082019050620011c4600083018762000fb4565b620011d3602083018662000fb4565b620011e260408301856200119c565b8181036060830152620011f6818462000fc5565b905095945050505050565b600060208201905081810360008301526200121c8162001006565b9050919050565b600060208201905081810360008301526200123e816200106e565b9050919050565b600060208201905081810360008301526200126081620010b0565b9050919050565b60006020820190508181036000830152620012828162001118565b9050919050565b60006020820190508181036000830152620012a4816200115a565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620012d557620012d46200150b565b5b8060405250919050565b600067ffffffffffffffff821115620012fd57620012fc6200150b565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200134c8262001437565b9150620013598362001437565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620013915762001390620014ad565b5b828201905092915050565b6000620013a98262001437565b9150620013b68362001437565b925082821015620013cc57620013cb620014ad565b5b828203905092915050565b6000620013e48262001417565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200146157808201518184015260208101905062001444565b8381111562001471576000848401525b50505050565b600060028204905060018216806200149057607f821691505b60208210811415620014a757620014a6620014dc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200155681620013eb565b81146200156257600080fd5b50565b61455280620015756000396000f3fe6080604052600436106101e35760003560e01c8063853828b611610102578063ae42e7b611610095578063e29842e911610064578063e29842e9146106df578063e37b3fb814610708578063e985e9c514610733578063f2fde38b14610770576101e3565b8063ae42e7b614610634578063b88d4fde14610650578063c87b56dd14610679578063ca800144146106b6576101e3565b806395d89b41116100d157806395d89b411461058c5780639888cc83146105b757806398d5fdca146105e0578063a22cb4651461060b576101e3565b8063853828b6146104f85780638da5cb5b1461050f57806391b7f5ed1461053a57806393e39b7d14610563576101e3565b80632f745c591161017a57806355f804b31161014957806355f804b31461043e5780636352211e1461046757806370a08231146104a4578063715018a6146104e1576101e3565b80632f745c591461035e57806342842e0e1461039b578063438b6300146103c45780634f6ccce714610401576101e3565b8063095ea7b3116101b6578063095ea7b3146102b657806316c61ccc146102df57806318160ddd1461030a57806323b872dd14610335576101e3565b806301ffc9a7146101e857806302329a291461022557806306fdde031461024e578063081812fc14610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906130cf565b610799565b60405161021c9190613cb7565b60405180910390f35b34801561023157600080fd5b5061024c600480360381019061024791906130a6565b610813565b005b34801561025a57600080fd5b506102636108ac565b6040516102709190613cd2565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190613162565b61093e565b6040516102ad9190613c2e565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d8919061306a565b6109c3565b005b3480156102eb57600080fd5b506102f4610adb565b6040516103019190613cb7565b60405180910390f35b34801561031657600080fd5b5061031f610aee565b60405161032c9190614034565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612f64565b610afb565b005b34801561036a57600080fd5b506103856004803603810190610380919061306a565b610b5b565b6040516103929190614034565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190612f64565b610c00565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612eff565b610c20565b6040516103f89190613c95565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190613162565b610d1a565b6040516104359190614034565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190613121565b610db1565b005b34801561047357600080fd5b5061048e60048036038101906104899190613162565b610e47565b60405161049b9190613c2e565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190612eff565b610ef9565b6040516104d89190614034565b60405180910390f35b3480156104ed57600080fd5b506104f6610fb1565b005b34801561050457600080fd5b5061050d611039565b005b34801561051b57600080fd5b5061052461112c565b6040516105319190613c2e565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613162565b611156565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613121565b6111dc565b005b34801561059857600080fd5b506105a1611272565b6040516105ae9190613cd2565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906130a6565b611304565b005b3480156105ec57600080fd5b506105f561139d565b6040516106029190614034565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061302e565b6113a7565b005b61064e60048036038101906106499190613162565b611528565b005b34801561065c57600080fd5b5061067760048036038101906106729190612fb3565b611668565b005b34801561068557600080fd5b506106a0600480360381019061069b9190613162565b6116ca565b6040516106ad9190613cd2565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d8919061306a565b611771565b005b3480156106eb57600080fd5b5061070660048036038101906107019190613121565b611890565b005b34801561071457600080fd5b5061071d6119ee565b60405161072a9190613cb7565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190612f28565b611a01565b6040516107679190613cb7565b60405180910390f35b34801561077c57600080fd5b5061079760048036038101906107929190612eff565b611a95565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080c575061080b82611ba5565b5b9050919050565b61081b611c87565b73ffffffffffffffffffffffffffffffffffffffff1661083961112c565b73ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690613f14565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546108bb90614347565b80601f01602080910402602001604051908101604052809291908181526020018280546108e790614347565b80156109345780601f1061090957610100808354040283529160200191610934565b820191906000526020600020905b81548152906001019060200180831161091757829003601f168201915b5050505050905090565b600061094982611c8f565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613ef4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ce82610e47565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3690613f74565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a5e611c87565b73ffffffffffffffffffffffffffffffffffffffff161480610a8d5750610a8c81610a87611c87565b611a01565b5b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390613e34565b60405180910390fd5b610ad68383611cfb565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610b0c610b06611c87565b82611db4565b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613fb4565b60405180910390fd5b610b56838383611e92565b505050565b6000610b6683610ef9565b8210610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613d34565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c1b83838360405180602001604052806000815250611668565b505050565b60606000610c2d83610ef9565b905060008167ffffffffffffffff811115610c71577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9f5781602001602082028036833780820191505090505b50905060005b82811015610d0f57610cb78582610b5b565b828281518110610cf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610d0790614379565b915050610ca5565b508092505050919050565b6000610d24610aee565b8210610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90613fd4565b60405180910390fd5b60088281548110610d9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610db9611c87565b73ffffffffffffffffffffffffffffffffffffffff16610dd761112c565b73ffffffffffffffffffffffffffffffffffffffff1614610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613f14565b60405180910390fd5b80600b9080519060200190610e43929190612d23565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613e74565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613e54565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb9611c87565b73ffffffffffffffffffffffffffffffffffffffff16610fd761112c565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613f14565b60405180910390fd5b61103760006120ee565b565b611041611c87565b73ffffffffffffffffffffffffffffffffffffffff1661105f61112c565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613f14565b60405180910390fd5b6000601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611127573d6000803e3d6000fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61115e611c87565b73ffffffffffffffffffffffffffffffffffffffff1661117c61112c565b73ffffffffffffffffffffffffffffffffffffffff16146111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613f14565b60405180910390fd5b80600d8190555050565b6111e4611c87565b73ffffffffffffffffffffffffffffffffffffffff1661120261112c565b73ffffffffffffffffffffffffffffffffffffffff1614611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90613f14565b60405180910390fd5b80600f908051906020019061126e929190612d23565b5050565b60606001805461128190614347565b80601f01602080910402602001604051908101604052809291908181526020018280546112ad90614347565b80156112fa5780601f106112cf576101008083540402835291602001916112fa565b820191906000526020600020905b8154815290600101906020018083116112dd57829003601f168201915b5050505050905090565b61130c611c87565b73ffffffffffffffffffffffffffffffffffffffff1661132a61112c565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613f14565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600d54905090565b6113af611c87565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613dd4565b60405180910390fd5b806005600061142a611c87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114d7611c87565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161151c9190613cb7565b60405180910390a35050565b6000611532610aee565b9050600e60009054906101000a900460ff1615611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613d14565b60405180910390fd5b600c54612135611594919061425d565b82826115a0919061417c565b106115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613cf4565b60405180910390fd5b81600d546115ee9190614203565b341015611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614014565b60405180910390fd5b60005b828110156116635761165033828461164b919061417c565b6121b4565b808061165b90614379565b915050611633565b505050565b611679611673611c87565b83611db4565b6116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90613fb4565b60405180910390fd5b6116c4848484846121d2565b50505050565b60606116d582611c8f565b611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613f54565b60405180910390fd5b600061171e61222e565b9050600081511161173e5760405180602001604052806000815250611769565b80611748846122c0565b604051602001611759929190613c0a565b6040516020818303038152906040525b915050919050565b611779611c87565b73ffffffffffffffffffffffffffffffffffffffff1661179761112c565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613f14565b60405180910390fd5b600c54811115611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613e94565b60405180910390fd5b600061183c610aee565b905060005b828110156118715761185e848284611859919061417c565b6121b4565b808061186990614379565b915050611841565b5081600c6000828254611884919061425d565b92505081905550505050565b601060009054906101000a900460ff16156118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613ff4565b60405180910390fd5b60006118ea610aee565b90506101f58110611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790613eb4565b60405180910390fd5b600f60405161193f9190613bf3565b604051809103902082805190602001201461198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690613e14565b60405180910390fd5b6000339050600161199f82610ef9565b106119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613f94565b60405180910390fd5b6119e981836121b4565b505050565b601060009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a9d611c87565b73ffffffffffffffffffffffffffffffffffffffff16611abb61112c565b73ffffffffffffffffffffffffffffffffffffffff1614611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890613f14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890613d74565b60405180910390fd5b611b8a816120ee565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c805750611c7f8261246d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6e83610e47565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dbf82611c8f565b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613df4565b60405180910390fd5b6000611e0983610e47565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7857508373ffffffffffffffffffffffffffffffffffffffff16611e608461093e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e895750611e888185611a01565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eb282610e47565b73ffffffffffffffffffffffffffffffffffffffff1614611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90613f34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90613db4565b60405180910390fd5b611f838383836124d7565b611f8e600082611cfb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fde919061425d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612035919061417c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ce8282604051806020016040528060008152506125eb565b5050565b6121dd848484611e92565b6121e984848484612646565b612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f90613d54565b60405180910390fd5b50505050565b6060600b805461223d90614347565b80601f016020809104026020016040519081016040528092919081815260200182805461226990614347565b80156122b65780601f1061228b576101008083540402835291602001916122b6565b820191906000526020600020905b81548152906001019060200180831161229957829003601f168201915b5050505050905090565b60606000821415612308576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612468565b600082905060005b6000821461233a57808061232390614379565b915050600a8261233391906141d2565b9150612310565b60008167ffffffffffffffff81111561237c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123ae5781602001600182028036833780820191505090505b5090505b60008514612461576001826123c7919061425d565b9150600a856123d691906143c2565b60306123e2919061417c565b60f81b81838151811061241e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561245a91906141d2565b94506123b2565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124e2838383611ba0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561252557612520816127dd565b612564565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612563576125628382612826565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a7576125a281612993565b6125e6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125e5576125e48282612ad6565b5b5b505050565b6125f58383612b55565b6126026000848484612646565b612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890613d54565b60405180910390fd5b505050565b60006126678473ffffffffffffffffffffffffffffffffffffffff16611b8d565b156127d0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612690611c87565b8786866040518563ffffffff1660e01b81526004016126b29493929190613c49565b602060405180830381600087803b1580156126cc57600080fd5b505af19250505080156126fd57506040513d601f19601f820116820180604052508101906126fa91906130f8565b60015b612780573d806000811461272d576040519150601f19603f3d011682016040523d82523d6000602084013e612732565b606091505b50600081511415612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90613d54565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127d5565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161283384610ef9565b61283d919061425d565b9050600060076000848152602001908152602001600020549050818114612922576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129a7919061425d565b90506000600960008481526020019081526020016000205490506000600883815481106129fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612a45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612ae183610ef9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc90613ed4565b60405180910390fd5b612bce81611c8f565b15612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590613d94565b60405180910390fd5b612c1a600083836124d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6a919061417c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612d2f90614347565b90600052602060002090601f016020900481019282612d515760008555612d98565b82601f10612d6a57805160ff1916838001178555612d98565b82800160010185558215612d98579182015b82811115612d97578251825591602001919060010190612d7c565b5b509050612da59190612da9565b5090565b5b80821115612dc2576000816000905550600101612daa565b5090565b6000612dd9612dd484614080565b61404f565b905082815260208101848484011115612df157600080fd5b612dfc848285614305565b509392505050565b6000612e17612e12846140b0565b61404f565b905082815260208101848484011115612e2f57600080fd5b612e3a848285614305565b509392505050565b600081359050612e51816144c0565b92915050565b600081359050612e66816144d7565b92915050565b600081359050612e7b816144ee565b92915050565b600081519050612e90816144ee565b92915050565b600082601f830112612ea757600080fd5b8135612eb7848260208601612dc6565b91505092915050565b600082601f830112612ed157600080fd5b8135612ee1848260208601612e04565b91505092915050565b600081359050612ef981614505565b92915050565b600060208284031215612f1157600080fd5b6000612f1f84828501612e42565b91505092915050565b60008060408385031215612f3b57600080fd5b6000612f4985828601612e42565b9250506020612f5a85828601612e42565b9150509250929050565b600080600060608486031215612f7957600080fd5b6000612f8786828701612e42565b9350506020612f9886828701612e42565b9250506040612fa986828701612eea565b9150509250925092565b60008060008060808587031215612fc957600080fd5b6000612fd787828801612e42565b9450506020612fe887828801612e42565b9350506040612ff987828801612eea565b925050606085013567ffffffffffffffff81111561301657600080fd5b61302287828801612e96565b91505092959194509250565b6000806040838503121561304157600080fd5b600061304f85828601612e42565b925050602061306085828601612e57565b9150509250929050565b6000806040838503121561307d57600080fd5b600061308b85828601612e42565b925050602061309c85828601612eea565b9150509250929050565b6000602082840312156130b857600080fd5b60006130c684828501612e57565b91505092915050565b6000602082840312156130e157600080fd5b60006130ef84828501612e6c565b91505092915050565b60006020828403121561310a57600080fd5b600061311884828501612e81565b91505092915050565b60006020828403121561313357600080fd5b600082013567ffffffffffffffff81111561314d57600080fd5b61315984828501612ec0565b91505092915050565b60006020828403121561317457600080fd5b600061318284828501612eea565b91505092915050565b60006131978383613bd5565b60208301905092915050565b6131ac81614291565b82525050565b60006131bd82614105565b6131c78185614133565b93506131d2836140e0565b8060005b838110156132035781516131ea888261318b565b97506131f583614126565b9250506001810190506131d6565b5085935050505092915050565b613219816142a3565b82525050565b600061322a82614110565b6132348185614144565b9350613244818560208601614314565b61324d816144af565b840191505092915050565b6000815461326581614347565b61326f8186614155565b9450600182166000811461328a576001811461329b576132ce565b60ff198316865281860193506132ce565b6132a4856140f0565b60005b838110156132c6578154818901526001820191506020810190506132a7565b838801955050505b50505092915050565b60006132e28261411b565b6132ec8185614160565b93506132fc818560208601614314565b613305816144af565b840191505092915050565b600061331b8261411b565b6133258185614171565b9350613335818560208601614314565b80840191505092915050565b600061334e601e83614160565b91507f45786365656473206d6178696d756d206c696c6775797320737570706c7900006000830152602082019050919050565b600061338e600b83614160565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b60006133ce602b83614160565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613434603283614160565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061349a602683614160565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613500601c83614160565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613540602483614160565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135a6601983614160565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006135e6602c83614160565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061364c600e83614160565b91507f57726f6e672070617373636f64650000000000000000000000000000000000006000830152602082019050919050565b600061368c603883614160565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006136f2602a83614160565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613758602983614160565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137be601e83614160565b91507f45786365656473207265736572766564206c696c67757920737570706c7900006000830152602082019050919050565b60006137fe601483614160565b91507f4f4720667265656d696e7420736f6c64206f75740000000000000000000000006000830152602082019050919050565b600061383e602083614160565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061387e602c83614160565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138e4602083614160565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613924602983614160565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061398a602f83614160565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006139f0602183614160565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a56601b83614160565b91507f4f47732063616e206f6e6c7920636c61696d2031206c696c67757900000000006000830152602082019050919050565b6000613a96603183614160565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613afc602c83614160565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613b62601483614160565b91507f4f472066726565206d696e74206973206f7665720000000000000000000000006000830152602082019050919050565b6000613ba2601683614160565b91507f496e636f727265637420657468657220616d6f756e74000000000000000000006000830152602082019050919050565b613bde816142fb565b82525050565b613bed816142fb565b82525050565b6000613bff8284613258565b915081905092915050565b6000613c168285613310565b9150613c228284613310565b91508190509392505050565b6000602082019050613c4360008301846131a3565b92915050565b6000608082019050613c5e60008301876131a3565b613c6b60208301866131a3565b613c786040830185613be4565b8181036060830152613c8a818461321f565b905095945050505050565b60006020820190508181036000830152613caf81846131b2565b905092915050565b6000602082019050613ccc6000830184613210565b92915050565b60006020820190508181036000830152613cec81846132d7565b905092915050565b60006020820190508181036000830152613d0d81613341565b9050919050565b60006020820190508181036000830152613d2d81613381565b9050919050565b60006020820190508181036000830152613d4d816133c1565b9050919050565b60006020820190508181036000830152613d6d81613427565b9050919050565b60006020820190508181036000830152613d8d8161348d565b9050919050565b60006020820190508181036000830152613dad816134f3565b9050919050565b60006020820190508181036000830152613dcd81613533565b9050919050565b60006020820190508181036000830152613ded81613599565b9050919050565b60006020820190508181036000830152613e0d816135d9565b9050919050565b60006020820190508181036000830152613e2d8161363f565b9050919050565b60006020820190508181036000830152613e4d8161367f565b9050919050565b60006020820190508181036000830152613e6d816136e5565b9050919050565b60006020820190508181036000830152613e8d8161374b565b9050919050565b60006020820190508181036000830152613ead816137b1565b9050919050565b60006020820190508181036000830152613ecd816137f1565b9050919050565b60006020820190508181036000830152613eed81613831565b9050919050565b60006020820190508181036000830152613f0d81613871565b9050919050565b60006020820190508181036000830152613f2d816138d7565b9050919050565b60006020820190508181036000830152613f4d81613917565b9050919050565b60006020820190508181036000830152613f6d8161397d565b9050919050565b60006020820190508181036000830152613f8d816139e3565b9050919050565b60006020820190508181036000830152613fad81613a49565b9050919050565b60006020820190508181036000830152613fcd81613a89565b9050919050565b60006020820190508181036000830152613fed81613aef565b9050919050565b6000602082019050818103600083015261400d81613b55565b9050919050565b6000602082019050818103600083015261402d81613b95565b9050919050565b60006020820190506140496000830184613be4565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561407657614075614480565b5b8060405250919050565b600067ffffffffffffffff82111561409b5761409a614480565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156140cb576140ca614480565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614187826142fb565b9150614192836142fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141c7576141c66143f3565b5b828201905092915050565b60006141dd826142fb565b91506141e8836142fb565b9250826141f8576141f7614422565b5b828204905092915050565b600061420e826142fb565b9150614219836142fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614252576142516143f3565b5b828202905092915050565b6000614268826142fb565b9150614273836142fb565b925082821015614286576142856143f3565b5b828203905092915050565b600061429c826142db565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614332578082015181840152602081019050614317565b83811115614341576000848401525b50505050565b6000600282049050600182168061435f57607f821691505b6020821081141561437357614372614451565b5b50919050565b6000614384826142fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143b7576143b66143f3565b5b600182019050919050565b60006143cd826142fb565b91506143d8836142fb565b9250826143e8576143e7614422565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6144c981614291565b81146144d457600080fd5b50565b6144e0816142a3565b81146144eb57600080fd5b50565b6144f7816142af565b811461450257600080fd5b50565b61450e816142fb565b811461451957600080fd5b5056fea2646970667358221220fb7f8324ea9a95ece3b0174894f691bf032a032eda07cef408ba10350069755964736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e7468656c696c677579732e696f2f6c696c6775792f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066c696c66616d0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101e35760003560e01c8063853828b611610102578063ae42e7b611610095578063e29842e911610064578063e29842e9146106df578063e37b3fb814610708578063e985e9c514610733578063f2fde38b14610770576101e3565b8063ae42e7b614610634578063b88d4fde14610650578063c87b56dd14610679578063ca800144146106b6576101e3565b806395d89b41116100d157806395d89b411461058c5780639888cc83146105b757806398d5fdca146105e0578063a22cb4651461060b576101e3565b8063853828b6146104f85780638da5cb5b1461050f57806391b7f5ed1461053a57806393e39b7d14610563576101e3565b80632f745c591161017a57806355f804b31161014957806355f804b31461043e5780636352211e1461046757806370a08231146104a4578063715018a6146104e1576101e3565b80632f745c591461035e57806342842e0e1461039b578063438b6300146103c45780634f6ccce714610401576101e3565b8063095ea7b3116101b6578063095ea7b3146102b657806316c61ccc146102df57806318160ddd1461030a57806323b872dd14610335576101e3565b806301ffc9a7146101e857806302329a291461022557806306fdde031461024e578063081812fc14610279575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906130cf565b610799565b60405161021c9190613cb7565b60405180910390f35b34801561023157600080fd5b5061024c600480360381019061024791906130a6565b610813565b005b34801561025a57600080fd5b506102636108ac565b6040516102709190613cd2565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190613162565b61093e565b6040516102ad9190613c2e565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d8919061306a565b6109c3565b005b3480156102eb57600080fd5b506102f4610adb565b6040516103019190613cb7565b60405180910390f35b34801561031657600080fd5b5061031f610aee565b60405161032c9190614034565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190612f64565b610afb565b005b34801561036a57600080fd5b506103856004803603810190610380919061306a565b610b5b565b6040516103929190614034565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190612f64565b610c00565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612eff565b610c20565b6040516103f89190613c95565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190613162565b610d1a565b6040516104359190614034565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190613121565b610db1565b005b34801561047357600080fd5b5061048e60048036038101906104899190613162565b610e47565b60405161049b9190613c2e565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190612eff565b610ef9565b6040516104d89190614034565b60405180910390f35b3480156104ed57600080fd5b506104f6610fb1565b005b34801561050457600080fd5b5061050d611039565b005b34801561051b57600080fd5b5061052461112c565b6040516105319190613c2e565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613162565b611156565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613121565b6111dc565b005b34801561059857600080fd5b506105a1611272565b6040516105ae9190613cd2565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906130a6565b611304565b005b3480156105ec57600080fd5b506105f561139d565b6040516106029190614034565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061302e565b6113a7565b005b61064e60048036038101906106499190613162565b611528565b005b34801561065c57600080fd5b5061067760048036038101906106729190612fb3565b611668565b005b34801561068557600080fd5b506106a0600480360381019061069b9190613162565b6116ca565b6040516106ad9190613cd2565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d8919061306a565b611771565b005b3480156106eb57600080fd5b5061070660048036038101906107019190613121565b611890565b005b34801561071457600080fd5b5061071d6119ee565b60405161072a9190613cb7565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190612f28565b611a01565b6040516107679190613cb7565b60405180910390f35b34801561077c57600080fd5b5061079760048036038101906107929190612eff565b611a95565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080c575061080b82611ba5565b5b9050919050565b61081b611c87565b73ffffffffffffffffffffffffffffffffffffffff1661083961112c565b73ffffffffffffffffffffffffffffffffffffffff161461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690613f14565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546108bb90614347565b80601f01602080910402602001604051908101604052809291908181526020018280546108e790614347565b80156109345780601f1061090957610100808354040283529160200191610934565b820191906000526020600020905b81548152906001019060200180831161091757829003601f168201915b5050505050905090565b600061094982611c8f565b610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613ef4565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ce82610e47565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3690613f74565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a5e611c87565b73ffffffffffffffffffffffffffffffffffffffff161480610a8d5750610a8c81610a87611c87565b611a01565b5b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac390613e34565b60405180910390fd5b610ad68383611cfb565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610b0c610b06611c87565b82611db4565b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613fb4565b60405180910390fd5b610b56838383611e92565b505050565b6000610b6683610ef9565b8210610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90613d34565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c1b83838360405180602001604052806000815250611668565b505050565b60606000610c2d83610ef9565b905060008167ffffffffffffffff811115610c71577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9f5781602001602082028036833780820191505090505b50905060005b82811015610d0f57610cb78582610b5b565b828281518110610cf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610d0790614379565b915050610ca5565b508092505050919050565b6000610d24610aee565b8210610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90613fd4565b60405180910390fd5b60088281548110610d9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610db9611c87565b73ffffffffffffffffffffffffffffffffffffffff16610dd761112c565b73ffffffffffffffffffffffffffffffffffffffff1614610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613f14565b60405180910390fd5b80600b9080519060200190610e43929190612d23565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613e74565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613e54565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb9611c87565b73ffffffffffffffffffffffffffffffffffffffff16610fd761112c565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613f14565b60405180910390fd5b61103760006120ee565b565b611041611c87565b73ffffffffffffffffffffffffffffffffffffffff1661105f61112c565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613f14565b60405180910390fd5b6000601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611127573d6000803e3d6000fd5b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61115e611c87565b73ffffffffffffffffffffffffffffffffffffffff1661117c61112c565b73ffffffffffffffffffffffffffffffffffffffff16146111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c990613f14565b60405180910390fd5b80600d8190555050565b6111e4611c87565b73ffffffffffffffffffffffffffffffffffffffff1661120261112c565b73ffffffffffffffffffffffffffffffffffffffff1614611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90613f14565b60405180910390fd5b80600f908051906020019061126e929190612d23565b5050565b60606001805461128190614347565b80601f01602080910402602001604051908101604052809291908181526020018280546112ad90614347565b80156112fa5780601f106112cf576101008083540402835291602001916112fa565b820191906000526020600020905b8154815290600101906020018083116112dd57829003601f168201915b5050505050905090565b61130c611c87565b73ffffffffffffffffffffffffffffffffffffffff1661132a61112c565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613f14565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600d54905090565b6113af611c87565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490613dd4565b60405180910390fd5b806005600061142a611c87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114d7611c87565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161151c9190613cb7565b60405180910390a35050565b6000611532610aee565b9050600e60009054906101000a900460ff1615611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90613d14565b60405180910390fd5b600c54612135611594919061425d565b82826115a0919061417c565b106115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d790613cf4565b60405180910390fd5b81600d546115ee9190614203565b341015611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614014565b60405180910390fd5b60005b828110156116635761165033828461164b919061417c565b6121b4565b808061165b90614379565b915050611633565b505050565b611679611673611c87565b83611db4565b6116b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116af90613fb4565b60405180910390fd5b6116c4848484846121d2565b50505050565b60606116d582611c8f565b611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613f54565b60405180910390fd5b600061171e61222e565b9050600081511161173e5760405180602001604052806000815250611769565b80611748846122c0565b604051602001611759929190613c0a565b6040516020818303038152906040525b915050919050565b611779611c87565b73ffffffffffffffffffffffffffffffffffffffff1661179761112c565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613f14565b60405180910390fd5b600c54811115611832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182990613e94565b60405180910390fd5b600061183c610aee565b905060005b828110156118715761185e848284611859919061417c565b6121b4565b808061186990614379565b915050611841565b5081600c6000828254611884919061425d565b92505081905550505050565b601060009054906101000a900460ff16156118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613ff4565b60405180910390fd5b60006118ea610aee565b90506101f58110611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790613eb4565b60405180910390fd5b600f60405161193f9190613bf3565b604051809103902082805190602001201461198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198690613e14565b60405180910390fd5b6000339050600161199f82610ef9565b106119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613f94565b60405180910390fd5b6119e981836121b4565b505050565b601060009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a9d611c87565b73ffffffffffffffffffffffffffffffffffffffff16611abb61112c565b73ffffffffffffffffffffffffffffffffffffffff1614611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890613f14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7890613d74565b60405180910390fd5b611b8a816120ee565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c805750611c7f8261246d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6e83610e47565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dbf82611c8f565b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613df4565b60405180910390fd5b6000611e0983610e47565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7857508373ffffffffffffffffffffffffffffffffffffffff16611e608461093e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e895750611e888185611a01565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eb282610e47565b73ffffffffffffffffffffffffffffffffffffffff1614611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90613f34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f90613db4565b60405180910390fd5b611f838383836124d7565b611f8e600082611cfb565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fde919061425d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612035919061417c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6121ce8282604051806020016040528060008152506125eb565b5050565b6121dd848484611e92565b6121e984848484612646565b612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f90613d54565b60405180910390fd5b50505050565b6060600b805461223d90614347565b80601f016020809104026020016040519081016040528092919081815260200182805461226990614347565b80156122b65780601f1061228b576101008083540402835291602001916122b6565b820191906000526020600020905b81548152906001019060200180831161229957829003601f168201915b5050505050905090565b60606000821415612308576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612468565b600082905060005b6000821461233a57808061232390614379565b915050600a8261233391906141d2565b9150612310565b60008167ffffffffffffffff81111561237c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123ae5781602001600182028036833780820191505090505b5090505b60008514612461576001826123c7919061425d565b9150600a856123d691906143c2565b60306123e2919061417c565b60f81b81838151811061241e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561245a91906141d2565b94506123b2565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124e2838383611ba0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561252557612520816127dd565b612564565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612563576125628382612826565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125a7576125a281612993565b6125e6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125e5576125e48282612ad6565b5b5b505050565b6125f58383612b55565b6126026000848484612646565b612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890613d54565b60405180910390fd5b505050565b60006126678473ffffffffffffffffffffffffffffffffffffffff16611b8d565b156127d0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612690611c87565b8786866040518563ffffffff1660e01b81526004016126b29493929190613c49565b602060405180830381600087803b1580156126cc57600080fd5b505af19250505080156126fd57506040513d601f19601f820116820180604052508101906126fa91906130f8565b60015b612780573d806000811461272d576040519150601f19603f3d011682016040523d82523d6000602084013e612732565b606091505b50600081511415612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276f90613d54565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127d5565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161283384610ef9565b61283d919061425d565b9050600060076000848152602001908152602001600020549050818114612922576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129a7919061425d565b90506000600960008481526020019081526020016000205490506000600883815481106129fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612a45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612ae183610ef9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc90613ed4565b60405180910390fd5b612bce81611c8f565b15612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590613d94565b60405180910390fd5b612c1a600083836124d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c6a919061417c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612d2f90614347565b90600052602060002090601f016020900481019282612d515760008555612d98565b82601f10612d6a57805160ff1916838001178555612d98565b82800160010185558215612d98579182015b82811115612d97578251825591602001919060010190612d7c565b5b509050612da59190612da9565b5090565b5b80821115612dc2576000816000905550600101612daa565b5090565b6000612dd9612dd484614080565b61404f565b905082815260208101848484011115612df157600080fd5b612dfc848285614305565b509392505050565b6000612e17612e12846140b0565b61404f565b905082815260208101848484011115612e2f57600080fd5b612e3a848285614305565b509392505050565b600081359050612e51816144c0565b92915050565b600081359050612e66816144d7565b92915050565b600081359050612e7b816144ee565b92915050565b600081519050612e90816144ee565b92915050565b600082601f830112612ea757600080fd5b8135612eb7848260208601612dc6565b91505092915050565b600082601f830112612ed157600080fd5b8135612ee1848260208601612e04565b91505092915050565b600081359050612ef981614505565b92915050565b600060208284031215612f1157600080fd5b6000612f1f84828501612e42565b91505092915050565b60008060408385031215612f3b57600080fd5b6000612f4985828601612e42565b9250506020612f5a85828601612e42565b9150509250929050565b600080600060608486031215612f7957600080fd5b6000612f8786828701612e42565b9350506020612f9886828701612e42565b9250506040612fa986828701612eea565b9150509250925092565b60008060008060808587031215612fc957600080fd5b6000612fd787828801612e42565b9450506020612fe887828801612e42565b9350506040612ff987828801612eea565b925050606085013567ffffffffffffffff81111561301657600080fd5b61302287828801612e96565b91505092959194509250565b6000806040838503121561304157600080fd5b600061304f85828601612e42565b925050602061306085828601612e57565b9150509250929050565b6000806040838503121561307d57600080fd5b600061308b85828601612e42565b925050602061309c85828601612eea565b9150509250929050565b6000602082840312156130b857600080fd5b60006130c684828501612e57565b91505092915050565b6000602082840312156130e157600080fd5b60006130ef84828501612e6c565b91505092915050565b60006020828403121561310a57600080fd5b600061311884828501612e81565b91505092915050565b60006020828403121561313357600080fd5b600082013567ffffffffffffffff81111561314d57600080fd5b61315984828501612ec0565b91505092915050565b60006020828403121561317457600080fd5b600061318284828501612eea565b91505092915050565b60006131978383613bd5565b60208301905092915050565b6131ac81614291565b82525050565b60006131bd82614105565b6131c78185614133565b93506131d2836140e0565b8060005b838110156132035781516131ea888261318b565b97506131f583614126565b9250506001810190506131d6565b5085935050505092915050565b613219816142a3565b82525050565b600061322a82614110565b6132348185614144565b9350613244818560208601614314565b61324d816144af565b840191505092915050565b6000815461326581614347565b61326f8186614155565b9450600182166000811461328a576001811461329b576132ce565b60ff198316865281860193506132ce565b6132a4856140f0565b60005b838110156132c6578154818901526001820191506020810190506132a7565b838801955050505b50505092915050565b60006132e28261411b565b6132ec8185614160565b93506132fc818560208601614314565b613305816144af565b840191505092915050565b600061331b8261411b565b6133258185614171565b9350613335818560208601614314565b80840191505092915050565b600061334e601e83614160565b91507f45786365656473206d6178696d756d206c696c6775797320737570706c7900006000830152602082019050919050565b600061338e600b83614160565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b60006133ce602b83614160565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613434603283614160565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061349a602683614160565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613500601c83614160565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613540602483614160565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135a6601983614160565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006135e6602c83614160565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061364c600e83614160565b91507f57726f6e672070617373636f64650000000000000000000000000000000000006000830152602082019050919050565b600061368c603883614160565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006136f2602a83614160565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613758602983614160565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137be601e83614160565b91507f45786365656473207265736572766564206c696c67757920737570706c7900006000830152602082019050919050565b60006137fe601483614160565b91507f4f4720667265656d696e7420736f6c64206f75740000000000000000000000006000830152602082019050919050565b600061383e602083614160565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061387e602c83614160565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138e4602083614160565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613924602983614160565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061398a602f83614160565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006139f0602183614160565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a56601b83614160565b91507f4f47732063616e206f6e6c7920636c61696d2031206c696c67757900000000006000830152602082019050919050565b6000613a96603183614160565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613afc602c83614160565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613b62601483614160565b91507f4f472066726565206d696e74206973206f7665720000000000000000000000006000830152602082019050919050565b6000613ba2601683614160565b91507f496e636f727265637420657468657220616d6f756e74000000000000000000006000830152602082019050919050565b613bde816142fb565b82525050565b613bed816142fb565b82525050565b6000613bff8284613258565b915081905092915050565b6000613c168285613310565b9150613c228284613310565b91508190509392505050565b6000602082019050613c4360008301846131a3565b92915050565b6000608082019050613c5e60008301876131a3565b613c6b60208301866131a3565b613c786040830185613be4565b8181036060830152613c8a818461321f565b905095945050505050565b60006020820190508181036000830152613caf81846131b2565b905092915050565b6000602082019050613ccc6000830184613210565b92915050565b60006020820190508181036000830152613cec81846132d7565b905092915050565b60006020820190508181036000830152613d0d81613341565b9050919050565b60006020820190508181036000830152613d2d81613381565b9050919050565b60006020820190508181036000830152613d4d816133c1565b9050919050565b60006020820190508181036000830152613d6d81613427565b9050919050565b60006020820190508181036000830152613d8d8161348d565b9050919050565b60006020820190508181036000830152613dad816134f3565b9050919050565b60006020820190508181036000830152613dcd81613533565b9050919050565b60006020820190508181036000830152613ded81613599565b9050919050565b60006020820190508181036000830152613e0d816135d9565b9050919050565b60006020820190508181036000830152613e2d8161363f565b9050919050565b60006020820190508181036000830152613e4d8161367f565b9050919050565b60006020820190508181036000830152613e6d816136e5565b9050919050565b60006020820190508181036000830152613e8d8161374b565b9050919050565b60006020820190508181036000830152613ead816137b1565b9050919050565b60006020820190508181036000830152613ecd816137f1565b9050919050565b60006020820190508181036000830152613eed81613831565b9050919050565b60006020820190508181036000830152613f0d81613871565b9050919050565b60006020820190508181036000830152613f2d816138d7565b9050919050565b60006020820190508181036000830152613f4d81613917565b9050919050565b60006020820190508181036000830152613f6d8161397d565b9050919050565b60006020820190508181036000830152613f8d816139e3565b9050919050565b60006020820190508181036000830152613fad81613a49565b9050919050565b60006020820190508181036000830152613fcd81613a89565b9050919050565b60006020820190508181036000830152613fed81613aef565b9050919050565b6000602082019050818103600083015261400d81613b55565b9050919050565b6000602082019050818103600083015261402d81613b95565b9050919050565b60006020820190506140496000830184613be4565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561407657614075614480565b5b8060405250919050565b600067ffffffffffffffff82111561409b5761409a614480565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156140cb576140ca614480565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614187826142fb565b9150614192836142fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141c7576141c66143f3565b5b828201905092915050565b60006141dd826142fb565b91506141e8836142fb565b9250826141f8576141f7614422565b5b828204905092915050565b600061420e826142fb565b9150614219836142fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614252576142516143f3565b5b828202905092915050565b6000614268826142fb565b9150614273836142fb565b925082821015614286576142856143f3565b5b828203905092915050565b600061429c826142db565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614332578082015181840152602081019050614317565b83811115614341576000848401525b50505050565b6000600282049050600182168061435f57607f821691505b6020821081141561437357614372614451565b5b50919050565b6000614384826142fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143b7576143b66143f3565b5b600182019050919050565b60006143cd826142fb565b91506143d8836142fb565b9250826143e8576143e7614422565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6144c981614291565b81146144d457600080fd5b50565b6144e0816142a3565b81146144eb57600080fd5b50565b6144f7816142af565b811461450257600080fd5b50565b61450e816142fb565b811461451957600080fd5b5056fea2646970667358221220fb7f8324ea9a95ece3b0174894f691bf032a032eda07cef408ba10350069755964736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e7468656c696c677579732e696f2f6c696c6775792f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066c696c66616d0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.thelilguys.io/lilguy/
Arg [1] : passPhrase (string): lilfam

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [3] : 68747470733a2f2f6170692e7468656c696c677579732e696f2f6c696c677579
Arg [4] : 2f00000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 6c696c66616d0000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38289:2751:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32660:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40633:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21982:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23376:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22962:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38473:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33252:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24185:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32947:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24541:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39624:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33421:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40170:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21709:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21466:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11952:94;;;;;;;;;;;;;:::i;:::-;;40882:155;;;;;;;;;;;;;:::i;:::-;;11361:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39973:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40783:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22130:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40703:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40268:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38843:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24755:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22284:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40346:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39203:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38535:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23975:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12186:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32660:215;32762:4;32795:35;32780:50;;;:11;:50;;;;:90;;;;32834:36;32858:11;32834:23;:36::i;:::-;32780:90;32773:97;;32660:215;;;:::o;40633:65::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40690:3:::1;40680:7;;:13;;;;;;;;;;;;;;;;;;40633:65:::0;:::o;21982:91::-;22036:13;22063:5;22056:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21982:91;:::o;23376:206::-;23452:7;23474:16;23482:7;23474;:16::i;:::-;23466:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23553:15;:24;23569:7;23553:24;;;;;;;;;;;;;;;;;;;;;23546:31;;23376:206;;;:::o;22962:360::-;23037:13;23053:23;23068:7;23053:14;:23::i;:::-;23037:39;;23095:5;23089:11;;:2;:11;;;;23081:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23174:5;23158:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23183:37;23200:5;23207:12;:10;:12::i;:::-;23183:16;:37::i;:::-;23158:62;23145:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;23296:21;23305:2;23309:7;23296:8;:21::i;:::-;22962:360;;;:::o;38473:26::-;;;;;;;;;;;;;:::o;33252:104::-;33313:7;33334:10;:17;;;;33327:24;;33252:104;:::o;24185:297::-;24347:41;24366:12;:10;:12::i;:::-;24380:7;24347:18;:41::i;:::-;24339:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24449:28;24459:4;24465:2;24469:7;24449:9;:28::i;:::-;24185:297;;;:::o;32947:241::-;33044:7;33074:23;33091:5;33074:16;:23::i;:::-;33066:5;:31;33058:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33157:12;:19;33170:5;33157:19;;;;;;;;;;;;;;;:26;33177:5;33157:26;;;;;;;;;;;;33150:33;;32947:241;;;;:::o;24541:155::-;24652:39;24669:4;24675:2;24679:7;24652:39;;;;;;;;;;;;:16;:39::i;:::-;24541:155;;;:::o;39624:300::-;39683:16;39706:18;39727:17;39737:6;39727:9;:17::i;:::-;39706:38;;39751:25;39793:10;39779:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39751:53;;39813:9;39809:91;39828:10;39824:1;:14;39809:91;;;39864:30;39884:6;39892:1;39864:19;:30::i;:::-;39850:8;39859:1;39850:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;39840:3;;;;;:::i;:::-;;;;39809:91;;;;39911:8;39904:15;;;;39624:300;;;:::o;33421:218::-;33496:7;33526:30;:28;:30::i;:::-;33518:5;:38;33510:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33617:10;33628:5;33617:17;;;;;;;;;;;;;;;;;;;;;;;;33610:24;;33421:218;;;:::o;40170:93::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40251:7:::1;40235:13;:23;;;;;;;;;;;;:::i;:::-;;40170:93:::0;:::o;21709:218::-;21781:7;21795:13;21811:7;:16;21819:7;21811:16;;;;;;;;;;;;;;;;;;;;;21795:32;;21857:1;21840:19;;:5;:19;;;;21832:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21917:5;21910:12;;;21709:218;;;:::o;21466:193::-;21538:7;21577:1;21560:19;;:5;:19;;;;21552:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21638:9;:16;21648:5;21638:16;;;;;;;;;;;;;;;;21631:23;;21466:193;;;:::o;11952:94::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12011:30:::1;12038:1;12011:18;:30::i;:::-;11952:94::o:0;40882:155::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40927:19:::1;40957:2;;;;;;;;;;;40927:33;;40965:16;40984:21;40965:40;;41010:3;:12;;:22;41023:8;41010:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;11619:1;;40882:155::o:0;11361:78::-;11407:7;11428:6;;;;;;;;;;;11421:13;;11361:78;:::o;39973:82::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40041:9:::1;40032:6;:18;;;;39973:82:::0;:::o;40783:94::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40865:7:::1;40851:11;:21;;;;;;;;;;;;:::i;:::-;;40783:94:::0;:::o;22130:95::-;22186:13;22213:7;22206:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22130:95;:::o;40703:75::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40770:3:::1;40755:12;;:18;;;;;;;;;;;;;;;;;;40703:75:::0;:::o;40268:73::-;40309:7;40330:6;;40323:13;;40268:73;:::o;23642:274::-;23751:12;:10;:12::i;:::-;23739:24;;:8;:24;;;;23731:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23845:8;23800:18;:32;23819:12;:10;:12::i;:::-;23800:32;;;;;;;;;;;;;;;:42;23833:8;23800:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23892:8;23863:48;;23878:12;:10;:12::i;:::-;23863:48;;;23902:8;23863:48;;;;;;:::i;:::-;;;;;;;;23642:274;;:::o;38843:355::-;38897:14;38914:13;:11;:13::i;:::-;38897:30;;38942:7;;;;;;;;;;;38941:8;38932:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;39002:9;;38995:4;:16;;;;:::i;:::-;38989:3;38980:6;:12;;;;:::i;:::-;:31;38971:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;39083:3;39074:6;;:12;;;;:::i;:::-;39061:9;:25;;39052:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39125:9;39121:73;39140:3;39136:1;:7;39121:73;;;39155:33;39165:10;39186:1;39177:6;:10;;;;:::i;:::-;39155:9;:33::i;:::-;39145:3;;;;;:::i;:::-;;;;39121:73;;;;38843:355;;:::o;24755:286::-;24897:41;24916:12;:10;:12::i;:::-;24930:7;24897:18;:41::i;:::-;24889:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24997:39;25011:4;25017:2;25021:7;25030:5;24997:13;:39::i;:::-;24755:286;;;;:::o;22284:313::-;22357:13;22385:16;22393:7;22385;:16::i;:::-;22377:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:21;22484:10;:8;:10::i;:::-;22460:34;;22530:1;22512:7;22506:21;:25;:86;;;;;;;;;;;;;;;;;22558:7;22567:18;:7;:16;:18::i;:::-;22541:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22506:86;22499:93;;;22284:313;;;:::o;40346:282::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40438:9:::1;;40427:7;:20;;40418:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40490:14;40507:13;:11;:13::i;:::-;40490:30;;40529:9;40525:72;40544:7;40540:1;:11;40525:72;;;40563:28;40574:3;40588:1;40579:6;:10;;;;:::i;:::-;40563:9;:28::i;:::-;40553:3;;;;;:::i;:::-;;;;40525:72;;;;40616:7;40603:9;;:20;;;;;;;:::i;:::-;;;;;;;;11619:1;40346:282:::0;;:::o;39203:416::-;39270:12;;;;;;;;;;;39269:13;39260:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39312:14;39329:13;:11;:13::i;:::-;39312:30;;39365:3;39356:6;:12;39347:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;39453:11;39437:29;;;;;;:::i;:::-;;;;;;;;39423:8;39407:26;;;;;;:59;39398:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39490:14;39507:10;39490:27;;39551:1;39531:17;39541:6;39531:9;:17::i;:::-;:21;39522:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39589:25;39599:6;39607;39589:9;:25::i;:::-;39203:416;;;:::o;38535:31::-;;;;;;;;;;;;;:::o;23975:155::-;24072:4;24090:18;:25;24109:5;24090:25;;;;;;;;;;;;;;;:35;24116:8;24090:35;;;;;;;;;;;;;;;;;;;;;;;;;24083:42;;23975:155;;;;:::o;12186:186::-;11565:12;:10;:12::i;:::-;11554:23;;:7;:5;:7::i;:::-;:23;;;11546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12289:1:::1;12269:22;;:8;:22;;;;12261:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12339:28;12358:8;12339:18;:28::i;:::-;12186:186:::0;:::o;3176:333::-;3236:4;3420:12;3472:7;3460:20;3452:28;;3503:1;3496:4;:8;3489:15;;;3176:333;;;:::o;31770:105::-;;;;:::o;21145:269::-;21247:4;21284:25;21269:40;;;:11;:40;;;;:96;;;;21332:33;21317:48;;;:11;:48;;;;21269:96;:140;;;;21373:36;21397:11;21373:23;:36::i;:::-;21269:140;21258:151;;21145:269;;;:::o;10288:89::-;10341:7;10362:10;10355:17;;10288:89;:::o;26425:118::-;26490:4;26536:1;26508:30;;:7;:16;26516:7;26508:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26501:37;;26425:118;;;:::o;29948:159::-;30044:2;30017:15;:24;30033:7;30017:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30094:7;30090:2;30056:46;;30065:23;30080:7;30065:14;:23::i;:::-;30056:46;;;;;;;;;;;;29948:159;;:::o;26686:327::-;26779:4;26798:16;26806:7;26798;:16::i;:::-;26790:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26868:13;26884:23;26899:7;26884:14;:23::i;:::-;26868:39;;26931:5;26920:16;;:7;:16;;;:51;;;;26964:7;26940:31;;:20;26952:7;26940:11;:20::i;:::-;:31;;;26920:51;:87;;;;26975:32;26992:5;26999:7;26975:16;:32::i;:::-;26920:87;26912:96;;;26686:327;;;;:::o;29348:500::-;29480:4;29453:31;;:23;29468:7;29453:14;:23::i;:::-;:31;;;29445:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29557:1;29543:16;;:2;:16;;;;29535:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29607:39;29628:4;29634:2;29638:7;29607:20;:39::i;:::-;29699:29;29716:1;29720:7;29699:8;:29::i;:::-;29754:1;29735:9;:15;29745:4;29735:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29777:1;29760:9;:13;29770:2;29760:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29802:2;29783:7;:16;29791:7;29783:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29835:7;29831:2;29816:27;;29825:4;29816:27;;;;;;;;;;;;29348:500;;;:::o;12517:170::-;12585:16;12604:6;;;;;;;;;;;12585:25;;12624:8;12615:6;;:17;;;;;;;;;;;;;;;;;;12673:8;12642:40;;12663:8;12642:40;;;;;;;;;;;;12517:170;;:::o;27322:101::-;27392:26;27402:2;27406:7;27392:26;;;;;;;;;;;;:9;:26::i;:::-;27322:101;;:::o;25866:273::-;25990:28;26000:4;26006:2;26010:7;25990:9;:28::i;:::-;26031:48;26054:4;26060:2;26064:7;26073:5;26031:22;:48::i;:::-;26023:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25866:273;;;;:::o;40060:105::-;40120:13;40147;40140:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40060:105;:::o;273:594::-;329:13;541:1;532:5;:10;528:38;;;550:10;;;;;;;;;;;;;;;;;;;;;528:38;570:12;585:5;570:20;;595:14;614:54;629:1;621:4;:9;614:54;;638:8;;;;;:::i;:::-;;;;660:2;652:10;;;;;:::i;:::-;;;614:54;;;672:19;704:6;694:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:39;;716:121;732:1;723:5;:10;716:121;;751:1;741:11;;;;;:::i;:::-;;;809:2;801:5;:10;;;;:::i;:::-;788:2;:24;;;;:::i;:::-;775:39;;758:6;765;758:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;829:2;820:11;;;;;:::i;:::-;;;716:121;;;855:6;841:21;;;;;273:594;;;;:::o;14105:148::-;14190:4;14223:25;14208:40;;;:11;:40;;;;14201:47;;14105:148;;;:::o;34204:487::-;34321:45;34348:4;34354:2;34358:7;34321:26;:45::i;:::-;34393:1;34377:18;;:4;:18;;;34373:157;;;34403:40;34435:7;34403:31;:40::i;:::-;34373:157;;;34467:2;34459:10;;:4;:10;;;34455:75;;34477:47;34510:4;34516:7;34477:32;:47::i;:::-;34455:75;34373:157;34552:1;34538:16;;:2;:16;;;34534:153;;;34562:45;34599:7;34562:36;:45::i;:::-;34534:153;;;34629:4;34623:10;;:2;:10;;;34619:68;;34641:40;34669:2;34673:7;34641:27;:40::i;:::-;34619:68;34534:153;34204:487;;;:::o;27635:261::-;27738:18;27744:2;27748:7;27738:5;:18::i;:::-;27774:54;27805:1;27809:2;27813:7;27822:5;27774:22;:54::i;:::-;27761:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;27635:261;;;:::o;30639:604::-;30767:4;30782:15;:2;:13;;;:15::i;:::-;30778:461;;;30825:2;30809:36;;;30846:12;:10;:12::i;:::-;30860:4;30866:7;30875:5;30809:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30805:400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31035:1;31018:6;:13;:18;31014:185;;;31046:60;;;;;;;;;;:::i;:::-;;;;;;;;31014:185;31176:6;31170:13;31161:6;31157:2;31153:15;31146:38;30805:400;30930:41;;;30920:51;;;:6;:51;;;;30913:58;;;;;30778:461;31229:4;31222:11;;30639:604;;;;;;;:::o;35360:149::-;35458:10;:17;;;;35431:15;:24;35447:7;35431:24;;;;;;;;;;;:44;;;;35480:10;35496:7;35480:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35360:149;:::o;36109:898::-;36357:22;36407:1;36382:22;36399:4;36382:16;:22::i;:::-;:26;;;;:::i;:::-;36357:51;;36413:18;36434:17;:26;36452:7;36434:26;;;;;;;;;;;;36413:47;;36569:14;36555:10;:28;36551:295;;36591:19;36613:12;:18;36626:4;36613:18;;;;;;;;;;;;;;;:34;36632:14;36613:34;;;;;;;;;;;;36591:56;;36688:11;36655:12;:18;36668:4;36655:18;;;;;;;;;;;;;;;:30;36674:10;36655:30;;;;;;;;;;;:44;;;;36796:10;36763:17;:30;36781:11;36763:30;;;;;;;;;;;:43;;;;36551:295;;36930:17;:26;36948:7;36930:26;;;;;;;;;;;36923:33;;;36968:12;:18;36981:4;36968:18;;;;;;;;;;;;;;;:34;36987:14;36968:34;;;;;;;;;;;36961:41;;;36109:898;;;;:::o;37284:998::-;37519:22;37564:1;37544:10;:17;;;;:21;;;;:::i;:::-;37519:46;;37570:18;37591:15;:24;37607:7;37591:24;;;;;;;;;;;;37570:45;;37918:19;37940:10;37951:14;37940:26;;;;;;;;;;;;;;;;;;;;;;;;37918:48;;37998:11;37973:10;37984;37973:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;38103:10;38072:15;:28;38088:11;38072:28;;;;;;;;;;;:41;;;;38232:15;:24;38248:7;38232:24;;;;;;;;;;;38225:31;;;38261:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37284:998;;;;:::o;34974:200::-;35053:14;35070:20;35087:2;35070:16;:20::i;:::-;35053:37;;35122:7;35095:12;:16;35108:2;35095:16;;;;;;;;;;;;;;;:24;35112:6;35095:24;;;;;;;;;;;:34;;;;35163:6;35134:17;:26;35152:7;35134:26;;;;;;;;;;;:35;;;;34974:200;;;:::o;28193:343::-;28281:1;28267:16;;:2;:16;;;;28259:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28334:16;28342:7;28334;:16::i;:::-;28333:17;28325:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28390:45;28419:1;28423:2;28427:7;28390:20;:45::i;:::-;28459:1;28442:9;:13;28452:2;28442:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28484:2;28465:7;:16;28473:7;28465:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28523:7;28519:2;28498:33;;28515:1;28498:33;;;;;;;;;;;;28193:343;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7926:849::-;;8068:5;8062:12;8097:36;8123:9;8097:36;:::i;:::-;8149:88;8230:6;8225:3;8149:88;:::i;:::-;8142:95;;8268:1;8257:9;8253:17;8284:1;8279:137;;;;8430:1;8425:344;;;;8246:523;;8279:137;8363:4;8359:9;8348;8344:25;8339:3;8332:38;8399:6;8394:3;8390:16;8383:23;;8279:137;;8425:344;8492:41;8527:5;8492:41;:::i;:::-;8555:1;8569:154;8583:6;8580:1;8577:13;8569:154;;;8657:7;8651:14;8647:1;8642:3;8638:11;8631:35;8707:1;8698:7;8694:15;8683:26;;8605:4;8602:1;8598:12;8593:17;;8569:154;;;8752:6;8747:3;8743:16;8736:23;;8432:337;;8246:523;;8035:740;;;;;;:::o;8781:364::-;;8897:39;8930:5;8897:39;:::i;:::-;8952:71;9016:6;9011:3;8952:71;:::i;:::-;8945:78;;9032:52;9077:6;9072:3;9065:4;9058:5;9054:16;9032:52;:::i;:::-;9109:29;9131:6;9109:29;:::i;:::-;9104:3;9100:39;9093:46;;8873:272;;;;;:::o;9151:377::-;;9285:39;9318:5;9285:39;:::i;:::-;9340:89;9422:6;9417:3;9340:89;:::i;:::-;9333:96;;9438:52;9483:6;9478:3;9471:4;9464:5;9460:16;9438:52;:::i;:::-;9515:6;9510:3;9506:16;9499:23;;9261:267;;;;;:::o;9534:328::-;;9697:67;9761:2;9756:3;9697:67;:::i;:::-;9690:74;;9794:32;9790:1;9785:3;9781:11;9774:53;9853:2;9848:3;9844:12;9837:19;;9680:182;;;:::o;9868:309::-;;10031:67;10095:2;10090:3;10031:67;:::i;:::-;10024:74;;10128:13;10124:1;10119:3;10115:11;10108:34;10168:2;10163:3;10159:12;10152:19;;10014:163;;;:::o;10183:375::-;;10346:67;10410:2;10405:3;10346:67;:::i;:::-;10339:74;;10443:34;10439:1;10434:3;10430:11;10423:55;10509:13;10504:2;10499:3;10495:12;10488:35;10549:2;10544:3;10540:12;10533:19;;10329:229;;;:::o;10564:382::-;;10727:67;10791:2;10786:3;10727:67;:::i;:::-;10720:74;;10824:34;10820:1;10815:3;10811:11;10804:55;10890:20;10885:2;10880:3;10876:12;10869:42;10937:2;10932:3;10928:12;10921:19;;10710:236;;;:::o;10952:370::-;;11115:67;11179:2;11174:3;11115:67;:::i;:::-;11108:74;;11212:34;11208:1;11203:3;11199:11;11192:55;11278:8;11273:2;11268:3;11264:12;11257:30;11313:2;11308:3;11304:12;11297:19;;11098:224;;;:::o;11328:326::-;;11491:67;11555:2;11550:3;11491:67;:::i;:::-;11484:74;;11588:30;11584:1;11579:3;11575:11;11568:51;11645:2;11640:3;11636:12;11629:19;;11474:180;;;:::o;11660:368::-;;11823:67;11887:2;11882:3;11823:67;:::i;:::-;11816:74;;11920:34;11916:1;11911:3;11907:11;11900:55;11986:6;11981:2;11976:3;11972:12;11965:28;12019:2;12014:3;12010:12;12003:19;;11806:222;;;:::o;12034:323::-;;12197:67;12261:2;12256:3;12197:67;:::i;:::-;12190:74;;12294:27;12290:1;12285:3;12281:11;12274:48;12348:2;12343:3;12339:12;12332:19;;12180:177;;;:::o;12363:376::-;;12526:67;12590:2;12585:3;12526:67;:::i;:::-;12519:74;;12623:34;12619:1;12614:3;12610:11;12603:55;12689:14;12684:2;12679:3;12675:12;12668:36;12730:2;12725:3;12721:12;12714:19;;12509:230;;;:::o;12745:312::-;;12908:67;12972:2;12967:3;12908:67;:::i;:::-;12901:74;;13005:16;13001:1;12996:3;12992:11;12985:37;13048:2;13043:3;13039:12;13032:19;;12891:166;;;:::o;13063:388::-;;13226:67;13290:2;13285:3;13226:67;:::i;:::-;13219:74;;13323:34;13319:1;13314:3;13310:11;13303:55;13389:26;13384:2;13379:3;13375:12;13368:48;13442:2;13437:3;13433:12;13426:19;;13209:242;;;:::o;13457:374::-;;13620:67;13684:2;13679:3;13620:67;:::i;:::-;13613:74;;13717:34;13713:1;13708:3;13704:11;13697:55;13783:12;13778:2;13773:3;13769:12;13762:34;13822:2;13817:3;13813:12;13806:19;;13603:228;;;:::o;13837:373::-;;14000:67;14064:2;14059:3;14000:67;:::i;:::-;13993:74;;14097:34;14093:1;14088:3;14084:11;14077:55;14163:11;14158:2;14153:3;14149:12;14142:33;14201:2;14196:3;14192:12;14185:19;;13983:227;;;:::o;14216:328::-;;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14476:32;14472:1;14467:3;14463:11;14456:53;14535:2;14530:3;14526:12;14519:19;;14362:182;;;:::o;14550:318::-;;14713:67;14777:2;14772:3;14713:67;:::i;:::-;14706:74;;14810:22;14806:1;14801:3;14797:11;14790:43;14859:2;14854:3;14850:12;14843:19;;14696:172;;;:::o;14874:330::-;;15037:67;15101:2;15096:3;15037:67;:::i;:::-;15030:74;;15134:34;15130:1;15125:3;15121:11;15114:55;15195:2;15190:3;15186:12;15179:19;;15020:184;;;:::o;15210:376::-;;15373:67;15437:2;15432:3;15373:67;:::i;:::-;15366:74;;15470:34;15466:1;15461:3;15457:11;15450:55;15536:14;15531:2;15526:3;15522:12;15515:36;15577:2;15572:3;15568:12;15561:19;;15356:230;;;:::o;15592:330::-;;15755:67;15819:2;15814:3;15755:67;:::i;:::-;15748:74;;15852:34;15848:1;15843:3;15839:11;15832:55;15913:2;15908:3;15904:12;15897:19;;15738:184;;;:::o;15928:373::-;;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16188:34;16184:1;16179:3;16175:11;16168:55;16254:11;16249:2;16244:3;16240:12;16233:33;16292:2;16287:3;16283:12;16276:19;;16074:227;;;:::o;16307:379::-;;16470:67;16534:2;16529:3;16470:67;:::i;:::-;16463:74;;16567:34;16563:1;16558:3;16554:11;16547:55;16633:17;16628:2;16623:3;16619:12;16612:39;16677:2;16672:3;16668:12;16661:19;;16453:233;;;:::o;16692:365::-;;16855:67;16919:2;16914:3;16855:67;:::i;:::-;16848:74;;16952:34;16948:1;16943:3;16939:11;16932:55;17018:3;17013:2;17008:3;17004:12;16997:25;17048:2;17043:3;17039:12;17032:19;;16838:219;;;:::o;17063:325::-;;17226:67;17290:2;17285:3;17226:67;:::i;:::-;17219:74;;17323:29;17319:1;17314:3;17310:11;17303:50;17379:2;17374:3;17370:12;17363:19;;17209:179;;;:::o;17394:381::-;;17557:67;17621:2;17616:3;17557:67;:::i;:::-;17550:74;;17654:34;17650:1;17645:3;17641:11;17634:55;17720:19;17715:2;17710:3;17706:12;17699:41;17766:2;17761:3;17757:12;17750:19;;17540:235;;;:::o;17781:376::-;;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18041:34;18037:1;18032:3;18028:11;18021:55;18107:14;18102:2;18097:3;18093:12;18086:36;18148:2;18143:3;18139:12;18132:19;;17927:230;;;:::o;18163:318::-;;18326:67;18390:2;18385:3;18326:67;:::i;:::-;18319:74;;18423:22;18419:1;18414:3;18410:11;18403:43;18472:2;18467:3;18463:12;18456:19;;18309:172;;;:::o;18487:320::-;;18650:67;18714:2;18709:3;18650:67;:::i;:::-;18643:74;;18747:24;18743:1;18738:3;18734:11;18727:45;18798:2;18793:3;18789:12;18782:19;;18633:174;;;:::o;18813:108::-;18890:24;18908:5;18890:24;:::i;:::-;18885:3;18878:37;18868:53;;:::o;18927:118::-;19014:24;19032:5;19014:24;:::i;:::-;19009:3;19002:37;18992:53;;:::o;19051:273::-;;19204:94;19294:3;19285:6;19204:94;:::i;:::-;19197:101;;19315:3;19308:10;;19186:138;;;;:::o;19330:435::-;;19532:95;19623:3;19614:6;19532:95;:::i;:::-;19525:102;;19644:95;19735:3;19726:6;19644:95;:::i;:::-;19637:102;;19756:3;19749:10;;19514:251;;;;;:::o;19771:222::-;;19902:2;19891:9;19887:18;19879:26;;19915:71;19983:1;19972:9;19968:17;19959:6;19915:71;:::i;:::-;19869:124;;;;:::o;19999:640::-;;20232:3;20221:9;20217:19;20209:27;;20246:71;20314:1;20303:9;20299:17;20290:6;20246:71;:::i;:::-;20327:72;20395:2;20384:9;20380:18;20371:6;20327:72;:::i;:::-;20409;20477:2;20466:9;20462:18;20453:6;20409:72;:::i;:::-;20528:9;20522:4;20518:20;20513:2;20502:9;20498:18;20491:48;20556:76;20627:4;20618:6;20556:76;:::i;:::-;20548:84;;20199:440;;;;;;;:::o;20645:373::-;;20826:2;20815:9;20811:18;20803:26;;20875:9;20869:4;20865:20;20861:1;20850:9;20846:17;20839:47;20903:108;21006:4;20997:6;20903:108;:::i;:::-;20895:116;;20793:225;;;;:::o;21024:210::-;;21149:2;21138:9;21134:18;21126:26;;21162:65;21224:1;21213:9;21209:17;21200:6;21162:65;:::i;:::-;21116:118;;;;:::o;21240:313::-;;21391:2;21380:9;21376:18;21368:26;;21440:9;21434:4;21430:20;21426:1;21415:9;21411:17;21404:47;21468:78;21541:4;21532:6;21468:78;:::i;:::-;21460:86;;21358:195;;;;:::o;21559:419::-;;21763:2;21752:9;21748:18;21740:26;;21812:9;21806:4;21802:20;21798:1;21787:9;21783:17;21776:47;21840:131;21966:4;21840:131;:::i;:::-;21832:139;;21730:248;;;:::o;21984:419::-;;22188:2;22177:9;22173:18;22165:26;;22237:9;22231:4;22227:20;22223:1;22212:9;22208:17;22201:47;22265:131;22391:4;22265:131;:::i;:::-;22257:139;;22155:248;;;:::o;22409:419::-;;22613:2;22602:9;22598:18;22590:26;;22662:9;22656:4;22652:20;22648:1;22637:9;22633:17;22626:47;22690:131;22816:4;22690:131;:::i;:::-;22682:139;;22580:248;;;:::o;22834:419::-;;23038:2;23027:9;23023:18;23015:26;;23087:9;23081:4;23077:20;23073:1;23062:9;23058:17;23051:47;23115:131;23241:4;23115:131;:::i;:::-;23107:139;;23005:248;;;:::o;23259:419::-;;23463:2;23452:9;23448:18;23440:26;;23512:9;23506:4;23502:20;23498:1;23487:9;23483:17;23476:47;23540:131;23666:4;23540:131;:::i;:::-;23532:139;;23430:248;;;:::o;23684:419::-;;23888:2;23877:9;23873:18;23865:26;;23937:9;23931:4;23927:20;23923:1;23912:9;23908:17;23901:47;23965:131;24091:4;23965:131;:::i;:::-;23957:139;;23855:248;;;:::o;24109:419::-;;24313:2;24302:9;24298:18;24290:26;;24362:9;24356:4;24352:20;24348:1;24337:9;24333:17;24326:47;24390:131;24516:4;24390:131;:::i;:::-;24382:139;;24280:248;;;:::o;24534:419::-;;24738:2;24727:9;24723:18;24715:26;;24787:9;24781:4;24777:20;24773:1;24762:9;24758:17;24751:47;24815:131;24941:4;24815:131;:::i;:::-;24807:139;;24705:248;;;:::o;24959:419::-;;25163:2;25152:9;25148:18;25140:26;;25212:9;25206:4;25202:20;25198:1;25187:9;25183:17;25176:47;25240:131;25366:4;25240:131;:::i;:::-;25232:139;;25130:248;;;:::o;25384:419::-;;25588:2;25577:9;25573:18;25565:26;;25637:9;25631:4;25627:20;25623:1;25612:9;25608:17;25601:47;25665:131;25791:4;25665:131;:::i;:::-;25657:139;;25555:248;;;:::o;25809:419::-;;26013:2;26002:9;25998:18;25990:26;;26062:9;26056:4;26052:20;26048:1;26037:9;26033:17;26026:47;26090:131;26216:4;26090:131;:::i;:::-;26082:139;;25980:248;;;:::o;26234:419::-;;26438:2;26427:9;26423:18;26415:26;;26487:9;26481:4;26477:20;26473:1;26462:9;26458:17;26451:47;26515:131;26641:4;26515:131;:::i;:::-;26507:139;;26405:248;;;:::o;26659:419::-;;26863:2;26852:9;26848:18;26840:26;;26912:9;26906:4;26902:20;26898:1;26887:9;26883:17;26876:47;26940:131;27066:4;26940:131;:::i;:::-;26932:139;;26830:248;;;:::o;27084:419::-;;27288:2;27277:9;27273:18;27265:26;;27337:9;27331:4;27327:20;27323:1;27312:9;27308:17;27301:47;27365:131;27491:4;27365:131;:::i;:::-;27357:139;;27255:248;;;:::o;27509:419::-;;27713:2;27702:9;27698:18;27690:26;;27762:9;27756:4;27752:20;27748:1;27737:9;27733:17;27726:47;27790:131;27916:4;27790:131;:::i;:::-;27782:139;;27680:248;;;:::o;27934:419::-;;28138:2;28127:9;28123:18;28115:26;;28187:9;28181:4;28177:20;28173:1;28162:9;28158:17;28151:47;28215:131;28341:4;28215:131;:::i;:::-;28207:139;;28105:248;;;:::o;28359:419::-;;28563:2;28552:9;28548:18;28540:26;;28612:9;28606:4;28602:20;28598:1;28587:9;28583:17;28576:47;28640:131;28766:4;28640:131;:::i;:::-;28632:139;;28530:248;;;:::o;28784:419::-;;28988:2;28977:9;28973:18;28965:26;;29037:9;29031:4;29027:20;29023:1;29012:9;29008:17;29001:47;29065:131;29191:4;29065:131;:::i;:::-;29057:139;;28955:248;;;:::o;29209:419::-;;29413:2;29402:9;29398:18;29390:26;;29462:9;29456:4;29452:20;29448:1;29437:9;29433:17;29426:47;29490:131;29616:4;29490:131;:::i;:::-;29482:139;;29380:248;;;:::o;29634:419::-;;29838:2;29827:9;29823:18;29815:26;;29887:9;29881:4;29877:20;29873:1;29862:9;29858:17;29851:47;29915:131;30041:4;29915:131;:::i;:::-;29907:139;;29805:248;;;:::o;30059:419::-;;30263:2;30252:9;30248:18;30240:26;;30312:9;30306:4;30302:20;30298:1;30287:9;30283:17;30276:47;30340:131;30466:4;30340:131;:::i;:::-;30332:139;;30230:248;;;:::o;30484:419::-;;30688:2;30677:9;30673:18;30665:26;;30737:9;30731:4;30727:20;30723:1;30712:9;30708:17;30701:47;30765:131;30891:4;30765:131;:::i;:::-;30757:139;;30655:248;;;:::o;30909:419::-;;31113:2;31102:9;31098:18;31090:26;;31162:9;31156:4;31152:20;31148:1;31137:9;31133:17;31126:47;31190:131;31316:4;31190:131;:::i;:::-;31182:139;;31080:248;;;:::o;31334:419::-;;31538:2;31527:9;31523:18;31515:26;;31587:9;31581:4;31577:20;31573:1;31562:9;31558:17;31551:47;31615:131;31741:4;31615:131;:::i;:::-;31607:139;;31505:248;;;:::o;31759:419::-;;31963:2;31952:9;31948:18;31940:26;;32012:9;32006:4;32002:20;31998:1;31987:9;31983:17;31976:47;32040:131;32166:4;32040:131;:::i;:::-;32032:139;;31930:248;;;:::o;32184:419::-;;32388:2;32377:9;32373:18;32365:26;;32437:9;32431:4;32427:20;32423:1;32412:9;32408:17;32401:47;32465:131;32591:4;32465:131;:::i;:::-;32457:139;;32355:248;;;:::o;32609:222::-;;32740:2;32729:9;32725:18;32717:26;;32753:71;32821:1;32810:9;32806:17;32797:6;32753:71;:::i;:::-;32707:124;;;;:::o;32837:283::-;;32903:2;32897:9;32887:19;;32945:4;32937:6;32933:17;33052:6;33040:10;33037:22;33016:18;33004:10;33001:34;32998:62;32995:2;;;33063:18;;:::i;:::-;32995:2;33103:10;33099:2;33092:22;32877:243;;;;:::o;33126:331::-;;33277:18;33269:6;33266:30;33263:2;;;33299:18;;:::i;:::-;33263:2;33384:4;33380:9;33373:4;33365:6;33361:17;33357:33;33349:41;;33445:4;33439;33435:15;33427:23;;33192:265;;;:::o;33463:332::-;;33615:18;33607:6;33604:30;33601:2;;;33637:18;;:::i;:::-;33601:2;33722:4;33718:9;33711:4;33703:6;33699:17;33695:33;33687:41;;33783:4;33777;33773:15;33765:23;;33530:265;;;:::o;33801:132::-;;33891:3;33883:11;;33921:4;33916:3;33912:14;33904:22;;33873:60;;;:::o;33939:144::-;;34014:3;34006:11;;34037:3;34034:1;34027:14;34071:4;34068:1;34058:18;34050:26;;33996:87;;;:::o;34089:114::-;;34190:5;34184:12;34174:22;;34163:40;;;:::o;34209:98::-;;34294:5;34288:12;34278:22;;34267:40;;;:::o;34313:99::-;;34399:5;34393:12;34383:22;;34372:40;;;:::o;34418:113::-;;34520:4;34515:3;34511:14;34503:22;;34493:38;;;:::o;34537:184::-;;34670:6;34665:3;34658:19;34710:4;34705:3;34701:14;34686:29;;34648:73;;;;:::o;34727:168::-;;34844:6;34839:3;34832:19;34884:4;34879:3;34875:14;34860:29;;34822:73;;;;:::o;34901:147::-;;35039:3;35024:18;;35014:34;;;;:::o;35054:169::-;;35172:6;35167:3;35160:19;35212:4;35207:3;35203:14;35188:29;;35150:73;;;;:::o;35229:148::-;;35368:3;35353:18;;35343:34;;;;:::o;35383:305::-;;35442:20;35460:1;35442:20;:::i;:::-;35437:25;;35476:20;35494:1;35476:20;:::i;:::-;35471:25;;35630:1;35562:66;35558:74;35555:1;35552:81;35549:2;;;35636:18;;:::i;:::-;35549:2;35680:1;35677;35673:9;35666:16;;35427:261;;;;:::o;35694:185::-;;35751:20;35769:1;35751:20;:::i;:::-;35746:25;;35785:20;35803:1;35785:20;:::i;:::-;35780:25;;35824:1;35814:2;;35829:18;;:::i;:::-;35814:2;35871:1;35868;35864:9;35859:14;;35736:143;;;;:::o;35885:348::-;;35948:20;35966:1;35948:20;:::i;:::-;35943:25;;35982:20;36000:1;35982:20;:::i;:::-;35977:25;;36170:1;36102:66;36098:74;36095:1;36092:81;36087:1;36080:9;36073:17;36069:105;36066:2;;;36177:18;;:::i;:::-;36066:2;36225:1;36222;36218:9;36207:20;;35933:300;;;;:::o;36239:191::-;;36299:20;36317:1;36299:20;:::i;:::-;36294:25;;36333:20;36351:1;36333:20;:::i;:::-;36328:25;;36372:1;36369;36366:8;36363:2;;;36377:18;;:::i;:::-;36363:2;36422:1;36419;36415:9;36407:17;;36284:146;;;;:::o;36436:96::-;;36502:24;36520:5;36502:24;:::i;:::-;36491:35;;36481:51;;;:::o;36538:90::-;;36615:5;36608:13;36601:21;36590:32;;36580:48;;;:::o;36634:149::-;;36710:66;36703:5;36699:78;36688:89;;36678:105;;;:::o;36789:126::-;;36866:42;36859:5;36855:54;36844:65;;36834:81;;;:::o;36921:77::-;;36987:5;36976:16;;36966:32;;;:::o;37004:154::-;37088:6;37083:3;37078;37065:30;37150:1;37141:6;37136:3;37132:16;37125:27;37055:103;;;:::o;37164:307::-;37232:1;37242:113;37256:6;37253:1;37250:13;37242:113;;;37341:1;37336:3;37332:11;37326:18;37322:1;37317:3;37313:11;37306:39;37278:2;37275:1;37271:10;37266:15;;37242:113;;;37373:6;37370:1;37367:13;37364:2;;;37453:1;37444:6;37439:3;37435:16;37428:27;37364:2;37213:258;;;;:::o;37477:320::-;;37558:1;37552:4;37548:12;37538:22;;37605:1;37599:4;37595:12;37626:18;37616:2;;37682:4;37674:6;37670:17;37660:27;;37616:2;37744;37736:6;37733:14;37713:18;37710:38;37707:2;;;37763:18;;:::i;:::-;37707:2;37528:269;;;;:::o;37803:233::-;;37865:24;37883:5;37865:24;:::i;:::-;37856:33;;37911:66;37904:5;37901:77;37898:2;;;37981:18;;:::i;:::-;37898:2;38028:1;38021:5;38017:13;38010:20;;37846:190;;;:::o;38042:176::-;;38091:20;38109:1;38091:20;:::i;:::-;38086:25;;38125:20;38143:1;38125:20;:::i;:::-;38120:25;;38164:1;38154:2;;38169:18;;:::i;:::-;38154:2;38210:1;38207;38203:9;38198:14;;38076:142;;;;:::o;38224:180::-;38272:77;38269:1;38262:88;38369:4;38366:1;38359:15;38393:4;38390:1;38383:15;38410:180;38458:77;38455:1;38448:88;38555:4;38552:1;38545:15;38579:4;38576:1;38569:15;38596:180;38644:77;38641:1;38634:88;38741:4;38738:1;38731:15;38765:4;38762:1;38755:15;38782:180;38830:77;38827:1;38820:88;38927:4;38924:1;38917:15;38951:4;38948:1;38941:15;38968:102;;39060:2;39056:7;39051:2;39044:5;39040:14;39036:28;39026:38;;39016:54;;;:::o;39076:122::-;39149:24;39167:5;39149:24;:::i;:::-;39142:5;39139:35;39129:2;;39188:1;39185;39178:12;39129:2;39119:79;:::o;39204:116::-;39274:21;39289:5;39274:21;:::i;:::-;39267:5;39264:32;39254:2;;39310:1;39307;39300:12;39254:2;39244:76;:::o;39326:120::-;39398:23;39415:5;39398:23;:::i;:::-;39391:5;39388:34;39378:2;;39436:1;39433;39426:12;39378:2;39368:78;:::o;39452:122::-;39525:24;39543:5;39525:24;:::i;:::-;39518:5;39515:35;39505:2;;39564:1;39561;39554:12;39505:2;39495:79;:::o

Swarm Source

ipfs://fb7f8324ea9a95ece3b0174894f691bf032a032eda07cef408ba103500697559
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.