ETH Price: $3,248.56 (+2.05%)
Gas: 4 Gwei

Token

FAPP_CB (FAPP_CB)
 

Overview

Max Total Supply

201 FAPP_CB

Holders

151

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 FAPP_CB
0x7Ba7f899861c6090761fB5d3a1C00a3ce4173C26
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:
FAPP_CB

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
	/**
	 * @dev Returns true if `account` is a contract.
	 *
	 * [IMPORTANT]
	 * ====
	 * It is unsafe to assume that an address for which this function returns
	 * false is an externally-owned account (EOA) and not a contract.
	 *
	 * Among others, `isContract` will return false for the following
	 * types of addresses:
	 *
	 *  - an externally-owned account
	 *  - a contract in construction
	 *  - an address where a contract will be created
	 *  - an address where a contract lived, but was destroyed
	 * ====
	 */
	function isContract(address account) internal view returns (bool) {
		// This method relies on extcodesize, which returns 0 for contracts in
		// construction, since the code is only stored at the end of the
		// constructor execution.

		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	/**
	 * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
	 * `recipient`, forwarding all available gas and reverting on errors.
	 *
	 * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
	 * of certain opcodes, possibly making contracts go over the 2300 gas limit
	 * imposed by `transfer`, making them unable to receive funds via
	 * `transfer`. {sendValue} removes this limitation.
	 *
	 * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
	 *
	 * IMPORTANT: because control is transferred to `recipient`, care must be
	 * taken to not create reentrancy vulnerabilities. Consider using
	 * {ReentrancyGuard} or the
	 * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
	 */
	function sendValue(address payable recipient, uint256 amount) internal {
		require(address(this).balance >= amount, "Address: insufficient balance");

		(bool success, ) = recipient.call{value: amount}("");
		require(success, "Address: unable to send value, recipient may have reverted");
	}

	/**
	 * @dev Performs a Solidity function call using a low level `call`. A
	 * plain `call` is an unsafe replacement for a function call: use this
	 * function instead.
	 *
	 * If `target` reverts with a revert reason, it is bubbled up by this
	 * function (like regular Solidity function calls).
	 *
	 * Returns the raw returned data. To convert to the expected return value,
	 * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
	 *
	 * Requirements:
	 *
	 * - `target` must be a contract.
	 * - calling `target` with `data` must not revert.
	 *
	 * _Available since v3.1._
	 */
	function functionCall(address target, bytes memory data) internal returns (bytes memory) {
		return functionCall(target, data, "Address: low-level call failed");
	}

	/**
	 * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
	 * `errorMessage` as a fallback revert reason when `target` reverts.
	 *
	 * _Available since v3.1._
	 */
	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	/**
	 * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
	 * but also transferring `value` wei to `target`.
	 *
	 * Requirements:
	 *
	 * - the calling contract must have an ETH balance of at least `value`.
	 * - the called Solidity function must be `payable`.
	 *
	 * _Available since v3.1._
	 */
	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
	}

	/**
	 * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
	 * with `errorMessage` as a fallback revert reason when `target` reverts.
	 *
	 * _Available since v3.1._
	 */
	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(address(this).balance >= value, "Address: insufficient balance for call");
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(data);
		return verifyCallResult(success, returndata, errorMessage);
	}

	/**
	 * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
	 * but performing a static call.
	 *
	 * _Available since v3.3._
	 */
	function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
		return functionStaticCall(target, data, "Address: low-level static call failed");
	}

	/**
	 * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
	 * but performing a static call.
	 *
	 * _Available since v3.3._
	 */
	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return verifyCallResult(success, returndata, errorMessage);
	}

	/**
	 * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
	 * but performing a delegate call.
	 *
	 * _Available since v3.4._
	 */
	function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
		return functionDelegateCall(target, data, "Address: low-level delegate call failed");
	}

	/**
	 * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
	 * but performing a delegate call.
	 *
	 * _Available since v3.4._
	 */
	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return verifyCallResult(success, returndata, errorMessage);
	}

	/**
	 * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
	 * revert reason using the provided one.
	 *
	 * _Available since v4.3._
	 */
	function verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) internal pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			// Look for revert reason and bubble it up if present
			if (returndata.length > 0) {
				// The easiest way to bubble the revert reason is using memory via assembly

				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

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

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

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

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

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

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

	function _setOwner(address newOwner) private {
		address oldOwner = _owner;
		_owner = newOwner;
		emit OwnershipTransferred(oldOwner, newOwner);
	}
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
	// Booleans are more expensive than uint256 or any type that takes up a full
	// word because each write operation emits an extra SLOAD to first read the
	// slot's contents, replace the bits taken up by the boolean, and then write
	// back. This is the compiler's defense against contract upgrades and
	// pointer aliasing, and it cannot be disabled.

	// The values being non-zero value makes deployment a bit more expensive,
	// but in exchange the refund on every call to nonReentrant will be lower in
	// amount. Since refunds are capped to a percentage of the total
	// transaction's gas, it is best to keep them low in cases like this one, to
	// increase the likelihood of the full refund coming into effect.
	uint256 private constant _NOT_ENTERED = 1;
	uint256 private constant _ENTERED = 2;

	uint256 private _status;

	constructor() {
		_status = _NOT_ENTERED;
	}

	/**
	 * @dev Prevents a contract from calling itself, directly or indirectly.
	 * Calling a `nonReentrant` function from another `nonReentrant`
	 * function is not supported. It is possible to prevent this from happening
	 * by making the `nonReentrant` function external, and make it call a
	 * `private` function that does the actual work.
	 */
	modifier nonReentrant() {
		// On the first call to nonReentrant, _notEntered will be true
		require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

		// Any calls to nonReentrant after this point will fail
		_status = _ENTERED;

		_;

		// By storing the original value once again, a refund is triggered (see
		// https://eips.ethereum.org/EIPS/eip-2200)
		_status = _NOT_ENTERED;
	}
}

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

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

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

/**
 * @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 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 FAPP_CB is ERC721Enumerable, Ownable, ReentrancyGuard {

	uint256 public constant FAPP_CB_MAX_AMOUNT = 500;
	uint256 public FAPP_CB_PER_TX = 15;
	uint256 public FAPP_CB_PRICE = 0.08 ether;
	address public founder = 0xDA7758fce4Eded7Ba298166Cfe5f958d1EC5042C;

	uint256 public mintedPresaleCount;

	mapping (uint256 => uint256) private _entityBirthdays;
	mapping (address => uint256) private _availableClaims;
	mapping (uint256 => string) private _ipfsHash;
	string private _simpleIpfsHash;

	bool private _isPublicSaleActive = false;
	bool private _isPreSaleActive = false;
	bool private _isSimpleIpfsHash = true;

	string public tokenURIPrefix = "ipfs://";
	string public tokenURISuffix = "/metadata.json";
	string private _baseTokenURI;

	event SendETH(address indexed to, uint256 amount);
	event SetNewPercent(address indexed to, uint256 percent);
	event SetNewValue(string nameValue, uint256 oldValue, uint256 newValue);

	constructor (string memory name, string memory symbol, string memory baseTokenURI) ERC721(name, symbol) {
		_baseTokenURI = baseTokenURI;
	}

	function mintPublic(uint256 amount) external payable nonReentrant() {
		require(_isPublicSaleActive, "Public sale is not active");
		require(amount <= FAPP_CB_PER_TX, "You can't mint that many tokens");
		require(totalSupply() + amount <= FAPP_CB_MAX_AMOUNT, "Mint would exceed max supply of tokens");
		require(msg.value == amount * FAPP_CB_PRICE, "You didn't send the right amount of eth");

		_mintMultiple(msg.sender, amount);
	}

	function _mintMultiple(address owner, uint256 amount) private {
		for (uint256 i = 0; i < amount; i++) {
			uint256 tokenId = totalSupply();
			_entityBirthdays[tokenId] = block.timestamp;
			_safeMint(owner, tokenId);
		}
	}

	function enableClaimFoundingMembers(address[] memory members, uint256[] memory amounts) external onlyOwner {
		require(amounts.length == members.length, "miscellaneous number of elements");
		for (uint256 i = 0; i < members.length; i++) {
			require(members[i] != address(0), "member is the zero address");
			require(amounts[i] <= FAPP_CB_PER_TX, "amount is more than the allowable");
			_availableClaims[members[i]] = amounts[i];
		}
	}

	function setIpfsHash(string[] memory ipfsHashs, uint256[] memory idTokens) external onlyOwner {
		require(ipfsHashs.length == idTokens.length, "miscellaneous number of elements");
		if(_isSimpleIpfsHash) {
			_simpleIpfsHash = ipfsHashs[0];
			return;
		}
		for (uint256 i = 0; i < idTokens.length; i++) {
			bytes memory tempHash = bytes(_ipfsHash[idTokens[i]]);
			require(tempHash.length == 0, "IPFS hash can be set only once");
			require(idTokens[i] <= FAPP_CB_MAX_AMOUNT, "id is more than the allowable");
			_ipfsHash[idTokens[i]] = ipfsHashs[i];
		}
	}

	function isAvailableForClaim() public view returns (bool) {
		return _availableClaims[msg.sender] > 0;
	}

	function mintPresaleMember() external payable nonReentrant() {
		uint256 amount = _availableClaims[msg.sender];
		makePresaleMemberMint(amount, msg.value);
	}

	function mintPresaleMemberWithAmount(uint256 amount) external payable nonReentrant() {
		makePresaleMemberMint(amount, msg.value);
	}

	function makePresaleMemberMint(uint256 tokenAmount, uint256 etherAmount) private {
		uint256 availableAmount = _availableClaims[msg.sender];
		require(availableAmount >= tokenAmount, "Wrong amount");

		require(_isPreSaleActive, "Pre-sale is not active");
		require(isAvailableForClaim(), "You've not claimed your token");
		require(totalSupply() + tokenAmount <= FAPP_CB_MAX_AMOUNT, "Mint would exceed max supply of tokens");
		require(mintedPresaleCount + tokenAmount <= FAPP_CB_MAX_AMOUNT, "Mint would exceed max pre-sale tokens");
		require(etherAmount == tokenAmount*FAPP_CB_PRICE, "You didn't send the right amount of eth");

		mintedPresaleCount += tokenAmount;
		_availableClaims[msg.sender] -= tokenAmount;
		_mintMultiple(msg.sender, tokenAmount);
	}

	function setBaseTokenURI(string memory baseTokenURI) public onlyOwner {
		_baseTokenURI = baseTokenURI;
	}

	function setEntityBirthdaysPrice(uint256 newPrice) public onlyOwner {
		require(newPrice > 0, "Wrong price");
		emit SetNewValue("FAPP_CB_PRICE", FAPP_CB_PRICE, newPrice);
		FAPP_CB_PRICE = newPrice;
	}

	function setEntityBirthdaysPerTx(uint256 newPerTx) public onlyOwner {
		require(newPerTx > 0, "Wrong per tx");
		emit SetNewValue("FAPP_CB_PER_TX", FAPP_CB_PER_TX, newPerTx);
		FAPP_CB_PER_TX = newPerTx;
	}

	function claimETH() external {
		require(owner() == _msgSender() || founder == _msgSender(), "You have no right to it");
		sendETH(payable(founder), getContractBalance());
	}

	function sendETH(address payable to, uint256 amount) private nonReentrant() {
		uint256 balance = getContractBalance();
		amount = amount > balance ? balance : amount;
		(bool sent, ) = to.call{value: amount}("");
		require(sent, "Failed to send ETH");
		emit SendETH(to, amount);
	}

	function getContractBalance() public view returns (uint256) {
		return address(this).balance;
	}

	function tokensOfOwner(address user) external view returns (uint256[] memory ownerTokens) {
		uint256 tokenCount = balanceOf(user);
		if (tokenCount == 0) {
			return new uint256[](0);
		} else {
			uint256[] memory output = new uint256[](tokenCount);
			for (uint256 index = 0; index < tokenCount; index++) {
				output[index] = tokenOfOwnerByIndex(user, index);
			}
			return output;
		}
	}

	function getBirthday(uint256 tokenId) public view returns (uint256) {
		require(tokenId < totalSupply(), "That entity has not been make yet");
		return _entityBirthdays[tokenId];
	}

	function getIpfsTokenUri(uint256 tokenId) external view returns (string memory) {
		require(tokenId < totalSupply(), "That entity has not been make yet");
		require(getBirthday(tokenId) < block.timestamp, "That entity has not grown yet");
		return string(abi.encodePacked(tokenURIPrefix, _ipfsHash[tokenId], tokenURISuffix));
	}

	function getIpfsHash(uint256 tokenId) external onlyOwner view returns (string memory) {
		require(tokenId < totalSupply(), "That entity has not been make yet");
		if(_isSimpleIpfsHash) {
			return _simpleIpfsHash;
		} else {
			return _ipfsHash[tokenId];
		}
	}

	function togglePublicSale() external onlyOwner {
		_isPublicSaleActive = !_isPublicSaleActive;
	}

	function togglePreSale() external onlyOwner {
		_isPreSaleActive = !_isPreSaleActive;
	}

	function isPublicSaleActive() external view returns (bool status) {
		return _isPublicSaleActive;
	}

	function isPreSaleActive() external view returns (bool status) {
		return _isPreSaleActive;
	}

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

	function _setTokenURIPrefix(string memory _tokenURIPrefix) external onlyOwner {
		tokenURIPrefix = _tokenURIPrefix;
	}

	function _setTokenURISuffix(string memory _tokenURISuffix) external onlyOwner {
		tokenURISuffix = _tokenURISuffix;
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseTokenURI","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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"SetNewPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"nameValue","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"SetNewValue","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":"FAPP_CB_MAX_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FAPP_CB_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FAPP_CB_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURIPrefix","type":"string"}],"name":"_setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURISuffix","type":"string"}],"name":"_setTokenURISuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"members","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"enableClaimFoundingMembers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"founder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBirthday","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getIpfsHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getIpfsTokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAvailableForClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreSaleActive","outputs":[{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPresaleMember","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPresaleMemberWithAmount","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintedPresaleCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPerTx","type":"uint256"}],"name":"setEntityBirthdaysPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setEntityBirthdaysPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"ipfsHashs","type":"string[]"},{"internalType":"uint256[]","name":"idTokens","type":"uint256[]"}],"name":"setIpfsHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURISuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"ownerTokens","type":"uint256[]"}],"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"}]

600f600c5567011c37937e080000600d55600e80546001600160a01b03191673da7758fce4eded7ba298166cfe5f958d1ec5042c1790556014805462ffffff19166201000017905560c06040526007608081905266697066733a2f2f60c81b60a0908152620000729160159190620001a1565b5060408051808201909152600e8082526d17b6b2ba30b230ba30973539b7b760911b6020909201918252620000aa91601691620001a1565b50348015620000b857600080fd5b506040516200388e3803806200388e833981016040819052620000db9162000314565b825183908390620000f4906000906020850190620001a1565b5080516200010a906001906020840190620001a1565b50505062000127620001216200014b60201b60201c565b6200014f565b6001600b55805162000141906017906020840190620001a1565b50505050620003e2565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001af90620003a5565b90600052602060002090601f016020900481019282620001d357600085556200021e565b82601f10620001ee57805160ff19168380011785556200021e565b828001600101855582156200021e579182015b828111156200021e57825182559160200191906001019062000201565b506200022c92915062000230565b5090565b5b808211156200022c576000815560010162000231565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026f57600080fd5b81516001600160401b03808211156200028c576200028c62000247565b604051601f8301601f19908116603f01168101908282118183101715620002b757620002b762000247565b81604052838152602092508683858801011115620002d457600080fd5b600091505b83821015620002f85785820183015181830184015290820190620002d9565b838211156200030a5760008385830101525b9695505050505050565b6000806000606084860312156200032a57600080fd5b83516001600160401b03808211156200034257600080fd5b62000350878388016200025d565b945060208601519150808211156200036757600080fd5b62000375878388016200025d565b935060408601519150808211156200038c57600080fd5b506200039b868287016200025d565b9150509250925092565b600181811c90821680620003ba57607f821691505b60208210811415620003dc57634e487b7160e01b600052602260045260246000fd5b50919050565b61349c80620003f26000396000f3fe6080604052600436106102885760003560e01c80638462151c1161015a578063c8d2524c116100c1578063dbbc853b1161007a578063dbbc853b14610750578063de49e4db14610765578063e222c7f914610785578063e985e9c51461079a578063efd0cbf9146107e3578063f2fde38b146107f657600080fd5b8063c8d2524c146106a5578063ca3cb522146106c5578063cdb023e4146106da578063cf9c89db146106f0578063d121a61b14610710578063d450fbc91461073057600080fd5b8063a584606411610113578063a584606414610604578063b4f3c57014610624578063b6177b581461063a578063b88d4fde14610650578063c0ac998314610670578063c87b56dd1461068557600080fd5b80638462151c146105435780638da5cb5b146105705780639045a2df1461058e57806395d89b41146105b25780639d044ed3146105c7578063a22cb465146105e457600080fd5b806342842e0e116101fe5780636739a520116101b75780636739a520146104b25780636f9fb98a146104c557806370415033146104d857806370a08231146104f8578063715018a61461051857806379ed9e3b1461052d57600080fd5b806342842e0e146103fd5780634d853ee51461041d5780634f6ccce71461043d5780636352211e1461045d578063657fc38d1461047d578063672729991461049d57600080fd5b80631e84c413116102505780631e84c4131461035d5780631f80f2571461037557806323b872dd1461037d5780632f745c591461039d57806330176e13146103bd5780633f564508146103dd57600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063095ea7b31461031c57806318160ddd1461033e575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612ab9565b610816565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d7610841565b6040516102b99190612b2e565b3480156102f057600080fd5b506103046102ff366004612b41565b6108d3565b6040516001600160a01b0390911681526020016102b9565b34801561032857600080fd5b5061033c610337366004612b71565b61096d565b005b34801561034a57600080fd5b506008545b6040519081526020016102b9565b34801561036957600080fd5b5060145460ff166102ad565b61033c610a83565b34801561038957600080fd5b5061033c610398366004612b9b565b610acd565b3480156103a957600080fd5b5061034f6103b8366004612b71565b610afe565b3480156103c957600080fd5b5061033c6103d8366004612c96565b610b94565b3480156103e957600080fd5b5061033c6103f8366004612c96565b610bd5565b34801561040957600080fd5b5061033c610418366004612b9b565b610c12565b34801561042957600080fd5b50600e54610304906001600160a01b031681565b34801561044957600080fd5b5061034f610458366004612b41565b610c2d565b34801561046957600080fd5b50610304610478366004612b41565b610cc0565b34801561048957600080fd5b5061033c610498366004612c96565b610d37565b3480156104a957600080fd5b5061033c610d74565b61033c6104c0366004612b41565b610dfb565b3480156104d157600080fd5b504761034f565b3480156104e457600080fd5b506102d76104f3366004612b41565b610e2d565b34801561050457600080fd5b5061034f610513366004612ccb565b610eec565b34801561052457600080fd5b5061033c610f73565b34801561053957600080fd5b5061034f600d5481565b34801561054f57600080fd5b5061056361055e366004612ccb565b610fa7565b6040516102b99190612ce6565b34801561057c57600080fd5b50600a546001600160a01b0316610304565b34801561059a57600080fd5b503360009081526011602052604090205415156102ad565b3480156105be57600080fd5b506102d7611066565b3480156105d357600080fd5b50601454610100900460ff166102ad565b3480156105f057600080fd5b5061033c6105ff366004612d2a565b611075565b34801561061057600080fd5b5061033c61061f366004612b41565b61113a565b34801561063057600080fd5b5061034f600f5481565b34801561064657600080fd5b5061034f600c5481565b34801561065c57600080fd5b5061033c61066b366004612d66565b61120b565b34801561067c57600080fd5b506102d7611243565b34801561069157600080fd5b506102d76106a0366004612b41565b6112d1565b3480156106b157600080fd5b5061034f6106c0366004612b41565b6113ac565b3480156106d157600080fd5b5061033c6113e8565b3480156106e657600080fd5b5061034f6101f481565b3480156106fc57600080fd5b5061033c61070b366004612e71565b61142f565b34801561071c57600080fd5b5061033c61072b366004612b41565b611616565b34801561073c57600080fd5b506102d761074b366004612b41565b6116ed565b34801561075c57600080fd5b506102d76117fc565b34801561077157600080fd5b5061033c610780366004612f31565b611809565b34801561079157600080fd5b5061033c611ab4565b3480156107a657600080fd5b506102ad6107b5366004612fee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61033c6107f1366004612b41565b611af2565b34801561080257600080fd5b5061033c610811366004612ccb565b611c28565b60006001600160e01b0319821663780e9d6360e01b148061083b575061083b82611cc3565b92915050565b60606000805461085090613021565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90613021565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061097882610cc0565b9050806001600160a01b0316836001600160a01b031614156109e65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610948565b336001600160a01b0382161480610a025750610a0281336107b5565b610a745760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610948565b610a7e8383611d13565b505050565b6002600b541415610aa65760405162461bcd60e51b815260040161094890613056565b6002600b5533600090815260116020526040902054610ac58134611d81565b506001600b55565b610ad73382611f8f565b610af35760405162461bcd60e51b81526004016109489061308d565b610a7e838383612086565b6000610b0983610eec565b8210610b6b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610948565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610bbe5760405162461bcd60e51b8152600401610948906130de565b8051610bd1906017906020840190612a0a565b5050565b600a546001600160a01b03163314610bff5760405162461bcd60e51b8152600401610948906130de565b8051610bd1906015906020840190612a0a565b610a7e8383836040518060200160405280600081525061120b565b6000610c3860085490565b8210610c9b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610948565b60088281548110610cae57610cae613113565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061083b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610948565b600a546001600160a01b03163314610d615760405162461bcd60e51b8152600401610948906130de565b8051610bd1906016906020840190612a0a565b600a546001600160a01b0316331480610d975750600e546001600160a01b031633145b610de35760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20726967687420746f2069740000000000000000006044820152606401610948565b600e54610df9906001600160a01b031647612231565b565b6002600b541415610e1e5760405162461bcd60e51b815260040161094890613056565b6002600b55610ac58134611d81565b6060610e3860085490565b8210610e565760405162461bcd60e51b815260040161094890613129565b42610e60836113ac565b10610ead5760405162461bcd60e51b815260206004820152601d60248201527f5468617420656e7469747920686173206e6f742067726f776e207965740000006044820152606401610948565b6015601260008481526020019081526020016000206016604051602001610ed693929190613204565b6040516020818303038152906040529050919050565b60006001600160a01b038216610f575760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610948565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610f9d5760405162461bcd60e51b8152600401610948906130de565b610df96000612351565b60606000610fb483610eec565b905080610fd55760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610ff057610ff0612bd7565b604051908082528060200260200182016040528015611019578160200160208202803683370190505b50905060005b82811015610fcd576110318582610afe565b82828151811061104357611043613113565b60209081029190910101528061105881613241565b91505061101f565b50919050565b60606001805461085090613021565b6001600160a01b0382163314156110ce5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610948565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146111645760405162461bcd60e51b8152600401610948906130de565b600081116111a35760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40e0cae440e8f60a31b6044820152606401610948565b600c54604080516060808252600e908201526d08c82a0a0be8684bea08aa4bea8b60931b6080820152602081019290925281018290527f0d072220716df8d505ad38ae8dbfe77b968e2c80bb73f08c38a08d5fe4f9911a9060a00160405180910390a1600c55565b6112153383611f8f565b6112315760405162461bcd60e51b81526004016109489061308d565b61123d848484846123a3565b50505050565b6015805461125090613021565b80601f016020809104026020016040519081016040528092919081815260200182805461127c90613021565b80156112c95780601f1061129e576101008083540402835291602001916112c9565b820191906000526020600020905b8154815290600101906020018083116112ac57829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b03166113505760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610948565b600061135a6123d6565b9050600081511161137a57604051806020016040528060008152506113a5565b80611384846123e5565b60405160200161139592919061325c565b6040516020818303038152906040525b9392505050565b60006113b760085490565b82106113d55760405162461bcd60e51b815260040161094890613129565b5060009081526010602052604090205490565b600a546001600160a01b031633146114125760405162461bcd60e51b8152600401610948906130de565b6014805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b031633146114595760405162461bcd60e51b8152600401610948906130de565b81518151146114aa5760405162461bcd60e51b815260206004820181905260248201527f6d697363656c6c616e656f7573206e756d626572206f6620656c656d656e74736044820152606401610948565b60005b8251811015610a7e5760006001600160a01b03168382815181106114d3576114d3613113565b60200260200101516001600160a01b031614156115325760405162461bcd60e51b815260206004820152601a60248201527f6d656d62657220697320746865207a65726f20616464726573730000000000006044820152606401610948565b600c5482828151811061154757611547613113565b602002602001015111156115a75760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206973206d6f7265207468616e2074686520616c6c6f7761626c6044820152606560f81b6064820152608401610948565b8181815181106115b9576115b9613113565b6020026020010151601160008584815181106115d7576115d7613113565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061160e90613241565b9150506114ad565b600a546001600160a01b031633146116405760405162461bcd60e51b8152600401610948906130de565b6000811161167e5760405162461bcd60e51b815260206004820152600b60248201526a57726f6e6720707269636560a81b6044820152606401610948565b7f0d072220716df8d505ad38ae8dbfe77b968e2c80bb73f08c38a08d5fe4f9911a600d54826040516116e09291906060808252600d908201526c464150505f43425f505249434560981b60808201526020810192909252604082015260a00190565b60405180910390a1600d55565b600a546060906001600160a01b0316331461171a5760405162461bcd60e51b8152600401610948906130de565b600854821061173b5760405162461bcd60e51b815260040161094890613129565b60145462010000900460ff16156117de576013805461175990613021565b80601f016020809104026020016040519081016040528092919081815260200182805461178590613021565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b50505050509050919050565b6000828152601260205260409020805461175990613021565b919050565b6016805461125090613021565b600a546001600160a01b031633146118335760405162461bcd60e51b8152600401610948906130de565b80518251146118845760405162461bcd60e51b815260206004820181905260248201527f6d697363656c6c616e656f7573206e756d626572206f6620656c656d656e74736044820152606401610948565b60145462010000900460ff16156118c557816000815181106118a8576118a8613113565b602002602001015160139080519060200190610a7e929190612a0a565b60005b8151811015610a7e576000601260008484815181106118e9576118e9613113565b60200260200101518152602001908152602001600020805461190a90613021565b80601f016020809104026020016040519081016040528092919081815260200182805461193690613021565b80156119835780601f1061195857610100808354040283529160200191611983565b820191906000526020600020905b81548152906001019060200180831161196657829003601f168201915b5050505050905080516000146119db5760405162461bcd60e51b815260206004820152601e60248201527f4950465320686173682063616e20626520736574206f6e6c79206f6e636500006044820152606401610948565b6101f48383815181106119f0576119f0613113565b60200260200101511115611a465760405162461bcd60e51b815260206004820152601d60248201527f6964206973206d6f7265207468616e2074686520616c6c6f7761626c650000006044820152606401610948565b838281518110611a5857611a58613113565b602002602001015160126000858581518110611a7657611a76613113565b602002602001015181526020019081526020016000209080519060200190611a9f929190612a0a565b50508080611aac90613241565b9150506118c8565b600a546001600160a01b03163314611ade5760405162461bcd60e51b8152600401610948906130de565b6014805460ff19811660ff90911615179055565b6002600b541415611b155760405162461bcd60e51b815260040161094890613056565b6002600b5560145460ff16611b6c5760405162461bcd60e51b815260206004820152601960248201527f5075626c69632073616c65206973206e6f7420616374697665000000000000006044820152606401610948565b600c54811115611bbe5760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e2774206d696e742074686174206d616e7920746f6b656e73006044820152606401610948565b6101f481611bcb60085490565b611bd5919061328b565b1115611bf35760405162461bcd60e51b8152600401610948906132a3565b600d54611c0090826132e9565b3414611c1e5760405162461bcd60e51b815260040161094890613308565b610ac533826124e3565b600a546001600160a01b03163314611c525760405162461bcd60e51b8152600401610948906130de565b6001600160a01b038116611cb75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610948565b611cc081612351565b50565b60006001600160e01b031982166380ac58cd60e01b1480611cf457506001600160e01b03198216635b5e139f60e01b145b8061083b57506301ffc9a760e01b6001600160e01b031983161461083b565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4882610cc0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b3360009081526011602052604090205482811015611dd05760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b6044820152606401610948565b601454610100900460ff16611e205760405162461bcd60e51b81526020600482015260166024820152755072652d73616c65206973206e6f742061637469766560501b6044820152606401610948565b33600090815260116020526040902054611e7c5760405162461bcd60e51b815260206004820152601d60248201527f596f75277665206e6f7420636c61696d656420796f757220746f6b656e0000006044820152606401610948565b6101f483611e8960085490565b611e93919061328b565b1115611eb15760405162461bcd60e51b8152600401610948906132a3565b6101f483600f54611ec2919061328b565b1115611f1e5760405162461bcd60e51b815260206004820152602560248201527f4d696e7420776f756c6420657863656564206d6178207072652d73616c6520746044820152646f6b656e7360d81b6064820152608401610948565b600d54611f2b90846132e9565b8214611f495760405162461bcd60e51b815260040161094890613308565b82600f6000828254611f5b919061328b565b90915550503360009081526011602052604081208054859290611f7f90849061334f565b90915550610a7e905033846124e3565b6000818152600260205260408120546001600160a01b03166120085760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610948565b600061201383610cc0565b9050806001600160a01b0316846001600160a01b0316148061204e5750836001600160a01b0316612043846108d3565b6001600160a01b0316145b8061207e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661209982610cc0565b6001600160a01b0316146121015760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610948565b6001600160a01b0382166121635760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610948565b61216e838383612529565b612179600082611d13565b6001600160a01b03831660009081526003602052604081208054600192906121a290849061334f565b90915550506001600160a01b03821660009081526003602052604081208054600192906121d090849061328b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6002600b5414156122545760405162461bcd60e51b815260040161094890613056565b6002600b55478082116122675781612269565b805b91506000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146122b8576040519150601f19603f3d011682016040523d82523d6000602084013e6122bd565b606091505b50509050806123035760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610948565b836001600160a01b03167f2d7972e635b540e3a7d69ab075a726bac4112e45f631bde1b551cb069dcad6df8460405161233e91815260200190565b60405180910390a250506001600b555050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6123ae848484612086565b6123ba848484846125e1565b61123d5760405162461bcd60e51b815260040161094890613366565b60606017805461085090613021565b6060816124095750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612433578061241d81613241565b915061242c9050600a836133ce565b915061240d565b60008167ffffffffffffffff81111561244e5761244e612bd7565b6040519080825280601f01601f191660200182016040528015612478576020820181803683370190505b5090505b841561207e5761248d60018361334f565b915061249a600a866133e2565b6124a590603061328b565b60f81b8183815181106124ba576124ba613113565b60200101906001600160f81b031916908160001a9053506124dc600a866133ce565b945061247c565b60005b81811015610a7e5760006124f960085490565b6000818152601060205260409020429055905061251684826126df565b508061252181613241565b9150506124e6565b6001600160a01b0383166125845761257f81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125a7565b816001600160a01b0316836001600160a01b0316146125a7576125a783826126f9565b6001600160a01b0382166125be57610a7e81612796565b826001600160a01b0316826001600160a01b031614610a7e57610a7e8282612845565b60006001600160a01b0384163b156126d457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126259033908990889088906004016133f6565b6020604051808303816000875af1925050508015612660575060408051601f3d908101601f1916820190925261265d91810190613433565b60015b6126ba573d80801561268e576040519150601f19603f3d011682016040523d82523d6000602084013e612693565b606091505b5080516126b25760405162461bcd60e51b815260040161094890613366565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061207e565b506001949350505050565b610bd1828260405180602001604052806000815250612889565b6000600161270684610eec565b612710919061334f565b600083815260076020526040902054909150808214612763576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906127a89060019061334f565b600083815260096020526040812054600880549394509092849081106127d0576127d0613113565b9060005260206000200154905080600883815481106127f1576127f1613113565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061282957612829613450565b6001900381819060005260206000200160009055905550505050565b600061285083610eec565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61289383836128bc565b6128a060008484846125e1565b610a7e5760405162461bcd60e51b815260040161094890613366565b6001600160a01b0382166129125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610948565b6000818152600260205260409020546001600160a01b0316156129775760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610948565b61298360008383612529565b6001600160a01b03821660009081526003602052604081208054600192906129ac90849061328b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612a1690613021565b90600052602060002090601f016020900481019282612a385760008555612a7e565b82601f10612a5157805160ff1916838001178555612a7e565b82800160010185558215612a7e579182015b82811115612a7e578251825591602001919060010190612a63565b50612a8a929150612a8e565b5090565b5b80821115612a8a5760008155600101612a8f565b6001600160e01b031981168114611cc057600080fd5b600060208284031215612acb57600080fd5b81356113a581612aa3565b60005b83811015612af1578181015183820152602001612ad9565b8381111561123d5750506000910152565b60008151808452612b1a816020860160208601612ad6565b601f01601f19169290920160200192915050565b6020815260006113a56020830184612b02565b600060208284031215612b5357600080fd5b5035919050565b80356001600160a01b03811681146117f757600080fd5b60008060408385031215612b8457600080fd5b612b8d83612b5a565b946020939093013593505050565b600080600060608486031215612bb057600080fd5b612bb984612b5a565b9250612bc760208501612b5a565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c1657612c16612bd7565b604052919050565b600067ffffffffffffffff831115612c3857612c38612bd7565b612c4b601f8401601f1916602001612bed565b9050828152838383011115612c5f57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612c8757600080fd5b6113a583833560208501612c1e565b600060208284031215612ca857600080fd5b813567ffffffffffffffff811115612cbf57600080fd5b61207e84828501612c76565b600060208284031215612cdd57600080fd5b6113a582612b5a565b6020808252825182820181905260009190848201906040850190845b81811015612d1e57835183529284019291840191600101612d02565b50909695505050505050565b60008060408385031215612d3d57600080fd5b612d4683612b5a565b915060208301358015158114612d5b57600080fd5b809150509250929050565b60008060008060808587031215612d7c57600080fd5b612d8585612b5a565b9350612d9360208601612b5a565b925060408501359150606085013567ffffffffffffffff811115612db657600080fd5b8501601f81018713612dc757600080fd5b612dd687823560208401612c1e565b91505092959194509250565b600067ffffffffffffffff821115612dfc57612dfc612bd7565b5060051b60200190565b600082601f830112612e1757600080fd5b81356020612e2c612e2783612de2565b612bed565b82815260059290921b84018101918181019086841115612e4b57600080fd5b8286015b84811015612e665780358352918301918301612e4f565b509695505050505050565b60008060408385031215612e8457600080fd5b823567ffffffffffffffff80821115612e9c57600080fd5b818501915085601f830112612eb057600080fd5b81356020612ec0612e2783612de2565b82815260059290921b84018101918181019089841115612edf57600080fd5b948201945b83861015612f0457612ef586612b5a565b82529482019490820190612ee4565b96505086013592505080821115612f1a57600080fd5b50612f2785828601612e06565b9150509250929050565b60008060408385031215612f4457600080fd5b823567ffffffffffffffff80821115612f5c57600080fd5b818501915085601f830112612f7057600080fd5b81356020612f80612e2783612de2565b82815260059290921b84018101918181019089841115612f9f57600080fd5b8286015b84811015612fd757803586811115612fbb5760008081fd5b612fc98c86838b0101612c76565b845250918301918301612fa3565b5096505086013592505080821115612f1a57600080fd5b6000806040838503121561300157600080fd5b61300a83612b5a565b915061301860208401612b5a565b90509250929050565b600181811c9082168061303557607f821691505b6020821081141561106057634e487b7160e01b600052602260045260246000fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526021908201527f5468617420656e7469747920686173206e6f74206265656e206d616b652079656040820152601d60fa1b606082015260800190565b8054600090600181811c908083168061318457607f831692505b60208084108214156131a657634e487b7160e01b600052602260045260246000fd5b8180156131ba57600181146131cb576131f8565b60ff198616895284890196506131f8565b60008881526020902060005b868110156131f05781548b8201529085019083016131d7565b505084890196505b50505050505092915050565b600061322261321c613216848861316a565b8661316a565b8461316a565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156132555761325561322b565b5060010190565b6000835161326e818460208801612ad6565b835190830190613282818360208801612ad6565b01949350505050565b6000821982111561329e5761329e61322b565b500190565b60208082526026908201527f4d696e7420776f756c6420657863656564206d617820737570706c79206f6620604082015265746f6b656e7360d01b606082015260800190565b60008160001904831182151516156133035761330361322b565b500290565b60208082526027908201527f596f75206469646e27742073656e642074686520726967687420616d6f756e74604082015266040decc40cae8d60cb1b606082015260800190565b6000828210156133615761336161322b565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826133dd576133dd6133b8565b500490565b6000826133f1576133f16133b8565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342990830184612b02565b9695505050505050565b60006020828403121561344557600080fd5b81516113a581612aa3565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d26751f797cb21861733aea1b55133057802ef5d296a26ddefc38b236987d6a764736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007464150505f4342000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007464150505f434200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003268747470733a2f2f66616d696c797068616c6c7573706c616e65742e636f6d2f6170692d6d696e742d706173732f6e66742f0000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80638462151c1161015a578063c8d2524c116100c1578063dbbc853b1161007a578063dbbc853b14610750578063de49e4db14610765578063e222c7f914610785578063e985e9c51461079a578063efd0cbf9146107e3578063f2fde38b146107f657600080fd5b8063c8d2524c146106a5578063ca3cb522146106c5578063cdb023e4146106da578063cf9c89db146106f0578063d121a61b14610710578063d450fbc91461073057600080fd5b8063a584606411610113578063a584606414610604578063b4f3c57014610624578063b6177b581461063a578063b88d4fde14610650578063c0ac998314610670578063c87b56dd1461068557600080fd5b80638462151c146105435780638da5cb5b146105705780639045a2df1461058e57806395d89b41146105b25780639d044ed3146105c7578063a22cb465146105e457600080fd5b806342842e0e116101fe5780636739a520116101b75780636739a520146104b25780636f9fb98a146104c557806370415033146104d857806370a08231146104f8578063715018a61461051857806379ed9e3b1461052d57600080fd5b806342842e0e146103fd5780634d853ee51461041d5780634f6ccce71461043d5780636352211e1461045d578063657fc38d1461047d578063672729991461049d57600080fd5b80631e84c413116102505780631e84c4131461035d5780631f80f2571461037557806323b872dd1461037d5780632f745c591461039d57806330176e13146103bd5780633f564508146103dd57600080fd5b806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063095ea7b31461031c57806318160ddd1461033e575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612ab9565b610816565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d7610841565b6040516102b99190612b2e565b3480156102f057600080fd5b506103046102ff366004612b41565b6108d3565b6040516001600160a01b0390911681526020016102b9565b34801561032857600080fd5b5061033c610337366004612b71565b61096d565b005b34801561034a57600080fd5b506008545b6040519081526020016102b9565b34801561036957600080fd5b5060145460ff166102ad565b61033c610a83565b34801561038957600080fd5b5061033c610398366004612b9b565b610acd565b3480156103a957600080fd5b5061034f6103b8366004612b71565b610afe565b3480156103c957600080fd5b5061033c6103d8366004612c96565b610b94565b3480156103e957600080fd5b5061033c6103f8366004612c96565b610bd5565b34801561040957600080fd5b5061033c610418366004612b9b565b610c12565b34801561042957600080fd5b50600e54610304906001600160a01b031681565b34801561044957600080fd5b5061034f610458366004612b41565b610c2d565b34801561046957600080fd5b50610304610478366004612b41565b610cc0565b34801561048957600080fd5b5061033c610498366004612c96565b610d37565b3480156104a957600080fd5b5061033c610d74565b61033c6104c0366004612b41565b610dfb565b3480156104d157600080fd5b504761034f565b3480156104e457600080fd5b506102d76104f3366004612b41565b610e2d565b34801561050457600080fd5b5061034f610513366004612ccb565b610eec565b34801561052457600080fd5b5061033c610f73565b34801561053957600080fd5b5061034f600d5481565b34801561054f57600080fd5b5061056361055e366004612ccb565b610fa7565b6040516102b99190612ce6565b34801561057c57600080fd5b50600a546001600160a01b0316610304565b34801561059a57600080fd5b503360009081526011602052604090205415156102ad565b3480156105be57600080fd5b506102d7611066565b3480156105d357600080fd5b50601454610100900460ff166102ad565b3480156105f057600080fd5b5061033c6105ff366004612d2a565b611075565b34801561061057600080fd5b5061033c61061f366004612b41565b61113a565b34801561063057600080fd5b5061034f600f5481565b34801561064657600080fd5b5061034f600c5481565b34801561065c57600080fd5b5061033c61066b366004612d66565b61120b565b34801561067c57600080fd5b506102d7611243565b34801561069157600080fd5b506102d76106a0366004612b41565b6112d1565b3480156106b157600080fd5b5061034f6106c0366004612b41565b6113ac565b3480156106d157600080fd5b5061033c6113e8565b3480156106e657600080fd5b5061034f6101f481565b3480156106fc57600080fd5b5061033c61070b366004612e71565b61142f565b34801561071c57600080fd5b5061033c61072b366004612b41565b611616565b34801561073c57600080fd5b506102d761074b366004612b41565b6116ed565b34801561075c57600080fd5b506102d76117fc565b34801561077157600080fd5b5061033c610780366004612f31565b611809565b34801561079157600080fd5b5061033c611ab4565b3480156107a657600080fd5b506102ad6107b5366004612fee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61033c6107f1366004612b41565b611af2565b34801561080257600080fd5b5061033c610811366004612ccb565b611c28565b60006001600160e01b0319821663780e9d6360e01b148061083b575061083b82611cc3565b92915050565b60606000805461085090613021565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90613021565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061097882610cc0565b9050806001600160a01b0316836001600160a01b031614156109e65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610948565b336001600160a01b0382161480610a025750610a0281336107b5565b610a745760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610948565b610a7e8383611d13565b505050565b6002600b541415610aa65760405162461bcd60e51b815260040161094890613056565b6002600b5533600090815260116020526040902054610ac58134611d81565b506001600b55565b610ad73382611f8f565b610af35760405162461bcd60e51b81526004016109489061308d565b610a7e838383612086565b6000610b0983610eec565b8210610b6b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610948565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610bbe5760405162461bcd60e51b8152600401610948906130de565b8051610bd1906017906020840190612a0a565b5050565b600a546001600160a01b03163314610bff5760405162461bcd60e51b8152600401610948906130de565b8051610bd1906015906020840190612a0a565b610a7e8383836040518060200160405280600081525061120b565b6000610c3860085490565b8210610c9b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610948565b60088281548110610cae57610cae613113565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061083b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610948565b600a546001600160a01b03163314610d615760405162461bcd60e51b8152600401610948906130de565b8051610bd1906016906020840190612a0a565b600a546001600160a01b0316331480610d975750600e546001600160a01b031633145b610de35760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20726967687420746f2069740000000000000000006044820152606401610948565b600e54610df9906001600160a01b031647612231565b565b6002600b541415610e1e5760405162461bcd60e51b815260040161094890613056565b6002600b55610ac58134611d81565b6060610e3860085490565b8210610e565760405162461bcd60e51b815260040161094890613129565b42610e60836113ac565b10610ead5760405162461bcd60e51b815260206004820152601d60248201527f5468617420656e7469747920686173206e6f742067726f776e207965740000006044820152606401610948565b6015601260008481526020019081526020016000206016604051602001610ed693929190613204565b6040516020818303038152906040529050919050565b60006001600160a01b038216610f575760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610948565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610f9d5760405162461bcd60e51b8152600401610948906130de565b610df96000612351565b60606000610fb483610eec565b905080610fd55760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610ff057610ff0612bd7565b604051908082528060200260200182016040528015611019578160200160208202803683370190505b50905060005b82811015610fcd576110318582610afe565b82828151811061104357611043613113565b60209081029190910101528061105881613241565b91505061101f565b50919050565b60606001805461085090613021565b6001600160a01b0382163314156110ce5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610948565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146111645760405162461bcd60e51b8152600401610948906130de565b600081116111a35760405162461bcd60e51b815260206004820152600c60248201526b0aee4dedcce40e0cae440e8f60a31b6044820152606401610948565b600c54604080516060808252600e908201526d08c82a0a0be8684bea08aa4bea8b60931b6080820152602081019290925281018290527f0d072220716df8d505ad38ae8dbfe77b968e2c80bb73f08c38a08d5fe4f9911a9060a00160405180910390a1600c55565b6112153383611f8f565b6112315760405162461bcd60e51b81526004016109489061308d565b61123d848484846123a3565b50505050565b6015805461125090613021565b80601f016020809104026020016040519081016040528092919081815260200182805461127c90613021565b80156112c95780601f1061129e576101008083540402835291602001916112c9565b820191906000526020600020905b8154815290600101906020018083116112ac57829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b03166113505760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610948565b600061135a6123d6565b9050600081511161137a57604051806020016040528060008152506113a5565b80611384846123e5565b60405160200161139592919061325c565b6040516020818303038152906040525b9392505050565b60006113b760085490565b82106113d55760405162461bcd60e51b815260040161094890613129565b5060009081526010602052604090205490565b600a546001600160a01b031633146114125760405162461bcd60e51b8152600401610948906130de565b6014805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b031633146114595760405162461bcd60e51b8152600401610948906130de565b81518151146114aa5760405162461bcd60e51b815260206004820181905260248201527f6d697363656c6c616e656f7573206e756d626572206f6620656c656d656e74736044820152606401610948565b60005b8251811015610a7e5760006001600160a01b03168382815181106114d3576114d3613113565b60200260200101516001600160a01b031614156115325760405162461bcd60e51b815260206004820152601a60248201527f6d656d62657220697320746865207a65726f20616464726573730000000000006044820152606401610948565b600c5482828151811061154757611547613113565b602002602001015111156115a75760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206973206d6f7265207468616e2074686520616c6c6f7761626c6044820152606560f81b6064820152608401610948565b8181815181106115b9576115b9613113565b6020026020010151601160008584815181106115d7576115d7613113565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550808061160e90613241565b9150506114ad565b600a546001600160a01b031633146116405760405162461bcd60e51b8152600401610948906130de565b6000811161167e5760405162461bcd60e51b815260206004820152600b60248201526a57726f6e6720707269636560a81b6044820152606401610948565b7f0d072220716df8d505ad38ae8dbfe77b968e2c80bb73f08c38a08d5fe4f9911a600d54826040516116e09291906060808252600d908201526c464150505f43425f505249434560981b60808201526020810192909252604082015260a00190565b60405180910390a1600d55565b600a546060906001600160a01b0316331461171a5760405162461bcd60e51b8152600401610948906130de565b600854821061173b5760405162461bcd60e51b815260040161094890613129565b60145462010000900460ff16156117de576013805461175990613021565b80601f016020809104026020016040519081016040528092919081815260200182805461178590613021565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b50505050509050919050565b6000828152601260205260409020805461175990613021565b919050565b6016805461125090613021565b600a546001600160a01b031633146118335760405162461bcd60e51b8152600401610948906130de565b80518251146118845760405162461bcd60e51b815260206004820181905260248201527f6d697363656c6c616e656f7573206e756d626572206f6620656c656d656e74736044820152606401610948565b60145462010000900460ff16156118c557816000815181106118a8576118a8613113565b602002602001015160139080519060200190610a7e929190612a0a565b60005b8151811015610a7e576000601260008484815181106118e9576118e9613113565b60200260200101518152602001908152602001600020805461190a90613021565b80601f016020809104026020016040519081016040528092919081815260200182805461193690613021565b80156119835780601f1061195857610100808354040283529160200191611983565b820191906000526020600020905b81548152906001019060200180831161196657829003601f168201915b5050505050905080516000146119db5760405162461bcd60e51b815260206004820152601e60248201527f4950465320686173682063616e20626520736574206f6e6c79206f6e636500006044820152606401610948565b6101f48383815181106119f0576119f0613113565b60200260200101511115611a465760405162461bcd60e51b815260206004820152601d60248201527f6964206973206d6f7265207468616e2074686520616c6c6f7761626c650000006044820152606401610948565b838281518110611a5857611a58613113565b602002602001015160126000858581518110611a7657611a76613113565b602002602001015181526020019081526020016000209080519060200190611a9f929190612a0a565b50508080611aac90613241565b9150506118c8565b600a546001600160a01b03163314611ade5760405162461bcd60e51b8152600401610948906130de565b6014805460ff19811660ff90911615179055565b6002600b541415611b155760405162461bcd60e51b815260040161094890613056565b6002600b5560145460ff16611b6c5760405162461bcd60e51b815260206004820152601960248201527f5075626c69632073616c65206973206e6f7420616374697665000000000000006044820152606401610948565b600c54811115611bbe5760405162461bcd60e51b815260206004820152601f60248201527f596f752063616e2774206d696e742074686174206d616e7920746f6b656e73006044820152606401610948565b6101f481611bcb60085490565b611bd5919061328b565b1115611bf35760405162461bcd60e51b8152600401610948906132a3565b600d54611c0090826132e9565b3414611c1e5760405162461bcd60e51b815260040161094890613308565b610ac533826124e3565b600a546001600160a01b03163314611c525760405162461bcd60e51b8152600401610948906130de565b6001600160a01b038116611cb75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610948565b611cc081612351565b50565b60006001600160e01b031982166380ac58cd60e01b1480611cf457506001600160e01b03198216635b5e139f60e01b145b8061083b57506301ffc9a760e01b6001600160e01b031983161461083b565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4882610cc0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b3360009081526011602052604090205482811015611dd05760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b6044820152606401610948565b601454610100900460ff16611e205760405162461bcd60e51b81526020600482015260166024820152755072652d73616c65206973206e6f742061637469766560501b6044820152606401610948565b33600090815260116020526040902054611e7c5760405162461bcd60e51b815260206004820152601d60248201527f596f75277665206e6f7420636c61696d656420796f757220746f6b656e0000006044820152606401610948565b6101f483611e8960085490565b611e93919061328b565b1115611eb15760405162461bcd60e51b8152600401610948906132a3565b6101f483600f54611ec2919061328b565b1115611f1e5760405162461bcd60e51b815260206004820152602560248201527f4d696e7420776f756c6420657863656564206d6178207072652d73616c6520746044820152646f6b656e7360d81b6064820152608401610948565b600d54611f2b90846132e9565b8214611f495760405162461bcd60e51b815260040161094890613308565b82600f6000828254611f5b919061328b565b90915550503360009081526011602052604081208054859290611f7f90849061334f565b90915550610a7e905033846124e3565b6000818152600260205260408120546001600160a01b03166120085760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610948565b600061201383610cc0565b9050806001600160a01b0316846001600160a01b0316148061204e5750836001600160a01b0316612043846108d3565b6001600160a01b0316145b8061207e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661209982610cc0565b6001600160a01b0316146121015760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610948565b6001600160a01b0382166121635760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610948565b61216e838383612529565b612179600082611d13565b6001600160a01b03831660009081526003602052604081208054600192906121a290849061334f565b90915550506001600160a01b03821660009081526003602052604081208054600192906121d090849061328b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6002600b5414156122545760405162461bcd60e51b815260040161094890613056565b6002600b55478082116122675781612269565b805b91506000836001600160a01b03168360405160006040518083038185875af1925050503d80600081146122b8576040519150601f19603f3d011682016040523d82523d6000602084013e6122bd565b606091505b50509050806123035760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610948565b836001600160a01b03167f2d7972e635b540e3a7d69ab075a726bac4112e45f631bde1b551cb069dcad6df8460405161233e91815260200190565b60405180910390a250506001600b555050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6123ae848484612086565b6123ba848484846125e1565b61123d5760405162461bcd60e51b815260040161094890613366565b60606017805461085090613021565b6060816124095750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612433578061241d81613241565b915061242c9050600a836133ce565b915061240d565b60008167ffffffffffffffff81111561244e5761244e612bd7565b6040519080825280601f01601f191660200182016040528015612478576020820181803683370190505b5090505b841561207e5761248d60018361334f565b915061249a600a866133e2565b6124a590603061328b565b60f81b8183815181106124ba576124ba613113565b60200101906001600160f81b031916908160001a9053506124dc600a866133ce565b945061247c565b60005b81811015610a7e5760006124f960085490565b6000818152601060205260409020429055905061251684826126df565b508061252181613241565b9150506124e6565b6001600160a01b0383166125845761257f81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125a7565b816001600160a01b0316836001600160a01b0316146125a7576125a783826126f9565b6001600160a01b0382166125be57610a7e81612796565b826001600160a01b0316826001600160a01b031614610a7e57610a7e8282612845565b60006001600160a01b0384163b156126d457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126259033908990889088906004016133f6565b6020604051808303816000875af1925050508015612660575060408051601f3d908101601f1916820190925261265d91810190613433565b60015b6126ba573d80801561268e576040519150601f19603f3d011682016040523d82523d6000602084013e612693565b606091505b5080516126b25760405162461bcd60e51b815260040161094890613366565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061207e565b506001949350505050565b610bd1828260405180602001604052806000815250612889565b6000600161270684610eec565b612710919061334f565b600083815260076020526040902054909150808214612763576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906127a89060019061334f565b600083815260096020526040812054600880549394509092849081106127d0576127d0613113565b9060005260206000200154905080600883815481106127f1576127f1613113565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061282957612829613450565b6001900381819060005260206000200160009055905550505050565b600061285083610eec565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61289383836128bc565b6128a060008484846125e1565b610a7e5760405162461bcd60e51b815260040161094890613366565b6001600160a01b0382166129125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610948565b6000818152600260205260409020546001600160a01b0316156129775760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610948565b61298360008383612529565b6001600160a01b03821660009081526003602052604081208054600192906129ac90849061328b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612a1690613021565b90600052602060002090601f016020900481019282612a385760008555612a7e565b82601f10612a5157805160ff1916838001178555612a7e565b82800160010185558215612a7e579182015b82811115612a7e578251825591602001919060010190612a63565b50612a8a929150612a8e565b5090565b5b80821115612a8a5760008155600101612a8f565b6001600160e01b031981168114611cc057600080fd5b600060208284031215612acb57600080fd5b81356113a581612aa3565b60005b83811015612af1578181015183820152602001612ad9565b8381111561123d5750506000910152565b60008151808452612b1a816020860160208601612ad6565b601f01601f19169290920160200192915050565b6020815260006113a56020830184612b02565b600060208284031215612b5357600080fd5b5035919050565b80356001600160a01b03811681146117f757600080fd5b60008060408385031215612b8457600080fd5b612b8d83612b5a565b946020939093013593505050565b600080600060608486031215612bb057600080fd5b612bb984612b5a565b9250612bc760208501612b5a565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c1657612c16612bd7565b604052919050565b600067ffffffffffffffff831115612c3857612c38612bd7565b612c4b601f8401601f1916602001612bed565b9050828152838383011115612c5f57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612c8757600080fd5b6113a583833560208501612c1e565b600060208284031215612ca857600080fd5b813567ffffffffffffffff811115612cbf57600080fd5b61207e84828501612c76565b600060208284031215612cdd57600080fd5b6113a582612b5a565b6020808252825182820181905260009190848201906040850190845b81811015612d1e57835183529284019291840191600101612d02565b50909695505050505050565b60008060408385031215612d3d57600080fd5b612d4683612b5a565b915060208301358015158114612d5b57600080fd5b809150509250929050565b60008060008060808587031215612d7c57600080fd5b612d8585612b5a565b9350612d9360208601612b5a565b925060408501359150606085013567ffffffffffffffff811115612db657600080fd5b8501601f81018713612dc757600080fd5b612dd687823560208401612c1e565b91505092959194509250565b600067ffffffffffffffff821115612dfc57612dfc612bd7565b5060051b60200190565b600082601f830112612e1757600080fd5b81356020612e2c612e2783612de2565b612bed565b82815260059290921b84018101918181019086841115612e4b57600080fd5b8286015b84811015612e665780358352918301918301612e4f565b509695505050505050565b60008060408385031215612e8457600080fd5b823567ffffffffffffffff80821115612e9c57600080fd5b818501915085601f830112612eb057600080fd5b81356020612ec0612e2783612de2565b82815260059290921b84018101918181019089841115612edf57600080fd5b948201945b83861015612f0457612ef586612b5a565b82529482019490820190612ee4565b96505086013592505080821115612f1a57600080fd5b50612f2785828601612e06565b9150509250929050565b60008060408385031215612f4457600080fd5b823567ffffffffffffffff80821115612f5c57600080fd5b818501915085601f830112612f7057600080fd5b81356020612f80612e2783612de2565b82815260059290921b84018101918181019089841115612f9f57600080fd5b8286015b84811015612fd757803586811115612fbb5760008081fd5b612fc98c86838b0101612c76565b845250918301918301612fa3565b5096505086013592505080821115612f1a57600080fd5b6000806040838503121561300157600080fd5b61300a83612b5a565b915061301860208401612b5a565b90509250929050565b600181811c9082168061303557607f821691505b6020821081141561106057634e487b7160e01b600052602260045260246000fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526021908201527f5468617420656e7469747920686173206e6f74206265656e206d616b652079656040820152601d60fa1b606082015260800190565b8054600090600181811c908083168061318457607f831692505b60208084108214156131a657634e487b7160e01b600052602260045260246000fd5b8180156131ba57600181146131cb576131f8565b60ff198616895284890196506131f8565b60008881526020902060005b868110156131f05781548b8201529085019083016131d7565b505084890196505b50505050505092915050565b600061322261321c613216848861316a565b8661316a565b8461316a565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156132555761325561322b565b5060010190565b6000835161326e818460208801612ad6565b835190830190613282818360208801612ad6565b01949350505050565b6000821982111561329e5761329e61322b565b500190565b60208082526026908201527f4d696e7420776f756c6420657863656564206d617820737570706c79206f6620604082015265746f6b656e7360d01b606082015260800190565b60008160001904831182151516156133035761330361322b565b500290565b60208082526027908201527f596f75206469646e27742073656e642074686520726967687420616d6f756e74604082015266040decc40cae8d60cb1b606082015260800190565b6000828210156133615761336161322b565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826133dd576133dd6133b8565b500490565b6000826133f1576133f16133b8565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342990830184612b02565b9695505050505050565b60006020828403121561344557600080fd5b81516113a581612aa3565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d26751f797cb21861733aea1b55133057802ef5d296a26ddefc38b236987d6a764736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007464150505f4342000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007464150505f434200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003268747470733a2f2f66616d696c797068616c6c7573706c616e65742e636f6d2f6170692d6d696e742d706173732f6e66742f0000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): FAPP_CB
Arg [1] : symbol (string): FAPP_CB
Arg [2] : baseTokenURI (string): https://familyphallusplanet.com/api-mint-pass/nft/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 464150505f434200000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 464150505f434200000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [8] : 68747470733a2f2f66616d696c797068616c6c7573706c616e65742e636f6d2f
Arg [9] : 6170692d6d696e742d706173732f6e66742f0000000000000000000000000000


Deployed Bytecode Sourcemap

40565:7104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34936:215;;;;;;;;;;-1:-1:-1;34936:215:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;34936:215:0;;;;;;;;23424:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24818:206::-;;;;;;;;;;-1:-1:-1;24818:206:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;24818:206:0;1528:203:1;24404:360:0;;;;;;;;;;-1:-1:-1;24404:360:0;;;;;:::i;:::-;;:::i;:::-;;35528:104;;;;;;;;;;-1:-1:-1;35610:10:0;:17;35528:104;;;2319:25:1;;;2307:2;2292:18;35528:104:0;2173:177:1;47103:102:0;;;;;;;;;;-1:-1:-1;47181:19:0;;;;47103:102;;43494:161;;;:::i;25627:297::-;;;;;;;;;;-1:-1:-1;25627:297:0;;;;;:::i;:::-;;:::i;35223:241::-;;;;;;;;;;-1:-1:-1;35223:241:0;;;;;:::i;:::-;;:::i;44578:108::-;;;;;;;;;;-1:-1:-1;44578:108:0;;;;;:::i;:::-;;:::i;47421:120::-;;;;;;;;;;-1:-1:-1;47421:120:0;;;;;:::i;:::-;;:::i;25983:155::-;;;;;;;;;;-1:-1:-1;25983:155:0;;;;;:::i;:::-;;:::i;40769:67::-;;;;;;;;;;-1:-1:-1;40769:67:0;;;;-1:-1:-1;;;;;40769:67:0;;;35697:218;;;;;;;;;;-1:-1:-1;35697:218:0;;;;;:::i;:::-;;:::i;23151:::-;;;;;;;;;;-1:-1:-1;23151:218:0;;;;;:::i;:::-;;:::i;47546:120::-;;;;;;;;;;-1:-1:-1;47546:120:0;;;;;:::i;:::-;;:::i;45117:177::-;;;;;;;;;;;;;:::i;43660:135::-;;;;;;:::i;:::-;;:::i;45593:98::-;;;;;;;;;;-1:-1:-1;45665:21:0;45593:98;;46294:332;;;;;;;;;;-1:-1:-1;46294:332:0;;;;;:::i;:::-;;:::i;22908:193::-;;;;;;;;;;-1:-1:-1;22908:193:0;;;;;:::i;:::-;;:::i;11138:85::-;;;;;;;;;;;;;:::i;40724:41::-;;;;;;;;;;;;;;;;45696:404;;;;;;;;;;-1:-1:-1;45696:404:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10547:78::-;;;;;;;;;;-1:-1:-1;10614:6:0;;-1:-1:-1;;;;;10614:6:0;10547:78;;43382:107;;;;;;;;;;-1:-1:-1;43469:10:0;43434:4;43452:28;;;:16;:28;;;;;;:32;;43382:107;;23572:95;;;;;;;;;;;;;:::i;47210:96::-;;;;;;;;;;-1:-1:-1;47285:16:0;;;;;;;47210:96;;25084:274;;;;;;;;;;-1:-1:-1;25084:274:0;;;;;:::i;:::-;;:::i;44902:210::-;;;;;;;;;;-1:-1:-1;44902:210:0;;;;;:::i;:::-;;:::i;40842:33::-;;;;;;;;;;;;;;;;40686:34;;;;;;;;;;;;;;;;26197:286;;;;;;;;;;-1:-1:-1;26197:286:0;;;;;:::i;:::-;;:::i;41208:40::-;;;;;;;;;;;;;:::i;23726:313::-;;;;;;;;;;-1:-1:-1;23726:313:0;;;;;:::i;:::-;;:::i;46105:184::-;;;;;;;;;;-1:-1:-1;46105:184:0;;;;;:::i;:::-;;:::i;47008:90::-;;;;;;;;;;;;;:::i;40634:48::-;;;;;;;;;;;;40679:3;40634:48;;42355:445;;;;;;;;;;-1:-1:-1;42355:445:0;;;;;:::i;:::-;;:::i;44691:206::-;;;;;;;;;;-1:-1:-1;44691:206:0;;;;;:::i;:::-;;:::i;46631:268::-;;;;;;;;;;-1:-1:-1;46631:268:0;;;;;:::i;:::-;;:::i;41252:47::-;;;;;;;;;;;;;:::i;42805:572::-;;;;;;;;;;-1:-1:-1;42805:572:0;;;;;:::i;:::-;;:::i;46904:99::-;;;;;;;;;;;;;:::i;25417:155::-;;;;;;;;;;-1:-1:-1;25417:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;25532:25:0;;;25514:4;25532:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25417:155;41674:440;;;;;;:::i;:::-;;:::i;11363:177::-;;;;;;;;;;-1:-1:-1;11363:177:0;;;;;:::i;:::-;;:::i;34936:215::-;35038:4;-1:-1:-1;;;;;;35056:50:0;;-1:-1:-1;;;35056:50:0;;:90;;;35110:36;35134:11;35110:23;:36::i;:::-;35049:97;34936:215;-1:-1:-1;;34936:215:0:o;23424:91::-;23478:13;23505:5;23498:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23424:91;:::o;24818:206::-;24894:7;27950:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27950:16:0;24908:73;;;;-1:-1:-1;;;24908:73:0;;10142:2:1;24908:73:0;;;10124:21:1;10181:2;10161:18;;;10154:30;10220:34;10200:18;;;10193:62;-1:-1:-1;;;10271:18:1;;;10264:42;10323:19;;24908:73:0;;;;;;;;;-1:-1:-1;24995:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24995:24:0;;24818:206::o;24404:360::-;24479:13;24495:23;24510:7;24495:14;:23::i;:::-;24479:39;;24537:5;-1:-1:-1;;;;;24531:11:0;:2;-1:-1:-1;;;;;24531:11:0;;;24523:57;;;;-1:-1:-1;;;24523:57:0;;10555:2:1;24523:57:0;;;10537:21:1;10594:2;10574:18;;;10567:30;10633:34;10613:18;;;10606:62;-1:-1:-1;;;10684:18:1;;;10677:31;10725:19;;24523:57:0;10353:397:1;24523:57:0;9557:10;-1:-1:-1;;;;;24600:21:0;;;;:62;;-1:-1:-1;24625:37:0;24642:5;9557:10;25417:155;:::i;24625:37::-;24587:144;;;;-1:-1:-1;;;24587:144:0;;10957:2:1;24587:144:0;;;10939:21:1;10996:2;10976:18;;;10969:30;11035:34;11015:18;;;11008:62;11106:26;11086:18;;;11079:54;11150:19;;24587:144:0;10755:420:1;24587:144:0;24738:21;24747:2;24751:7;24738:8;:21::i;:::-;24474:290;24404:360;;:::o;43494:161::-;13319:1;13864:7;;:19;;13856:63;;;;-1:-1:-1;;;13856:63:0;;;;;;;:::i;:::-;13319:1;13985:7;:18;43594:10:::1;43560:14;43577:28:::0;;;:16:::1;:28;::::0;;;;;43610:40:::1;43577:28:::0;43640:9:::1;43610:21;:40::i;:::-;-1:-1:-1::0;13278:1:0;14140:7;:22;43494:161::o;25627:297::-;25789:41;9557:10;25822:7;25789:18;:41::i;:::-;25781:103;;;;-1:-1:-1;;;25781:103:0;;;;;;;:::i;:::-;25891:28;25901:4;25907:2;25911:7;25891:9;:28::i;35223:241::-;35320:7;35350:23;35367:5;35350:16;:23::i;:::-;35342:5;:31;35334:87;;;;-1:-1:-1;;;35334:87:0;;12160:2:1;35334:87:0;;;12142:21:1;12199:2;12179:18;;;12172:30;12238:34;12218:18;;;12211:62;-1:-1:-1;;;12289:18:1;;;12282:41;12340:19;;35334:87:0;11958:407:1;35334:87:0;-1:-1:-1;;;;;;35433:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35223:241::o;44578:108::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;44653:28;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;;44578:108:::0;:::o;47421:120::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;47504:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;25983:155::-:0;26094:39;26111:4;26117:2;26121:7;26094:39;;;;;;;;;;;;:16;:39::i;35697:218::-;35772:7;35802:30;35610:10;:17;;35528:104;35802:30;35794:5;:38;35786:95;;;;-1:-1:-1;;;35786:95:0;;12933:2:1;35786:95:0;;;12915:21:1;12972:2;12952:18;;;12945:30;13011:34;12991:18;;;12984:62;-1:-1:-1;;;13062:18:1;;;13055:42;13114:19;;35786:95:0;12731:408:1;35786:95:0;35893:10;35904:5;35893:17;;;;;;;;:::i;:::-;;;;;;;;;35886:24;;35697:218;;;:::o;23151:::-;23223:7;23253:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23253:16:0;23282:19;23274:73;;;;-1:-1:-1;;;23274:73:0;;13478:2:1;23274:73:0;;;13460:21:1;13517:2;13497:18;;;13490:30;13556:34;13536:18;;;13529:62;-1:-1:-1;;;13607:18:1;;;13600:39;13656:19;;23274:73:0;13276:405:1;47546:120:0;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;47629:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;45117:177::-:0;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;45159:23;;:50;;-1:-1:-1;45186:7:0;;-1:-1:-1;;;;;45186:7:0;9557:10;45186:23;45159:50;45151:86;;;;-1:-1:-1;;;45151:86:0;;13888:2:1;45151:86:0;;;13870:21:1;13927:2;13907:18;;;13900:30;13966:25;13946:18;;;13939:53;14009:18;;45151:86:0;13686:347:1;45151:86:0;45258:7;;45242:47;;-1:-1:-1;;;;;45258:7:0;45665:21;45242:7;:47::i;:::-;45117:177::o;43660:135::-;13319:1;13864:7;;:19;;13856:63;;;;-1:-1:-1;;;13856:63:0;;;;;;;:::i;:::-;13319:1;13985:7;:18;43750:40:::1;43772:6:::0;43780:9:::1;43750:21;:40::i;46294:332::-:0;46359:13;46397;35610:10;:17;;35528:104;46397:13;46387:7;:23;46379:69;;;;-1:-1:-1;;;46379:69:0;;;;;;;:::i;:::-;46484:15;46461:20;46473:7;46461:11;:20::i;:::-;:38;46453:80;;;;-1:-1:-1;;;46453:80:0;;14642:2:1;46453:80:0;;;14624:21:1;14681:2;14661:18;;;14654:30;14720:31;14700:18;;;14693:59;14769:18;;46453:80:0;14440:353:1;46453:80:0;46569:14;46585:9;:18;46595:7;46585:18;;;;;;;;;;;46605:14;46552:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46538:83;;46294:332;;;:::o;22908:193::-;22980:7;-1:-1:-1;;;;;23002:19:0;;22994:74;;;;-1:-1:-1;;;22994:74:0;;16466:2:1;22994:74:0;;;16448:21:1;16505:2;16485:18;;;16478:30;16544:34;16524:18;;;16517:62;-1:-1:-1;;;16595:18:1;;;16588:40;16645:19;;22994:74:0;16264:406:1;22994:74:0;-1:-1:-1;;;;;;23080:16:0;;;;;:9;:16;;;;;;;22908:193::o;11138:85::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;11197:21:::1;11215:1;11197:9;:21::i;45696:404::-:0;45756:28;45791:18;45812:15;45822:4;45812:9;:15::i;:::-;45791:36;-1:-1:-1;45836:15:0;45832:264;;45866:16;;;45880:1;45866:16;;;;;;;;;;;-1:-1:-1;45859:23:0;45696:404;-1:-1:-1;;;45696:404:0:o;45832:264::-;45900:23;45940:10;45926:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45926:25:0;;45900:51;;45962:13;45957:115;45989:10;45981:5;:18;45957:115;;;46033:32;46053:4;46059:5;46033:19;:32::i;:::-;46017:6;46024:5;46017:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;46001:7;;;;:::i;:::-;;;;45957:115;;45832:264;45786:314;45696:404;;;:::o;23572:95::-;23628:13;23655:7;23648:14;;;;;:::i;25084:274::-;-1:-1:-1;;;;;25181:24:0;;9557:10;25181:24;;25173:62;;;;-1:-1:-1;;;25173:62:0;;17149:2:1;25173:62:0;;;17131:21:1;17188:2;17168:18;;;17161:30;17227:27;17207:18;;;17200:55;17272:18;;25173:62:0;16947:349:1;25173:62:0;9557:10;25242:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25242:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25242:53:0;;;;;;;;;;25305:48;;540:41:1;;;25242:42:0;;9557:10;25305:48;;513:18:1;25305:48:0;;;;;;;25084:274;;:::o;44902:210::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;44994:1:::1;44983:8;:12;44975:37;;;::::0;-1:-1:-1;;;44975:37:0;;17503:2:1;44975:37:0::1;::::0;::::1;17485:21:1::0;17542:2;17522:18;;;17515:30;-1:-1:-1;;;17561:18:1;;;17554:42;17613:18;;44975:37:0::1;17301:336:1::0;44975:37:0::1;45052:14;::::0;45022:55:::1;::::0;;17900:2:1;17882:21;;;17939:2;17919:18;;;17912:30;-1:-1:-1;;;17973:3:1;17958:19;;17951:45;18063:4;18048:20;;18041:36;;;;18093:18;;18086:34;;;45022:55:0::1;::::0;18028:3:1;18013:19;45022:55:0::1;;;;;;;45082:14;:25:::0;44902:210::o;26197:286::-;26339:41;9557:10;26372:7;26339:18;:41::i;:::-;26331:103;;;;-1:-1:-1;;;26331:103:0;;;;;;;:::i;:::-;26439:39;26453:4;26459:2;26463:7;26472:5;26439:13;:39::i;:::-;26197:286;;;;:::o;41208:40::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23726:313::-;27932:4;27950:16;;;:7;:16;;;;;;23799:13;;-1:-1:-1;;;;;27950:16:0;23819:76;;;;-1:-1:-1;;;23819:76:0;;18333:2:1;23819:76:0;;;18315:21:1;18372:2;18352:18;;;18345:30;18411:34;18391:18;;;18384:62;-1:-1:-1;;;18462:18:1;;;18455:45;18517:19;;23819:76:0;18131:411:1;23819:76:0;23902:21;23926:10;:8;:10::i;:::-;23902:34;;23972:1;23954:7;23948:21;:25;:86;;;;;;;;;;;;;;;;;24000:7;24009:18;:7;:16;:18::i;:::-;23983:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23948:86;23941:93;23726:313;-1:-1:-1;;;23726:313:0:o;46105:184::-;46164:7;46196:13;35610:10;:17;;35528:104;46196:13;46186:7;:23;46178:69;;;;-1:-1:-1;;;46178:69:0;;;;;;;:::i;:::-;-1:-1:-1;46259:25:0;;;;:16;:25;;;;;;;46105:184::o;47008:90::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;47077:16:::1;::::0;;-1:-1:-1;;47057:36:0;::::1;47077:16;::::0;;;::::1;;;47076:17;47057:36:::0;;::::1;;::::0;;47008:90::o;42355:445::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;42493:7:::1;:14;42475:7;:14;:32;42467:77;;;::::0;-1:-1:-1;;;42467:77:0;;19224:2:1;42467:77:0::1;::::0;::::1;19206:21:1::0;;;19243:18;;;19236:30;19302:34;19282:18;;;19275:62;19354:18;;42467:77:0::1;19022:356:1::0;42467:77:0::1;42554:9;42549:247;42573:7;:14;42569:1;:18;42549:247;;;42630:1;-1:-1:-1::0;;;;;42608:24:0::1;:7;42616:1;42608:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;42608:24:0::1;;;42600:63;;;::::0;-1:-1:-1;;;42600:63:0;;19585:2:1;42600:63:0::1;::::0;::::1;19567:21:1::0;19624:2;19604:18;;;19597:30;19663:28;19643:18;;;19636:56;19709:18;;42600:63:0::1;19383:350:1::0;42600:63:0::1;42691:14;;42677:7;42685:1;42677:10;;;;;;;;:::i;:::-;;;;;;;:28;;42669:74;;;::::0;-1:-1:-1;;;42669:74:0;;19940:2:1;42669:74:0::1;::::0;::::1;19922:21:1::0;19979:2;19959:18;;;19952:30;20018:34;19998:18;;;19991:62;-1:-1:-1;;;20069:18:1;;;20062:31;20110:19;;42669:74:0::1;19738:397:1::0;42669:74:0::1;42780:7;42788:1;42780:10;;;;;;;;:::i;:::-;;;;;;;42749:16;:28;42766:7;42774:1;42766:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;42749:28:0::1;-1:-1:-1::0;;;;;42749:28:0::1;;;;;;;;;;;;:41;;;;42589:3;;;;;:::i;:::-;;;;42549:247;;44691:206:::0;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;44783:1:::1;44772:8;:12;44764:36;;;::::0;-1:-1:-1;;;44764:36:0;;20342:2:1;44764:36:0::1;::::0;::::1;20324:21:1::0;20381:2;20361:18;;;20354:30;-1:-1:-1;;;20400:18:1;;;20393:41;20451:18;;44764:36:0::1;20140:335:1::0;44764:36:0::1;44810:53;44839:13;;44854:8;44810:53;;;;;;20738:2:1::0;20720:21;;;20777:2;20757:18;;;20750:30;-1:-1:-1;;;20811:3:1;20796:19;;20789:44;20900:4;20885:20;;20878:36;;;;-1:-1:-1;20930:18:1;;20923:34;20865:3;20850:19;;20480:483;44810:53:0::1;;;;;;;;44868:13;:24:::0;44691:206::o;46631:268::-;10614:6;;46702:13;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;35610:10;:17;46730:7:::1;:23;46722:69;;;;-1:-1:-1::0;;;46722:69:0::1;;;;;;;:::i;:::-;46799:17;::::0;;;::::1;;;46796:99;;;46831:15;46824:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46631:268:::0;;;:::o;46796:99::-:1;46871:18;::::0;;;:9:::1;:18;::::0;;;;46864:25;;::::1;::::0;::::1;:::i;46796:99::-;46631:268:::0;;;:::o;41252:47::-;;;;;;;:::i;42805:572::-;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;42932:8:::1;:15;42912:9;:16;:35;42904:80;;;::::0;-1:-1:-1;;;42904:80:0;;19224:2:1;42904:80:0::1;::::0;::::1;19206:21:1::0;;;19243:18;;;19236:30;19302:34;19282:18;;;19275:62;19354:18;;42904:80:0::1;19022:356:1::0;42904:80:0::1;42992:17;::::0;;;::::1;;;42989:76;;;43035:9;43045:1;43035:12;;;;;;;;:::i;:::-;;;;;;;43017:15;:30;;;;;;;;;;;;:::i;42989:76::-;43074:9;43069:304;43093:8;:15;43089:1;:19;43069:304;;;43121:21;43151:9;:22;43161:8;43170:1;43161:11;;;;;;;;:::i;:::-;;;;;;;43151:22;;;;;;;;;;;43121:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43188:8;:15;43207:1;43188:20;43180:63;;;::::0;-1:-1:-1;;;43180:63:0;;21170:2:1;43180:63:0::1;::::0;::::1;21152:21:1::0;21209:2;21189:18;;;21182:30;21248:32;21228:18;;;21221:60;21298:18;;43180:63:0::1;20968:354:1::0;43180:63:0::1;40679:3;43257:8;43266:1;43257:11;;;;;;;;:::i;:::-;;;;;;;:33;;43249:75;;;::::0;-1:-1:-1;;;43249:75:0;;21529:2:1;43249:75:0::1;::::0;::::1;21511:21:1::0;21568:2;21548:18;;;21541:30;21607:31;21587:18;;;21580:59;21656:18;;43249:75:0::1;21327:353:1::0;43249:75:0::1;43355:9;43365:1;43355:12;;;;;;;;:::i;:::-;;;;;;;43330:9;:22;43340:8;43349:1;43340:11;;;;;;;;:::i;:::-;;;;;;;43330:22;;;;;;;;;;;:37;;;;;;;;;;;;:::i;:::-;;43115:258;43110:3;;;;;:::i;:::-;;;;43069:304;;46904:99:::0;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;46979:19:::1;::::0;;-1:-1:-1;;46956:42:0;::::1;46979:19;::::0;;::::1;46978:20;46956:42;::::0;;46904:99::o;41674:440::-;13319:1;13864:7;;:19;;13856:63;;;;-1:-1:-1;;;13856:63:0;;;;;;;:::i;:::-;13319:1;13985:7;:18;41755:19:::1;::::0;::::1;;41747:57;;;::::0;-1:-1:-1;;;41747:57:0;;21887:2:1;41747:57:0::1;::::0;::::1;21869:21:1::0;21926:2;21906:18;;;21899:30;21965:27;21945:18;;;21938:55;22010:18;;41747:57:0::1;21685:349:1::0;41747:57:0::1;41827:14;;41817:6;:24;;41809:68;;;::::0;-1:-1:-1;;;41809:68:0;;22241:2:1;41809:68:0::1;::::0;::::1;22223:21:1::0;22280:2;22260:18;;;22253:30;22319:33;22299:18;;;22292:61;22370:18;;41809:68:0::1;22039:355:1::0;41809:68:0::1;40679:3;41906:6;41890:13;35610:10:::0;:17;;35528:104;41890:13:::1;:22;;;;:::i;:::-;:44;;41882:95;;;;-1:-1:-1::0;;;41882:95:0::1;;;;;;;:::i;:::-;42012:13;::::0;42003:22:::1;::::0;:6;:22:::1;:::i;:::-;41990:9;:35;41982:87;;;;-1:-1:-1::0;;;41982:87:0::1;;;;;;;:::i;:::-;42076:33;42090:10;42102:6;42076:13;:33::i;11363:177::-:0;10614:6;;-1:-1:-1;;;;;10614:6:0;9557:10;10740:23;10732:68;;;;-1:-1:-1;;;10732:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11446:22:0;::::1;11438:73;;;::::0;-1:-1:-1;;;11438:73:0;;23722:2:1;11438:73:0::1;::::0;::::1;23704:21:1::0;23761:2;23741:18;;;23734:30;23800:34;23780:18;;;23773:62;-1:-1:-1;;;23851:18:1;;;23844:36;23897:19;;11438:73:0::1;23520:402:1::0;11438:73:0::1;11516:19;11526:8;11516:9;:19::i;:::-;11363:177:::0;:::o;22590:266::-;22692:4;-1:-1:-1;;;;;;22713:40:0;;-1:-1:-1;;;22713:40:0;;:95;;-1:-1:-1;;;;;;;22760:48:0;;-1:-1:-1;;;22760:48:0;22713:95;:138;;;-1:-1:-1;;;;;;;;;;21392:40:0;;;22815:36;21289:148;31390:159;31459:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31459:29:0;-1:-1:-1;;;;;31459:29:0;;;;;;;;:24;;31507:23;31459:24;31507:14;:23::i;:::-;-1:-1:-1;;;;;31498:46:0;;;;;;;;;;;31390:159;;:::o;43800:773::-;43929:10;43886:23;43912:28;;;:16;:28;;;;;;43953:30;;;;43945:55;;;;-1:-1:-1;;;43945:55:0;;24129:2:1;43945:55:0;;;24111:21:1;24168:2;24148:18;;;24141:30;-1:-1:-1;;;24187:18:1;;;24180:42;24239:18;;43945:55:0;23927:336:1;43945:55:0;44015:16;;;;;;;44007:51;;;;-1:-1:-1;;;44007:51:0;;24470:2:1;44007:51:0;;;24452:21:1;24509:2;24489:18;;;24482:30;-1:-1:-1;;;24528:18:1;;;24521:52;24590:18;;44007:51:0;24268:346:1;44007:51:0;43469:10;43434:4;43452:28;;;:16;:28;;;;;;44063:63;;;;-1:-1:-1;;;44063:63:0;;24821:2:1;44063:63:0;;;24803:21:1;24860:2;24840:18;;;24833:30;24899:31;24879:18;;;24872:59;24948:18;;44063:63:0;24619:353:1;44063:63:0;40679:3;44155:11;44139:13;35610:10;:17;;35528:104;44139:13;:27;;;;:::i;:::-;:49;;44131:100;;;;-1:-1:-1;;;44131:100:0;;;;;;;:::i;:::-;40679:3;44265:11;44244:18;;:32;;;;:::i;:::-;:54;;44236:104;;;;-1:-1:-1;;;44236:104:0;;25179:2:1;44236:104:0;;;25161:21:1;25218:2;25198:18;;;25191:30;25257:34;25237:18;;;25230:62;-1:-1:-1;;;25308:18:1;;;25301:35;25353:19;;44236:104:0;24977:401:1;44236:104:0;44380:13;;44368:25;;:11;:25;:::i;:::-;44353:11;:40;44345:92;;;;-1:-1:-1;;;44345:92:0;;;;;;;:::i;:::-;44466:11;44444:18;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;44499:10:0;44482:28;;;;:16;:28;;;;;:43;;44514:11;;44482:28;:43;;44514:11;;44482:43;:::i;:::-;;;;-1:-1:-1;44530:38:0;;-1:-1:-1;44544:10:0;44556:11;44530:13;:38::i;28128:327::-;28221:4;27950:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27950:16:0;28232:73;;;;-1:-1:-1;;;28232:73:0;;25715:2:1;28232:73:0;;;25697:21:1;25754:2;25734:18;;;25727:30;25793:34;25773:18;;;25766:62;-1:-1:-1;;;25844:18:1;;;25837:42;25896:19;;28232:73:0;25513:408:1;28232:73:0;28310:13;28326:23;28341:7;28326:14;:23::i;:::-;28310:39;;28373:5;-1:-1:-1;;;;;28362:16:0;:7;-1:-1:-1;;;;;28362:16:0;;:51;;;;28406:7;-1:-1:-1;;;;;28382:31:0;:20;28394:7;28382:11;:20::i;:::-;-1:-1:-1;;;;;28382:31:0;;28362:51;:87;;;-1:-1:-1;;;;;;25532:25:0;;;25514:4;25532:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28417:32;28354:96;28128:327;-1:-1:-1;;;;28128:327:0:o;30790:500::-;30922:4;-1:-1:-1;;;;;30895:31:0;:23;30910:7;30895:14;:23::i;:::-;-1:-1:-1;;;;;30895:31:0;;30887:85;;;;-1:-1:-1;;;30887:85:0;;26128:2:1;30887:85:0;;;26110:21:1;26167:2;26147:18;;;26140:30;26206:34;26186:18;;;26179:62;-1:-1:-1;;;26257:18:1;;;26250:39;26306:19;;30887:85:0;25926:405:1;30887:85:0;-1:-1:-1;;;;;30985:16:0;;30977:65;;;;-1:-1:-1;;;30977:65:0;;26538:2:1;30977:65:0;;;26520:21:1;26577:2;26557:18;;;26550:30;26616:34;26596:18;;;26589:62;-1:-1:-1;;;26667:18:1;;;26660:34;26711:19;;30977:65:0;26336:400:1;30977:65:0;31049:39;31070:4;31076:2;31080:7;31049:20;:39::i;:::-;31141:29;31158:1;31162:7;31141:8;:29::i;:::-;-1:-1:-1;;;;;31177:15:0;;;;;;:9;:15;;;;;:20;;31196:1;;31177:15;:20;;31196:1;;31177:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31202:13:0;;;;;;:9;:13;;;;;:18;;31219:1;;31202:13;:18;;31219:1;;31202:18;:::i;:::-;;;;-1:-1:-1;;31225:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31225:21:0;-1:-1:-1;;;;;31225:21:0;;;;;;;;;31258:27;;31225:16;;31258:27;;;;;;;30790:500;;;:::o;45299:289::-;13319:1;13864:7;;:19;;13856:63;;;;-1:-1:-1;;;13856:63:0;;;;;;;:::i;:::-;13319:1;13985:7;:18;45665:21;45432:16;;::::1;:35;;45461:6;45432:35;;;45451:7;45432:35;45423:44;;45473:9;45488:2;-1:-1:-1::0;;;;;45488:7:0::1;45503:6;45488:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45472:42;;;45527:4;45519:35;;;::::0;-1:-1:-1;;;45519:35:0;;27153:2:1;45519:35:0::1;::::0;::::1;27135:21:1::0;27192:2;27172:18;;;27165:30;-1:-1:-1;;;27211:18:1;;;27204:48;27269:18;;45519:35:0::1;26951:342:1::0;45519:35:0::1;45572:2;-1:-1:-1::0;;;;;45564:19:0::1;;45576:6;45564:19;;;;2319:25:1::0;;2307:2;2292:18;;2173:177;45564:19:0::1;;;;;;;;-1:-1:-1::0;;13278:1:0;14140:7;:22;-1:-1:-1;;45299:289:0:o;11545:152::-;11614:6;;;-1:-1:-1;;;;;11625:17:0;;;-1:-1:-1;;;;;;11625:17:0;;;;;;;11652:40;;11614:6;;;11625:17;11614:6;;11652:40;;11595:16;;11652:40;11590:107;11545:152;:::o;27308:273::-;27432:28;27442:4;27448:2;27452:7;27432:9;:28::i;:::-;27473:48;27496:4;27502:2;27506:7;27515:5;27473:22;:48::i;:::-;27465:111;;;;-1:-1:-1;;;27465:111:0;;;;;;;:::i;47311:105::-;47371:13;47398;47391:20;;;;;:::i;7475:594::-;7531:13;7734:10;7730:38;;-1:-1:-1;;7752:10:0;;;;;;;;;;;;-1:-1:-1;;;7752:10:0;;;;;7475:594::o;7730:38::-;7787:5;7772:12;7816:54;7823:9;;7816:54;;7840:8;;;;:::i;:::-;;-1:-1:-1;7854:10:0;;-1:-1:-1;7862:2:0;7854:10;;:::i;:::-;;;7816:54;;;7874:19;7906:6;7896:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7896:17:0;;7874:39;;7918:121;7925:10;;7918:121;;7943:11;7953:1;7943:11;;:::i;:::-;;-1:-1:-1;8003:10:0;8011:2;8003:5;:10;:::i;:::-;7990:24;;:2;:24;:::i;:::-;7977:39;;7960:6;7967;7960:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7960:56:0;;;;;;;;-1:-1:-1;8022:11:0;8031:2;8022:11;;:::i;:::-;;;7918:121;;42119:231;42191:9;42186:160;42210:6;42206:1;:10;42186:160;;;42229:15;42247:13;35610:10;:17;;35528:104;42247:13;42266:25;;;;:16;:25;;;;;42294:15;42266:43;;42229:31;-1:-1:-1;42315:25:0;42325:5;42229:31;42315:9;:25::i;:::-;-1:-1:-1;42218:3:0;;;;:::i;:::-;;;;42186:160;;36480:487;-1:-1:-1;;;;;36653:18:0;;36649:157;;36679:40;36711:7;37734:10;:17;;37707:24;;;;:15;:24;;;;;:44;;;37756:24;;;;;;;;;;;;37636:149;36679:40;36649:157;;;36743:2;-1:-1:-1;;;;;36735:10:0;:4;-1:-1:-1;;;;;36735:10:0;;36731:75;;36753:47;36786:4;36792:7;36753:32;:47::i;:::-;-1:-1:-1;;;;;36814:16:0;;36810:153;;36838:45;36875:7;36838:36;:45::i;36810:153::-;36905:4;-1:-1:-1;;;;;36899:10:0;:2;-1:-1:-1;;;;;36899:10:0;;36895:68;;36917:40;36945:2;36949:7;36917:27;:40::i;32081:604::-;32209:4;-1:-1:-1;;;;;32224:13:0;;973:20;1009:8;32220:461;;32251:72;;-1:-1:-1;;;32251:72:0;;-1:-1:-1;;;;;32251:36:0;;;;;:72;;9557:10;;32302:4;;32308:7;;32317:5;;32251:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32251:72:0;;;;;;;;-1:-1:-1;;32251:72:0;;;;;;;;;;;;:::i;:::-;;;32247:400;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32460:13:0;;32456:185;;32488:60;;-1:-1:-1;;;32488:60:0;;;;;;;:::i;32456:185::-;32618:6;32612:13;32603:6;32599:2;32595:15;32588:38;32247:400;-1:-1:-1;;;;;;32362:51:0;-1:-1:-1;;;32362:51:0;;-1:-1:-1;32355:58:0;;32220:461;-1:-1:-1;32671:4:0;32081:604;;;;;;:::o;28764:101::-;28834:26;28844:2;28848:7;28834:26;;;;;;;;;;;;:9;:26::i;38385:898::-;38633:22;38683:1;38658:22;38675:4;38658:16;:22::i;:::-;:26;;;;:::i;:::-;38689:18;38710:26;;;:17;:26;;;;;;38633:51;;-1:-1:-1;38831:28:0;;;38827:295;;-1:-1:-1;;;;;38889:18:0;;38867:19;38889:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38931:30;;;;;;:44;;;39039:30;;:17;:30;;;;;:43;;;38827:295;-1:-1:-1;39206:26:0;;;;:17;:26;;;;;;;;39199:33;;;-1:-1:-1;;;;;39244:18:0;;;;;:12;:18;;;;;:34;;;;;;;39237:41;38385:898::o;39560:998::-;39820:10;:17;39795:22;;39820:21;;39840:1;;39820:21;:::i;:::-;39846:18;39867:24;;;:15;:24;;;;;;40216:10;:26;;39795:46;;-1:-1:-1;39867:24:0;;39795:46;;40216:26;;;;;;:::i;:::-;;;;;;;;;40194:48;;40274:11;40249:10;40260;40249:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40348:28;;;:15;:28;;;;;;;:41;;;40508:24;;;;;40501:31;40537:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39631:927;;;39560:998;:::o;37250:200::-;37329:14;37346:20;37363:2;37346:16;:20::i;:::-;-1:-1:-1;;;;;37371:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37410:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37250:200:0:o;29077:261::-;29180:18;29186:2;29190:7;29180:5;:18::i;:::-;29216:54;29247:1;29251:2;29255:7;29264:5;29216:22;:54::i;:::-;29203:130;;;;-1:-1:-1;;;29203:130:0;;;;;;;:::i;29635:343::-;-1:-1:-1;;;;;29709:16:0;;29701:61;;;;-1:-1:-1;;;29701:61:0;;29173:2:1;29701:61:0;;;29155:21:1;;;29192:18;;;29185:30;29251:34;29231:18;;;29224:62;29303:18;;29701:61:0;28971:356:1;29701:61:0;27932:4;27950:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27950:16:0;:30;29767:58;;;;-1:-1:-1;;;29767:58:0;;29534:2:1;29767:58:0;;;29516:21:1;29573:2;29553:18;;;29546:30;29612;29592:18;;;29585:58;29660:18;;29767:58:0;29332:352:1;29767:58:0;29832:45;29861:1;29865:2;29869:7;29832:20;:45::i;:::-;-1:-1:-1;;;;;29884:13:0;;;;;;:9;:13;;;;;:18;;29901:1;;29884:13;:18;;29901:1;;29884:18;:::i;:::-;;;;-1:-1:-1;;29907:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29907:21:0;-1:-1:-1;;;;;29907:21:0;;;;;;;;29940:33;;29907:16;;;29940:33;;29907:16;;29940:33;29635:343;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1914:254;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:127::-;2749:10;2744:3;2740:20;2737:1;2730:31;2780:4;2777:1;2770:15;2804:4;2801:1;2794:15;2820:275;2891:2;2885:9;2956:2;2937:13;;-1:-1:-1;;2933:27:1;2921:40;;2991:18;2976:34;;3012:22;;;2973:62;2970:88;;;3038:18;;:::i;:::-;3074:2;3067:22;2820:275;;-1:-1:-1;2820:275:1:o;3100:407::-;3165:5;3199:18;3191:6;3188:30;3185:56;;;3221:18;;:::i;:::-;3259:57;3304:2;3283:15;;-1:-1:-1;;3279:29:1;3310:4;3275:40;3259:57;:::i;:::-;3250:66;;3339:6;3332:5;3325:21;3379:3;3370:6;3365:3;3361:16;3358:25;3355:45;;;3396:1;3393;3386:12;3355:45;3445:6;3440:3;3433:4;3426:5;3422:16;3409:43;3499:1;3492:4;3483:6;3476:5;3472:18;3468:29;3461:40;3100:407;;;;;:::o;3512:222::-;3555:5;3608:3;3601:4;3593:6;3589:17;3585:27;3575:55;;3626:1;3623;3616:12;3575:55;3648:80;3724:3;3715:6;3702:20;3695:4;3687:6;3683:17;3648:80;:::i;3739:322::-;3808:6;3861:2;3849:9;3840:7;3836:23;3832:32;3829:52;;;3877:1;3874;3867:12;3829:52;3917:9;3904:23;3950:18;3942:6;3939:30;3936:50;;;3982:1;3979;3972:12;3936:50;4005;4047:7;4038:6;4027:9;4023:22;4005:50;:::i;4066:186::-;4125:6;4178:2;4166:9;4157:7;4153:23;4149:32;4146:52;;;4194:1;4191;4184:12;4146:52;4217:29;4236:9;4217:29;:::i;4257:632::-;4428:2;4480:21;;;4550:13;;4453:18;;;4572:22;;;4399:4;;4428:2;4651:15;;;;4625:2;4610:18;;;4399:4;4694:169;4708:6;4705:1;4702:13;4694:169;;;4769:13;;4757:26;;4838:15;;;;4803:12;;;;4730:1;4723:9;4694:169;;;-1:-1:-1;4880:3:1;;4257:632;-1:-1:-1;;;;;;4257:632:1:o;4894:347::-;4959:6;4967;5020:2;5008:9;4999:7;4995:23;4991:32;4988:52;;;5036:1;5033;5026:12;4988:52;5059:29;5078:9;5059:29;:::i;:::-;5049:39;;5138:2;5127:9;5123:18;5110:32;5185:5;5178:13;5171:21;5164:5;5161:32;5151:60;;5207:1;5204;5197:12;5151:60;5230:5;5220:15;;;4894:347;;;;;:::o;5246:667::-;5341:6;5349;5357;5365;5418:3;5406:9;5397:7;5393:23;5389:33;5386:53;;;5435:1;5432;5425:12;5386:53;5458:29;5477:9;5458:29;:::i;:::-;5448:39;;5506:38;5540:2;5529:9;5525:18;5506:38;:::i;:::-;5496:48;;5591:2;5580:9;5576:18;5563:32;5553:42;;5646:2;5635:9;5631:18;5618:32;5673:18;5665:6;5662:30;5659:50;;;5705:1;5702;5695:12;5659:50;5728:22;;5781:4;5773:13;;5769:27;-1:-1:-1;5759:55:1;;5810:1;5807;5800:12;5759:55;5833:74;5899:7;5894:2;5881:16;5876:2;5872;5868:11;5833:74;:::i;:::-;5823:84;;;5246:667;;;;;;;:::o;5918:183::-;5978:4;6011:18;6003:6;6000:30;5997:56;;;6033:18;;:::i;:::-;-1:-1:-1;6078:1:1;6074:14;6090:4;6070:25;;5918:183::o;6106:662::-;6160:5;6213:3;6206:4;6198:6;6194:17;6190:27;6180:55;;6231:1;6228;6221:12;6180:55;6267:6;6254:20;6293:4;6317:60;6333:43;6373:2;6333:43;:::i;:::-;6317:60;:::i;:::-;6411:15;;;6497:1;6493:10;;;;6481:23;;6477:32;;;6442:12;;;;6521:15;;;6518:35;;;6549:1;6546;6539:12;6518:35;6585:2;6577:6;6573:15;6597:142;6613:6;6608:3;6605:15;6597:142;;;6679:17;;6667:30;;6717:12;;;;6630;;6597:142;;;-1:-1:-1;6757:5:1;6106:662;-1:-1:-1;;;;;;6106:662:1:o;6773:1146::-;6891:6;6899;6952:2;6940:9;6931:7;6927:23;6923:32;6920:52;;;6968:1;6965;6958:12;6920:52;7008:9;6995:23;7037:18;7078:2;7070:6;7067:14;7064:34;;;7094:1;7091;7084:12;7064:34;7132:6;7121:9;7117:22;7107:32;;7177:7;7170:4;7166:2;7162:13;7158:27;7148:55;;7199:1;7196;7189:12;7148:55;7235:2;7222:16;7257:4;7281:60;7297:43;7337:2;7297:43;:::i;7281:60::-;7375:15;;;7457:1;7453:10;;;;7445:19;;7441:28;;;7406:12;;;;7481:19;;;7478:39;;;7513:1;7510;7503:12;7478:39;7537:11;;;;7557:148;7573:6;7568:3;7565:15;7557:148;;;7639:23;7658:3;7639:23;:::i;:::-;7627:36;;7590:12;;;;7683;;;;7557:148;;;7724:5;-1:-1:-1;;7767:18:1;;7754:32;;-1:-1:-1;;7798:16:1;;;7795:36;;;7827:1;7824;7817:12;7795:36;;7850:63;7905:7;7894:8;7883:9;7879:24;7850:63;:::i;:::-;7840:73;;;6773:1146;;;;;:::o;7924:1361::-;8052:6;8060;8113:2;8101:9;8092:7;8088:23;8084:32;8081:52;;;8129:1;8126;8119:12;8081:52;8169:9;8156:23;8198:18;8239:2;8231:6;8228:14;8225:34;;;8255:1;8252;8245:12;8225:34;8293:6;8282:9;8278:22;8268:32;;8338:7;8331:4;8327:2;8323:13;8319:27;8309:55;;8360:1;8357;8350:12;8309:55;8396:2;8383:16;8418:4;8442:60;8458:43;8498:2;8458:43;:::i;8442:60::-;8536:15;;;8618:1;8614:10;;;;8606:19;;8602:28;;;8567:12;;;;8642:19;;;8639:39;;;8674:1;8671;8664:12;8639:39;8706:2;8702;8698:11;8718:353;8734:6;8729:3;8726:15;8718:353;;;8820:3;8807:17;8856:2;8843:11;8840:19;8837:109;;;8900:1;8929:2;8925;8918:14;8837:109;8971:57;9020:7;9015:2;9001:11;8997:2;8993:20;8989:29;8971:57;:::i;:::-;8959:70;;-1:-1:-1;9049:12:1;;;;8751;;8718:353;;;-1:-1:-1;9090:5:1;-1:-1:-1;;9133:18:1;;9120:32;;-1:-1:-1;;9164:16:1;;;9161:36;;;9193:1;9190;9183:12;9290:260;9358:6;9366;9419:2;9407:9;9398:7;9394:23;9390:32;9387:52;;;9435:1;9432;9425:12;9387:52;9458:29;9477:9;9458:29;:::i;:::-;9448:39;;9506:38;9540:2;9529:9;9525:18;9506:38;:::i;:::-;9496:48;;9290:260;;;;;:::o;9555:380::-;9634:1;9630:12;;;;9677;;;9698:61;;9752:4;9744:6;9740:17;9730:27;;9698:61;9805:2;9797:6;9794:14;9774:18;9771:38;9768:161;;;9851:10;9846:3;9842:20;9839:1;9832:31;9886:4;9883:1;9876:15;9914:4;9911:1;9904:15;11180:355;11382:2;11364:21;;;11421:2;11401:18;;;11394:30;11460:33;11455:2;11440:18;;11433:61;11526:2;11511:18;;11180:355::o;11540:413::-;11742:2;11724:21;;;11781:2;11761:18;;;11754:30;11820:34;11815:2;11800:18;;11793:62;-1:-1:-1;;;11886:2:1;11871:18;;11864:47;11943:3;11928:19;;11540:413::o;12370:356::-;12572:2;12554:21;;;12591:18;;;12584:30;12650:34;12645:2;12630:18;;12623:62;12717:2;12702:18;;12370:356::o;13144:127::-;13205:10;13200:3;13196:20;13193:1;13186:31;13236:4;13233:1;13226:15;13260:4;13257:1;13250:15;14038:397;14240:2;14222:21;;;14279:2;14259:18;;;14252:30;14318:34;14313:2;14298:18;;14291:62;-1:-1:-1;;;14384:2:1;14369:18;;14362:31;14425:3;14410:19;;14038:397::o;14924:973::-;15009:12;;14974:3;;15064:1;15084:18;;;;15137;;;;15164:61;;15218:4;15210:6;15206:17;15196:27;;15164:61;15244:2;15292;15284:6;15281:14;15261:18;15258:38;15255:161;;;15338:10;15333:3;15329:20;15326:1;15319:31;15373:4;15370:1;15363:15;15401:4;15398:1;15391:15;15255:161;15432:18;15459:104;;;;15577:1;15572:319;;;;15425:466;;15459:104;-1:-1:-1;;15492:24:1;;15480:37;;15537:16;;;;-1:-1:-1;15459:104:1;;15572:319;14871:1;14864:14;;;14908:4;14895:18;;15666:1;15680:165;15694:6;15691:1;15688:13;15680:165;;;15772:14;;15759:11;;;15752:35;15815:16;;;;15709:10;;15680:165;;;15684:3;;15874:6;15869:3;15865:16;15858:23;;15425:466;;;;;;;14924:973;;;;:::o;15902:357::-;16120:3;16145:108;16179:73;16213:38;16247:3;16239:6;16213:38;:::i;:::-;16205:6;16179:73;:::i;:::-;16171:6;16145:108;:::i;:::-;16138:115;15902:357;-1:-1:-1;;;;;15902:357:1:o;16675:127::-;16736:10;16731:3;16727:20;16724:1;16717:31;16767:4;16764:1;16757:15;16791:4;16788:1;16781:15;16807:135;16846:3;-1:-1:-1;;16867:17:1;;16864:43;;;16887:18;;:::i;:::-;-1:-1:-1;16934:1:1;16923:13;;16807:135::o;18547:470::-;18726:3;18764:6;18758:13;18780:53;18826:6;18821:3;18814:4;18806:6;18802:17;18780:53;:::i;:::-;18896:13;;18855:16;;;;18918:57;18896:13;18855:16;18952:4;18940:17;;18918:57;:::i;:::-;18991:20;;18547:470;-1:-1:-1;;;;18547:470:1:o;22399:128::-;22439:3;22470:1;22466:6;22463:1;22460:13;22457:39;;;22476:18;;:::i;:::-;-1:-1:-1;22512:9:1;;22399:128::o;22532:402::-;22734:2;22716:21;;;22773:2;22753:18;;;22746:30;22812:34;22807:2;22792:18;;22785:62;-1:-1:-1;;;22878:2:1;22863:18;;22856:36;22924:3;22909:19;;22532:402::o;22939:168::-;22979:7;23045:1;23041;23037:6;23033:14;23030:1;23027:21;23022:1;23015:9;23008:17;23004:45;23001:71;;;23052:18;;:::i;:::-;-1:-1:-1;23092:9:1;;22939:168::o;23112:403::-;23314:2;23296:21;;;23353:2;23333:18;;;23326:30;23392:34;23387:2;23372:18;;23365:62;-1:-1:-1;;;23458:2:1;23443:18;;23436:37;23505:3;23490:19;;23112:403::o;25383:125::-;25423:4;25451:1;25448;25445:8;25442:34;;;25456:18;;:::i;:::-;-1:-1:-1;25493:9:1;;25383:125::o;27298:414::-;27500:2;27482:21;;;27539:2;27519:18;;;27512:30;27578:34;27573:2;27558:18;;27551:62;-1:-1:-1;;;27644:2:1;27629:18;;27622:48;27702:3;27687:19;;27298:414::o;27717:127::-;27778:10;27773:3;27769:20;27766:1;27759:31;27809:4;27806:1;27799:15;27833:4;27830:1;27823:15;27849:120;27889:1;27915;27905:35;;27920:18;;:::i;:::-;-1:-1:-1;27954:9:1;;27849:120::o;27974:112::-;28006:1;28032;28022:35;;28037:18;;:::i;:::-;-1:-1:-1;28071:9:1;;27974:112::o;28091:489::-;-1:-1:-1;;;;;28360:15:1;;;28342:34;;28412:15;;28407:2;28392:18;;28385:43;28459:2;28444:18;;28437:34;;;28507:3;28502:2;28487:18;;28480:31;;;28285:4;;28528:46;;28554:19;;28546:6;28528:46;:::i;:::-;28520:54;28091:489;-1:-1:-1;;;;;;28091:489:1:o;28585:249::-;28654:6;28707:2;28695:9;28686:7;28682:23;28678:32;28675:52;;;28723:1;28720;28713:12;28675:52;28755:9;28749:16;28774:30;28798:5;28774:30;:::i;28839:127::-;28900:10;28895:3;28891:20;28888:1;28881:31;28931:4;28928:1;28921:15;28955:4;28952:1;28945:15

Swarm Source

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